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 );
 }
 
 /*
