From 0cccf58fecd5a932253685c0a5db760ace0c625e Mon Sep 17 00:00:00 2001 From: Elms Date: Tue, 5 Jan 2021 12:42:12 -0800 Subject: [PATCH 1/4] EVP: return proper cipher type for AES OFB --- wolfcrypt/src/evp.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index 01844cc7e..a417dd542 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -1122,6 +1122,21 @@ static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher) return AES_256_CFB128_TYPE; #endif #endif /*HAVE_AES_CBC */ +#if defined(WOLFSSL_AES_OFB) + #ifdef WOLFSSL_AES_128 + else if (XSTRNCMP(cipher, EVP_AES_128_OFB, EVP_AES_SIZE) == 0) + return AES_128_OFB_TYPE; + #endif + #ifdef WOLFSSL_AES_192 + else if (XSTRNCMP(cipher, EVP_AES_192_OFB, EVP_AES_SIZE) == 0) + return AES_192_OFB_TYPE; + #endif + #ifdef WOLFSSL_AES_256 + else if (XSTRNCMP(cipher, EVP_AES_256_OFB, EVP_AES_SIZE) == 0) + return AES_256_OFB_TYPE; + #endif +#endif + #endif /* !NO_AES */ else return 0; } From a6535528f36e6b0a4ff72486a888c0d1099878c1 Mon Sep 17 00:00:00 2001 From: Elms Date: Tue, 5 Jan 2021 13:02:12 -0800 Subject: [PATCH 2/4] EVP: add tests for openssl block size (including RC4) --- tests/api.c | 19 +++++++++++++++++++ wolfcrypt/src/evp.c | 16 +++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/tests/api.c b/tests/api.c index 55c3d1203..9878ccff2 100644 --- a/tests/api.c +++ b/tests/api.c @@ -34619,6 +34619,24 @@ static void test_wolfSSL_EVP_X_STATE_LEN(void) printf(resultFmt, passed); #endif } + +static void test_wolfSSL_EVP_CIPHER_block_size(void) +{ +#if defined(OPENSSL_ALL) + +#ifdef WOLFSSL_AES_OFB + #ifdef WOLFSSL_AES_192 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_ofb()), 1); + #endif +#endif + +#ifndef NO_RC4 + AssertIntEQ(EVP_CIPHER_block_size(wolfSSL_EVP_rc4()), 1); +#endif + +#endif /* OPENSSL_ALL */ +} + static void test_wolfSSL_EVP_CIPHER_iv_length(void) { #if defined(OPENSSL_ALL) @@ -40145,6 +40163,7 @@ void ApiTest(void) test_wolfSSL_EVP_PKEY_get0_EC_KEY(); test_wolfSSL_EVP_X_STATE(); test_wolfSSL_EVP_X_STATE_LEN(); + test_wolfSSL_EVP_CIPHER_block_size(); test_wolfSSL_EVP_CIPHER_iv_length(); test_wolfSSL_EVP_SignInit_ex(); test_wolfSSL_EVP_DigestFinal_ex(); diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index a417dd542..3464b1052 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -1136,8 +1136,12 @@ static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher) return AES_256_OFB_TYPE; #endif #endif - #endif /* !NO_AES */ + +#ifndef NO_RC4 + else if (XSTRNCMP(cipher, EVP_ARC4, EVP_ARC4_SIZE) == 0) + return ARC4_TYPE; +#endif else return 0; } @@ -1194,12 +1198,18 @@ int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher) return 1; #endif #endif /* NO_AES */ - #ifndef NO_DES3 + +#ifndef NO_RC4 + case ARC4_TYPE: + return 1; +#endif + +#ifndef NO_DES3 case DES_CBC_TYPE: return 8; case DES_EDE3_CBC_TYPE: return 8; case DES_ECB_TYPE: return 8; case DES_EDE3_ECB_TYPE: return 8; - #endif +#endif default: return 0; } From 3b07f5d8e3bc9f3e440459a8ffc6e8caa2f66a1f Mon Sep 17 00:00:00 2001 From: Elms Date: Tue, 5 Jan 2021 13:12:12 -0800 Subject: [PATCH 3/4] EVP: expand tests for `EVP_CIPHER_block_size` --- tests/api.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/api.c b/tests/api.c index 9878ccff2..38ad80895 100644 --- a/tests/api.c +++ b/tests/api.c @@ -34624,10 +34624,64 @@ static void test_wolfSSL_EVP_CIPHER_block_size(void) { #if defined(OPENSSL_ALL) +#ifdef HAVE_AES_CBC + #ifdef WOLFSSL_AES_128 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_cbc()), AES_BLOCK_SIZE); + #endif + #ifdef WOLFSSL_AES_192 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_cbc()), AES_BLOCK_SIZE); + #endif + #ifdef WOLFSSL_AES_256 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_cbc()), AES_BLOCK_SIZE); + #endif +#endif + +#ifdef HAVE_AES_GCM + #ifdef WOLFSSL_AES_128 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_gcm()), 1); + #endif + #ifdef WOLFSSL_AES_192 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_gcm()), 1); + #endif + #ifdef WOLFSSL_AES_256 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_gcm()), 1); + #endif +#endif + +#ifdef WOLFSSL_AES_COUNTER + #ifdef WOLFSSL_AES_128 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_ctr()), AES_BLOCK_SIZE); + #endif + #ifdef WOLFSSL_AES_192 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_ctr()), AES_BLOCK_SIZE); + #endif + #ifdef WOLFSSL_AES_256 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_ctr()), AES_BLOCK_SIZE); + #endif +#endif + +#ifdef WOLFSSL_AES_ECB + #ifdef WOLFSSL_AES_128 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_ecb()), AES_BLOCK_SIZE); + #endif + #ifdef WOLFSSL_AES_192 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_ecb()), AES_BLOCK_SIZE); + #endif + #ifdef WOLFSSL_AES_256 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_ecb()), AES_BLOCK_SIZE); + #endif +#endif + #ifdef WOLFSSL_AES_OFB + #ifdef WOLFSSL_AES_128 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_ofb()), 1); + #endif #ifdef WOLFSSL_AES_192 AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_ofb()), 1); #endif + #ifdef WOLFSSL_AES_256 + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_ofb()), 1); + #endif #endif #ifndef NO_RC4 From 8fec1de07c9f0ccb56dff0c07f7342e12f2caebe Mon Sep 17 00:00:00 2001 From: Elms Date: Mon, 11 Jan 2021 10:44:34 -0800 Subject: [PATCH 4/4] EVP: address CTR block size --- tests/api.c | 6 +++--- wolfcrypt/src/evp.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/api.c b/tests/api.c index 38ad80895..cbd6d4117 100644 --- a/tests/api.c +++ b/tests/api.c @@ -34650,13 +34650,13 @@ static void test_wolfSSL_EVP_CIPHER_block_size(void) #ifdef WOLFSSL_AES_COUNTER #ifdef WOLFSSL_AES_128 - AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_ctr()), AES_BLOCK_SIZE); + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_128_ctr()), 1); #endif #ifdef WOLFSSL_AES_192 - AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_ctr()), AES_BLOCK_SIZE); + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_192_ctr()), 1); #endif #ifdef WOLFSSL_AES_256 - AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_ctr()), AES_BLOCK_SIZE); + AssertIntEQ(EVP_CIPHER_block_size(EVP_aes_256_ctr()), 1); #endif #endif diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index 3464b1052..f93fe03af 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -1166,7 +1166,7 @@ int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher) case AES_128_CTR_TYPE: case AES_192_CTR_TYPE: case AES_256_CTR_TYPE: - return AES_BLOCK_SIZE; + return 1; #endif #if defined(HAVE_AES_ECB) case AES_128_ECB_TYPE: