Skip to content

Commit aa444c1

Browse files
Merge pull request #7268 from dgarske/bench_fixes
Fixes for benchmark with small stack (RSA was being skipped)
2 parents 8a68e6a + 06469a4 commit aa444c1

2 files changed

Lines changed: 110 additions & 98 deletions

File tree

IDE/STM32Cube/STM32_Benchmarks.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,81 @@ Benchmark complete
5959
Benchmark Test: Return code 0
6060
```
6161

62+
### STM32H753ZI (-O2, Thumb2 ARM ASM, SP-ASM Cortex M small)
63+
64+
Enable CPU I-Cache and D-Cache by calling:
65+
66+
```c
67+
SCB_EnableICache();
68+
SCB_EnableDCache();
69+
```
70+
71+
Build options for ARM ASM:
72+
73+
```c
74+
#define WOLFSSL_ARMASM
75+
#define WOLFSSL_ARMASM_INLINE
76+
#define WOLFSSL_ARMASM_NO_HW_CRYPTO
77+
#define WOLFSSL_ARMASM_NO_NEON
78+
#define WOLFSSL_ARM_ARCH 7
79+
```
80+
81+
```
82+
------------------------------------------------------------------------------
83+
wolfSSL version 5.6.6
84+
------------------------------------------------------------------------------
85+
wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each)
86+
RNG 6 MiB took 1.000 seconds, 6.079 MiB/s
87+
AES-128-CBC-enc 17 MiB took 1.000 seconds, 17.261 MiB/s
88+
AES-128-CBC-dec 17 MiB took 1.000 seconds, 16.748 MiB/s
89+
AES-192-CBC-enc 15 MiB took 1.000 seconds, 14.575 MiB/s
90+
AES-192-CBC-dec 14 MiB took 1.000 seconds, 14.209 MiB/s
91+
AES-256-CBC-enc 13 MiB took 1.000 seconds, 12.622 MiB/s
92+
AES-256-CBC-dec 12 MiB took 1.000 seconds, 12.378 MiB/s
93+
AES-128-GCM-enc 8 MiB took 1.000 seconds, 8.374 MiB/s
94+
AES-128-GCM-dec 8 MiB took 1.000 seconds, 8.374 MiB/s
95+
AES-192-GCM-enc 8 MiB took 1.000 seconds, 7.690 MiB/s
96+
AES-192-GCM-dec 8 MiB took 1.000 seconds, 7.690 MiB/s
97+
AES-256-GCM-enc 7 MiB took 1.000 seconds, 7.129 MiB/s
98+
AES-256-GCM-dec 7 MiB took 1.000 seconds, 7.104 MiB/s
99+
AES-128-GCM-enc-no_AAD 8 MiB took 1.000 seconds, 8.472 MiB/s
100+
AES-128-GCM-dec-no_AAD 8 MiB took 1.000 seconds, 8.472 MiB/s
101+
AES-192-GCM-enc-no_AAD 8 MiB took 1.000 seconds, 7.764 MiB/s
102+
AES-192-GCM-dec-no_AAD 8 MiB took 1.000 seconds, 7.715 MiB/s
103+
AES-256-GCM-enc-no_AAD 7 MiB took 1.000 seconds, 7.153 MiB/s
104+
AES-256-GCM-dec-no_AAD 7 MiB took 1.000 seconds, 7.153 MiB/s
105+
GMAC Table 4-bit 17 MiB took 1.000 seconds, 16.617 MiB/s
106+
CHACHA 29 MiB took 1.000 seconds, 28.662 MiB/s
107+
CHA-POLY 19 MiB took 1.000 seconds, 18.848 MiB/s
108+
POLY1305 90 MiB took 1.000 seconds, 89.771 MiB/s
109+
SHA-224 18 MiB took 1.000 seconds, 18.042 MiB/s
110+
SHA-256 18 MiB took 1.000 seconds, 18.042 MiB/s
111+
SHA-384 8 MiB took 1.000 seconds, 7.544 MiB/s
112+
SHA-512 8 MiB took 1.000 seconds, 7.568 MiB/s
113+
SHA-512/224 8 MiB took 1.000 seconds, 7.544 MiB/s
114+
SHA-512/256 8 MiB took 1.000 seconds, 7.520 MiB/s
115+
HMAC-SHA224 18 MiB took 1.000 seconds, 17.896 MiB/s
116+
HMAC-SHA256 18 MiB took 1.000 seconds, 17.896 MiB/s
117+
HMAC-SHA384 7 MiB took 1.000 seconds, 7.373 MiB/s
118+
HMAC-SHA512 7 MiB took 1.000 seconds, 7.397 MiB/s
119+
RSA 2048 public 508 ops took 1.000 sec, avg 1.969 ms, 508.000 ops/sec
120+
RSA 2048 private 14 ops took 1.020 sec, avg 72.857 ms, 13.725 ops/sec
121+
DH 2048 key gen 30 ops took 1.012 sec, avg 33.733 ms, 29.644 ops/sec
122+
DH 2048 agree 30 ops took 1.012 sec, avg 33.733 ms, 29.644 ops/sec
123+
ECC [ SECP256R1] 256 key gen 982 ops took 1.000 sec, avg 1.018 ms, 982.000 ops/sec
124+
ECDHE [ SECP256R1] 256 agree 456 ops took 1.000 sec, avg 2.193 ms, 456.000 ops/sec
125+
ECDSA [ SECP256R1] 256 sign 520 ops took 1.000 sec, avg 1.923 ms, 520.000 ops/sec
126+
ECDSA [ SECP256R1] 256 verify 288 ops took 1.004 sec, avg 3.486 ms, 286.853 ops/sec
127+
CURVE 25519 key gen 1112 ops took 1.000 sec, avg 0.899 ms, 1112.000 ops/sec
128+
CURVE 25519 agree 1144 ops took 1.000 sec, avg 0.874 ms, 1144.000 ops/sec
129+
ED 25519 key gen 2358 ops took 1.000 sec, avg 0.424 ms, 2358.000 ops/sec
130+
ED 25519 sign 1716 ops took 1.000 sec, avg 0.583 ms, 1716.000 ops/sec
131+
ED 25519 verify 862 ops took 1.000 sec, avg 1.160 ms, 862.000 ops/sec
132+
Benchmark complete
133+
Benchmark Test: Return code 0
134+
```
135+
136+
62137
### STM32H753ZI (No HW Crypto, -Os, FastMath)
63138
64139
```

