From 65bb68b6c0b3840f2a9e888c1e28a6e1eaecadff Mon Sep 17 00:00:00 2001 From: Andrew Hutchings Date: Fri, 17 Oct 2025 19:27:59 +0100 Subject: [PATCH] Move heap/stack tracking to before init phase Start tracking during the setup of the algo, so we can capture the memory usage of the algo init functions. --- wolfcrypt/benchmark/benchmark.c | 266 +++++++++++++++++++++++++++++++- 1 file changed, 258 insertions(+), 8 deletions(-) diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 78b5d7ffe..c8fcdb8fb 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -342,6 +342,38 @@ static WC_INLINE long bench_stack_checkpoint_measure(void) } #endif +#if defined(WC_BENCH_HEAP_TRACKING) || defined(WC_BENCH_STACK_TRACKING) +static int bench_stats_resources_prepared; +#ifdef WC_BENCH_HEAP_TRACKING +static long bench_stats_heap_setup_allocs; +static long bench_stats_heap_setup_bytes; +#endif +#ifdef WC_BENCH_STACK_TRACKING +static long bench_stats_stack_setup_bytes; +#endif + +static WC_INLINE void bench_stats_reset_setup_offsets(void) +{ +#ifdef WC_BENCH_HEAP_TRACKING + bench_stats_heap_setup_allocs = 0; + bench_stats_heap_setup_bytes = 0; +#endif +#ifdef WC_BENCH_STACK_TRACKING + bench_stats_stack_setup_bytes = 0; +#endif +} +#endif + +static WC_INLINE void bench_stats_prepare(void) +{ + bench_heap_checkpoint_prepare(); + bench_stack_checkpoint_prepare(); +#if defined(WC_BENCH_HEAP_TRACKING) || defined(WC_BENCH_STACK_TRACKING) + bench_stats_reset_setup_offsets(); + bench_stats_resources_prepared = 1; +#endif +} + #if defined(WC_BENCH_HEAP_TRACKING) || defined(WC_BENCH_STACK_TRACKING) static WC_INLINE void bench_append_memory_info(char* buffer, size_t size, int asCsv, long heapAllocs, long heapBytes, long stackBytes) @@ -2526,6 +2558,10 @@ static WC_INLINE void bench_stats_init(void) #ifdef WC_BENCH_TRACK_STATS bench_stats_head = NULL; bench_stats_tail = NULL; +#endif +#if defined(WC_BENCH_HEAP_TRACKING) || defined(WC_BENCH_STACK_TRACKING) + bench_stats_reset_setup_offsets(); + bench_stats_resources_prepared = 0; #endif INIT_CYCLE_COUNTER } @@ -2535,8 +2571,35 @@ static WC_INLINE void bench_stats_start(int* count, double* start) *count = 0; *start = current_time(1); +#if defined(WC_BENCH_HEAP_TRACKING) || defined(WC_BENCH_STACK_TRACKING) + if (bench_stats_resources_prepared) { +#ifdef WC_BENCH_HEAP_TRACKING + long prepAllocs = 0; + long prepBytes = 0; + bench_heap_checkpoint_measure(&prepAllocs, &prepBytes); + bench_stats_heap_setup_allocs += prepAllocs; + bench_stats_heap_setup_bytes += prepBytes; +#else + (void)bench_heap_checkpoint_measure(NULL, NULL); +#endif +#ifdef WC_BENCH_STACK_TRACKING + bench_stats_stack_setup_bytes += bench_stack_checkpoint_measure(); +#else + (void)bench_stack_checkpoint_measure(); +#endif + bench_heap_checkpoint_prepare(); + bench_stack_checkpoint_prepare(); + } + else { + bench_heap_checkpoint_prepare(); + bench_stack_checkpoint_prepare(); + bench_stats_reset_setup_offsets(); + } + bench_stats_resources_prepared = 0; +#else bench_heap_checkpoint_prepare(); bench_stack_checkpoint_prepare(); +#endif #ifdef WOLFSSL_ESPIDF #ifdef DEBUG_WOLFSSL_BENCHMARK_TIMING @@ -2869,8 +2932,19 @@ static void bench_stats_sym_finish(const char* desc, int useDeviceID, NULL #endif ); +#ifdef WC_BENCH_HEAP_TRACKING + heapAllocs += bench_stats_heap_setup_allocs; + heapBytes += bench_stats_heap_setup_bytes; + bench_stats_heap_setup_allocs = 0; + bench_stats_heap_setup_bytes = 0; +#endif #ifdef WC_BENCH_STACK_TRACKING - bench_stack_checkpoint_measure(); + { + long stackUsed = bench_stack_checkpoint_measure(); + stackUsed += bench_stats_stack_setup_bytes; + bench_last_stack_bytes = stackUsed; + } + bench_stats_stack_setup_bytes = 0; #else (void)bench_stack_checkpoint_measure(); #endif @@ -3023,6 +3097,7 @@ static void bench_stats_sym_finish(const char* desc, int useDeviceID, kernel_fpu_end(); #endif + bench_stats_prepare(); TEST_SLEEP(); } /* bench_stats_sym_finish */ @@ -3099,7 +3174,22 @@ static void bench_stats_asym_finish_ex(const char* algo, int strength, NULL #endif ); - bench_stack_checkpoint_measure(); +#ifdef WC_BENCH_HEAP_TRACKING + heapAllocs += bench_stats_heap_setup_allocs; + heapBytes += bench_stats_heap_setup_bytes; + bench_stats_heap_setup_allocs = 0; + bench_stats_heap_setup_bytes = 0; +#endif +#ifdef WC_BENCH_STACK_TRACKING + { + long stackUsed = bench_stack_checkpoint_measure(); + stackUsed += bench_stats_stack_setup_bytes; + bench_last_stack_bytes = stackUsed; + } + bench_stats_stack_setup_bytes = 0; +#else + (void)bench_stack_checkpoint_measure(); +#endif SLEEP_ON_ERROR(ret); @@ -3361,6 +3451,7 @@ static void bench_stats_asym_finish_ex(const char* algo, int strength, kernel_fpu_end(); #endif + bench_stats_prepare(); TEST_SLEEP(); } /* bench_stats_asym_finish_ex */ @@ -4637,6 +4728,8 @@ void bench_rng(void) WC_RNG myrng; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + #ifndef HAVE_FIPS ret = wc_InitRng_ex(&myrng, HEAP_HINT, devId); #else @@ -4700,6 +4793,8 @@ static void bench_aescbc_internal(int useDeviceID, double start; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, sizeof(Aes), HEAP_HINT); @@ -4863,6 +4958,8 @@ static void bench_aesgcm_internal(int useDeviceID, WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); + bench_stats_prepare(); + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, @@ -5045,6 +5142,8 @@ static void bench_aesgcm_stream_internal(int useDeviceID, WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); + bench_stats_prepare(); + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); @@ -5274,6 +5373,8 @@ void bench_gmac(int useDeviceID) const char* gmacStr = "GMAC Default"; #endif + bench_stats_prepare(); + /* Implementations of /Dev/Crypto will error out if the size of Auth in is */ /* greater than the system's page size */ #if defined(WOLFSSL_DEVCRYPTO) && defined(WOLFSSL_AUTHSZ_BENCH) @@ -5340,6 +5441,8 @@ static void bench_aesecb_internal(int useDeviceID, const word32 benchSz = bench_size; #endif + bench_stats_prepare(); + WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, sizeof(Aes), HEAP_HINT); @@ -5503,6 +5606,8 @@ static void bench_aescfb_internal(const byte* key, int i, ret, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID); if (ret != 0) { printf("AesInit failed at L%d, ret = %d\n", __LINE__, ret); @@ -5568,6 +5673,8 @@ static void bench_aesofb_internal(const byte* key, int i, ret, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_AesInit(&enc, NULL, INVALID_DEVID); if (ret != 0) { printf("AesInit failed at L%d, ret = %d\n", __LINE__, ret); @@ -5628,6 +5735,8 @@ void bench_aesxts(void) int i, count, ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + static const unsigned char k1[] = { 0xa1, 0xb9, 0x0c, 0xba, 0x3f, 0x06, 0xac, 0x35, 0x3b, 0x2c, 0x34, 0x38, 0x76, 0x08, 0x17, 0x62, @@ -5724,6 +5833,8 @@ static void bench_aesctr_internal(const byte* key, word32 keySz, int i, count, ret = 0; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + if ((ret = wc_AesInit(&enc, HEAP_HINT, useDeviceID ? devId : INVALID_DEVID)) != 0) { printf("wc_AesInit failed, ret = %d\n", ret); @@ -5786,6 +5897,8 @@ void bench_aesccm(int useDeviceID) WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); + bench_stats_prepare(); + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); @@ -5883,6 +5996,8 @@ static void bench_aessiv_internal(const byte* key, word32 keySz, const char* double start; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + bench_stats_start(&count, &start); do { for (i = 0; i < numBlocks; i++) { @@ -5953,6 +6068,8 @@ void bench_poly1305(void) int ret = 0, i, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + if (digest_stream) { ret = wc_Poly1305SetKey(&enc, bench_key, 32); if (ret != 0) { @@ -6018,6 +6135,8 @@ void bench_camellia(void) int ret, i, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_CamelliaSetKey(&cam, bench_key, 16, bench_iv); if (ret != 0) { printf("CamelliaSetKey failed, ret = %d\n", ret); @@ -6059,6 +6178,8 @@ void bench_sm4_cbc(void) int count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_Sm4SetKey(&sm4, bench_key, SM4_KEY_SIZE); if (ret != 0) { printf("Sm4SetKey failed, ret = %d\n", ret); @@ -6131,6 +6252,8 @@ void bench_sm4_gcm(void) WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); + bench_stats_prepare(); + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); @@ -6208,6 +6331,8 @@ void bench_sm4_ccm(void) WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); + bench_stats_prepare(); + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); @@ -6284,6 +6409,8 @@ void bench_des(int useDeviceID) double start; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_CALLOC_ARRAY(enc, Des3, BENCH_MAX_PENDING, sizeof(Des3), HEAP_HINT); @@ -6356,6 +6483,8 @@ void bench_arc4(int useDeviceID) double start; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_CALLOC_ARRAY(enc, Arc4, BENCH_MAX_PENDING, sizeof(Arc4), HEAP_HINT); @@ -6426,6 +6555,8 @@ void bench_chacha(void) int ret, i, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(enc, ChaCha, 1, HEAP_HINT); XMEMSET(enc, 0, sizeof(ChaCha)); @@ -6499,6 +6630,9 @@ void bench_chacha20_poly1305_aead(void) WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(authTag, byte, CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE, HEAP_HINT); + + bench_stats_prepare(); + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(authTag, byte, CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE, HEAP_HINT); XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); @@ -6547,6 +6681,8 @@ void bench_ascon_aead(void) WC_DECLARE_VAR(enc, wc_AsconAEAD128, 1, HEAP_HINT); DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(authTag, byte, ASCON_AEAD128_TAG_SZ, HEAP_HINT); XMEMSET(authTag, 0, ASCON_AEAD128_TAG_SZ); @@ -6608,6 +6744,8 @@ void bench_md5(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_MD5_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Md5, BENCH_MAX_PENDING, sizeof(wc_Md5), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -6724,6 +6862,8 @@ void bench_sha(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha, BENCH_MAX_PENDING, sizeof(wc_Sha), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -6838,6 +6978,8 @@ void bench_sha224(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA224_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha224, BENCH_MAX_PENDING, sizeof(wc_Sha224), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -6948,6 +7090,8 @@ void bench_sha256(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA256_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha256, BENCH_MAX_PENDING, sizeof(wc_Sha256), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7059,6 +7203,8 @@ void bench_sha384(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA384_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha384, BENCH_MAX_PENDING, sizeof(wc_Sha384), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7169,6 +7315,8 @@ void bench_sha512(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA512_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha512, BENCH_MAX_PENDING, sizeof(wc_Sha512), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7279,6 +7427,8 @@ void bench_sha512_224(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA512_224_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha512_224, BENCH_MAX_PENDING, sizeof(wc_Sha512_224), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7390,6 +7540,8 @@ void bench_sha512_256(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA512_256_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha512_256, BENCH_MAX_PENDING, sizeof(wc_Sha512_256), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7504,6 +7656,8 @@ void bench_sha3_224(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_224_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha3, BENCH_MAX_PENDING, sizeof(wc_Sha3), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7614,6 +7768,8 @@ void bench_sha3_256(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_256_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha3, BENCH_MAX_PENDING, sizeof(wc_Sha3), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7724,6 +7880,8 @@ void bench_sha3_384(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_384_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha3, BENCH_MAX_PENDING, sizeof(wc_Sha3), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7834,6 +7992,8 @@ void bench_sha3_512(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_512_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sha3, BENCH_MAX_PENDING, sizeof(wc_Sha3), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -7944,6 +8104,8 @@ void bench_shake128(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_128_BLOCK_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Shake, BENCH_MAX_PENDING, sizeof(wc_Shake), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -8056,6 +8218,8 @@ void bench_shake256(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SHA3_256_BLOCK_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Shake, BENCH_MAX_PENDING, sizeof(wc_Shake), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, @@ -8169,6 +8333,8 @@ void bench_sm3(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SM3_DIGEST_SIZE, HEAP_HINT); + bench_stats_prepare(); + WC_CALLOC_ARRAY(hash, wc_Sm3, BENCH_MAX_PENDING, sizeof(wc_Sm3), HEAP_HINT); WC_ALLOC_ARRAY(digest, byte, BENCH_MAX_PENDING, WC_SM3_DIGEST_SIZE, @@ -8275,6 +8441,8 @@ void bench_ripemd(void) int i, count, ret = 0; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + if (digest_stream) { ret = wc_InitRipeMd(&hash); if (ret != 0) { @@ -8352,6 +8520,8 @@ void bench_blake2b(void) int ret = 0, i, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + if (digest_stream) { ret = wc_InitBlake2b(&b2b, 64); if (ret != 0) { @@ -8425,6 +8595,8 @@ void bench_blake2s(void) int ret = 0, i, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + if (digest_stream) { ret = wc_InitBlake2s(&b2s, 32); if (ret != 0) { @@ -8497,6 +8669,8 @@ void bench_ascon_hash(void) double start; int ret = 0, i, count; + bench_stats_prepare(); + if (digest_stream) { ret = wc_AsconHash256_Init(&ascon); if (ret != 0) { @@ -8579,6 +8753,8 @@ static void bench_cmac_helper(word32 keySz, const char* outMsg, int useDeviceID) #endif (void)useDeviceID; + bench_stats_prepare(); + bench_stats_start(&count, &start); do { #ifdef HAVE_FIPS @@ -8646,6 +8822,8 @@ void bench_scrypt(void) int ret, i, count; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + bench_stats_start(&count, &start); do { for (i = 0; i < scryptCnt; i++) { @@ -8695,6 +8873,8 @@ static void bench_hmac(int useDeviceID, int type, int digestSz, (void)digestSz; + bench_stats_prepare(); + WC_CALLOC_ARRAY(hmac, Hmac, BENCH_MAX_PENDING, sizeof(Hmac), HEAP_HINT); @@ -8930,6 +9110,8 @@ void bench_pbkdf2(void) byte derived[32]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + bench_stats_start(&count, &start); PRIVATE_KEY_UNLOCK(); do { @@ -8963,6 +9145,8 @@ void bench_siphash(void) int i; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + bench_stats_start(&count, &start); do { for (i = 0; i < numBlocks; i++) { @@ -9022,6 +9206,8 @@ void bench_srtpkdf(void) int i; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + bench_stats_start(&count, &start); PRIVATE_KEY_UNLOCK(); do { @@ -9128,6 +9314,8 @@ static void bench_rsaKeyGen_helper(int useDeviceID, word32 keySz) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_CALLOC_ARRAY(genKey, RsaKey, BENCH_MAX_PENDING, sizeof(RsaKey), HEAP_HINT); @@ -9363,6 +9551,8 @@ static void bench_rsa_helper(int useDeviceID, byte* out[BENCH_MAX_PENDING]; #endif + bench_stats_prepare(); + #if !defined(WOLFSSL_RSA_VERIFY_ONLY) || !defined(WOLFSSL_RSA_PUBLIC_ONLY) WC_CALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING, rsaKeySz/8, HEAP_HINT); @@ -9819,6 +10009,8 @@ void bench_dh(int useDeviceID) WC_DECLARE_VAR(priv2, byte, BENCH_DH_PRIV_SIZE, HEAP_HINT); + bench_stats_prepare(); + /* old scan-build misfires -Wmaybe-uninitialized on these. */ XMEMSET(pub, 0, sizeof(pub)); XMEMSET(agree, 0, sizeof(agree)); @@ -10048,6 +10240,8 @@ static void bench_mlkem_keygen(int type, const char* name, int keySize, const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + /* MLKEM Make Key */ bench_stats_start(&count, &start); do { @@ -10105,6 +10299,8 @@ static void bench_mlkem_encap(int type, const char* name, int keySize, word32 ctSz; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_KyberKey_PublicKeySize(key1, &pubLen); if (ret != 0) { return; @@ -10467,6 +10663,8 @@ static void bench_lms_keygen(enum wc_LmsParm parm, byte* pub) const char* str = wc_LmsKey_ParmToStr(parm); DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + #ifndef HAVE_FIPS ret = wc_InitRng_ex(&rng, HEAP_HINT, INVALID_DEVID); #else @@ -10580,6 +10778,8 @@ static void bench_lms_sign_verify(enum wc_LmsParm parm, byte* pub) const char * str = wc_LmsKey_ParmToStr(parm); DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_LmsKey_Init(&key, NULL, INVALID_DEVID); if (ret) { printf("wc_LmsKey_Init failed: %d\n", ret); @@ -10997,6 +11197,8 @@ static void bench_xmss_sign_verify(const char * params) int count = 0; double start = 0.0F; + bench_stats_prepare(); + #ifndef HAVE_FIPS ret = wc_InitRng_ex(&rng, HEAP_HINT, INVALID_DEVID); #else @@ -11508,6 +11710,8 @@ void bench_eccMakeKey(int useDeviceID, int curveId) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING, sizeof(ecc_key), HEAP_HINT); @@ -11605,6 +11809,8 @@ void bench_ecc(int useDeviceID, int curveId) BENCH_MAX_PENDING, MAX_ECC_BYTES, HEAP_HINT); #endif + bench_stats_prepare(); + #if !defined(NO_ASN) && defined(HAVE_ECC_SIGN) /* old scan-build misfires -Wmaybe-uninitialized on these. */ XMEMSET(sig, 0, sizeof(sig)); @@ -11883,6 +12089,8 @@ void bench_eccEncrypt(int curveId) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + #ifdef WOLFSSL_SMALL_STACK userA = (ecc_key *)XMALLOC(sizeof(*userA), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -12032,6 +12240,8 @@ static void bench_sm2_MakeKey(int useDeviceID) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + deviceID = useDeviceID ? devId : INVALID_DEVID; keySize = wc_ecc_get_curve_size_from_id(ECC_SM2P256V1); @@ -12122,6 +12332,8 @@ void bench_sm2(int useDeviceID) WC_DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, MAX_ECC_BYTES, HEAP_HINT); #endif + bench_stats_prepare(); + #ifdef HAVE_ECC_DHE WC_ALLOC_ARRAY(shared, byte, BENCH_MAX_PENDING, MAX_ECC_BYTES, HEAP_HINT); #endif @@ -12368,6 +12580,8 @@ void bench_curve25519KeyGen(int useDeviceID) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + /* Key Gen */ bench_stats_start(&count, &start); do { @@ -12412,6 +12626,8 @@ void bench_curve25519KeyAgree(int useDeviceID) word32 x = 0; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + wc_curve25519_init_ex(&genKey, HEAP_HINT, useDeviceID ? devId : INVALID_DEVID); wc_curve25519_init_ex(&genKey2, HEAP_HINT, @@ -12430,18 +12646,18 @@ void bench_curve25519KeyAgree(int useDeviceID) } #ifdef WOLFSSL_CURVE25519_BLINDING - ret = wc_curve25519_set_rng(&genKey, &gRng); - if (ret != 0) { + ret = wc_curve25519_set_rng(&genKey, &gRng); + if (ret != 0) { wc_curve25519_free(&genKey); wc_curve25519_free(&genKey2); return; - } - ret = wc_curve25519_set_rng(&genKey2, &gRng); - if (ret != 0) { + } + ret = wc_curve25519_set_rng(&genKey2, &gRng); + if (ret != 0) { wc_curve25519_free(&genKey); wc_curve25519_free(&genKey2); return; - } + } #endif /* Shared secret */ @@ -12486,6 +12702,8 @@ void bench_ed25519KeyGen(void) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + /* Key Gen */ bench_stats_start(&count, &start); do { @@ -12526,6 +12744,8 @@ void bench_ed25519KeySign(void) DECLARE_MULTI_VALUE_STATS_VARS() #endif + bench_stats_prepare(); + wc_ed25519_init(&genKey); #ifdef HAVE_ED25519_MAKE_KEY @@ -12608,6 +12828,8 @@ void bench_curve448KeyGen(void) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + /* Key Gen */ bench_stats_start(&count, &start); do { @@ -12644,6 +12866,8 @@ void bench_curve448KeyAgree(void) word32 x = 0; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + wc_curve448_init(&genKey); wc_curve448_init(&genKey2); @@ -12699,6 +12923,8 @@ void bench_ed448KeyGen(void) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + /* Key Gen */ bench_stats_start(&count, &start); do { @@ -12735,6 +12961,8 @@ void bench_ed448KeySign(void) DECLARE_MULTI_VALUE_STATS_VARS() #endif + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, ed448_key, 1, HEAP_HINT); wc_ed448_init(genKey); @@ -12821,6 +13049,8 @@ void bench_eccsiKeyGen(void) int ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); /* Key Gen */ @@ -12865,6 +13095,8 @@ void bench_eccsiPairGen(void) int ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); @@ -12922,6 +13154,8 @@ void bench_eccsiValidate(void) int ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); @@ -12985,6 +13219,8 @@ void bench_eccsi(void) int verified; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); @@ -13073,6 +13309,8 @@ void bench_sakkeKeyGen(void) int ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); /* Key Gen */ @@ -13116,6 +13354,8 @@ void bench_sakkeRskGen(void) int ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); rsk = wc_ecc_new_point(); @@ -13167,6 +13407,8 @@ void bench_sakkeValidate(void) int ret; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); rsk = wc_ecc_new_point(); @@ -13227,6 +13469,8 @@ void bench_sakke(void) word32 iTableLen = 0; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); XMEMCPY(ssv, ssv_init, sizeof ssv); @@ -13457,6 +13701,8 @@ void bench_falconKeySign(byte level) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_falcon_init(&key); if (ret != 0) { printf("wc_falcon_init failed %d\n", ret); @@ -14653,6 +14899,8 @@ void bench_dilithiumKeySign(byte level) DECLARE_MULTI_VALUE_STATS_VARS() byte params = 0; + bench_stats_prepare(); + #ifdef WOLFSSL_SMALL_STACK key = (dilithium_key *)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -14918,6 +15166,8 @@ void bench_sphincsKeySign(byte level, byte optim) const char**desc = bench_desc_words[lng_index]; DECLARE_MULTI_VALUE_STATS_VARS() + bench_stats_prepare(); + ret = wc_sphincs_init(&key); if (ret != 0) { printf("wc_sphincs_init failed %d\n", ret);