add HMAC SHA2
This commit is contained in:
parent
a116b5ba83
commit
56af3a5b36
40
src/ssl.c
40
src/ssl.c
@ -13466,6 +13466,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
|
|||||||
unsigned char* md, unsigned int* md_len)
|
unsigned char* md, unsigned int* md_len)
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
|
int mdlen;
|
||||||
unsigned char* ret = NULL;
|
unsigned char* ret = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
Hmac* hmac = NULL;
|
Hmac* hmac = NULL;
|
||||||
@ -13481,19 +13482,45 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NO_MD5
|
#ifndef NO_MD5
|
||||||
if (XSTRNCMP(evp_md, "MD5", 3) == 0)
|
if (XSTRNCMP(evp_md, "MD5", 3) == 0) {
|
||||||
type = WC_MD5;
|
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
|
#endif
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
if (XSTRNCMP(evp_md, "SHA", 3) == 0)
|
if (XSTRNCMP(evp_md, "SHA", 3) == 0) {
|
||||||
type = WC_SHA;
|
type = WC_SHA;
|
||||||
else
|
mdlen = WC_SHA_DIGEST_SIZE;
|
||||||
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
printf("mdlen = %d\n", mdlen);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC);
|
hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC);
|
||||||
if (hmac == NULL)
|
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_HmacUpdate(hmac, d, n) == 0) {
|
||||||
if (wc_HmacFinal(hmac, md) == 0) {
|
if (wc_HmacFinal(hmac, md) == 0) {
|
||||||
if (md_len)
|
if (md_len)
|
||||||
*md_len = (type == WC_MD5) ? (int)WC_MD5_DIGEST_SIZE
|
*md_len = mdlen;
|
||||||
: (int)WC_SHA_DIGEST_SIZE;
|
|
||||||
ret = md;
|
ret = md;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
24
tests/api.c
24
tests/api.c
@ -16842,9 +16842,31 @@ static void test_wolfSSL_HMAC(void)
|
|||||||
AssertIntEQ(len, (int)WC_SHA256_DIGEST_SIZE);
|
AssertIntEQ(len, (int)WC_SHA256_DIGEST_SIZE);
|
||||||
|
|
||||||
HMAC_cleanup(&hmac);
|
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);
|
printf(resultFmt, passed);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user