Skip to content

Commit cd0301f

Browse files
committed
Fixes for benchmark with small stack (RSA was being skipped). Added Thumb2 benchmarks for STM32H753.
1 parent 8a68e6a commit cd0301f

2 files changed

Lines changed: 203 additions & 31 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: 128 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4251,21 +4251,27 @@ static void bench_aesgcm_internal(int useDeviceID,
42514251

42524252
WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
42534253
WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
4254+
42544255
WC_CALLOC_ARRAY(enc, Aes, BENCH_MAX_PENDING,
42554256
sizeof(Aes), HEAP_HINT);
42564257
#ifdef HAVE_AES_DECRYPT
42574258
WC_CALLOC_ARRAY(dec, Aes, BENCH_MAX_PENDING,
42584259
sizeof(Aes), HEAP_HINT);
42594260
#endif
42604261

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)
4262+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
4263+
if (bench_additional == NULL || bench_tag == NULL || enc == NULL
4264+
#ifdef HAVE_AES_DECRYPT
4265+
|| dec == NULL
4266+
#endif
4267+
) {
4268+
ret = MEMORY_E;
4269+
goto exit;
4270+
}
42674271
#endif
4268-
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
4272+
4273+
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
4274+
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
42694275

42704276
/* init keys */
42714277
for (i = 0; i < BENCH_MAX_PENDING; i++) {
@@ -4427,14 +4433,19 @@ static void bench_aesgcm_stream_internal(int useDeviceID,
44274433
sizeof(Aes), HEAP_HINT);
44284434
#endif
44294435

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+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
4437+
if (bench_additional == NULL || bench_tag == NULL || enc == NULL
4438+
#ifdef HAVE_AES_DECRYPT
4439+
|| dec == NULL
4440+
#endif
4441+
) {
4442+
ret = MEMORY_E;
4443+
goto exit;
4444+
}
44364445
#endif
4437-
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
4446+
4447+
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
4448+
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
44384449

44394450
/* init keys */
44404451
for (i = 0; i < BENCH_MAX_PENDING; i++) {
@@ -4992,6 +5003,13 @@ void bench_aesxts(void)
49925003

49935004
WC_ALLOC_VAR(aes, XtsAes, 1, HEAP_HINT);
49945005

5006+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
5007+
if (aes == NULL){
5008+
ret = MEMORY_E;
5009+
goto exit;
5010+
}
5011+
#endif
5012+
49955013
ret = wc_AesXtsSetKey(aes, k1, sizeof(k1), AES_ENCRYPTION,
49965014
HEAP_HINT, devId);
49975015
if (ret != 0) {
@@ -5137,6 +5155,13 @@ void bench_aesccm(int useDeviceID)
51375155
WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
51385156
WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
51395157

5158+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
5159+
if (bench_additional == NULL || bench_tag == NULL) {
5160+
ret = MEMORY_E;
5161+
goto exit;
5162+
}
5163+
#endif
5164+
51405165
XMEMSET(bench_tag, 0, AES_AUTH_TAG_SZ);
51415166
XMEMSET(bench_additional, 0, AES_AUTH_ADD_SZ);
51425167

@@ -5476,6 +5501,9 @@ void bench_sm4_gcm(void)
54765501

54775502
WC_DECLARE_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
54785503
WC_DECLARE_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
5504+
5505+
WC_ALLOC_VAR(bench_additional, byte, AES_AUTH_ADD_SZ, HEAP_HINT);
5506+
WC_ALLOC_VAR(bench_tag, byte, AES_AUTH_TAG_SZ, HEAP_HINT);
54795507
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
54805508
if (bench_additional == NULL || bench_tag == NULL) {
54815509
printf("bench_aesgcm_internal malloc failed\n");
@@ -8457,34 +8485,35 @@ static void bench_rsa_helper(int useDeviceID,
84578485
WC_DECLARE_HEAP_ARRAY(enc, byte, BENCH_MAX_PENDING,
84588486
rsaKeySz, HEAP_HINT);
84598487

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
8488+
#if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \
8489+
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
8490+
WC_DECLARE_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING,
8491+
rsaKeySz, HEAP_HINT);
8492+
#else
8493+
byte* out[BENCH_MAX_PENDING];
8494+
#endif
84678495

84688496
XMEMSET(out, 0, sizeof(out));
84698497

84708498
WC_ALLOC_HEAP_ARRAY(enc, byte, BENCH_MAX_PENDING,
84718499
rsaKeySz, HEAP_HINT);
84728500

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
8501+
#if (!defined(WOLFSSL_RSA_VERIFY_INLINE) && \
8502+
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
8503+
WC_ALLOC_HEAP_ARRAY(out, byte, BENCH_MAX_PENDING,
8504+
rsaKeySz, HEAP_HINT);
8505+
if (out[0] == NULL) {
8506+
ret = MEMORY_E;
8507+
goto exit;
8508+
}
8509+
#endif
84828510
if (enc[0] == NULL) {
84838511
ret = MEMORY_E;
84848512
goto exit;
84858513
}
84868514

84878515
#ifndef WOLFSSL_RSA_VERIFY_ONLY
8516+
WC_ALLOC_VAR(message, byte, TEST_STRING_SZ, HEAP_HINT);
84888517
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
84898518
if (message == NULL) {
84908519
ret = MEMORY_E;
@@ -8955,7 +8984,12 @@ void bench_dh(int useDeviceID)
89558984

89568985
WC_ALLOC_VAR(pub2, byte, BENCH_DH_KEY_SIZE, HEAP_HINT);
89578986
WC_ALLOC_VAR(priv2, byte, BENCH_DH_PRIV_SIZE, HEAP_HINT);
8958-
8987+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
8988+
if (pub2 == NULL || priv2 == NULL) {
8989+
ret = MEMORY_E;
8990+
goto exit;
8991+
}
8992+
#endif
89598993

89608994
(void)tmp;
89618995

@@ -11491,6 +11525,13 @@ void bench_ed448KeySign(void)
1149111525

1149211526
WC_ALLOC_VAR(genKey, ed448_key, 1, HEAP_HINT);
1149311527

11528+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11529+
if (genKey == NULL) {
11530+
ret = MEMORY_E;
11531+
goto exit;
11532+
}
11533+
#endif
11534+
1149411535
wc_ed448_init(genKey);
1149511536

1149611537
ret = wc_ed448_make_key(&gRng, ED448_KEY_SIZE, genKey);
@@ -11577,6 +11618,13 @@ void bench_eccsiKeyGen(void)
1157711618

1157811619
WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT);
1157911620

11621+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11622+
if (genKey == NULL) {
11623+
ret = MEMORY_E;
11624+
goto exit;
11625+
}
11626+
#endif
11627+
1158011628
/* Key Gen */
1158111629
bench_stats_start(&count, &start);
1158211630
do {
@@ -11622,6 +11670,13 @@ void bench_eccsiPairGen(void)
1162211670
WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT);
1162311671
WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT);
1162411672

11673+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11674+
if (genKey == NULL || ssk == NULL) {
11675+
ret = MEMORY_E;
11676+
goto exit;
11677+
}
11678+
#endif
11679+
1162511680
(void)mp_init(ssk);
1162611681
pvt = wc_ecc_new_point();
1162711682
wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
@@ -11679,6 +11734,13 @@ void bench_eccsiValidate(void)
1167911734
WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT);
1168011735
WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT);
1168111736

11737+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11738+
if (genKey == NULL || ssk == NULL) {
11739+
ret = MEMORY_E;
11740+
goto exit;
11741+
}
11742+
#endif
11743+
1168211744
(void)mp_init(ssk);
1168311745
pvt = wc_ecc_new_point();
1168411746
wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
@@ -11742,6 +11804,13 @@ void bench_eccsi(void)
1174211804
WC_ALLOC_VAR(genKey, EccsiKey, 1, HEAP_HINT);
1174311805
WC_ALLOC_VAR(ssk, mp_int, 1, HEAP_HINT);
1174411806

11807+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11808+
if (genKey == NULL || ssk == NULL) {
11809+
ret = MEMORY_E;
11810+
goto exit;
11811+
}
11812+
#endif
11813+
1174511814
(void)mp_init(ssk);
1174611815
pvt = wc_ecc_new_point();
1174711816
(void)wc_InitEccsiKey(genKey, NULL, INVALID_DEVID);
@@ -11829,6 +11898,13 @@ void bench_sakkeKeyGen(void)
1182911898

1183011899
WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT);
1183111900

11901+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11902+
if (genKey == NULL) {
11903+
ret = MEMORY_E;
11904+
goto exit;
11905+
}
11906+
#endif
11907+
1183211908
/* Key Gen */
1183311909
bench_stats_start(&count, &start);
1183411910
do {
@@ -11872,6 +11948,13 @@ void bench_sakkeRskGen(void)
1187211948

1187311949
WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT);
1187411950

11951+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
11952+
if (genKey == NULL) {
11953+
ret = MEMORY_E;
11954+
goto exit;
11955+
}
11956+
#endif
11957+
1187511958
rsk = wc_ecc_new_point();
1187611959
wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID);
1187711960
(void)wc_MakeSakkeKey(genKey, &gRng);
@@ -11923,6 +12006,13 @@ void bench_sakkeValidate(void)
1192312006

1192412007
WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT);
1192512008

12009+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
12010+
if (genKey == NULL) {
12011+
ret = MEMORY_E;
12012+
goto exit;
12013+
}
12014+
#endif
12015+
1192612016
rsk = wc_ecc_new_point();
1192712017
(void)wc_InitSakkeKey_ex(genKey, 128, ECC_SAKKE_1, NULL, INVALID_DEVID);
1192812018
(void)wc_MakeSakkeKey(genKey, &gRng);
@@ -11983,6 +12073,13 @@ void bench_sakke(void)
1198312073

1198412074
WC_ALLOC_VAR(genKey, SakkeKey, 1, HEAP_HINT);
1198512075

12076+
#ifdef WC_DECLARE_VAR_IS_HEAP_ALLOC
12077+
if (genKey == NULL) {
12078+
ret = MEMORY_E;
12079+
goto exit;
12080+
}
12081+
#endif
12082+
1198612083
XMEMCPY(ssv, ssv_init, sizeof ssv);
1198712084

1198812085
rsk = wc_ecc_new_point();

0 commit comments

Comments
 (0)