From cd0301fc666a06323c35fccf67914bcff5d06dde Mon Sep 17 00:00:00 2001 From: David Garske Date: Thu, 22 Feb 2024 14:56:51 -0800 Subject: [PATCH 1/3] Fixes for benchmark with small stack (RSA was being skipped). Added Thumb2 benchmarks for STM32H753. --- IDE/STM32Cube/STM32_Benchmarks.md | 75 ++++++++++++++ wolfcrypt/benchmark/benchmark.c | 159 ++++++++++++++++++++++++------ 2 files changed, 203 insertions(+), 31 deletions(-) diff --git a/IDE/STM32Cube/STM32_Benchmarks.md b/IDE/STM32Cube/STM32_Benchmarks.md index 129cbdd47..674ddabab 100644 --- a/IDE/STM32Cube/STM32_Benchmarks.md +++ b/IDE/STM32Cube/STM32_Benchmarks.md @@ -59,6 +59,81 @@ Benchmark complete Benchmark Test: Return code 0 ``` +### STM32H753ZI (-O2, Thumb2 ARM ASM, SP-ASM Cortex M small) + +Enable CPU I-Cache and D-Cache by calling: + +```c +SCB_EnableICache(); +SCB_EnableDCache(); +``` + +Build options for ARM ASM: + +```c +#define WOLFSSL_ARMASM +#define WOLFSSL_ARMASM_INLINE +#define WOLFSSL_ARMASM_NO_HW_CRYPTO +#define WOLFSSL_ARMASM_NO_NEON +#define WOLFSSL_ARM_ARCH 7 +``` + +``` +------------------------------------------------------------------------------ + wolfSSL version 5.6.6 +------------------------------------------------------------------------------ +wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) +RNG 6 MiB took 1.000 seconds, 6.079 MiB/s +AES-128-CBC-enc 17 MiB took 1.000 seconds, 17.261 MiB/s +AES-128-CBC-dec 17 MiB took 1.000 seconds, 16.748 MiB/s +AES-192-CBC-enc 15 MiB took 1.000 seconds, 14.575 MiB/s +AES-192-CBC-dec 14 MiB took 1.000 seconds, 14.209 MiB/s +AES-256-CBC-enc 13 MiB took 1.000 seconds, 12.622 MiB/s +AES-256-CBC-dec 12 MiB took 1.000 seconds, 12.378 MiB/s +AES-128-GCM-enc 8 MiB took 1.000 seconds, 8.374 MiB/s +AES-128-GCM-dec 8 MiB took 1.000 seconds, 8.374 MiB/s +AES-192-GCM-enc 8 MiB took 1.000 seconds, 7.690 MiB/s +AES-192-GCM-dec 8 MiB took 1.000 seconds, 7.690 MiB/s +AES-256-GCM-enc 7 MiB took 1.000 seconds, 7.129 MiB/s +AES-256-GCM-dec 7 MiB took 1.000 seconds, 7.104 MiB/s +AES-128-GCM-enc-no_AAD 8 MiB took 1.000 seconds, 8.472 MiB/s +AES-128-GCM-dec-no_AAD 8 MiB took 1.000 seconds, 8.472 MiB/s +AES-192-GCM-enc-no_AAD 8 MiB took 1.000 seconds, 7.764 MiB/s +AES-192-GCM-dec-no_AAD 8 MiB took 1.000 seconds, 7.715 MiB/s +AES-256-GCM-enc-no_AAD 7 MiB took 1.000 seconds, 7.153 MiB/s +AES-256-GCM-dec-no_AAD 7 MiB took 1.000 seconds, 7.153 MiB/s +GMAC Table 4-bit 17 MiB took 1.000 seconds, 16.617 MiB/s +CHACHA 29 MiB took 1.000 seconds, 28.662 MiB/s +CHA-POLY 19 MiB took 1.000 seconds, 18.848 MiB/s +POLY1305 90 MiB took 1.000 seconds, 89.771 MiB/s +SHA-224 18 MiB took 1.000 seconds, 18.042 MiB/s +SHA-256 18 MiB took 1.000 seconds, 18.042 MiB/s +SHA-384 8 MiB took 1.000 seconds, 7.544 MiB/s +SHA-512 8 MiB took 1.000 seconds, 7.568 MiB/s +SHA-512/224 8 MiB took 1.000 seconds, 7.544 MiB/s +SHA-512/256 8 MiB took 1.000 seconds, 7.520 MiB/s +HMAC-SHA224 18 MiB took 1.000 seconds, 17.896 MiB/s +HMAC-SHA256 18 MiB took 1.000 seconds, 17.896 MiB/s +HMAC-SHA384 7 MiB took 1.000 seconds, 7.373 MiB/s +HMAC-SHA512 7 MiB took 1.000 seconds, 7.397 MiB/s +RSA 2048 public 508 ops took 1.000 sec, avg 1.969 ms, 508.000 ops/sec +RSA 2048 private 14 ops took 1.020 sec, avg 72.857 ms, 13.725 ops/sec +DH 2048 key gen 30 ops took 1.012 sec, avg 33.733 ms, 29.644 ops/sec +DH 2048 agree 30 ops took 1.012 sec, avg 33.733 ms, 29.644 ops/sec +ECC [ SECP256R1] 256 key gen 982 ops took 1.000 sec, avg 1.018 ms, 982.000 ops/sec +ECDHE [ SECP256R1] 256 agree 456 ops took 1.000 sec, avg 2.193 ms, 456.000 ops/sec +ECDSA [ SECP256R1] 256 sign 520 ops took 1.000 sec, avg 1.923 ms, 520.000 ops/sec +ECDSA [ SECP256R1] 256 verify 288 ops took 1.004 sec, avg 3.486 ms, 286.853 ops/sec +CURVE 25519 key gen 1112 ops took 1.000 sec, avg 0.899 ms, 1112.000 ops/sec +CURVE 25519 agree 1144 ops took 1.000 sec, avg 0.874 ms, 1144.000 ops/sec +ED 25519 key gen 2358 ops took 1.000 sec, avg 0.424 ms, 2358.000 ops/sec +ED 25519 sign 1716 ops took 1.000 sec, avg 0.583 ms, 1716.000 ops/sec +ED 25519 verify 862 ops took 1.000 sec, avg 1.160 ms, 862.000 ops/sec +Benchmark complete +Benchmark Test: Return code 0 +``` + + ### STM32H753ZI (No HW Crypto, -Os, FastMath) ``` diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 851e284ad..eb100dc77 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -4251,6 +4251,7 @@ static void bench_aesgcm_internal(int useDeviceID, 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, sizeof(Aes), HEAP_HINT); #ifdef HAVE_AES_DECRYPT @@ -4258,14 +4259,19 @@ static void bench_aesgcm_internal(int useDeviceID, sizeof(Aes), HEAP_HINT); #endif -#ifdef WOLFSSL_ASYNC_CRYPT - if (bench_additional) +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (bench_additional == NULL || bench_tag == NULL || enc == NULL + #ifdef HAVE_AES_DECRYPT + || dec == NULL + #endif + ) { + ret = MEMORY_E; + goto exit; + } #endif - XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); -#ifdef WOLFSSL_ASYNC_CRYPT - if (bench_tag) -#endif - XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); + + XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); + XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); /* init keys */ for (i = 0; i < BENCH_MAX_PENDING; i++) { @@ -4427,14 +4433,19 @@ static void bench_aesgcm_stream_internal(int useDeviceID, sizeof(Aes), HEAP_HINT); #endif -#ifdef WOLFSSL_ASYNC_CRYPT - if (bench_additional) +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (bench_additional == NULL || bench_tag == NULL || enc == NULL + #ifdef HAVE_AES_DECRYPT + || dec == NULL + #endif + ) { + ret = MEMORY_E; + goto exit; + } #endif - XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); -#ifdef WOLFSSL_ASYNC_CRYPT - if (bench_tag) -#endif - XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); + + XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); + XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); /* init keys */ for (i = 0; i < BENCH_MAX_PENDING; i++) { @@ -4992,6 +5003,13 @@ void bench_aesxts(void) WC_ALLOC_VAR(aes, XtsAes, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (aes == NULL){ + ret = MEMORY_E; + goto exit; + } +#endif + ret = wc_AesXtsSetKey(aes, k1, sizeof(k1), AES_ENCRYPTION, HEAP_HINT, devId); if (ret != 0) { @@ -5137,6 +5155,13 @@ void bench_aesccm(int useDeviceID) WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (bench_additional == NULL || bench_tag == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); @@ -5476,6 +5501,9 @@ 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); + + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); + WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (bench_additional == NULL || bench_tag == NULL) { printf("bench_aesgcm_internal malloc failed\n"); @@ -8457,34 +8485,35 @@ static void bench_rsa_helper(int useDeviceID, WC_DECLARE_HEAP_ARRAY(enc, byte, BENCH_MAX_PENDING, rsaKeySz, HEAP_HINT); - #if ( !defined(WOLFSSL_RSA_VERIFY_INLINE) \ - && !defined(WOLFSSL_RSA_PUBLIC_ONLY) ) - WC_DECLARE_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING, - rsaKeySz, HEAP_HINT); - #else - byte* out[BENCH_MAX_PENDING]; - #endif +#if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \ + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) + WC_DECLARE_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING, + rsaKeySz, HEAP_HINT); +#else + byte* out[BENCH_MAX_PENDING]; +#endif XMEMSET(out, 0, sizeof(out)); WC_ALLOC_HEAP_ARRAY(enc, byte, BENCH_MAX_PENDING, rsaKeySz, HEAP_HINT); - #if ( !defined(WOLFSSL_RSA_VERIFY_INLINE) \ - && !defined(WOLFSSL_RSA_PUBLIC_ONLY) ) - WC_ALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING, - rsaKeySz, HEAP_HINT); - if (out[0] == NULL) { - ret = MEMORY_E; - goto exit; - } - #endif +#if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \ + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) + WC_ALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING, + rsaKeySz, HEAP_HINT); + if (out[0] == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif if (enc[0] == NULL) { ret = MEMORY_E; goto exit; } #ifndef WOLFSSL_RSA_VERIFY_ONLY + WC_ALLOC_VAR(message, byte, TEST_STRING_SZ, HEAP_HINT); #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (message == NULL) { ret = MEMORY_E; @@ -8955,7 +8984,12 @@ void bench_dh(int useDeviceID) WC_ALLOC_VAR(pub2, byte, BENCH_DH_KEY_SIZE, HEAP_HINT); WC_ALLOC_VAR(priv2, byte, BENCH_DH_PRIV_SIZE, HEAP_HINT); - +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (pub2 == NULL || priv2 == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif (void)tmp; @@ -11491,6 +11525,13 @@ void bench_ed448KeySign(void) WC_ALLOC_VAR(genKey, ed448_key, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + wc_ed448_init(genKey); ret = wc_ed448_make_key(&gRng, ED448_KEY_SIZE, genKey); @@ -11577,6 +11618,13 @@ void bench_eccsiKeyGen(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + /* Key Gen */ bench_stats_start(&count, &start); do { @@ -11622,6 +11670,13 @@ void bench_eccsiPairGen(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL || ssk == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + (void)mp_init(ssk); pvt = wc_ecc_new_point(); wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); @@ -11679,6 +11734,13 @@ void bench_eccsiValidate(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL || ssk == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + (void)mp_init(ssk); pvt = wc_ecc_new_point(); wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); @@ -11742,6 +11804,13 @@ void bench_eccsi(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL || ssk == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + (void)mp_init(ssk); pvt = wc_ecc_new_point(); (void)wc_InitEccsiKey(genKey, NULL, INVALID_DEVID); @@ -11829,6 +11898,13 @@ void bench_sakkeKeyGen(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + /* Key Gen */ bench_stats_start(&count, &start); do { @@ -11872,6 +11948,13 @@ void bench_sakkeRskGen(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + rsk = wc_ecc_new_point(); wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); (void)wc_MakeSakkeKey(genKey, &gRng); @@ -11923,6 +12006,13 @@ void bench_sakkeValidate(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + rsk = wc_ecc_new_point(); (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); (void)wc_MakeSakkeKey(genKey, &gRng); @@ -11983,6 +12073,13 @@ void bench_sakke(void) WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (genKey == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif + XMEMCPY(ssv, ssv_init, sizeof ssv); rsk = wc_ecc_new_point(); From 4055b0d832fbdcc9b509ef576f27e1bb37a04a5e Mon Sep 17 00:00:00 2001 From: David Garske Date: Thu, 22 Feb 2024 15:59:38 -0800 Subject: [PATCH 2/3] Fix for some variable null checks that are not needed. --- wolfcrypt/benchmark/benchmark.c | 47 +++++++++------------------------ 1 file changed, 13 insertions(+), 34 deletions(-) diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index eb100dc77..2021d85fb 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -4251,6 +4251,12 @@ static void bench_aesgcm_internal(int useDeviceID, WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (bench_additional == NULL || bench_tag == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, sizeof(Aes), HEAP_HINT); @@ -4259,17 +4265,6 @@ static void bench_aesgcm_internal(int useDeviceID, sizeof(Aes), HEAP_HINT); #endif -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL || enc == NULL - #ifdef HAVE_AES_DECRYPT - || dec == NULL - #endif - ) { - ret = MEMORY_E; - goto exit; - } -#endif - XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); @@ -4425,6 +4420,12 @@ static void bench_aesgcm_stream_internal(int useDeviceID, WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); +#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC + if (bench_additional == NULL || bench_tag == NULL) { + ret = MEMORY_E; + goto exit; + } +#endif WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, sizeof(Aes), HEAP_HINT); @@ -4433,17 +4434,6 @@ static void bench_aesgcm_stream_internal(int useDeviceID, sizeof(Aes), HEAP_HINT); #endif -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL || enc == NULL - #ifdef HAVE_AES_DECRYPT - || dec == NULL - #endif - ) { - ret = MEMORY_E; - goto exit; - } -#endif - XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); @@ -5002,7 +4992,6 @@ void bench_aesxts(void) }; WC_ALLOC_VAR(aes, XtsAes, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (aes == NULL){ ret = MEMORY_E; @@ -5154,7 +5143,6 @@ void bench_aesccm(int useDeviceID) WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (bench_additional == NULL || bench_tag == NULL) { ret = MEMORY_E; @@ -8499,7 +8487,7 @@ static void bench_rsa_helper(int useDeviceID, rsaKeySz, HEAP_HINT); #if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \ - !defined(WOLFSSL_RSA_PUBLIC_ONLY)) + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) WC_ALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING, rsaKeySz, HEAP_HINT); if (out[0] == NULL) { @@ -11524,7 +11512,6 @@ void bench_ed448KeySign(void) #endif WC_ALLOC_VAR(genKey, ed448_key, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL) { ret = MEMORY_E; @@ -11617,7 +11604,6 @@ void bench_eccsiKeyGen(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL) { ret = MEMORY_E; @@ -11669,7 +11655,6 @@ void bench_eccsiPairGen(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL || ssk == NULL) { ret = MEMORY_E; @@ -11733,7 +11718,6 @@ void bench_eccsiValidate(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL || ssk == NULL) { ret = MEMORY_E; @@ -11803,7 +11787,6 @@ void bench_eccsi(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL || ssk == NULL) { ret = MEMORY_E; @@ -11897,7 +11880,6 @@ void bench_sakkeKeyGen(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL) { ret = MEMORY_E; @@ -11947,7 +11929,6 @@ void bench_sakkeRskGen(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL) { ret = MEMORY_E; @@ -12005,7 +11986,6 @@ void bench_sakkeValidate(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL) { ret = MEMORY_E; @@ -12072,7 +12052,6 @@ void bench_sakke(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC if (genKey == NULL) { ret = MEMORY_E; From 06469a43bcff27f19105bb2ed0ecba02dd8b700f Mon Sep 17 00:00:00 2001 From: Daniel Pouzzner Date: Fri, 23 Feb 2024 01:07:26 -0600 Subject: [PATCH 3/3] wolfcrypt/benchmark/benchmark.c: * remove redundant nullness checks covered by WC_ALLOC_VAR() via WC_ALLOC_DO_ON_FAILURE(); * add "exit:" logic to bench_sm4_gcm(); * add missing WC_ALLOC_VAR() in bench_sm4_ccm(); * fix early return in bench_ed448KeySign(). --- wolfcrypt/benchmark/benchmark.c | 161 +++----------------------------- 1 file changed, 11 insertions(+), 150 deletions(-) diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 2021d85fb..e8ebccfe9 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -4251,13 +4251,6 @@ static void bench_aesgcm_internal(int useDeviceID, WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif - WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, sizeof(Aes), HEAP_HINT); #ifdef HAVE_AES_DECRYPT @@ -4420,12 +4413,6 @@ static void bench_aesgcm_stream_internal(int useDeviceID, WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING, sizeof(Aes), HEAP_HINT); @@ -4992,12 +4979,6 @@ void bench_aesxts(void) }; WC_ALLOC_VAR(aes, XtsAes, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (aes == NULL){ - ret = MEMORY_E; - goto exit; - } -#endif ret = wc_AesXtsSetKey(aes, k1, sizeof(k1), AES_ENCRYPTION, HEAP_HINT, devId); @@ -5143,12 +5124,6 @@ void bench_aesccm(int useDeviceID) WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); @@ -5492,17 +5467,11 @@ void bench_sm4_gcm(void) WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL) { - printf("bench_aesgcm_internal malloc failed\n"); - return; - } -#endif ret = wc_Sm4GcmSetKey(&sm4, bench_key, SM4_KEY_SIZE); if (ret != 0) { printf("Sm4GcmSetKey failed, ret = %d\n", ret); - return; + goto exit; } bench_stats_start(&count, &start); @@ -5513,7 +5482,7 @@ void bench_sm4_gcm(void) bench_additional, aesAuthAddSz); if (ret < 0) { printf("Sm4GcmEncrypt failed: %d\n", ret); - return; + goto exit; } RECORD_MULTI_VALUE_STATS(); } @@ -5539,7 +5508,7 @@ void bench_sm4_gcm(void) bench_additional, aesAuthAddSz); if (ret < 0) { printf("Sm4GcmDecrypt failed: %d\n", ret); - return; + goto exit; } RECORD_MULTI_VALUE_STATS(); } @@ -5554,6 +5523,11 @@ void bench_sm4_gcm(void) #ifdef MULTI_VALUE_STATISTICS bench_multi_value_stats(max, min, sum, squareSum, runs); #endif + +exit: + + WC_FREE_VAR(bench_additional); + WC_FREE_VAR(bench_tag); } #endif @@ -5568,12 +5542,8 @@ void bench_sm4_ccm() WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (bench_additional == NULL || bench_tag == NULL) { - printf("bench_aesccm malloc failed\n"); - goto exit; - } -#endif + WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT); + WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT); XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ); XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ); @@ -8502,12 +8472,6 @@ static void bench_rsa_helper(int useDeviceID, #ifndef WOLFSSL_RSA_VERIFY_ONLY WC_ALLOC_VAR(message, byte, TEST_STRING_SZ, HEAP_HINT); - #ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (message == NULL) { - ret = MEMORY_E; - goto exit; - } - #endif XMEMCPY(message, messageStr, len); #endif @@ -8731,12 +8695,6 @@ void bench_rsa(int useDeviceID) WC_CALLOC_ARRAY(rsaKey, RsaKey, BENCH_MAX_PENDING, sizeof(RsaKey), HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (rsaKey[0] == NULL) { - printf("bench_rsa malloc failed\n"); - return; - } -#endif #ifdef USE_CERT_BUFFERS_1024 tmp = rsa_key_der_1024; @@ -8839,12 +8797,6 @@ void bench_rsa_key(int useDeviceID, word32 rsaKeySz) WC_CALLOC_ARRAY(rsaKey, RsaKey, BENCH_MAX_PENDING, sizeof(RsaKey), HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (rsaKey[0] == NULL) { - printf("bench_rsa_key malloc failed\n"); - return; - } -#endif /* init keys */ do { @@ -8972,12 +8924,6 @@ void bench_dh(int useDeviceID) WC_ALLOC_VAR(pub2, byte, BENCH_DH_KEY_SIZE, HEAP_HINT); WC_ALLOC_VAR(priv2, byte, BENCH_DH_PRIV_SIZE, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (pub2 == NULL || priv2 == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif (void)tmp; @@ -10271,14 +10217,6 @@ void bench_eccMakeKey(int useDeviceID, int curveId) WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING, sizeof(ecc_key), HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey[0] == NULL) { - printf("bench_eccMakeKey malloc failed\n"); - return; - } - for (i = 0; i < BENCH_MAX_PENDING; ++i) - XMEMSET(genKey[i], 0, sizeof(ecc_key)); -#endif deviceID = useDeviceID ? devId : INVALID_DEVID; keySize = wc_ecc_get_curve_size_from_id(curveId); @@ -10381,23 +10319,10 @@ void bench_ecc(int useDeviceID, int curveId) WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING, sizeof(ecc_key), HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey[0] == NULL) { - printf("bench_eccMakeKey malloc failed\n"); - return; - } -#endif #ifdef HAVE_ECC_DHE WC_CALLOC_ARRAY(genKey2, ecc_key, BENCH_MAX_PENDING, sizeof(ecc_key), HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey2[0] == NULL) { - XFREE(genKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - printf("bench_eccMakeKey malloc failed\n"); - return; - } -#endif WC_ALLOC_ARRAY(shared, byte, BENCH_MAX_PENDING, MAX_ECC_BYTES, HEAP_HINT); #endif @@ -10818,15 +10743,6 @@ static void bench_sm2_MakeKey(int useDeviceID) WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING, sizeof(ecc_key), HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey[0] == NULL) { - printf("bench_sm2_MakeKey malloc failed\n"); - return; - } - for (i = 0; i < BENCH_MAX_PENDING; ++i) - XMEMSET(genKey[i], 0, sizeof(ecc_key)); -#endif - /* ECC Make Key */ bench_stats_start(&count, &start); do { @@ -11496,7 +11412,6 @@ void bench_ed448KeyGen(void) #endif } - void bench_ed448KeySign(void) { int ret; @@ -11512,19 +11427,13 @@ void bench_ed448KeySign(void) #endif WC_ALLOC_VAR(genKey, ed448_key, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif wc_ed448_init(genKey); ret = wc_ed448_make_key(&gRng, ED448_KEY_SIZE, genKey); if (ret != 0) { printf("ed448_make_key failed\n"); - return; + goto exit; } #ifdef HAVE_ED448_SIGN @@ -11604,12 +11513,6 @@ void bench_eccsiKeyGen(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif /* Key Gen */ bench_stats_start(&count, &start); @@ -11655,12 +11558,6 @@ void bench_eccsiPairGen(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL || ssk == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif (void)mp_init(ssk); pvt = wc_ecc_new_point(); @@ -11718,12 +11615,6 @@ void bench_eccsiValidate(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL || ssk == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif (void)mp_init(ssk); pvt = wc_ecc_new_point(); @@ -11787,12 +11678,6 @@ void bench_eccsi(void) WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT); WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL || ssk == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif (void)mp_init(ssk); pvt = wc_ecc_new_point(); @@ -11880,12 +11765,6 @@ void bench_sakkeKeyGen(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif /* Key Gen */ bench_stats_start(&count, &start); @@ -11929,12 +11808,6 @@ void bench_sakkeRskGen(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif rsk = wc_ecc_new_point(); wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); @@ -11986,12 +11859,6 @@ void bench_sakkeValidate(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif rsk = wc_ecc_new_point(); (void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); @@ -12052,12 +11919,6 @@ void bench_sakke(void) DECLARE_MULTI_VALUE_STATS_VARS() WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT); -#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC - if (genKey == NULL) { - ret = MEMORY_E; - goto exit; - } -#endif XMEMCPY(ssv, ssv_init, sizeof ssv);