- 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)     \
diff --git a/library/camellia.c b/library/camellia.c
index 3f3b268..e10ab58 100644
--- a/library/camellia.c
+++ b/library/camellia.c
@@ -304,7 +304,7 @@
 /*
  * Camellia key schedule (encryption)
  */
-void camellia_setkey_enc( camellia_context *ctx, unsigned char *key, int keysize )
+int camellia_setkey_enc( camellia_context *ctx, unsigned char *key, int keysize )
 {
     int i, idx;
     uint32_t *RK;
@@ -323,7 +323,7 @@
         case 128: ctx->nr = 3; idx = 0; break;
         case 192:
         case 256: ctx->nr = 4; idx = 1; break;
-        default : return;
+        default : return( POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH );
     }
 
     for( i = 0; i < keysize / 8; ++i)
@@ -400,29 +400,34 @@
             RK[32 + 12 * idx + i] = RK[transposes[idx][i]];
         }
     }
+
+    return( 0 );
 }
 
 /*
  * Camellia key schedule (decryption)
  */
-void camellia_setkey_dec( camellia_context *ctx, unsigned char *key, int keysize )
+int camellia_setkey_dec( camellia_context *ctx, unsigned char *key, int keysize )
 {
     int i, idx;
     camellia_context cty;
     uint32_t *RK;
     uint32_t *SK;
+    int ret;
 
     switch( keysize )
     {
         case 128: ctx->nr = 3; idx = 0; break;
         case 192:
         case 256: ctx->nr = 4; idx = 1; break;
-        default : return;
+        default : return( POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH );
     }
 
     RK = ctx->rk;
 
-    camellia_setkey_enc(&cty, key, keysize);
+    ret = camellia_setkey_enc(&cty, key, keysize);
+    if( ret != 0 )
+        return( ret );
 
     SK = cty.rk + 24 * 2 + 8 * idx * 2;
 
@@ -445,6 +450,8 @@
     *RK++ = *SK++;
 
     memset( &cty, 0, sizeof( camellia_context ) );
+
+    return( 0 );
 }
 
 /*