Create a 'flags' field in cipher_info
diff --git a/include/polarssl/cipher.h b/include/polarssl/cipher.h
index 4325f9f..5153461 100644
--- a/include/polarssl/cipher.h
+++ b/include/polarssl/cipher.h
@@ -61,6 +61,9 @@
 #define POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED            -0x6280  /**< Decryption of block requires a full block. */
 #define POLARSSL_ERR_CIPHER_AUTH_FAILED                    -0x6300  /**< Authentication failed (for AEAD modes). */
 
+#define POLARSSL_CIPHER_VARIABLE_IV_LEN     0x01    /**< Cipher accepts IVs of variable length */
+#define POLARSSL_CIPHER_VARIABLE_KEY_LEN    0x02    /**< Cipher accepts keys of variable length */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -238,8 +241,8 @@
      *  For cipher that accept many sizes: recommended size */
     unsigned int iv_size;
 
-    /** Flag for ciphers that accept many sizes of IV/NONCE */
-    int accepts_variable_iv_size;
+    /** Flags for variable IV size, variable key size, etc. */
+    int flags;
 
     /** block size, in bytes */
     unsigned int block_size;
diff --git a/library/cipher.c b/library/cipher.c
index edef2f9..01913b5 100644
--- a/library/cipher.c
+++ b/library/cipher.c
@@ -204,7 +204,7 @@
     if( iv_len > POLARSSL_MAX_IV_LENGTH )
         return( POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE );
 
-    if( ctx->cipher_info->accepts_variable_iv_size )
+    if( ( ctx->cipher_info->flags & POLARSSL_CIPHER_VARIABLE_IV_LEN ) != 0 )
         actual_iv_size = iv_len;
     else
     {
diff --git a/library/cipher_wrap.c b/library/cipher_wrap.c
index efc4d44..34fc9e7 100644
--- a/library/cipher_wrap.c
+++ b/library/cipher_wrap.c
@@ -374,7 +374,7 @@
     128,
     "AES-128-GCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &gcm_aes_info
 };
@@ -385,7 +385,7 @@
     192,
     "AES-192-GCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &gcm_aes_info
 };
@@ -396,7 +396,7 @@
     256,
     "AES-256-GCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &gcm_aes_info
 };
@@ -429,7 +429,7 @@
     128,
     "AES-128-CCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &ccm_aes_info
 };
@@ -440,7 +440,7 @@
     192,
     "AES-192-CCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &ccm_aes_info
 };
@@ -451,7 +451,7 @@
     256,
     "AES-256-CCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &ccm_aes_info
 };
@@ -728,7 +728,7 @@
     128,
     "CAMELLIA-128-GCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &gcm_camellia_info
 };
@@ -739,7 +739,7 @@
     192,
     "CAMELLIA-192-GCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &gcm_camellia_info
 };
@@ -750,7 +750,7 @@
     256,
     "CAMELLIA-256-GCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &gcm_camellia_info
 };
@@ -783,7 +783,7 @@
     128,
     "CAMELLIA-128-CCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &ccm_camellia_info
 };
@@ -794,7 +794,7 @@
     192,
     "CAMELLIA-192-CCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &ccm_camellia_info
 };
@@ -805,7 +805,7 @@
     256,
     "CAMELLIA-256-CCM",
     12,
-    1,
+    POLARSSL_CIPHER_VARIABLE_IV_LEN,
     16,
     &ccm_camellia_info
 };