@@ -34880,6 +34880,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hkdf_test(void)
3488034880
3488134881#if !defined(NO_SHA) || !defined(NO_SHA256)
3488234882 int L;
34883+ byte prk[WC_MAX_DIGEST_SIZE];
3488334884 byte okm1[42];
3488434885 byte ikm1[22] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
3488534886 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
@@ -34944,7 +34945,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hkdf_test(void)
3494434945#ifndef HAVE_FIPS
3494534946 /* fips can't have key size under 14 bytes, salt is key too */
3494634947 L = (int)sizeof(okm1);
34947- #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
34948+ #if !defined(HAVE_SELFTEST)
3494834949 ret = wc_HKDF_ex(WC_SHA, ikm1, 11, salt1, (word32)sizeof(salt1), info1,
3494934950 (word32)sizeof(info1), okm1, (word32)L, HEAP_HINT, devId);
3495034951#else
@@ -34956,7 +34957,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hkdf_test(void)
3495634957
3495734958 if (XMEMCMP(okm1, res2, (unsigned long)L) != 0)
3495834959 return WC_TEST_RET_ENC_NC;
34959- #endif /* HAVE_FIPS */
34960+ #endif /* ! HAVE_FIPS */
3496034961#endif /* !NO_SHA */
3496134962
3496234963#ifndef NO_SHA256
@@ -34989,7 +34990,106 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hkdf_test(void)
3498934990
3499034991 if (XMEMCMP(okm1, res4, (unsigned long)L) != 0)
3499134992 return WC_TEST_RET_ENC_NC;
34992- #endif /* HAVE_FIPS */
34993+ #endif /* !HAVE_FIPS */
34994+ #endif /* !NO_SHA256 */
34995+
34996+ #ifndef NO_SHA
34997+ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
34998+ ret = wc_HKDF_Extract_ex(WC_SHA, NULL, 0, ikm1, (word32)sizeof(ikm1),
34999+ prk, HEAP_HINT, devId);
35000+ #else
35001+ ret = wc_HKDF_Extract(WC_SHA, NULL, 0, ikm1, (word32)sizeof(ikm1), prk);
35002+ #endif
35003+ if (ret != 0)
35004+ return WC_TEST_RET_ENC_EC(ret);
35005+
35006+ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
35007+ ret = wc_HKDF_Expand_ex(WC_SHA, prk, WC_SHA_DIGEST_SIZE, NULL, 0,
35008+ okm1, (word32)L, HEAP_HINT, devId);
35009+ #else
35010+ ret = wc_HKDF_Expand(WC_SHA, prk, WC_SHA_DIGEST_SIZE, NULL, 0,
35011+ okm1, (word32)L);
35012+ #endif
35013+ if (ret != 0)
35014+ return WC_TEST_RET_ENC_EC(ret);
35015+
35016+ if (XMEMCMP(okm1, res1, (unsigned long)L) != 0)
35017+ return WC_TEST_RET_ENC_NC;
35018+
35019+ #ifndef HAVE_FIPS
35020+ /* fips can't have key size under 14 bytes, salt is key too */
35021+ #if !defined(HAVE_SELFTEST)
35022+ ret = wc_HKDF_Extract_ex(WC_SHA, salt1, (word32)sizeof(salt1), ikm1, 11,
35023+ prk, HEAP_HINT, devId);
35024+ #else
35025+ ret = wc_HKDF_Extract(WC_SHA, salt1, (word32)sizeof(salt1), ikm1, 11, prk);
35026+ #endif
35027+ if (ret != 0)
35028+ return WC_TEST_RET_ENC_EC(ret);
35029+
35030+ #if !defined(HAVE_SELFTEST)
35031+ ret = wc_HKDF_Expand_ex(WC_SHA, prk, WC_SHA_DIGEST_SIZE, info1,
35032+ (word32)sizeof(info1), okm1, (word32)L, HEAP_HINT, devId);
35033+ #else
35034+ ret = wc_HKDF_Expand(WC_SHA, prk, WC_SHA_DIGEST_SIZE, info1,
35035+ (word32)sizeof(info1), okm1, (word32)L);
35036+ #endif
35037+ if (ret != 0)
35038+ return WC_TEST_RET_ENC_EC(ret);
35039+
35040+ if (XMEMCMP(okm1, res2, (unsigned long)L) != 0)
35041+ return WC_TEST_RET_ENC_NC;
35042+ #endif /* !HAVE_FIPS */
35043+ #endif /* !NO_SHA */
35044+
35045+ #ifndef NO_SHA256
35046+ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
35047+ ret = wc_HKDF_Extract_ex(WC_SHA256, NULL, 0, ikm1, (word32)sizeof(ikm1),
35048+ prk, HEAP_HINT, devId);
35049+ #else
35050+ ret = wc_HKDF_Extract(WC_SHA256, NULL, 0, ikm1, (word32)sizeof(ikm1), prk);
35051+ #endif
35052+ if (ret != 0)
35053+ return WC_TEST_RET_ENC_EC(ret);
35054+
35055+ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
35056+ ret = wc_HKDF_Expand_ex(WC_SHA256, prk, WC_SHA256_DIGEST_SIZE, NULL, 0,
35057+ okm1, (word32)L, HEAP_HINT, devId);
35058+ #else
35059+ ret = wc_HKDF_Expand(WC_SHA256, prk, WC_SHA256_DIGEST_SIZE, NULL, 0,
35060+ okm1, (word32)L);
35061+ #endif
35062+ if (ret != 0)
35063+ return WC_TEST_RET_ENC_EC(ret);
35064+
35065+ if (XMEMCMP(okm1, res3, (unsigned long)L) != 0)
35066+ return WC_TEST_RET_ENC_NC;
35067+
35068+ #ifndef HAVE_FIPS
35069+ /* fips can't have key size under 14 bytes, salt is key too */
35070+ #if !defined(HAVE_SELFTEST)
35071+ ret = wc_HKDF_Extract_ex(WC_SHA256, salt1, (word32)sizeof(salt1), ikm1,
35072+ (word32)sizeof(ikm1), prk, HEAP_HINT, devId);
35073+ #else
35074+ ret = wc_HKDF_Extract(WC_SHA256, salt1, (word32)sizeof(salt1), ikm1,
35075+ (word32)sizeof(ikm1), prk);
35076+ #endif
35077+ if (ret != 0)
35078+ return WC_TEST_RET_ENC_EC(ret);
35079+
35080+ #if !defined(HAVE_SELFTEST)
35081+ ret = wc_HKDF_Expand_ex(WC_SHA256, prk, WC_SHA256_DIGEST_SIZE, info1,
35082+ (word32)sizeof(info1), okm1, (word32)L, HEAP_HINT, devId);
35083+ #else
35084+ ret = wc_HKDF_Expand(WC_SHA256, prk, WC_SHA256_DIGEST_SIZE, info1,
35085+ (word32)sizeof(info1), okm1, (word32)L);
35086+ #endif
35087+ if (ret != 0)
35088+ return WC_TEST_RET_ENC_EC(ret);
35089+
35090+ if (XMEMCMP(okm1, res4, (unsigned long)L) != 0)
35091+ return WC_TEST_RET_ENC_NC;
35092+ #endif /* !HAVE_FIPS */
3499335093#endif /* !NO_SHA256 */
3499435094#endif /* !NO_SHA || !NO_SHA256 */
3499535095
@@ -35003,8 +35103,18 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hkdf_test(void)
3500335103 ret = wc_HKDF_Extract(WC_SHA256, NULL, 0, NULL, 5, okm1);
3500435104 if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG))
3500535105 return WC_TEST_RET_ENC_EC(ret);
35006- #endif /* !NO_SHA256 && !HAVE_SELFTEST && */
35007- /* (!HAVE_FIPS || FIPS_VERSION3_GE(7,0,0)) */
35106+ /* wc_HKDF_Expand bad arg: NULL out */
35107+ ret = wc_HKDF_Expand(WC_SHA256, prk, WC_SHA256_DIGEST_SIZE, NULL, 0,
35108+ NULL, (word32)L);
35109+ if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG))
35110+ return WC_TEST_RET_ENC_EC(ret);
35111+ /* wc_HKDF_Expand bad arg: NULL inKey with non-zero inKeySz */
35112+ ret = wc_HKDF_Expand(WC_SHA256, NULL, WC_SHA256_DIGEST_SIZE, NULL, 0,
35113+ okm1, (word32)L);
35114+ if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG))
35115+ return WC_TEST_RET_ENC_EC(ret);
35116+ #endif /* !NO_SHA256 && !HAVE_SELFTEST */
35117+ /* && (!HAVE_FIPS || FIPS_VERSION3_GE(7,0,0)) */
3500835118
3500935119 return 0;
3501035120}
@@ -74538,6 +74648,36 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
7453874648 info->kdf.hkdf.out, info->kdf.hkdf.outSz);
7453974649 #endif
7454074650 }
74651+ if (info->kdf.type == WC_KDF_TYPE_HKDF_EXTRACT) {
74652+ #if !defined(HAVE_SELFTEST) && \
74653+ (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
74654+ ret = wc_HKDF_Extract_ex(info->kdf.hkdf_extract.hashType,
74655+ info->kdf.hkdf_extract.salt, info->kdf.hkdf_extract.saltSz,
74656+ info->kdf.hkdf_extract.inKey, info->kdf.hkdf_extract.inKeySz,
74657+ info->kdf.hkdf_extract.out,
74658+ NULL, INVALID_DEVID);
74659+ #else
74660+ ret = wc_HKDF_Extract(info->kdf.hkdf_extract.hashType,
74661+ info->kdf.hkdf_extract.salt, info->kdf.hkdf_extract.saltSz,
74662+ info->kdf.hkdf_extract.inKey, info->kdf.hkdf_extract.inKeySz,
74663+ info->kdf.hkdf_extract.out);
74664+ #endif
74665+ }
74666+ if (info->kdf.type == WC_KDF_TYPE_HKDF_EXPAND) {
74667+ #if !defined(HAVE_SELFTEST) && \
74668+ (!defined(HAVE_FIPS) || FIPS_VERSION_GE(7,0))
74669+ ret = wc_HKDF_Expand_ex(info->kdf.hkdf_expand.hashType,
74670+ info->kdf.hkdf_expand.inKey, info->kdf.hkdf_expand.inKeySz,
74671+ info->kdf.hkdf_expand.info, info->kdf.hkdf_expand.infoSz,
74672+ info->kdf.hkdf_expand.out, info->kdf.hkdf_expand.outSz,
74673+ NULL, INVALID_DEVID);
74674+ #else
74675+ ret = wc_HKDF_Expand(info->kdf.hkdf_expand.hashType,
74676+ info->kdf.hkdf_expand.inKey, info->kdf.hkdf_expand.inKeySz,
74677+ info->kdf.hkdf_expand.info, info->kdf.hkdf_expand.infoSz,
74678+ info->kdf.hkdf_expand.out, info->kdf.hkdf_expand.outSz);
74679+ #endif
74680+ }
7454174681 #endif /* HAVE_HKDF && !NO_HMAC */
7454274682 #if defined(HAVE_CMAC_KDF)
7454374683 if (info->kdf.type == WC_KDF_TYPE_TWOSTEP_CMAC) {
0 commit comments