From 56af3a5b3696126ed5daf833ca478585f672019c Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Wed, 18 Apr 2018 08:47:39 +0900 Subject: [PATCH 1/3] add HMAC SHA2 --- src/ssl.c | 40 +++++++++++++++++++++++++++++++++------- tests/api.c | 24 +++++++++++++++++++++++- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index d410f7cf8..66b048cb5 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -13466,6 +13466,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md) unsigned char* md, unsigned int* md_len) { int type; + int mdlen; unsigned char* ret = NULL; #ifdef WOLFSSL_SMALL_STACK Hmac* hmac = NULL; @@ -13481,19 +13482,45 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md) } #ifndef NO_MD5 - if (XSTRNCMP(evp_md, "MD5", 3) == 0) + if (XSTRNCMP(evp_md, "MD5", 3) == 0) { type = WC_MD5; - else + mdlen = WC_MD5_DIGEST_SIZE; + } else +#endif +#ifdef WOLFSSL_SHA224 + if (XSTRNCMP(evp_md, "SHA224", 6) == 0) { + type = WC_SHA224; + mdlen = WC_SHA224_DIGEST_SIZE; + } else +#endif +#ifndef NO_SHA256 + if (XSTRNCMP(evp_md, "SHA256", 6) == 0) { + type = WC_SHA256; + mdlen = WC_SHA256_DIGEST_SIZE; + } else +#endif +#ifdef WOLFSSL_SHA512 +#ifdef WOLFSSL_SHA384 + if (XSTRNCMP(evp_md, "SHA384", 6) == 0) { + type = WC_SHA384; + mdlen = WC_SHA384_DIGEST_SIZE; + } else +#endif + if (XSTRNCMP(evp_md, "SHA512", 6) == 0) { + type = WC_SHA512; + mdlen = WC_SHA512_DIGEST_SIZE; + } else #endif #ifndef NO_SHA - if (XSTRNCMP(evp_md, "SHA", 3) == 0) + if (XSTRNCMP(evp_md, "SHA", 3) == 0) { type = WC_SHA; - else + mdlen = WC_SHA_DIGEST_SIZE; + } else #endif { return NULL; } - + printf("mdlen = %d\n", mdlen); #ifdef WOLFSSL_SMALL_STACK hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC); if (hmac == NULL) @@ -13505,8 +13532,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md) if (wc_HmacUpdate(hmac, d, n) == 0) { if (wc_HmacFinal(hmac, md) == 0) { if (md_len) - *md_len = (type == WC_MD5) ? (int)WC_MD5_DIGEST_SIZE - : (int)WC_SHA_DIGEST_SIZE; + *md_len = mdlen; ret = md; } } diff --git a/tests/api.c b/tests/api.c index 59e9393f2..eb02b3441 100644 --- a/tests/api.c +++ b/tests/api.c @@ -16842,9 +16842,31 @@ static void test_wolfSSL_HMAC(void) AssertIntEQ(len, (int)WC_SHA256_DIGEST_SIZE); HMAC_cleanup(&hmac); +#endif + +#if defined(OPENSSL_EXTRA) && !defined(NO_SHA256) + len = 0; + AssertNotNull(HMAC(EVP_sha256(), key, (int)sizeof(key), NULL, 0, hash, &len)); + AssertIntEQ(len, (int)WC_SHA256_DIGEST_SIZE); +#endif +#if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_SHA224) + len = 0; + AssertNotNull(HMAC(EVP_sha224(), key, (int)sizeof(key), NULL, 0, hash, &len)); + AssertIntEQ(len, (int)WC_SHA224_DIGEST_SIZE); +#endif +#if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_SHA384) && !defined(WOLFSSL_SHA512) + len = 0; + AssertNotNull(HMAC(EVP_sha384(), key, (int)sizeof(key), NULL, 0, hash, &len)); + AssertIntEQ(len, (int)WC_SHA384_DIGEST_SIZE); +#endif +#if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_SHA512) + len = 0; + AssertNotNull(HMAC(EVP_sha512(), key, (int)sizeof(key), NULL, 0, hash, &len)); + AssertIntEQ(len, (int)WC_SHA512_DIGEST_SIZE); +#endif printf(resultFmt, passed); - #endif + } From 7c7913264bc5aba361093ede36be749efdc18a00 Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Wed, 18 Apr 2018 09:25:24 +0900 Subject: [PATCH 2/3] remove printf --- src/ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ssl.c b/src/ssl.c index 66b048cb5..41e1aba2d 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -13520,7 +13520,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md) { return NULL; } - printf("mdlen = %d\n", mdlen); + #ifdef WOLFSSL_SMALL_STACK hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC); if (hmac == NULL) From bf950198f22a4bef4a922a4ecd16b2a4e9612897 Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Wed, 18 Apr 2018 13:02:40 +0900 Subject: [PATCH 3/3] api.c: option conditions --- tests/api.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/api.c b/tests/api.c index eb02b3441..1698e4c57 100644 --- a/tests/api.c +++ b/tests/api.c @@ -16849,17 +16849,17 @@ static void test_wolfSSL_HMAC(void) AssertNotNull(HMAC(EVP_sha256(), key, (int)sizeof(key), NULL, 0, hash, &len)); AssertIntEQ(len, (int)WC_SHA256_DIGEST_SIZE); #endif -#if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_SHA224) +#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_SHA224) len = 0; AssertNotNull(HMAC(EVP_sha224(), key, (int)sizeof(key), NULL, 0, hash, &len)); AssertIntEQ(len, (int)WC_SHA224_DIGEST_SIZE); #endif -#if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_SHA384) && !defined(WOLFSSL_SHA512) +#if defined(OPENSSL_EXTRA) && (defined(WOLFSSL_SHA384) && defined(WOLFSSL_SHA512)) len = 0; AssertNotNull(HMAC(EVP_sha384(), key, (int)sizeof(key), NULL, 0, hash, &len)); AssertIntEQ(len, (int)WC_SHA384_DIGEST_SIZE); #endif -#if defined(OPENSSL_EXTRA) && !defined(WOLFSSL_SHA512) +#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_SHA512) len = 0; AssertNotNull(HMAC(EVP_sha512(), key, (int)sizeof(key), NULL, 0, hash, &len)); AssertIntEQ(len, (int)WC_SHA512_DIGEST_SIZE);