Simplify switching on mode in ssl_tls.c
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 6442a9d..0f555a3 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -633,74 +633,56 @@
}
#endif
- switch( cipher_info->type )
+ if( cipher_info->type != POLARSSL_CIPHER_NULL )
{
- case POLARSSL_CIPHER_ARC4_128:
- case POLARSSL_CIPHER_DES_CBC:
- case POLARSSL_CIPHER_DES_EDE3_CBC:
- case POLARSSL_CIPHER_CAMELLIA_128_CBC:
- case POLARSSL_CIPHER_CAMELLIA_256_CBC:
- case POLARSSL_CIPHER_CAMELLIA_128_GCM:
- case POLARSSL_CIPHER_CAMELLIA_256_GCM:
- case POLARSSL_CIPHER_AES_128_CBC:
- case POLARSSL_CIPHER_AES_256_CBC:
- case POLARSSL_CIPHER_AES_128_GCM:
- case POLARSSL_CIPHER_AES_256_GCM:
- if( ( ret = cipher_init_ctx( &transform->cipher_ctx_enc,
- cipher_info ) ) != 0 )
- {
- SSL_DEBUG_RET( 1, "cipher_init_ctx", ret );
- return( ret );
- }
+ if( ( ret = cipher_init_ctx( &transform->cipher_ctx_enc,
+ cipher_info ) ) != 0 )
+ {
+ SSL_DEBUG_RET( 1, "cipher_init_ctx", ret );
+ return( ret );
+ }
- if( ( ret = cipher_init_ctx( &transform->cipher_ctx_dec,
- cipher_info ) ) != 0 )
- {
- SSL_DEBUG_RET( 1, "cipher_init_ctx", ret );
- return( ret );
- }
+ if( ( ret = cipher_init_ctx( &transform->cipher_ctx_dec,
+ cipher_info ) ) != 0 )
+ {
+ SSL_DEBUG_RET( 1, "cipher_init_ctx", ret );
+ return( ret );
+ }
- if( ( ret = cipher_setkey( &transform->cipher_ctx_enc, key1,
- cipher_info->key_length,
- POLARSSL_ENCRYPT ) ) != 0 )
- {
- SSL_DEBUG_RET( 1, "cipher_setkey", ret );
- return( ret );
- }
+ if( ( ret = cipher_setkey( &transform->cipher_ctx_enc, key1,
+ cipher_info->key_length,
+ POLARSSL_ENCRYPT ) ) != 0 )
+ {
+ SSL_DEBUG_RET( 1, "cipher_setkey", ret );
+ return( ret );
+ }
- if( ( ret = cipher_setkey( &transform->cipher_ctx_dec, key2,
- cipher_info->key_length,
- POLARSSL_DECRYPT ) ) != 0 )
- {
- SSL_DEBUG_RET( 1, "cipher_setkey", ret );
- return( ret );
- }
+ if( ( ret = cipher_setkey( &transform->cipher_ctx_dec, key2,
+ cipher_info->key_length,
+ POLARSSL_DECRYPT ) ) != 0 )
+ {
+ SSL_DEBUG_RET( 1, "cipher_setkey", ret );
+ return( ret );
+ }
#if defined(POLARSSL_CIPHER_MODE_CBC)
- if( cipher_info->mode == POLARSSL_MODE_CBC )
+ if( cipher_info->mode == POLARSSL_MODE_CBC )
+ {
+ if( ( ret = cipher_set_padding_mode( &transform->cipher_ctx_enc,
+ POLARSSL_PADDING_NONE ) ) != 0 )
{
- if( ( ret = cipher_set_padding_mode( &transform->cipher_ctx_enc,
- POLARSSL_PADDING_NONE ) ) != 0 )
- {
- SSL_DEBUG_RET( 1, "cipher_set_padding_mode", ret );
- return( ret );
- }
-
- if( ( ret = cipher_set_padding_mode( &transform->cipher_ctx_dec,
- POLARSSL_PADDING_NONE ) ) != 0 )
- {
- SSL_DEBUG_RET( 1, "cipher_set_padding_mode", ret );
- return( ret );
- }
+ SSL_DEBUG_RET( 1, "cipher_set_padding_mode", ret );
+ return( ret );
}
+
+ if( ( ret = cipher_set_padding_mode( &transform->cipher_ctx_dec,
+ POLARSSL_PADDING_NONE ) ) != 0 )
+ {
+ SSL_DEBUG_RET( 1, "cipher_set_padding_mode", ret );
+ return( ret );
+ }
+ }
#endif /* POLARSSL_CIPHER_MODE_CBC */
- break;
-
- case POLARSSL_CIPHER_NULL:
- break;
-
- default:
- return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
}
memset( keyblk, 0, sizeof( keyblk ) );
@@ -1037,7 +1019,8 @@
else
#endif /* POLARSSL_CIPHER_NULL_CIPHER */
#if defined(POLARSSL_ARC4_C)
- if( ssl->transform_out->ciphersuite_info->cipher == POLARSSL_CIPHER_ARC4_128 )
+ if( ssl->transform_out->cipher_ctx_enc.cipher_info->mode ==
+ POLARSSL_MODE_STREAM )
{
int ret;
size_t olen = 0;
@@ -1097,10 +1080,8 @@
else
#endif /* POLARSSL_ARC4_C */
#if defined(POLARSSL_GCM_C)
- if( ssl->transform_out->ciphersuite_info->cipher == POLARSSL_CIPHER_AES_128_GCM ||
- ssl->transform_out->ciphersuite_info->cipher == POLARSSL_CIPHER_AES_256_GCM ||
- ssl->transform_out->ciphersuite_info->cipher == POLARSSL_CIPHER_CAMELLIA_128_GCM ||
- ssl->transform_out->ciphersuite_info->cipher == POLARSSL_CIPHER_CAMELLIA_256_GCM )
+ if( ssl->transform_out->cipher_ctx_enc.cipher_info->mode ==
+ POLARSSL_MODE_GCM )
{
size_t enc_msglen, olen, totlen;
unsigned char *enc_msg;
@@ -1203,7 +1184,8 @@
}
else
#endif /* POLARSSL_GCM_C */
-#if defined(POLARSSL_CIPHER_MODE_CBC)
+#if defined(POLARSSL_CIPHER_MODE_CBC) && \
+ ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) )
if( ssl->transform_out->cipher_ctx_enc.cipher_info->mode ==
POLARSSL_MODE_CBC )
{
@@ -1310,7 +1292,8 @@
#endif
}
else
-#endif /* POLARSSL_CIPHER_MODE_CBC */
+#endif /* POLARSSL_CIPHER_MODE_CBC &&
+ ( POLARSSL_AES_C || POLARSSL_CAMELLIA_C ) */
{
SSL_DEBUG_MSG( 1, ( "should never happen" ) );
return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
@@ -1349,7 +1332,8 @@
else
#endif /* POLARSSL_CIPHER_NULL_CIPHER */
#if defined(POLARSSL_ARC4_C)
- if( ssl->transform_in->ciphersuite_info->cipher == POLARSSL_CIPHER_ARC4_128 )
+ if( ssl->transform_in->cipher_ctx_dec.cipher_info->mode ==
+ POLARSSL_MODE_STREAM )
{
int ret;
size_t olen = 0;
@@ -1402,10 +1386,8 @@
else
#endif /* POLARSSL_ARC4_C */
#if defined(POLARSSL_GCM_C)
- if( ssl->transform_in->ciphersuite_info->cipher == POLARSSL_CIPHER_AES_128_GCM ||
- ssl->transform_in->ciphersuite_info->cipher == POLARSSL_CIPHER_AES_256_GCM ||
- ssl->transform_in->ciphersuite_info->cipher == POLARSSL_CIPHER_CAMELLIA_128_GCM ||
- ssl->transform_in->ciphersuite_info->cipher == POLARSSL_CIPHER_CAMELLIA_256_GCM )
+ if( ssl->transform_in->cipher_ctx_dec.cipher_info->mode ==
+ POLARSSL_MODE_GCM )
{
unsigned char *dec_msg;
unsigned char *dec_msg_result;
@@ -1491,7 +1473,8 @@
}
else
#endif /* POLARSSL_GCM_C */
-#if defined(POLARSSL_CIPHER_MODE_CBC)
+#if defined(POLARSSL_CIPHER_MODE_CBC) && \
+ ( defined(POLARSSL_AES_C) || defined(POLARSSL_CAMELLIA_C) )
if( ssl->transform_in->cipher_ctx_dec.cipher_info->mode ==
POLARSSL_MODE_CBC )
{
@@ -1657,7 +1640,8 @@
}
}
else
-#endif /* POLARSSL_CIPHER_MODE_CBC */
+#endif /* POLARSSL_CIPHER_MODE_CBC &&
+ ( POLARSSL_AES_C || POLARSSL_CAMELLIA_C ) */
{
SSL_DEBUG_MSG( 1, ( "should never happen" ) );
return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );