From 6b84b78a33ad38b8119664ed4779df50da217dea Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Wed, 1 Apr 2026 15:12:59 -0600 Subject: [PATCH 1/3] use heap hints where possible in benchmark --- wolfcrypt/benchmark/benchmark.c | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 5d8e8efb898..2edb0fc6a91 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -2548,7 +2548,7 @@ typedef enum bench_stat_type { if (bstat == NULL) { /* allocate new and put on list */ - bstat = (bench_stats_t*)XMALLOC(sizeof(bench_stats_t), NULL, + bstat = (bench_stats_t*)XMALLOC(sizeof(bench_stats_t), HEAP_HINT, DYNAMIC_TYPE_INFO); if (bstat) { XMEMSET(bstat, 0, sizeof(bench_stats_t)); @@ -3614,7 +3614,7 @@ static WC_INLINE void bench_stats_free(void) bench_stats_t* bstat; for (bstat = bench_stats_head; bstat != NULL; ) { bench_stats_t* next = bstat->next; - XFREE(bstat, NULL, DYNAMIC_TYPE_INFO); + XFREE(bstat, HEAP_HINT, DYNAMIC_TYPE_INFO); bstat = next; } bench_stats_head = NULL; @@ -6113,7 +6113,7 @@ static void bench_aesofb_internal(const byte* key, bench_stats_prepare(); - ret = wc_AesInit(&enc, NULL, INVALID_DEVID); + ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID); if (ret != 0) { printf("AesInit failed at L%d, ret = %d\n", __LINE__, ret); return; @@ -11180,7 +11180,7 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub) return; } - ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID); + ret = wc_LmsKey_Init(&key, HEAP_HINT, devId); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); wc_FreeRng(&rng); @@ -11196,7 +11196,7 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub) wc_LmsKey_Free(&key); - ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID); + ret = wc_LmsKey_Init(&key, HEAP_HINT, devId); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); goto exit_lms_keygen; @@ -11285,7 +11285,7 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub) bench_stats_prepare(); - ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID); + ret = wc_LmsKey_Init(&key, HEAP_HINT, devId); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); goto exit_lms_sign_verify; @@ -11716,7 +11716,7 @@ static void bench_xmss_sign_verify(const char * params) freeRng = 1; - ret = wc_XmssKey_Init(&key, NULL, INVALID_DEVID); + ret = wc_XmssKey_Init(&key, HEAP_HINT, devId); if (ret != 0) { printf("wc_XmssKey_Init failed: %d\n", ret); goto exit_xmss_sign_verify; @@ -12201,7 +12201,7 @@ void bench_slhdsa(enum SlhDsaParam param) WC_ALLOC_VAR_EX(sig, byte, WC_SLHDSA_MAX_SIG_LEN, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, goto exit); - ret = wc_SlhDsaKey_Init(key, param, NULL, INVALID_DEVID); + ret = wc_SlhDsaKey_Init(key, param, HEAP_HINT, devId); if (ret != 0) { goto exit; } @@ -12250,7 +12250,7 @@ void bench_slhdsa(enum SlhDsaParam param) goto exit; } - ret = wc_SlhDsaKey_Init(key_vfy, param, NULL, INVALID_DEVID); + ret = wc_SlhDsaKey_Init(key_vfy, param, HEAP_HINT, devId); if (ret != 0) { goto exit; } @@ -13729,7 +13729,7 @@ void bench_eccsiKeyGen(void) bench_stats_start(&count, &start); do { for (i = 0; i < genTimes; i++) { - wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); + wc_InitEccsiKey(genKey, HEAP_HINT, devId); ret = wc_MakeEccsiKey(genKey, &gRng); wc_FreeEccsiKey(genKey); if (ret != 0) { @@ -13774,7 +13774,7 @@ void bench_eccsiPairGen(void) (void)mp_init(ssk); pvt = wc_ecc_new_point(); - wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); + wc_InitEccsiKey(genKey, HEAP_HINT, devId); (void)wc_MakeEccsiKey(genKey, &gRng); /* RSK Gen */ @@ -13833,7 +13833,7 @@ void bench_eccsiValidate(void) (void)mp_init(ssk); pvt = wc_ecc_new_point(); - wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); + wc_InitEccsiKey(genKey, HEAP_HINT, devId); (void)wc_MakeEccsiKey(genKey, &gRng); (void)wc_MakeEccsiPair(genKey, &gRng, WC_HASH_TYPE_SHA256, id, sizeof(id), ssk, pvt); @@ -13898,7 +13898,7 @@ void bench_eccsi(void) (void)mp_init(ssk); pvt = wc_ecc_new_point(); - (void)wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); + (void)wc_InitEccsiKey(genKey, HEAP_HINT, devId); (void)wc_MakeEccsiKey(genKey, &gRng); (void)wc_MakeEccsiPair(genKey, &gRng, WC_HASH_TYPE_SHA256, id, sizeof(id), ssk, pvt); @@ -13989,7 +13989,7 @@ void bench_sakkeKeyGen(void) bench_stats_start(&count, &start); do { for (i = 0; i < genTimes; i++) { - wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); + wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); ret = wc_MakeSakkeKey(genKey, &gRng); if (ret != 0) { printf("wc_MakeSakkeKey failed: %d\n", ret); @@ -14031,7 +14031,7 @@ void bench_sakkeRskGen(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); rsk = wc_ecc_new_point(); - wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); + wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); (void)wc_MakeSakkeKey(genKey, &gRng); /* RSK Gen */ @@ -14084,7 +14084,7 @@ void bench_sakkeValidate(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); rsk = wc_ecc_new_point(); - (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); + (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); (void)wc_MakeSakkeKey(genKey, &gRng); (void)wc_MakeSakkeRsk(genKey, id, sizeof(id), rsk); (void)wc_ValidateSakkeRsk(genKey, id, sizeof(id), rsk, &valid); @@ -14148,7 +14148,7 @@ void bench_sakke(void) XMEMCPY(ssv, ssv_init, sizeof ssv); rsk = wc_ecc_new_point(); - (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); + (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); (void)wc_MakeSakkeKey(genKey, &gRng); (void)wc_MakeSakkeRsk(genKey, id, sizeof(id), rsk); (void)wc_SetSakkeRsk(genKey, rsk, NULL, 0); @@ -14375,9 +14375,9 @@ void bench_falconKeySign(byte level) bench_stats_prepare(); - ret = wc_falcon_init(&key); + ret = wc_falcon_init_ex(&key, HEAP_HINT, devId); if (ret != 0) { - printf("wc_falcon_init failed %d\n", ret); + printf("wc_falcon_init_ex failed %d\n", ret); return; } From 66c3130d4a552c83fbc2581659247d92b65b60cd Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Wed, 15 Apr 2026 17:26:02 -0600 Subject: [PATCH 2/3] fix XMSS heap hint use --- wolfcrypt/src/wc_xmss.c | 37 ++++++++++++++++++------------------ wolfcrypt/src/wc_xmss_impl.c | 26 +++++++++++++------------ wolfssl/wolfcrypt/wc_xmss.h | 3 +++ 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/wolfcrypt/src/wc_xmss.c b/wolfcrypt/src/wc_xmss.c index ef7248d209e..2d53532b469 100644 --- a/wolfcrypt/src/wc_xmss.c +++ b/wolfcrypt/src/wc_xmss.c @@ -124,9 +124,10 @@ static void wc_xmss_digest_free(XmssState* state) * @return Other negative when digest algorithm initialization failed. */ static WC_INLINE int wc_xmss_state_init(XmssState* state, - const XmssParams* params) + const XmssParams* params, void* heap) { state->params = params; + state->heap = heap; state->ret = 0; return wc_xmss_digest_init(state); } @@ -681,7 +682,7 @@ static int wc_xmsskey_alloc_sk(XmssKey* key) } if (ret == 0) { /* Allocate a buffer to hold secret key. */ - key->sk = (unsigned char *)XMALLOC(key->sk_len, NULL, + key->sk = (unsigned char *)XMALLOC(key->sk_len, key->heap, DYNAMIC_TYPE_TMP_BUFFER); if (key->sk == NULL) { WOLFSSL_MSG("error: malloc XMSS key->sk failed"); @@ -733,12 +734,12 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig, if (ret == 0) { WC_DECLARE_VAR(state, XmssState, 1, 0); - WC_ALLOC_VAR_EX(state, XmssState, 1, NULL, DYNAMIC_TYPE_TMP_BUFFER, - ret=MEMORY_E); + WC_ALLOC_VAR_EX(state, XmssState, 1, key->heap, + DYNAMIC_TYPE_TMP_BUFFER, ret=MEMORY_E); if (WC_VAR_OK(state)) { /* Initialize state for use in signing. */ - ret = wc_xmss_state_init(state, key->params); + ret = wc_xmss_state_init(state, key->params, key->heap); if (ret == 0) { /* Read was good. Now sign and update the secret key in memory. */ @@ -766,7 +767,7 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig, /* Free state after use. */ wc_xmss_state_free(state); } - WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, key->heap, DYNAMIC_TYPE_TMP_BUFFER); } } @@ -814,7 +815,6 @@ int wc_XmssKey_Init(XmssKey* key, void* heap, int devId) { int ret = 0; - (void) heap; (void) devId; /* Validate parameters. */ @@ -825,6 +825,7 @@ int wc_XmssKey_Init(XmssKey* key, void* heap, int devId) if (ret == 0) { /* Zeroize key and set state to initialized. */ ForceZero(key, sizeof(XmssKey)); + key->heap = heap; key->state = WC_XMSS_STATE_INITED; } @@ -906,7 +907,7 @@ void wc_XmssKey_Free(XmssKey* key) if (key->sk != NULL) { /* Zeroize private key. */ ForceZero(key->sk, key->sk_len); - XFREE(key->sk, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(key->sk, key->heap, DYNAMIC_TYPE_TMP_BUFFER); key->sk = NULL; key->sk_len = 0; } @@ -1078,7 +1079,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng) } #ifdef WOLFSSL_SMALL_STACK if (ret == 0) { - seed = (unsigned char*)XMALLOC(3 * key->params->n, NULL, + seed = (unsigned char*)XMALLOC(3 * key->params->n, key->heap, DYNAMIC_TYPE_TMP_BUFFER); if (seed == NULL) { ret = MEMORY_E; @@ -1094,12 +1095,12 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng) if (ret == 0) { WC_DECLARE_VAR(state, XmssState, 1, 0); - WC_ALLOC_VAR_EX(state, XmssState, 1, NULL, DYNAMIC_TYPE_TMP_BUFFER, - ret=MEMORY_E); + WC_ALLOC_VAR_EX(state, XmssState, 1, key->heap, + DYNAMIC_TYPE_TMP_BUFFER, ret=MEMORY_E); if (WC_VAR_OK(state)) { /* Initialize state for use in key generation. */ - ret = wc_xmss_state_init(state, key->params); + ret = wc_xmss_state_init(state, key->params, key->heap); if (ret == 0) { /* Finally make the private/public key pair. Immediately write * it to NV storage and then clear from memory. */ @@ -1120,7 +1121,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng) /* Free state after use. */ wc_xmss_state_free(state); } - WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, key->heap, DYNAMIC_TYPE_TMP_BUFFER); } } @@ -1141,7 +1142,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng) key->state = WC_XMSS_STATE_OK; } - WC_FREE_VAR_EX(seed, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(seed, key->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -1618,19 +1619,19 @@ int wc_XmssKey_Verify(XmssKey* key, const byte* sig, word32 sigLen, if (ret == 0) { WC_DECLARE_VAR(state, XmssState, 1, 0); - WC_ALLOC_VAR_EX(state, XmssState, 1, NULL, DYNAMIC_TYPE_TMP_BUFFER, - ret=MEMORY_E); + WC_ALLOC_VAR_EX(state, XmssState, 1, key->heap, + DYNAMIC_TYPE_TMP_BUFFER, ret=MEMORY_E); if (WC_VAR_OK(state)) { /* Initialize state for use in verification. */ - ret = wc_xmss_state_init(state, key->params); + ret = wc_xmss_state_init(state, key->params, key->heap); if (ret == 0) { /* Verify using either XMSS^MT function as it works for both. */ ret = wc_xmssmt_verify(state, m, mLen, sig, key->pk); /* Free state after use. */ wc_xmss_state_free(state); } - WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER); + WC_FREE_VAR_EX(state, key->heap, DYNAMIC_TYPE_TMP_BUFFER); } } diff --git a/wolfcrypt/src/wc_xmss_impl.c b/wolfcrypt/src/wc_xmss_impl.c index c7a75f3143c..c78b35d2fd6 100644 --- a/wolfcrypt/src/wc_xmss_impl.c +++ b/wolfcrypt/src/wc_xmss_impl.c @@ -2634,14 +2634,15 @@ static void wc_xmss_bds_state_treehash_set(BdsState* bds, int i, * @return 0 on success. * @return MEMORY_E on dynamic memory allocation failure. */ -static int wc_xmss_bds_state_alloc(const XmssParams* params, BdsState** bds) +static int wc_xmss_bds_state_alloc(const XmssParams* params, BdsState** bds, + void* heap) { const word8 cnt = 2 * params->d - 1; int ret = 0; if (*bds == NULL) { /* Allocate memory for BDS states. */ - *bds = (BdsState*)XMALLOC(sizeof(BdsState) * cnt, NULL, + *bds = (BdsState*)XMALLOC(sizeof(BdsState) * cnt, heap, DYNAMIC_TYPE_TMP_BUFFER); if (*bds == NULL) { ret = MEMORY_E; @@ -2657,11 +2658,12 @@ static int wc_xmss_bds_state_alloc(const XmssParams* params, BdsState** bds) /* Dispose of allocated memory associated with BDS state. * * @param [in] bds BDS state. + * @param [in] heap Dynamic memory hint. */ -static void wc_xmss_bds_state_free(BdsState* bds) +static void wc_xmss_bds_state_free(BdsState* bds, void* heap) { /* BDS states was allocated - must free. */ - XFREE(bds, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(bds, heap, DYNAMIC_TYPE_TMP_BUFFER); } /* Load the BDS state from the secret/private key. @@ -3315,7 +3317,7 @@ int wc_xmss_keygen(XmssState* state, const unsigned char* seed, #ifdef WOLFSSL_SMALL_STACK /* Allocate memory for tree hash instances and put in BDS state. */ - ret = wc_xmss_bds_state_alloc(params, &bds); + ret = wc_xmss_bds_state_alloc(params, &bds, state->heap); if (ret == 0) #endif { @@ -3361,7 +3363,7 @@ int wc_xmss_keygen(XmssState* state, const unsigned char* seed, #ifdef WOLFSSL_SMALL_STACK /* Dispose of allocated data of BDS states. */ - wc_xmss_bds_state_free(bds); + wc_xmss_bds_state_free(bds, state->heap); #endif return ret; #else @@ -3426,7 +3428,7 @@ int wc_xmss_sign(XmssState* state, const unsigned char* m, word32 mlen, #ifdef WOLFSSL_SMALL_STACK /* Allocate memory for tree hash instances and put in BDS state. */ - ret = wc_xmss_bds_state_alloc(params, &bds); + ret = wc_xmss_bds_state_alloc(params, &bds, state->heap); if (ret == 0) #endif { @@ -3515,7 +3517,7 @@ int wc_xmss_sign(XmssState* state, const unsigned char* m, word32 mlen, #ifdef WOLFSSL_SMALL_STACK /* Dispose of allocated data of BDS states. */ - wc_xmss_bds_state_free(bds); + wc_xmss_bds_state_free(bds, state->heap); #endif return ret; #else @@ -3599,7 +3601,7 @@ int wc_xmssmt_keygen(XmssState* state, const unsigned char* seed, BdsState* bds = NULL; /* Allocate memory for BDS states and tree hash instances. */ - ret = wc_xmss_bds_state_alloc(params, &bds); + ret = wc_xmss_bds_state_alloc(params, &bds, state->heap); if (ret == 0) { /* Load the BDS state from secret/private key. */ ret = wc_xmss_bds_state_load(state, sk, bds, &wots_sigs); @@ -3655,7 +3657,7 @@ int wc_xmssmt_keygen(XmssState* state, const unsigned char* seed, } /* Dispose of allocated data of BDS states. */ - wc_xmss_bds_state_free(bds); + wc_xmss_bds_state_free(bds, state->heap); return ret; } @@ -4029,7 +4031,7 @@ int wc_xmssmt_sign(XmssState* state, const unsigned char* m, word32 mlen, BdsState* bds = NULL; /* Allocate memory for BDS states and tree hash instances. */ - ret = wc_xmss_bds_state_alloc(params, &bds); + ret = wc_xmss_bds_state_alloc(params, &bds, state->heap); if (ret == 0) { /* Load the BDS state from secret/private key. */ ret = wc_xmss_bds_state_load(state, sk, bds, &wots_sigs); @@ -4069,7 +4071,7 @@ int wc_xmssmt_sign(XmssState* state, const unsigned char* m, word32 mlen, } /* Dispose of allocated data of BDS states. */ - wc_xmss_bds_state_free(bds); + wc_xmss_bds_state_free(bds, state->heap); return ret; } diff --git a/wolfssl/wolfcrypt/wc_xmss.h b/wolfssl/wolfcrypt/wc_xmss.h index 200cd4322ef..a8839659842 100644 --- a/wolfssl/wolfcrypt/wc_xmss.h +++ b/wolfssl/wolfcrypt/wc_xmss.h @@ -226,12 +226,15 @@ struct XmssKey { /* Context arg passed to callbacks. */ void* context; #endif /* ifndef WOLFSSL_XMSS_VERIFY_ONLY */ + /* Dynamic memory hint. */ + void* heap; /* State of key. */ enum wc_XmssState state; }; typedef struct XmssState { const XmssParams* params; + void* heap; /* Digest is assumed to be at the end. */ union { From 9afd8ac7045ea43717101bcb5c79dc6aac710d59 Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Thu, 16 Apr 2026 16:56:30 -0600 Subject: [PATCH 3/3] use INVALID_DEVID in benchmark and copy over heap hint with XMSS export pub --- wolfcrypt/benchmark/benchmark.c | 28 ++++++++++++++-------------- wolfcrypt/src/wc_xmss.c | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 2edb0fc6a91..1e2998fc3f9 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -11180,7 +11180,7 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub) return; } - ret = wc_LmsKey_Init(&key, HEAP_HINT, devId); + ret = wc_LmsKey_Init(&key, HEAP_HINT, INVALID_DEVID); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); wc_FreeRng(&rng); @@ -11196,7 +11196,7 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub) wc_LmsKey_Free(&key); - ret = wc_LmsKey_Init(&key, HEAP_HINT, devId); + ret = wc_LmsKey_Init(&key, HEAP_HINT, INVALID_DEVID); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); goto exit_lms_keygen; @@ -11285,7 +11285,7 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub) bench_stats_prepare(); - ret = wc_LmsKey_Init(&key, HEAP_HINT, devId); + ret = wc_LmsKey_Init(&key, HEAP_HINT, INVALID_DEVID); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); goto exit_lms_sign_verify; @@ -11716,7 +11716,7 @@ static void bench_xmss_sign_verify(const char * params) freeRng = 1; - ret = wc_XmssKey_Init(&key, HEAP_HINT, devId); + ret = wc_XmssKey_Init(&key, HEAP_HINT, INVALID_DEVID); if (ret != 0) { printf("wc_XmssKey_Init failed: %d\n", ret); goto exit_xmss_sign_verify; @@ -12201,7 +12201,7 @@ void bench_slhdsa(enum SlhDsaParam param) WC_ALLOC_VAR_EX(sig, byte, WC_SLHDSA_MAX_SIG_LEN, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, goto exit); - ret = wc_SlhDsaKey_Init(key, param, HEAP_HINT, devId); + ret = wc_SlhDsaKey_Init(key, param, HEAP_HINT, INVALID_DEVID); if (ret != 0) { goto exit; } @@ -12250,7 +12250,7 @@ void bench_slhdsa(enum SlhDsaParam param) goto exit; } - ret = wc_SlhDsaKey_Init(key_vfy, param, HEAP_HINT, devId); + ret = wc_SlhDsaKey_Init(key_vfy, param, HEAP_HINT, INVALID_DEVID); if (ret != 0) { goto exit; } @@ -13729,7 +13729,7 @@ void bench_eccsiKeyGen(void) bench_stats_start(&count, &start); do { for (i = 0; i < genTimes; i++) { - wc_InitEccsiKey(genKey, HEAP_HINT, devId); + wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID); ret = wc_MakeEccsiKey(genKey, &gRng); wc_FreeEccsiKey(genKey); if (ret != 0) { @@ -13774,7 +13774,7 @@ void bench_eccsiPairGen(void) (void)mp_init(ssk); pvt = wc_ecc_new_point(); - wc_InitEccsiKey(genKey, HEAP_HINT, devId); + wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID); (void)wc_MakeEccsiKey(genKey, &gRng); /* RSK Gen */ @@ -13833,7 +13833,7 @@ void bench_eccsiValidate(void) (void)mp_init(ssk); pvt = wc_ecc_new_point(); - wc_InitEccsiKey(genKey, HEAP_HINT, devId); + wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID); (void)wc_MakeEccsiKey(genKey, &gRng); (void)wc_MakeEccsiPair(genKey, &gRng, WC_HASH_TYPE_SHA256, id, sizeof(id), ssk, pvt); @@ -13898,7 +13898,7 @@ void bench_eccsi(void) (void)mp_init(ssk); pvt = wc_ecc_new_point(); - (void)wc_InitEccsiKey(genKey, HEAP_HINT, devId); + (void)wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID); (void)wc_MakeEccsiKey(genKey, &gRng); (void)wc_MakeEccsiPair(genKey, &gRng, WC_HASH_TYPE_SHA256, id, sizeof(id), ssk, pvt); @@ -13989,7 +13989,7 @@ void bench_sakkeKeyGen(void) bench_stats_start(&count, &start); do { for (i = 0; i < genTimes; i++) { - wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); + wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID); ret = wc_MakeSakkeKey(genKey, &gRng); if (ret != 0) { printf("wc_MakeSakkeKey failed: %d\n", ret); @@ -14031,7 +14031,7 @@ void bench_sakkeRskGen(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); rsk = wc_ecc_new_point(); - wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); + wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID); (void)wc_MakeSakkeKey(genKey, &gRng); /* RSK Gen */ @@ -14084,7 +14084,7 @@ void bench_sakkeValidate(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); rsk = wc_ecc_new_point(); - (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); + (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID); (void)wc_MakeSakkeKey(genKey, &gRng); (void)wc_MakeSakkeRsk(genKey, id, sizeof(id), rsk); (void)wc_ValidateSakkeRsk(genKey, id, sizeof(id), rsk, &valid); @@ -14148,7 +14148,7 @@ void bench_sakke(void) XMEMCPY(ssv, ssv_init, sizeof ssv); rsk = wc_ecc_new_point(); - (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, devId); + (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID); (void)wc_MakeSakkeKey(genKey, &gRng); (void)wc_MakeSakkeRsk(genKey, id, sizeof(id), rsk); (void)wc_SetSakkeRsk(genKey, rsk, NULL, 0); diff --git a/wolfcrypt/src/wc_xmss.c b/wolfcrypt/src/wc_xmss.c index 2d53532b469..750b8067e9c 100644 --- a/wolfcrypt/src/wc_xmss.c +++ b/wolfcrypt/src/wc_xmss.c @@ -1426,6 +1426,7 @@ int wc_XmssKey_ExportPub(XmssKey* keyDst, const XmssKey* keySrc) keyDst->oid = keySrc->oid; keyDst->is_xmssmt = keySrc->is_xmssmt; keyDst->params = keySrc->params; + keyDst->heap = keySrc->heap; } if (ret == 0) { /* Mark keyDst as verify only, to prevent misuse. */