diff --git a/wolfcrypt/src/cryptocb.c b/wolfcrypt/src/cryptocb.c index a27d2d232..c7b8602df 100644 --- a/wolfcrypt/src/cryptocb.c +++ b/wolfcrypt/src/cryptocb.c @@ -492,20 +492,17 @@ int wc_CryptoCb_Sha256Hash(wc_Sha256* sha256, const byte* in, #endif /* !NO_SHA256 */ #ifndef NO_HMAC -int wc_CryptoCb_Hmac(Hmac* hmac, int macType, const byte* in, word32 inSz, byte* digest) +int wc_CryptoCb_Hmac(Hmac* hmac, int macType, const byte* in, word32 inSz, + byte* digest) { int ret = NOT_COMPILED_IN; CryptoCb* dev; - /* locate registered callback */ - if (hmac) { - dev = wc_CryptoCb_FindDevice(hmac->devId); - } - else { - /* locate first callback and try using it */ - dev = wc_CryptoCb_FindDeviceByIndex(0); - } + if (hmac == NULL) + return ret; + /* locate registered callback */ + dev = wc_CryptoCb_FindDevice(hmac->devId); if (dev && dev->cb) { wc_CryptoInfo cryptoInfo; XMEMSET(&cryptoInfo, 0, sizeof(cryptoInfo)); diff --git a/wolfcrypt/src/hmac.c b/wolfcrypt/src/hmac.c index f5a27dde3..41c20947c 100644 --- a/wolfcrypt/src/hmac.c +++ b/wolfcrypt/src/hmac.c @@ -325,6 +325,11 @@ int wc_HmacSetKey(Hmac* hmac, int type, const byte* key, word32 length) return HMAC_MIN_KEYLEN_E; #endif +#ifdef WOLF_CRYPTO_CB + hmac->keyRaw = key; /* use buffer directly */ + hmac->keyLen = length; +#endif + ip = (byte*)hmac->ipad; op = (byte*)hmac->opad; @@ -1056,8 +1061,6 @@ int wc_HmacInit(Hmac* hmac, void* heap, int devId) #endif #if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_HMAC) - hmac->keyLen = 0; - ret = wolfAsync_DevCtxInit(&hmac->asyncDev, WOLFSSL_ASYNC_MARKER_HMAC, hmac->heap, devId); #else diff --git a/wolfssl/wolfcrypt/hmac.h b/wolfssl/wolfcrypt/hmac.h index 2dac440c7..bc81ca980 100644 --- a/wolfssl/wolfcrypt/hmac.h +++ b/wolfssl/wolfcrypt/hmac.h @@ -144,11 +144,14 @@ typedef struct Hmac { byte innerHashKeyed; /* keyed flag */ #ifdef WOLFSSL_ASYNC_CRYPT WC_ASYNC_DEV asyncDev; - word16 keyLen; /* hmac key length (key in ipad) */ #endif /* WOLFSSL_ASYNC_CRYPT */ #ifdef WOLF_CRYPTO_CB - int devId; - void* devCtx; + int devId; + void* devCtx; + const byte* keyRaw; +#endif +#if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB) + word16 keyLen; /* hmac key length (key in ipad) */ #endif } Hmac;