Refactor cipher information management
diff --git a/library/cipher.c b/library/cipher.c
index c455ff9..4abc427 100644
--- a/library/cipher.c
+++ b/library/cipher.c
@@ -48,361 +48,50 @@
#define strcasecmp _stricmp
#endif
-static const int supported_ciphers[] = {
-
-#if defined(POLARSSL_AES_C)
- POLARSSL_CIPHER_AES_128_ECB,
- POLARSSL_CIPHER_AES_192_ECB,
- POLARSSL_CIPHER_AES_256_ECB,
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- POLARSSL_CIPHER_AES_128_CBC,
- POLARSSL_CIPHER_AES_192_CBC,
- POLARSSL_CIPHER_AES_256_CBC,
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- POLARSSL_CIPHER_AES_128_CFB128,
- POLARSSL_CIPHER_AES_192_CFB128,
- POLARSSL_CIPHER_AES_256_CFB128,
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- POLARSSL_CIPHER_AES_128_CTR,
- POLARSSL_CIPHER_AES_192_CTR,
- POLARSSL_CIPHER_AES_256_CTR,
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#if defined(POLARSSL_GCM_C)
- POLARSSL_CIPHER_AES_128_GCM,
- POLARSSL_CIPHER_AES_192_GCM,
- POLARSSL_CIPHER_AES_256_GCM,
-#endif /* defined(POLARSSL_GCM_C) */
-
-#endif /* defined(POLARSSL_AES_C) */
-
-#if defined(POLARSSL_ARC4_C)
- POLARSSL_CIPHER_ARC4_128,
-#endif
-
-#if defined(POLARSSL_CAMELLIA_C)
- POLARSSL_CIPHER_CAMELLIA_128_ECB,
- POLARSSL_CIPHER_CAMELLIA_192_ECB,
- POLARSSL_CIPHER_CAMELLIA_256_ECB,
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- POLARSSL_CIPHER_CAMELLIA_128_CBC,
- POLARSSL_CIPHER_CAMELLIA_192_CBC,
- POLARSSL_CIPHER_CAMELLIA_256_CBC,
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- POLARSSL_CIPHER_CAMELLIA_128_CFB128,
- POLARSSL_CIPHER_CAMELLIA_192_CFB128,
- POLARSSL_CIPHER_CAMELLIA_256_CFB128,
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- POLARSSL_CIPHER_CAMELLIA_128_CTR,
- POLARSSL_CIPHER_CAMELLIA_192_CTR,
- POLARSSL_CIPHER_CAMELLIA_256_CTR,
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#endif /* defined(POLARSSL_CAMELLIA_C) */
-
-#if defined(POLARSSL_DES_C)
- POLARSSL_CIPHER_DES_ECB,
- POLARSSL_CIPHER_DES_EDE_ECB,
- POLARSSL_CIPHER_DES_EDE3_ECB,
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- POLARSSL_CIPHER_DES_CBC,
- POLARSSL_CIPHER_DES_EDE_CBC,
- POLARSSL_CIPHER_DES_EDE3_CBC,
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-#endif /* defined(POLARSSL_DES_C) */
-
-#if defined(POLARSSL_BLOWFISH_C)
- POLARSSL_CIPHER_BLOWFISH_ECB,
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- POLARSSL_CIPHER_BLOWFISH_CBC,
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- POLARSSL_CIPHER_BLOWFISH_CFB64,
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- POLARSSL_CIPHER_BLOWFISH_CTR,
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#endif /* defined(POLARSSL_BLOWFISH_C) */
-
-#if defined(POLARSSL_CIPHER_NULL_CIPHER)
- POLARSSL_CIPHER_NULL,
-#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
-
- 0
-};
+static int supported_init = 0;
const int *cipher_list( void )
{
+ const cipher_definition_t *def;
+ int *type;
+
+ if( ! supported_init )
+ {
+ def = cipher_definitions;
+ type = supported_ciphers;
+
+ while( def->type != 0 )
+ *type++ = (*def++).type;
+
+ *type = 0;
+
+ supported_init = 1;
+ }
+
return supported_ciphers;
}
const cipher_info_t *cipher_info_from_type( const cipher_type_t cipher_type )
{
- /* Find static cipher information */
- switch ( cipher_type )
- {
-#if defined(POLARSSL_AES_C)
- case POLARSSL_CIPHER_AES_128_ECB:
- return &aes_128_ecb_info;
- case POLARSSL_CIPHER_AES_192_ECB:
- return &aes_192_ecb_info;
- case POLARSSL_CIPHER_AES_256_ECB:
- return &aes_256_ecb_info;
+ const cipher_definition_t *def;
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- case POLARSSL_CIPHER_AES_128_CBC:
- return &aes_128_cbc_info;
- case POLARSSL_CIPHER_AES_192_CBC:
- return &aes_192_cbc_info;
- case POLARSSL_CIPHER_AES_256_CBC:
- return &aes_256_cbc_info;
-#endif /* POLARSSL_CIPHER_MODE_CBC */
+ for( def = cipher_definitions; def->info != NULL; def++ )
+ if( def->type == cipher_type )
+ return( def->info );
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- case POLARSSL_CIPHER_AES_128_CFB128:
- return &aes_128_cfb128_info;
- case POLARSSL_CIPHER_AES_192_CFB128:
- return &aes_192_cfb128_info;
- case POLARSSL_CIPHER_AES_256_CFB128:
- return &aes_256_cfb128_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- case POLARSSL_CIPHER_AES_128_CTR:
- return &aes_128_ctr_info;
- case POLARSSL_CIPHER_AES_192_CTR:
- return &aes_192_ctr_info;
- case POLARSSL_CIPHER_AES_256_CTR:
- return &aes_256_ctr_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#if defined(POLARSSL_GCM_C)
- case POLARSSL_CIPHER_AES_128_GCM:
- return &aes_128_gcm_info;
- case POLARSSL_CIPHER_AES_192_GCM:
- return &aes_192_gcm_info;
- case POLARSSL_CIPHER_AES_256_GCM:
- return &aes_256_gcm_info;
-#endif /* defined(POLARSSL_GCM_C) */
-
-#endif
-
-#if defined(POLARSSL_CAMELLIA_C)
- case POLARSSL_CIPHER_CAMELLIA_128_ECB:
- return &camellia_128_ecb_info;
- case POLARSSL_CIPHER_CAMELLIA_192_ECB:
- return &camellia_192_ecb_info;
- case POLARSSL_CIPHER_CAMELLIA_256_ECB:
- return &camellia_256_ecb_info;
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- case POLARSSL_CIPHER_CAMELLIA_128_CBC:
- return &camellia_128_cbc_info;
- case POLARSSL_CIPHER_CAMELLIA_192_CBC:
- return &camellia_192_cbc_info;
- case POLARSSL_CIPHER_CAMELLIA_256_CBC:
- return &camellia_256_cbc_info;
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- case POLARSSL_CIPHER_CAMELLIA_128_CFB128:
- return &camellia_128_cfb128_info;
- case POLARSSL_CIPHER_CAMELLIA_192_CFB128:
- return &camellia_192_cfb128_info;
- case POLARSSL_CIPHER_CAMELLIA_256_CFB128:
- return &camellia_256_cfb128_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- case POLARSSL_CIPHER_CAMELLIA_128_CTR:
- return &camellia_128_ctr_info;
- case POLARSSL_CIPHER_CAMELLIA_192_CTR:
- return &camellia_192_ctr_info;
- case POLARSSL_CIPHER_CAMELLIA_256_CTR:
- return &camellia_256_ctr_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#endif
-
-#if defined(POLARSSL_DES_C)
- case POLARSSL_CIPHER_DES_ECB:
- return &des_ecb_info;
- case POLARSSL_CIPHER_DES_EDE_ECB:
- return &des_ede_ecb_info;
- case POLARSSL_CIPHER_DES_EDE3_ECB:
- return &des_ede3_ecb_info;
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- case POLARSSL_CIPHER_DES_CBC:
- return &des_cbc_info;
- case POLARSSL_CIPHER_DES_EDE_CBC:
- return &des_ede_cbc_info;
- case POLARSSL_CIPHER_DES_EDE3_CBC:
- return &des_ede3_cbc_info;
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-#endif
-
-#if defined(POLARSSL_ARC4_C)
- case POLARSSL_CIPHER_ARC4_128:
- return &arc4_128_info;
-#endif
-
-#if defined(POLARSSL_BLOWFISH_C)
- case POLARSSL_CIPHER_BLOWFISH_ECB:
- return &blowfish_ecb_info;
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- case POLARSSL_CIPHER_BLOWFISH_CBC:
- return &blowfish_cbc_info;
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- case POLARSSL_CIPHER_BLOWFISH_CFB64:
- return &blowfish_cfb64_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- case POLARSSL_CIPHER_BLOWFISH_CTR:
- return &blowfish_ctr_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#endif
-
-#if defined(POLARSSL_CIPHER_NULL_CIPHER)
- case POLARSSL_CIPHER_NULL:
- return &null_cipher_info;
-#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
-
- default:
- return NULL;
- }
+ return NULL;
}
const cipher_info_t *cipher_info_from_string( const char *cipher_name )
{
+ const cipher_definition_t *def;
+
if( NULL == cipher_name )
return NULL;
- /* Get the appropriate cipher information */
-#if defined(POLARSSL_CAMELLIA_C)
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( !strcasecmp( "CAMELLIA-128-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_128_CBC );
- if( !strcasecmp( "CAMELLIA-192-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_192_CBC );
- if( !strcasecmp( "CAMELLIA-256-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_256_CBC );
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- if( !strcasecmp( "CAMELLIA-128-CFB128", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_128_CFB128 );
- if( !strcasecmp( "CAMELLIA-192-CFB128", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_192_CFB128 );
- if( !strcasecmp( "CAMELLIA-256-CFB128", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_256_CFB128 );
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- if( !strcasecmp( "CAMELLIA-128-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_128_CTR );
- if( !strcasecmp( "CAMELLIA-192-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_192_CTR );
- if( !strcasecmp( "CAMELLIA-256-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_CAMELLIA_256_CTR );
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-#endif
-
-#if defined(POLARSSL_AES_C)
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( !strcasecmp( "AES-128-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_128_CBC );
- if( !strcasecmp( "AES-192-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_192_CBC );
- if( !strcasecmp( "AES-256-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_256_CBC );
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- if( !strcasecmp( "AES-128-CFB128", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_128_CFB128 );
- if( !strcasecmp( "AES-192-CFB128", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_192_CFB128 );
- if( !strcasecmp( "AES-256-CFB128", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_256_CFB128 );
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- if( !strcasecmp( "AES-128-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_128_CTR );
- if( !strcasecmp( "AES-192-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_192_CTR );
- if( !strcasecmp( "AES-256-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_256_CTR );
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#if defined(POLARSSL_GCM_C)
- if( !strcasecmp( "AES-128-GCM", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_128_GCM );
- if( !strcasecmp( "AES-192-GCM", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_192_GCM );
- if( !strcasecmp( "AES-256-GCM", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_AES_256_GCM );
-#endif
-#endif /* POLARSSL_AES_C */
-
-#if defined(POLARSSL_ARC4_C)
- if( !strcasecmp( "ARC4-128", cipher_name ) )
- return( cipher_info_from_type( POLARSSL_CIPHER_ARC4_128 ) );
-#endif
-
-#if defined(POLARSSL_DES_C)
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( !strcasecmp( "DES-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_DES_CBC );
- if( !strcasecmp( "DES-EDE-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_DES_EDE_CBC );
- if( !strcasecmp( "DES-EDE3-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_DES_EDE3_CBC );
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-#endif
-
-#if defined(POLARSSL_BLOWFISH_C)
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( !strcasecmp( "BLOWFISH-CBC", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_BLOWFISH_CBC );
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- if( !strcasecmp( "BLOWFISH-CFB64", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_BLOWFISH_CFB64 );
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- if( !strcasecmp( "BLOWFISH-CTR", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_BLOWFISH_CTR );
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-#endif
-
-#if defined(POLARSSL_CIPHER_NULL_CIPHER)
- if( !strcasecmp( "NULL", cipher_name ) )
- return cipher_info_from_type( POLARSSL_CIPHER_NULL );
-#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
+ for( def = cipher_definitions; def->info != NULL; def++ )
+ if( ! strcasecmp( def->info->name, cipher_name ) )
+ return( def->info );
return NULL;
}
@@ -411,187 +100,13 @@
int key_length,
const cipher_mode_t mode )
{
-#if defined(POLARSSL_AES_C)
- if( cipher_id == POLARSSL_CIPHER_ID_AES )
- {
- if( mode == POLARSSL_MODE_ECB )
- {
- if( key_length == 128 )
- return &aes_128_ecb_info;
- if( key_length == 192 )
- return &aes_192_ecb_info;
- if( key_length == 256 )
- return &aes_256_ecb_info;
- }
+ const cipher_definition_t *def;
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( mode == POLARSSL_MODE_CBC )
- {
- if( key_length == 128 )
- return &aes_128_cbc_info;
- if( key_length == 192 )
- return &aes_192_cbc_info;
- if( key_length == 256 )
- return &aes_256_cbc_info;
- }
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- if( mode == POLARSSL_MODE_CFB )
- {
- if( key_length == 128 )
- return &aes_128_cfb128_info;
- if( key_length == 192 )
- return &aes_192_cfb128_info;
- if( key_length == 256 )
- return &aes_256_cfb128_info;
- }
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- if( mode == POLARSSL_MODE_CTR )
- {
- if( key_length == 128 )
- return &aes_128_ctr_info;
- if( key_length == 192 )
- return &aes_192_ctr_info;
- if( key_length == 256 )
- return &aes_256_ctr_info;
- }
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
-
-#if defined(POLARSSL_GCM_C)
- if( mode == POLARSSL_MODE_GCM )
- {
- if( key_length == 128 )
- return &aes_128_gcm_info;
- if( key_length == 192 )
- return &aes_192_gcm_info;
- if( key_length == 256 )
- return &aes_256_gcm_info;
- }
-#endif /* defined(POLARSSL_GCM_C) */
- }
-#endif
-
-#if defined(POLARSSL_CAMELLIA_C)
- if( cipher_id == POLARSSL_CIPHER_ID_CAMELLIA )
- {
- if( mode == POLARSSL_MODE_ECB )
- {
- if( key_length == 128 )
- return &camellia_128_ecb_info;
- if( key_length == 192 )
- return &camellia_192_ecb_info;
- if( key_length == 256 )
- return &camellia_256_ecb_info;
- }
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( mode == POLARSSL_MODE_CBC )
- {
- if( key_length == 128 )
- return &camellia_128_cbc_info;
- if( key_length == 192 )
- return &camellia_192_cbc_info;
- if( key_length == 256 )
- return &camellia_256_cbc_info;
- }
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- if( mode == POLARSSL_MODE_CFB )
- {
- if( key_length == 128 )
- return &camellia_128_cfb128_info;
- if( key_length == 192 )
- return &camellia_192_cfb128_info;
- if( key_length == 256 )
- return &camellia_256_cfb128_info;
- }
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- if( mode == POLARSSL_MODE_CTR )
- {
- if( key_length == 128 )
- return &camellia_128_ctr_info;
- if( key_length == 192 )
- return &camellia_192_ctr_info;
- if( key_length == 256 )
- return &camellia_256_ctr_info;
- }
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
- }
-#endif
-
-#if defined(POLARSSL_DES_C)
- if( cipher_id == POLARSSL_CIPHER_ID_DES && key_length == 64 )
- {
- if( mode == POLARSSL_MODE_ECB )
- return &des_ecb_info;
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( mode == POLARSSL_MODE_CBC )
- return &des_cbc_info;
-#endif /* POLARSSL_CIPHER_MODE_CBC */
- }
-
- if( cipher_id == POLARSSL_CIPHER_ID_3DES )
- {
- if( mode == POLARSSL_MODE_ECB )
- {
- if( key_length == 128 )
- return &des_ede_ecb_info;
- if( key_length == 192 )
- return &des_ede3_ecb_info;
- }
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( mode == POLARSSL_MODE_CBC )
- {
- if( key_length == 128 )
- return &des_ede_cbc_info;
- if( key_length == 192 )
- return &des_ede3_cbc_info;
- }
-#endif /* POLARSSL_CIPHER_MODE_CBC */
- }
-#endif
-
-#if defined(POLARSSL_ARC4_C)
- if( cipher_id == POLARSSL_CIPHER_ID_ARC4 &&
- key_length == 128 && mode == POLARSSL_MODE_STREAM )
- return &arc4_128_info;
-#endif
-
-#if defined(POLARSSL_BLOWFISH_C)
- if( cipher_id == POLARSSL_CIPHER_ID_BLOWFISH && key_length == 128 )
- {
- if( mode == POLARSSL_MODE_ECB )
- return &blowfish_ecb_info;
-
-#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( mode == POLARSSL_MODE_CBC )
- return &blowfish_cbc_info;
-#endif /* POLARSSL_CIPHER_MODE_CBC */
-
-#if defined(POLARSSL_CIPHER_MODE_CFB)
- if( mode == POLARSSL_MODE_CFB )
- return &blowfish_cfb64_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CFB) */
-
-#if defined(POLARSSL_CIPHER_MODE_CTR)
- if( mode == POLARSSL_MODE_CTR )
- return &blowfish_ctr_info;
-#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
- }
-#endif
-
-#if defined(POLARSSL_CIPHER_NULL_CIPHER)
- if( cipher_id == POLARSSL_CIPHER_ID_NULL )
- return &null_cipher_info;
-#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */
+ for( def = cipher_definitions; def->info != NULL; def++ )
+ if( def->info->base->cipher == cipher_id &&
+ def->info->key_length == (unsigned) key_length &&
+ def->info->mode == mode )
+ return( def->info );
return NULL;
}