wolfcrypt/benchmark/benchmark.c

Lines changed: 35 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -4258,14 +4258,8 @@ static void bench_aesgcm_internal(int useDeviceID,
42584258
sizeof(Aes), HEAP_HINT);
42594259
#endif
42604260

4261-
#ifdef WOLFSSL_ASYNC_CRYPT
4262-
if (bench_additional)
4263-
#endif
4264-
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
4265-
#ifdef WOLFSSL_ASYNC_CRYPT
4266-
if (bench_tag)
4267-
#endif
4268-
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
4261+
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
4262+
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
42694263

42704264
/* init keys */
42714265
for (i = 0; i < BENCH_MAX_PENDING; i++) {
@@ -4427,14 +4421,8 @@ static void bench_aesgcm_stream_internal(int useDeviceID,
44274421
sizeof(Aes), HEAP_HINT);
44284422
#endif
44294423

4430-
#ifdef WOLFSSL_ASYNC_CRYPT
4431-
if (bench_additional)
4432-
#endif
4433-
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
4434-
#ifdef WOLFSSL_ASYNC_CRYPT
4435-
if (bench_tag)
4436-
#endif
4437-
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
4424+
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
4425+
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
44384426

44394427
/* init keys */
44404428
for (i = 0; i < BENCH_MAX_PENDING; i++) {
@@ -5476,17 +5464,14 @@ void bench_sm4_gcm(void)
54765464

54775465
WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
54785466
WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
5479-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
5480-
if (bench_additional == NULL || bench_tag == NULL) {
5481-
printf("bench_aesgcm_internal malloc failed\n");
5482-
return;
5483-
}
5484-
#endif
5467+
5468+
WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
5469+
WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
54855470

54865471
ret = wc_Sm4GcmSetKey(&sm4, bench_key, SM4_KEY_SIZE);
54875472
if (ret != 0) {
54885473
printf("Sm4GcmSetKey failed, ret = %d\n", ret);
5489-
return;
5474+
goto exit;
54905475
}
54915476

54925477
bench_stats_start(&count, &start);
@@ -5497,7 +5482,7 @@ void bench_sm4_gcm(void)
54975482
bench_additional, aesAuthAddSz);
54985483
if (ret < 0) {
54995484
printf("Sm4GcmEncrypt failed: %d\n", ret);
5500-
return;
5485+
goto exit;
55015486
}
55025487
RECORD_MULTI_VALUE_STATS();
55035488
}
@@ -5523,7 +5508,7 @@ void bench_sm4_gcm(void)
55235508
bench_additional, aesAuthAddSz);
55245509
if (ret < 0) {
55255510
printf("Sm4GcmDecrypt failed: %d\n", ret);
5526-
return;
5511+
goto exit;
55275512
}
55285513
RECORD_MULTI_VALUE_STATS();
55295514
}
@@ -5538,6 +5523,11 @@ void bench_sm4_gcm(void)
55385523
#ifdef MULTI_VALUE_STATISTICS
55395524
bench_multi_value_stats(max, min, sum, squareSum, runs);
55405525
#endif
5526+
5527+
exit:
5528+
5529+
WC_FREE_VAR(bench_additional);
5530+
WC_FREE_VAR(bench_tag);
55415531
}
55425532
#endif
55435533

