- Changed interface for AES and Camellia setkey functions to indicate invalid key lengths.
diff --git a/library/aes.c b/library/aes.c
index 003325d..9047366 100644
--- a/library/aes.c
+++ b/library/aes.c
@@ -438,7 +438,7 @@
/*
* AES key schedule (encryption)
*/
-void aes_setkey_enc( aes_context *ctx, unsigned char *key, int keysize )
+int aes_setkey_enc( aes_context *ctx, unsigned char *key, int keysize )
{
int i;
unsigned long *RK;
@@ -456,7 +456,7 @@
case 128: ctx->nr = 10; break;
case 192: ctx->nr = 12; break;
case 256: ctx->nr = 14; break;
- default : return;
+ default : return( POLARSSL_ERR_AES_INVALID_KEY_LENGTH );
}
#if defined(PADLOCK_ALIGN16)
@@ -536,24 +536,27 @@
break;
}
+
+ return( 0 );
}
/*
* AES key schedule (decryption)
*/
-void aes_setkey_dec( aes_context *ctx, unsigned char *key, int keysize )
+int aes_setkey_dec( aes_context *ctx, unsigned char *key, int keysize )
{
int i, j;
aes_context cty;
unsigned long *RK;
unsigned long *SK;
+ int ret;
switch( keysize )
{
case 128: ctx->nr = 10; break;
case 192: ctx->nr = 12; break;
case 256: ctx->nr = 14; break;
- default : return;
+ default : return( POLARSSL_ERR_AES_INVALID_KEY_LENGTH );
}
#if defined(PADLOCK_ALIGN16)
@@ -562,7 +565,10 @@
ctx->rk = RK = ctx->buf;
#endif
- aes_setkey_enc( &cty, key, keysize );
+ ret = aes_setkey_enc( &cty, key, keysize );
+ if( ret != 0 )
+ return( ret );
+
SK = cty.rk + cty.nr * 4;
*RK++ = *SK++;
@@ -587,6 +593,8 @@
*RK++ = *SK++;
memset( &cty, 0, sizeof( aes_context ) );
+
+ return( 0 );
}
#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \