Skip to content

Commit 519c08a

Browse files
authored
Merge pull request #10121 from JacobBarthelmeh/bench
use heap hints where possible in benchmark
2 parents 309ada2 + 5b4ad86 commit 519c08a

4 files changed

Lines changed: 60 additions & 50 deletions

File tree

wolfcrypt/benchmark/benchmark.c

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2551,7 +2551,7 @@ typedef enum bench_stat_type {
25512551

25522552
if (bstat == NULL) {
25532553
/* allocate new and put on list */
2554-
bstat = (bench_stats_t*)XMALLOC(sizeof(bench_stats_t), NULL,
2554+
bstat = (bench_stats_t*)XMALLOC(sizeof(bench_stats_t), HEAP_HINT,
25552555
DYNAMIC_TYPE_INFO);
25562556
if (bstat) {
25572557
XMEMSET(bstat, 0, sizeof(bench_stats_t));
@@ -3719,7 +3719,7 @@ static WC_INLINE void bench_stats_free(void)
37193719
bench_stats_t* bstat;
37203720
for (bstat = bench_stats_head; bstat != NULL; ) {
37213721
bench_stats_t* next = bstat->next;
3722-
XFREE(bstat, NULL, DYNAMIC_TYPE_INFO);
3722+
XFREE(bstat, HEAP_HINT, DYNAMIC_TYPE_INFO);
37233723
bstat = next;
37243724
}
37253725
bench_stats_head = NULL;
@@ -6470,7 +6470,7 @@ static void bench_aesofb_internal(const byte* key,
64706470

64716471
bench_stats_prepare();
64726472

6473-
ret = wc_AesInit(&enc, NULL, INVALID_DEVID);
6473+
ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID);
64746474
if (ret != 0) {
64756475
printf("AesInit failed at L%d, ret = %d\n", __LINE__, ret);
64766476
return;
@@ -11539,7 +11539,7 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub)
1153911539
return;
1154011540
}
1154111541

11542-
ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID);
11542+
ret = wc_LmsKey_Init(&key, HEAP_HINT, INVALID_DEVID);
1154311543
if (ret) {
1154411544
printf("wc_LmsKey_Init failed: %d\n", ret);
1154511545
wc_FreeRng(&rng);
@@ -11555,7 +11555,7 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub)
1155511555

1155611556
wc_LmsKey_Free(&key);
1155711557

11558-
ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID);
11558+
ret = wc_LmsKey_Init(&key, HEAP_HINT, INVALID_DEVID);
1155911559
if (ret) {
1156011560
printf("wc_LmsKey_Init failed: %d\n", ret);
1156111561
goto exit_lms_keygen;
@@ -11644,7 +11644,7 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub)
1164411644

1164511645
bench_stats_prepare();
1164611646

11647-
ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID);
11647+
ret = wc_LmsKey_Init(&key, HEAP_HINT, INVALID_DEVID);
1164811648
if (ret) {
1164911649
printf("wc_LmsKey_Init failed: %d\n", ret);
1165011650
goto exit_lms_sign_verify;
@@ -12124,7 +12124,7 @@ static void bench_xmss_sign_verify(const char * params)
1212412124

1212512125
freeRng = 1;
1212612126

12127-
ret = wc_XmssKey_Init(&key, NULL, INVALID_DEVID);
12127+
ret = wc_XmssKey_Init(&key, HEAP_HINT, INVALID_DEVID);
1212812128
if (ret != 0) {
1212912129
printf("wc_XmssKey_Init failed: %d\n", ret);
1213012130
goto exit_xmss_sign_verify;
@@ -12602,7 +12602,8 @@ void bench_slhdsa(int param)
1260212602
WC_ALLOC_VAR_EX(sig, byte, WC_SLHDSA_MAX_SIG_LEN, HEAP_HINT,
1260312603
DYNAMIC_TYPE_TMP_BUFFER, goto exit);
1260412604

12605-
ret = wc_SlhDsaKey_Init(key, (enum SlhDsaParam)param, NULL, INVALID_DEVID);
12605+
ret = wc_SlhDsaKey_Init(key, (enum SlhDsaParam)param, HEAP_HINT,
12606+
INVALID_DEVID);
1260612607
if (ret != 0) {
1260712608
goto exit;
1260812609
}
@@ -12664,7 +12665,8 @@ void bench_slhdsa(int param)
1266412665
goto exit;
1266512666
}
1266612667

12667-
ret = wc_SlhDsaKey_Init(key_vfy, (enum SlhDsaParam)param, NULL, INVALID_DEVID);
12668+
ret = wc_SlhDsaKey_Init(key_vfy, (enum SlhDsaParam)param, HEAP_HINT,
12669+
INVALID_DEVID);
1266812670
if (ret != 0) {
1266912671
goto exit;
1267012672
}
@@ -14215,7 +14217,7 @@ void bench_eccsiKeyGen(void)
1421514217
bench_stats_start(&count, &start);
1421614218
do {
1421714219
for (i = 0; i < genTimes; i++) {
14218-
wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
14220+
wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID);
1421914221
ret = wc_MakeEccsiKey(genKey, &gRng);
1422014222
wc_FreeEccsiKey(genKey);
1422114223
if (ret != 0) {
@@ -14260,7 +14262,7 @@ void bench_eccsiPairGen(void)
1426014262

1426114263
(void)mp_init(ssk);
1426214264
pvt = wc_ecc_new_point();
14263-
wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
14265+
wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID);
1426414266
(void)wc_MakeEccsiKey(genKey, &gRng);
1426514267

1426614268
/* RSK Gen */
@@ -14319,7 +14321,7 @@ void bench_eccsiValidate(void)
1431914321

1432014322
(void)mp_init(ssk);
1432114323
pvt = wc_ecc_new_point();
14322-
wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
14324+
wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID);
1432314325
(void)wc_MakeEccsiKey(genKey, &gRng);
1432414326
(void)wc_MakeEccsiPair(genKey, &gRng, WC_HASH_TYPE_SHA256, id, sizeof(id),
1432514327
ssk, pvt);
@@ -14384,7 +14386,7 @@ void bench_eccsi(void)
1438414386

1438514387
(void)mp_init(ssk);
1438614388
pvt = wc_ecc_new_point();
14387-
(void)wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
14389+
(void)wc_InitEccsiKey(genKey, HEAP_HINT, INVALID_DEVID);
1438814390
(void)wc_MakeEccsiKey(genKey, &gRng);
1438914391
(void)wc_MakeEccsiPair(genKey, &gRng, WC_HASH_TYPE_SHA256, id, sizeof(id),
1439014392
ssk, pvt);
@@ -14475,7 +14477,7 @@ void bench_sakkeKeyGen(void)
1447514477
bench_stats_start(&count, &start);
1447614478
do {
1447714479
for (i = 0; i < genTimes; i++) {
14478-
wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID);
14480+
wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID);
1447914481
ret = wc_MakeSakkeKey(genKey, &gRng);
1448014482
if (ret != 0) {
1448114483
printf("wc_MakeSakkeKey failed: %d\n", ret);
@@ -14517,7 +14519,7 @@ void bench_sakkeRskGen(void)
1451714519
WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT);
1451814520

1451914521
rsk = wc_ecc_new_point();
14520-
wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID);
14522+
wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID);
1452114523
(void)wc_MakeSakkeKey(genKey, &gRng);
1452214524