@@ -5552,12 +5542,8 @@ void bench_sm4_ccm()
55525542
WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
55535543
WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
55545544

5555-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
5556-
if (bench_additional == NULL || bench_tag == NULL) {
5557-
printf("bench_aesccm malloc failed\n");
5558-
goto exit;
5559-
}
5560-
#endif
5545+
WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
5546+
WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
55615547

55625548
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
55635549
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
@@ -8457,40 +8443,35 @@ static void bench_rsa_helper(int useDeviceID,
84578443
WC_DECLARE_HEAP_ARRAY(enc, byte, BENCH_MAX_PENDING,
84588444
rsaKeySz, HEAP_HINT);
84598445

8460-
#if ( !defined(WOLFSSL_RSA_VERIFY_INLINE) \
8461-
&& !defined(WOLFSSL_RSA_PUBLIC_ONLY) )
8462-
WC_DECLARE_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING,
8463-
rsaKeySz, HEAP_HINT);
8464-
#else
8465-
byte* out[BENCH_MAX_PENDING];
8466-
#endif
8446+
#if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \
8447+
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
8448+
WC_DECLARE_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING,
8449+
rsaKeySz, HEAP_HINT);
8450+
#else
8451+
byte* out[BENCH_MAX_PENDING];
8452+
#endif
84678453

84688454
XMEMSET(out, 0, sizeof(out));
84698455

84708456
WC_ALLOC_HEAP_ARRAY(enc, byte, BENCH_MAX_PENDING,
84718457
rsaKeySz, HEAP_HINT);
84728458

