From b5e85885de37f8368f293db0d343a8fca0410487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Wed, 28 Aug 2013 16:36:14 +0200 Subject: [PATCH] Handle NULL as a stream cipher for more uniformity --- include/polarssl/cipher.h | 1 - library/cipher.c | 23 ++------------ library/cipher_wrap.c | 39 ++++++++++++++++-------- tests/suites/test_suite_cipher.null.data | 28 ++++++++--------- 4 files changed, 42 insertions(+), 49 deletions(-) diff --git a/include/polarssl/cipher.h b/include/polarssl/cipher.h index 3164a9a63..67ca28ccf 100644 --- a/include/polarssl/cipher.h +++ b/include/polarssl/cipher.h @@ -95,7 +95,6 @@ typedef enum { typedef enum { POLARSSL_MODE_NONE = 0, - POLARSSL_MODE_NULL, POLARSSL_MODE_CBC, POLARSSL_MODE_CFB, POLARSSL_MODE_OFB, diff --git a/library/cipher.c b/library/cipher.c index 5a260a0bc..60e1d911e 100644 --- a/library/cipher.c +++ b/library/cipher.c @@ -36,7 +36,7 @@ #include -#if defined(POLARSSL_ARC4_C) +#if defined(POLARSSL_ARC4_C) || defined(POLARSSL_CIPHER_NULL_CIPHER) #define POLARSSL_CIPHER_MODE_STREAM #endif @@ -367,11 +367,6 @@ int cipher_setkey( cipher_context_t *ctx, const unsigned char *key, ctx->key_length = key_length; ctx->operation = operation; -#if defined(POLARSSL_CIPHER_NULL_CIPHER) - if( ctx->cipher_info->mode == POLARSSL_MODE_NULL ) - return 0; -#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */ - /* * For CFB and CTR mode always use the encryption key schedule */ @@ -421,19 +416,6 @@ int cipher_update( cipher_context_t *ctx, const unsigned char *input, size_t ile return POLARSSL_ERR_CIPHER_BAD_INPUT_DATA; } -#if defined(POLARSSL_CIPHER_NULL_CIPHER) - if( ctx->cipher_info->mode == POLARSSL_MODE_NULL ) - { - *olen = ilen; - - if( output == input ) - return( 0 ); - - memcpy( output, input, ilen ); - return 0; - } -#endif /* defined(POLARSSL_CIPHER_NULL_CIPHER) */ - if( ctx->cipher_info->mode == POLARSSL_MODE_CBC ) { /* @@ -725,8 +707,7 @@ int cipher_finish( cipher_context_t *ctx, unsigned char *output, size_t *olen) if( POLARSSL_MODE_CFB == ctx->cipher_info->mode || POLARSSL_MODE_CTR == ctx->cipher_info->mode || - POLARSSL_MODE_STREAM == ctx->cipher_info->mode || - POLARSSL_MODE_NULL == ctx->cipher_info->mode ) + POLARSSL_MODE_STREAM == ctx->cipher_info->mode ) { return 0; } diff --git a/library/cipher_wrap.c b/library/cipher_wrap.c index 7a4ff753b..562f8b34b 100644 --- a/library/cipher_wrap.c +++ b/library/cipher_wrap.c @@ -645,12 +645,7 @@ static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, #endif } -static int blowfish_setkey_dec_wrap( void *ctx, const unsigned char *key, unsigned int key_length ) -{ - return blowfish_setkey( (blowfish_context *) ctx, key, key_length ); -} - -static int blowfish_setkey_enc_wrap( void *ctx, const unsigned char *key, unsigned int key_length ) +static int blowfish_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_length ) { return blowfish_setkey( (blowfish_context *) ctx, key, key_length ); } @@ -671,8 +666,8 @@ const cipher_base_t blowfish_info = { blowfish_crypt_cfb64_wrap, blowfish_crypt_ctr_wrap, NULL, - blowfish_setkey_enc_wrap, - blowfish_setkey_dec_wrap, + blowfish_setkey_wrap, + blowfish_setkey_wrap, blowfish_ctx_alloc, blowfish_ctx_free }; @@ -761,12 +756,30 @@ const cipher_info_t arc4_128_info = { #endif /* POLARSSL_ARC4_C */ #if defined(POLARSSL_CIPHER_NULL_CIPHER) +static int null_crypt_stream( void *ctx, size_t length, + const unsigned char *input, + unsigned char *output ) +{ + ((void) ctx); + memmove( output, input, length ); + return( 0 ); +} + +static int null_setkey( void *ctx, const unsigned char *key, + unsigned int key_length ) +{ + ((void) ctx); + ((void) key); + ((void) key_length); + + return( 0 ); +} + static void * null_ctx_alloc( void ) { return (void *) 1; } - static void null_ctx_free( void *ctx ) { ((void) ctx); @@ -777,16 +790,16 @@ const cipher_base_t null_base_info = { NULL, NULL, NULL, - NULL, - NULL, - NULL, + null_crypt_stream, + null_setkey, + null_setkey, null_ctx_alloc, null_ctx_free }; const cipher_info_t null_cipher_info = { POLARSSL_CIPHER_NULL, - POLARSSL_MODE_NULL, + POLARSSL_MODE_STREAM, 0, "NULL", 0, diff --git a/tests/suites/test_suite_cipher.null.data b/tests/suites/test_suite_cipher.null.data index 96aa36a9d..dd6827715 100644 --- a/tests/suites/test_suite_cipher.null.data +++ b/tests/suites/test_suite_cipher.null.data @@ -7,59 +7,59 @@ dec_empty_buf: NULL Encrypt and decrypt 0 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:0 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:0:-1 NULL Encrypt and decrypt 1 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:1 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:1:-1 NULL Encrypt and decrypt 2 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:2 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:2:-1 NULL Encrypt and decrypt 7 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:7 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:7:-1 NULL Encrypt and decrypt 8 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:8 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:8:-1 NULL Encrypt and decrypt 9 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:9 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:9:-1 NULL Encrypt and decrypt 15 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:15 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:15:-1 NULL Encrypt and decrypt 16 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:16 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:16:-1 NULL Encrypt and decrypt 31 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:31 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:31:-1 NULL Encrypt and decrypt 32 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:32 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:32:-1 NULL Encrypt and decrypt 33 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:33 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:33:-1 NULL Encrypt and decrypt 47 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:47 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:47:-1 NULL Encrypt and decrypt 48 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:48 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:48:-1 NULL Encrypt and decrypt 49 bytes depends_on:POLARSSL_CIPHER_NULL_CIPHER -enc_dec_buf:POLARSSL_CIPHER_NULL:NULL:0:49 +enc_dec_buf:POLARSSL_CIPHER_NULL:"NULL":0:49:-1 NULL Encrypt and decrypt 1 bytes in multiple parts 1 depends_on:POLARSSL_CIPHER_NULL_CIPHER