From 81754a0c35e0b5569248b79bbe73a7e884378746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Mon, 23 Jun 2014 11:33:18 +0200 Subject: [PATCH] Create a 'flags' field in cipher_info --- include/polarssl/cipher.h | 7 +++++-- library/cipher.c | 2 +- library/cipher_wrap.c | 24 ++++++++++++------------ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/include/polarssl/cipher.h b/include/polarssl/cipher.h index 4325f9fa1..51534613e 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 @@ typedef struct { * 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 edef2f9ac..01913b5e1 100644 --- a/library/cipher.c +++ b/library/cipher.c @@ -204,7 +204,7 @@ int cipher_set_iv( cipher_context_t *ctx, 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 efc4d4436..34fc9e7e5 100644 --- a/library/cipher_wrap.c +++ b/library/cipher_wrap.c @@ -374,7 +374,7 @@ const cipher_info_t aes_128_gcm_info = { 128, "AES-128-GCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &gcm_aes_info }; @@ -385,7 +385,7 @@ const cipher_info_t aes_192_gcm_info = { 192, "AES-192-GCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &gcm_aes_info }; @@ -396,7 +396,7 @@ const cipher_info_t aes_256_gcm_info = { 256, "AES-256-GCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &gcm_aes_info }; @@ -429,7 +429,7 @@ const cipher_info_t aes_128_ccm_info = { 128, "AES-128-CCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &ccm_aes_info }; @@ -440,7 +440,7 @@ const cipher_info_t aes_192_ccm_info = { 192, "AES-192-CCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &ccm_aes_info }; @@ -451,7 +451,7 @@ const cipher_info_t aes_256_ccm_info = { 256, "AES-256-CCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &ccm_aes_info }; @@ -728,7 +728,7 @@ const cipher_info_t camellia_128_gcm_info = { 128, "CAMELLIA-128-GCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &gcm_camellia_info }; @@ -739,7 +739,7 @@ const cipher_info_t camellia_192_gcm_info = { 192, "CAMELLIA-192-GCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &gcm_camellia_info }; @@ -750,7 +750,7 @@ const cipher_info_t camellia_256_gcm_info = { 256, "CAMELLIA-256-GCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &gcm_camellia_info }; @@ -783,7 +783,7 @@ const cipher_info_t camellia_128_ccm_info = { 128, "CAMELLIA-128-CCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &ccm_camellia_info }; @@ -794,7 +794,7 @@ const cipher_info_t camellia_192_ccm_info = { 192, "CAMELLIA-192-CCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &ccm_camellia_info }; @@ -805,7 +805,7 @@ const cipher_info_t camellia_256_ccm_info = { 256, "CAMELLIA-256-CCM", 12, - 1, + POLARSSL_CIPHER_VARIABLE_IV_LEN, 16, &ccm_camellia_info };