8473-
#if ( !defined(WOLFSSL_RSA_VERIFY_INLINE) \
8474-
&& !defined(WOLFSSL_RSA_PUBLIC_ONLY) )
8475-
WC_ALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING,
8476-
rsaKeySz, HEAP_HINT);
8477-
if (out[0] == NULL) {
8478-
ret = MEMORY_E;
8479-
goto exit;
8480-
}
8481-
#endif
8482-
if (enc[0] == NULL) {
8459+
#if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \
8460+
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
8461+
WC_ALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING,
8462+
rsaKeySz, HEAP_HINT);
8463+
if (out[0] == NULL) {
84838464
ret = MEMORY_E;
84848465
goto exit;
84858466
}
8486-
8487-
#ifndef WOLFSSL_RSA_VERIFY_ONLY
8488-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
8489-
if (message == NULL) {
8467+
#endif
8468+
if (enc[0] == NULL) {
84908469
ret = MEMORY_E;
84918470
goto exit;
84928471
}
8493-
#endif
8472+
8473+
#ifndef WOLFSSL_RSA_VERIFY_ONLY
8474+
WC_ALLOC_VAR(message, byte, TEST_STRING_SZ, HEAP_HINT);
84948475
XMEMCPY(message, messageStr, len);
84958476
#endif
84968477

@@ -8714,12 +8695,6 @@ void bench_rsa(int useDeviceID)
87148695

87158696
WC_CALLOC_ARRAY(rsaKey, RsaKey, BENCH_MAX_PENDING,
87168697
sizeof(RsaKey), HEAP_HINT);
8717-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
8718-
if (rsaKey[0] == NULL) {
8719-
printf("bench_rsa malloc failed\n");
8720-
return;
8721-
}
8722-
#endif
87238698

87248699
#ifdef USE_CERT_BUFFERS_1024
87258700
tmp = rsa_key_der_1024;
@@ -8822,12 +8797,6 @@ void bench_rsa_key(int useDeviceID, word32 rsaKeySz)
88228797

88238798
WC_CALLOC_ARRAY(rsaKey, RsaKey, BENCH_MAX_PENDING,
88248799
sizeof(RsaKey), HEAP_HINT);
8825-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
8826-
if (rsaKey[0] == NULL) {
8827-
printf("bench_rsa_key malloc failed\n");
8828-
return;
8829-
}
8830-
#endif
88318800

88328801
/* init keys */
88338802
do {
@@ -8956,7 +8925,6 @@ void bench_dh(int useDeviceID)
89568925
WC_ALLOC_VAR(pub2, byte, BENCH_DH_KEY_SIZE, HEAP_HINT);
89578926
WC_ALLOC_VAR(priv2, byte, BENCH_DH_PRIV_SIZE, HEAP_HINT);
89588927

8959-
89608928
(void)tmp;
89618929

89628930
if (!use_ffdhe) {
@@ -10249,14 +10217,6 @@ void bench_eccMakeKey(int useDeviceID, int curveId)
1024910217

1025010218
WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING,
1025110219
sizeof(ecc_key), HEAP_HINT);
10252-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
10253-
if (genKey[0] == NULL) {
10254-
printf("bench_eccMakeKey malloc failed\n");
10255-
return;
10256-
}
10257-
for (i = 0; i < BENCH_MAX_PENDING; ++i)
10258-
XMEMSET(genKey[i], 0, sizeof(ecc_key));
10259-
#endif
1026010220

1026110221
deviceID = useDeviceID ? devId : INVALID_DEVID;
1026210222
keySize = wc_ecc_get_curve_size_from_id(curveId);
@@ -10359,23 +10319,10 @@ void bench_ecc(int useDeviceID, int curveId)
1035910319

1036010320
WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING,
1036110321
sizeof(ecc_key), HEAP_HINT);
10362-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
10363-
if (genKey[0] == NULL) {
10364-
printf("bench_eccMakeKey malloc failed\n");
10365-
return;
10366-
}
10367-
#endif
1036810322

1036910323
#ifdef HAVE_ECC_DHE
1037010324
WC_CALLOC_ARRAY(genKey2, ecc_key, BENCH_MAX_PENDING,
1037110325
sizeof(ecc_key), HEAP_HINT);
10372-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
10373-
if (genKey2[0] == NULL) {
10374-
XFREE(genKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
10375-
printf("bench_eccMakeKey malloc failed\n");
10376-
return;
10377-
}
10378-
#endif
1037910326
WC_ALLOC_ARRAY(shared, byte,
1038010327
BENCH_MAX_PENDING, MAX_ECC_BYTES, HEAP_HINT);
1038110328
#endif
@@ -10796,15 +10743,6 @@ static void bench_sm2_MakeKey(int useDeviceID)
1079610743
WC_CALLOC_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING,
1079710744
sizeof(ecc_key), HEAP_HINT);
1079810745

10799-
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
10800-
if (genKey[0] == NULL) {
10801-
printf("bench_sm2_MakeKey malloc failed\n");
10802-
return;
10803-
}
10804-
for (i = 0; i < BENCH_MAX_PENDING; ++i)
10805-
XMEMSET(genKey[i], 0, sizeof(ecc_key));
10806-
#endif
10807-
1080810746
/* ECC Make Key */
1080910747
bench_stats_start(&count, &start);
1081010748
do {
@@ -11474,7 +11412,6 @@ void bench_ed448KeyGen(void)
1147411412
#endif
1147511413
}
1147611414

11477-
1147811415
void bench_ed448KeySign(void)
1147911416
{
1148011417
int ret;
@@ -11496,7 +11433,7 @@ void bench_ed448KeySign(void)
1149611433
ret = wc_ed448_make_key(&gRng, ED448_KEY_SIZE, genKey);
1149711434
if (ret != 0) {
1149811435
printf("ed448_make_key failed\n");
11499-
return;
11436+
goto exit;
1150011437
}
1150111438

1150211439
#ifdef HAVE_ED448_SIGN

0 commit comments

Comments
 (0)