1452314525
/* RSK Gen */
@@ -14570,7 +14572,7 @@ void bench_sakkeValidate(void)
1457014572
WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT);
1457114573

1457214574
rsk = wc_ecc_new_point();
14573-
(void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID);
14575+
(void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID);
1457414576
(void)wc_MakeSakkeKey(genKey, &gRng);
1457514577
(void)wc_MakeSakkeRsk(genKey, id, sizeof(id), rsk);
1457614578
(void)wc_ValidateSakkeRsk(genKey, id, sizeof(id), rsk, &valid);
@@ -14634,7 +14636,7 @@ void bench_sakke(void)
1463414636
XMEMCPY(ssv, ssv_init, sizeof ssv);
1463514637

1463614638
rsk = wc_ecc_new_point();
14637-
(void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID);
14639+
(void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID);
1463814640
(void)wc_MakeSakkeKey(genKey, &gRng);
1463914641
(void)wc_MakeSakkeRsk(genKey, id, sizeof(id), rsk);
1464014642
(void)wc_SetSakkeRsk(genKey, rsk, NULL, 0);
@@ -14861,9 +14863,9 @@ void bench_falconKeySign(byte level)
1486114863

1486214864
bench_stats_prepare();
1486314865

14864-
ret = wc_falcon_init(&key);
14866+
ret = wc_falcon_init_ex(&key, HEAP_HINT, devId);
1486514867
if (ret != 0) {
14866-
printf("wc_falcon_init failed %d\n", ret);
14868+
printf("wc_falcon_init_ex failed %d\n", ret);
1486714869
return;
1486814870
}
1486914871

