From b4c61b4df9b322059b9094146defea0654fcb9fe Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Wed, 21 Jul 2021 11:33:35 +0900 Subject: [PATCH 1/2] add EVP_blake2xyyy --- tests/api.c | 20 ++++++++++++++++++++ wolfcrypt/src/evp.c | 17 +++++++++++++++++ wolfssl/openssl/evp.h | 6 ++++++ 3 files changed, 43 insertions(+) diff --git a/tests/api.c b/tests/api.c index 29edf6ce6..f5250f0c8 100644 --- a/tests/api.c +++ b/tests/api.c @@ -45928,7 +45928,26 @@ static void test_wolfSSL_ERR_strings() AssertIntEQ((*err == ('\0')), 1); #endif printf(resultFmt, passed); +#endif +} +static void test_EVP_blake2() +{ +#if defined(OPENSSL_EXTRA) + printf(testingFmt, "test_EVP_blake2"); + + const EVP_MD* md = NULL; + + md = EVP_blake2b512(); + AssertTrue(md != NULL); + AssertIntEQ(XSTRNCMP(md, "BLAKE2b512", XSTRLEN("BLAKE2b512")), 0); + + md = EVP_blake2s256(); + AssertTrue(md != NULL); + AssertIntEQ(XSTRNCMP(md, "BLAKE2s256", XSTRLEN("BLAKE2s256")), 0); + + printf(resultFmt, passed); + #endif } /*----------------------------------------------------------------------------* @@ -45952,6 +45971,7 @@ void ApiTest(void) test_for_double_Free(); #endif test_wolfSSL_ERR_strings(); + test_EVP_blake2(); test_wolfSSL_CTX_use_certificate_file(); AssertIntEQ(test_wolfSSL_CTX_use_certificate_buffer(), WOLFSSL_SUCCESS); test_wolfSSL_CTX_use_PrivateKey_file(); diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index db7c286a2..d5f3bcc05 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -7151,6 +7151,23 @@ int wolfSSL_EVP_PKEY_assign_DH(EVP_PKEY* pkey, WOLFSSL_DH* key) } #endif /* !NO_DH */ +/* return EVP_MD + * @param none + * @return "BLAKE2b512" + */ +const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2b512() +{ + return (const WOLFSSL_EVP_MD*)"BLAKE2b512"; +} +/* return EVP_MD + * @param none + * @return "BLAKE2s256" + */ +const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2s256() +{ + return (const WOLFSSL_EVP_MD*)"BLAKE2s256"; +} + #endif /* OPENSSL_EXTRA */ #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) diff --git a/wolfssl/openssl/evp.h b/wolfssl/openssl/evp.h index 44e4c3362..3339a99a7 100644 --- a/wolfssl/openssl/evp.h +++ b/wolfssl/openssl/evp.h @@ -414,6 +414,9 @@ WOLFSSL_API int wolfSSL_EVP_DecodeFinal(WOLFSSL_EVP_ENCODE_CTX* ctx, unsigned char*out, int *outl); #endif /* WOLFSSL_BASE64_DECODE */ +WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2b512(void); +WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2s256(void); + typedef int WOLFSSL_ENGINE ; typedef WOLFSSL_ENGINE ENGINE; typedef WOLFSSL_EVP_PKEY_CTX EVP_PKEY_CTX; @@ -1008,6 +1011,9 @@ typedef WOLFSSL_ASN1_PCTX ASN1_PCTX; #define EVP_DecodeFinal wolfSSL_EVP_DecodeFinal #endif /* WOLFSSL_BASE64_DECODE */ +#define EVP_blake2b512 wolfSSL_EVP_blake2b512 +#define EVP_blake2s256 wolfSSL_EVP_blake2s256 + WOLFSSL_API void printPKEY(WOLFSSL_EVP_PKEY *k); #ifdef __cplusplus From 6a3ff81f2df520fbe3b7507fff1b2fae5e238e51 Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Wed, 21 Jul 2021 14:24:44 +0900 Subject: [PATCH 2/2] use EVP_get_digestbyname --- tests/api.c | 14 +++++++---- wolfcrypt/src/evp.c | 55 ++++++++++++++++++++++++++++++------------- wolfssl/openssl/evp.h | 2 ++ 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/tests/api.c b/tests/api.c index f5250f0c8..380c761a3 100644 --- a/tests/api.c +++ b/tests/api.c @@ -45933,19 +45933,23 @@ static void test_wolfSSL_ERR_strings() static void test_EVP_blake2() { -#if defined(OPENSSL_EXTRA) +#if defined(OPENSSL_EXTRA) && (defined(HAVE_BLAKE2) || defined(HAVE_BLAKE2S)) printf(testingFmt, "test_EVP_blake2"); const EVP_MD* md = NULL; + (void)md; +#if defined(HAVE_BLAKE2) md = EVP_blake2b512(); AssertTrue(md != NULL); - AssertIntEQ(XSTRNCMP(md, "BLAKE2b512", XSTRLEN("BLAKE2b512")), 0); - + AssertIntEQ(XSTRNCMP(md, "BLAKE2B512", XSTRLEN("BLAKE2B512")), 0); +#endif + +#if defined(HAVE_BLAKE2S) md = EVP_blake2s256(); AssertTrue(md != NULL); - AssertIntEQ(XSTRNCMP(md, "BLAKE2s256", XSTRLEN("BLAKE2s256")), 0); - + AssertIntEQ(XSTRNCMP(md, "BLAKE2S256", XSTRLEN("BLAKE2S256")), 0); +#endif printf(resultFmt, passed); #endif diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index d5f3bcc05..ba2d5a6d0 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -2336,6 +2336,12 @@ static const struct s_ent { #endif #ifndef WOLFSSL_NOSHA3_512 {WC_HASH_TYPE_SHA3_512, NID_sha3_512, "SHA3_512"}, +#endif +#ifdef HAVE_BLAKE2 + {WC_HASH_TYPE_BLAKE2B, NID_blake2b512, "BLAKE2B512"}, +#endif +#ifdef HAVE_BLAKE2S + {WC_HASH_TYPE_BLAKE2S, NID_blake2s256, "BLAKE2S256"}, #endif {WC_HASH_TYPE_NONE, 0, NULL} }; @@ -3503,6 +3509,12 @@ const WOLFSSL_EVP_MD *wolfSSL_EVP_get_digestbyname(const char *name) {"MD5", "ssl3-md5"}, {"SHA1", "ssl3-sha1"}, {"SHA1", "SHA"}, +#ifdef HAVE_BLAKE2 + {"BLAKE2b512", "blake2b512"}, +#endif +#ifdef HAVE_BLAKE2S + {"BLAKE2s256", "blake2s256"}, +#endif { NULL, NULL} }; char nameUpper[15]; /* 15 bytes should be enough for any name */ @@ -3567,6 +3579,32 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md) #endif /* !NO_MD5 */ +#ifdef HAVE_BLAKE2 + /* return EVP_MD + * @param none + * @return "blake2b512" + */ + const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2b512() + { + WOLFSSL_ENTER("EVP_blake2b512"); + return EVP_get_digestbyname("BLAKE2b512"); + } + +#endif + +#ifdef HAVE_BLAKE2S + /* return EVP_MD + * @param none + * @return "blake2s256" + */ + const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2s256() + { + WOLFSSL_ENTER("EVP_blake2s256"); + return EVP_get_digestbyname("BLAKE2s256"); + } + +#endif + #ifndef NO_WOLFSSL_STUB void wolfSSL_EVP_set_pw_prompt(const char *prompt) @@ -7151,22 +7189,7 @@ int wolfSSL_EVP_PKEY_assign_DH(EVP_PKEY* pkey, WOLFSSL_DH* key) } #endif /* !NO_DH */ -/* return EVP_MD - * @param none - * @return "BLAKE2b512" - */ -const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2b512() -{ - return (const WOLFSSL_EVP_MD*)"BLAKE2b512"; -} -/* return EVP_MD - * @param none - * @return "BLAKE2s256" - */ -const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2s256() -{ - return (const WOLFSSL_EVP_MD*)"BLAKE2s256"; -} + #endif /* OPENSSL_EXTRA */ diff --git a/wolfssl/openssl/evp.h b/wolfssl/openssl/evp.h index 3339a99a7..8780d0590 100644 --- a/wolfssl/openssl/evp.h +++ b/wolfssl/openssl/evp.h @@ -291,6 +291,8 @@ enum { NID_sha3_256 = 1097, NID_sha3_384 = 1098, NID_sha3_512 = 1099, + NID_blake2b512 = 1056, + NID_blake2s256 = 1057, }; enum {