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
};