wolfcrypt/src/wc_xmss.c

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,16 @@ static void wc_xmss_digest_free(XmssState* state)
124124
*
125125
* @param [in, out] state XMSS/MT state including digest and parameters.
126126
* @param [in] params Parameters for key.
127+
* @param [in] heap Dynamic memory hint.
127128
* @return 0 on success.
128129
* @return NOT_COMPILED_IN when digest algorithm not supported.
129130
* @return Other negative when digest algorithm initialization failed.
130131
*/
131132
static WC_INLINE int wc_xmss_state_init(XmssState* state,
132-
const XmssParams* params)
133+
const XmssParams* params, void* heap)
133134
{
134135
state->params = params;
136+
state->heap = heap;
135137
state->ret = 0;
136138
return wc_xmss_digest_init(state);
137139
}
@@ -686,7 +688,7 @@ static int wc_xmsskey_alloc_sk(XmssKey* key)
686688
}
687689
if (ret == 0) {
688690
/* Allocate a buffer to hold secret key. */
689-
key->sk = (unsigned char *)XMALLOC(key->sk_len, NULL,
691+
key->sk = (unsigned char *)XMALLOC(key->sk_len, key->heap,
690692
DYNAMIC_TYPE_TMP_BUFFER);
691693
if (key->sk == NULL) {
692694
WOLFSSL_MSG("error: malloc XMSS key->sk failed");
@@ -738,12 +740,12 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig,
738740
if (ret == 0) {
739741
WC_DECLARE_VAR(state, XmssState, 1, 0);
740742

741-
WC_ALLOC_VAR_EX(state, XmssState, 1, NULL, DYNAMIC_TYPE_TMP_BUFFER,
742-
ret=MEMORY_E);
743+
WC_ALLOC_VAR_EX(state, XmssState, 1, key->heap,
744+
DYNAMIC_TYPE_TMP_BUFFER, ret=MEMORY_E);
743745
if (WC_VAR_OK(state))
744746
{
745747
/* Initialize state for use in signing. */
746-
ret = wc_xmss_state_init(state, key->params);
748+
ret = wc_xmss_state_init(state, key->params, key->heap);
747749
if (ret == 0) {
748750
/* Read was good. Now sign and update the secret key in memory.
749751
*/
@@ -771,7 +773,7 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig,
771773
/* Free state after use. */
772774
wc_xmss_state_free(state);
773775
}
774-
WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER);
776+
WC_FREE_VAR_EX(state, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
775777
}
776778
}
777779

@@ -809,7 +811,7 @@ static WC_INLINE int wc_xmsskey_signupdate(XmssKey* key, byte* sig,
809811
* Call this before setting the parms of an XMSS key.
810812
*
811813
* @param [in] key The XMSS key to init.
812-
* @param [in] heap Unused.
814+
* @param [in] heap Dynamic memory hint used by subsequent allocations.
813815
* @param [in] devId Unused.
814816
*
815817
* @return 0 on success.
@@ -819,7 +821,6 @@ int wc_XmssKey_Init(XmssKey* key, void* heap, int devId)
819821
{
820822
int ret = 0;
821823

822-
(void) heap;
823824
(void) devId;
824825

825826
/* Validate parameters. */
@@ -830,6 +831,7 @@ int wc_XmssKey_Init(XmssKey* key, void* heap, int devId)
830831
if (ret == 0) {
831832
/* Zeroize key and set state to initialized. */
832833
ForceZero(key, sizeof(XmssKey));
834+
key->heap = heap;
833835
key->state = WC_XMSS_STATE_INITED;
834836
}
835837

@@ -911,7 +913,7 @@ void wc_XmssKey_Free(XmssKey* key)
911913
if (key->sk != NULL) {
912914
/* Zeroize private key. */
913915
ForceZero(key->sk, key->sk_len);
914-
XFREE(key->sk, NULL, DYNAMIC_TYPE_TMP_BUFFER);
916+
XFREE(key->sk, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
915917
key->sk = NULL;
916918
key->sk_len = 0;
917919
}
@@ -1083,7 +1085,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
10831085
}
10841086
#ifdef WOLFSSL_SMALL_STACK
10851087
if (ret == 0) {
1086-
seed = (unsigned char*)XMALLOC(3 * key->params->n, NULL,
1088+
seed = (unsigned char*)XMALLOC(3 * key->params->n, key->heap,
10871089
DYNAMIC_TYPE_TMP_BUFFER);
10881090
if (seed == NULL) {
10891091
ret = MEMORY_E;
@@ -1099,12 +1101,12 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
10991101
if (ret == 0) {
11001102
WC_DECLARE_VAR(state, XmssState, 1, 0);
11011103

1102-
WC_ALLOC_VAR_EX(state, XmssState, 1, NULL, DYNAMIC_TYPE_TMP_BUFFER,
1103-
ret=MEMORY_E);
1104+
WC_ALLOC_VAR_EX(state, XmssState, 1, key->heap,
1105+
DYNAMIC_TYPE_TMP_BUFFER, ret=MEMORY_E);
11041106
if (WC_VAR_OK(state))
11051107
{
11061108
/* Initialize state for use in key generation. */
1107-
ret = wc_xmss_state_init(state, key->params);
1109+
ret = wc_xmss_state_init(state, key->params, key->heap);
11081110
if (ret == 0) {
11091111
/* Finally make the private/public key pair. Immediately write
11101112
* it to NV storage and then clear from memory. */
@@ -1125,7 +1127,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
11251127
/* Free state after use. */
11261128
wc_xmss_state_free(state);
11271129
}
1128-
WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1130+
WC_FREE_VAR_EX(state, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
11291131
}
11301132
}
11311133

@@ -1146,7 +1148,7 @@ int wc_XmssKey_MakeKey(XmssKey* key, WC_RNG* rng)
11461148
key->state = WC_XMSS_STATE_OK;
11471149
}
11481150

1149-
WC_FREE_VAR_EX(seed, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1151+
WC_FREE_VAR_EX(seed, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
11501152
return ret;
11511153
}
11521154

@@ -1430,6 +1432,7 @@ int wc_XmssKey_ExportPub(XmssKey* keyDst, const XmssKey* keySrc)
14301432
keyDst->oid = keySrc->oid;
14311433
keyDst->is_xmssmt = keySrc->is_xmssmt;
14321434
keyDst->params = keySrc->params;
1435+
keyDst->heap = keySrc->heap;
14331436
}
14341437
if (ret == 0) {
14351438
/* Mark keyDst as verify only, to prevent misuse. */
@@ -1623,19 +1626,19 @@ int wc_XmssKey_Verify(XmssKey* key, const byte* sig, word32 sigLen,
16231626
if (ret == 0) {
16241627
WC_DECLARE_VAR(state, XmssState, 1, 0);
16251628

1626-
WC_ALLOC_VAR_EX(state, XmssState, 1, NULL, DYNAMIC_TYPE_TMP_BUFFER,
1627-
ret=MEMORY_E);
1629+
WC_ALLOC_VAR_EX(state, XmssState, 1, key->heap,
1630+
DYNAMIC_TYPE_TMP_BUFFER, ret=MEMORY_E);
16281631
if (WC_VAR_OK(state))
16291632
{
16301633
/* Initialize state for use in verification. */
1631-
ret = wc_xmss_state_init(state, key->params);
1634+
ret = wc_xmss_state_init(state, key->params, key->heap);
16321635
if (ret == 0) {
16331636
/* Verify using either XMSS^MT function as it works for both. */
16341637
ret = wc_xmssmt_verify(state, m, mLen, sig, key->pk);
16351638
/* Free state after use. */
16361639
wc_xmss_state_free(state);
16371640
}
1638-
WC_FREE_VAR_EX(state, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1641+
WC_FREE_VAR_EX(state, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
16391642
}
16401643
}
16411644

0 commit comments

Comments
 (0)