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.
This commit is contained in:
Andrew Hutchings
2025-10-17 19:27:59 +01:00
parent 036c66c777
commit 65bb68b6c0

View File

@@ -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);