diff --git a/IDE/STM32Cube/README.md b/IDE/STM32Cube/README.md index 32b4e3094..a56b769e0 100644 --- a/IDE/STM32Cube/README.md +++ b/IDE/STM32Cube/README.md @@ -100,6 +100,7 @@ The section for "Hardware platform" may need to be adjusted depending on your pr * To enable STM32U5 support define `WOLFSSL_STM32U5`. * To enable STM32H5 support define `WOLFSSL_STM32H5`. * To enable STM32MP13 support define `WOLFSSL_STM32MP13`. +* To enable STM32N6 support define `WOLFSSL_STM32N6`. To use the STM32 Cube HAL support make sure `WOLFSSL_STM32_CUBEMX` is defined. diff --git a/IDE/STM32Cube/STM32_Benchmarks.md b/IDE/STM32Cube/STM32_Benchmarks.md index fd7b751c3..2f1bbf654 100644 --- a/IDE/STM32Cube/STM32_Benchmarks.md +++ b/IDE/STM32Cube/STM32_Benchmarks.md @@ -13,6 +13,7 @@ * [STM32WB55](#stm32wb55) * [STM32WBA52](#stm32wba52) * [STM32WL55](#stm32wl55) +* [STM32N657](#stm32n657) ## STM32H753ZI @@ -1340,3 +1341,218 @@ RSA 2048 public 14 ops took 1.016 sec, avg 72.571 ms, 13.780 ops/se RSA 2048 private 2 ops took 5.447 sec, avg 2723.500 ms, 0.367 ops/sec ``` + +## STM32N657 + +Cortex-M55 at 600MHz (part is capable of 800MHz in overdrive mode) +Tests are run with ICACHE enabled. Enable CPU I-Cache and D-Cache by calling: + +```c +SCB_EnableICache(); +SCB_EnableDCache(); +``` + +### STM32N657 Benchmarks (STM RNG/SHA1/SHA2/AES/PKA-ECC and SP Math Cortex-M Small for RSA/DH) + +``` +#undef NO_STM32_HASH +#undef NO_STM32_CRYPTO +#define WOLFSSL_STM32_PKA +#define WOLF_CONF_ARMASM 0 +``` + +``` +wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) +RNG 925 KiB took 1.012 seconds, 914.032 KiB/s +AES-128-CBC-enc 18 MiB took 1.000 seconds, 17.627 MiB/s +AES-128-CBC-dec 17 MiB took 1.000 seconds, 17.432 MiB/s +AES-192-CBC-enc 18 MiB took 1.000 seconds, 17.603 MiB/s +AES-192-CBC-dec 17 MiB took 1.000 seconds, 17.432 MiB/s +AES-256-CBC-enc 18 MiB took 1.000 seconds, 17.603 MiB/s +AES-256-CBC-dec 17 MiB took 1.000 seconds, 17.383 MiB/s +AES-128-GCM-enc 17 MiB took 1.000 seconds, 16.626 MiB/s +AES-128-GCM-dec 17 MiB took 1.000 seconds, 16.577 MiB/s +AES-192-GCM-enc 17 MiB took 1.000 seconds, 16.602 MiB/s +AES-192-GCM-dec 17 MiB took 1.000 seconds, 16.553 MiB/s +AES-256-GCM-enc 17 MiB took 1.000 seconds, 16.602 MiB/s +AES-256-GCM-dec 17 MiB took 1.000 seconds, 16.553 MiB/s +AES-128-GCM-enc-no_AAD 17 MiB took 1.000 seconds, 16.699 MiB/s +AES-128-GCM-dec-no_AAD 17 MiB took 1.000 seconds, 16.626 MiB/s +AES-192-GCM-enc-no_AAD 17 MiB took 1.000 seconds, 16.650 MiB/s +AES-192-GCM-dec-no_AAD 17 MiB took 1.000 seconds, 16.602 MiB/s +AES-256-GCM-enc-no_AAD 17 MiB took 1.000 seconds, 16.675 MiB/s +AES-256-GCM-dec-no_AAD 17 MiB took 1.000 seconds, 16.602 MiB/s +GMAC Table 4-bit 63 MiB took 1.000 seconds, 62.878 MiB/s +CHACHA 20 MiB took 1.000 seconds, 19.678 MiB/s +CHA-POLY 12 MiB took 1.000 seconds, 12.451 MiB/s +MD5 51 MiB took 1.000 seconds, 51.392 MiB/s +POLY1305 53 MiB took 1.000 seconds, 53.442 MiB/s +SHA 48 MiB took 1.000 seconds, 47.632 MiB/s +SHA-224 47 MiB took 1.000 seconds, 46.997 MiB/s +SHA-256 47 MiB took 1.000 seconds, 46.973 MiB/s +SHA-384 49 MiB took 1.000 seconds, 48.779 MiB/s +SHA-512 49 MiB took 1.000 seconds, 48.779 MiB/s +SHA-512/224 49 MiB took 1.000 seconds, 48.877 MiB/s +SHA-512/256 49 MiB took 1.000 seconds, 48.877 MiB/s +SHA3-224 5 MiB took 1.000 seconds, 4.614 MiB/s +SHA3-256 4 MiB took 1.000 seconds, 4.370 MiB/s +SHA3-384 3 MiB took 1.004 seconds, 3.356 MiB/s +SHA3-512 2 MiB took 1.000 seconds, 2.344 MiB/s +HMAC-MD5 51 MiB took 1.000 seconds, 50.806 MiB/s +HMAC-SHA 46 MiB took 1.000 seconds, 45.703 MiB/s +HMAC-SHA224 45 MiB took 1.000 seconds, 44.604 MiB/s +HMAC-SHA256 45 MiB took 1.000 seconds, 44.580 MiB/s +HMAC-SHA384 46 MiB took 1.000 seconds, 45.801 MiB/s +HMAC-SHA512 46 MiB took 1.000 seconds, 45.728 MiB/s +PBKDF2 640 bytes took 1.000 seconds, 640.000 bytes/s +RSA 2048 public 430 ops took 1.000 sec, avg 2.326 ms, 430.000 ops/sec +RSA 2048 private 14 ops took 1.059 sec, avg 75.643 ms, 13.220 ops/sec +DH 2048 key gen 29 ops took 1.019 sec, avg 35.138 ms, 28.459 ops/sec +DH 2048 agree 30 ops took 1.051 sec, avg 35.033 ms, 28.544 ops/sec +ECC [ SECP256R1] 256 key gen 924 ops took 1.000 sec, avg 1.082 ms, 924.000 ops/sec +ECDHE [ SECP256R1] 256 agree 466 ops took 1.000 sec, avg 2.146 ms, 466.000 ops/sec +ECDSA [ SECP256R1] 256 sign 180 ops took 1.004 sec, avg 5.578 ms, 179.283 ops/sec +ECDSA [ SECP256R1] 256 verify 168 ops took 1.000 sec, avg 5.952 ms, 168.000 ops/sec +CURVE 25519 key gen 11 ops took 1.020 sec, avg 92.727 ms, 10.784 ops/sec +CURVE 25519 agree 12 ops took 1.114 sec, avg 92.833 ms, 10.772 ops/sec +ED 25519 key gen 11 ops took 1.027 sec, avg 93.364 ms, 10.711 ops/sec +ED 25519 sign 12 ops took 1.137 sec, avg 94.750 ms, 10.554 ops/sec +ED 25519 verify 6 ops took 1.177 sec, avg 196.167 ms, 5.098 ops/sec +``` + + +### STM32N657 Benchmarks (No STM hardware crypto, ARM Thumb Assembly, SP Math Cortex-M ASM Small) + +``` +#define WOLF_CONF_ARMASM 1 /* WOLF_CONF_ARMASM */ +//#define WOLFSSL_STM32_PKA +#define WOLF_CONF_MATH 4 /* (sp_cortexm.c) */ +``` + +``` +wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) +RNG 5 MiB took 1.004 seconds, 4.766 MiB/s +AES-128-CBC-enc 16 MiB took 1.000 seconds, 15.991 MiB/s +AES-128-CBC-dec 16 MiB took 1.000 seconds, 15.747 MiB/s +AES-192-CBC-enc 13 MiB took 1.000 seconds, 13.477 MiB/s +AES-192-CBC-dec 13 MiB took 1.000 seconds, 13.330 MiB/s +AES-256-CBC-enc 12 MiB took 1.000 seconds, 11.646 MiB/s +AES-256-CBC-dec 12 MiB took 1.000 seconds, 11.572 MiB/s +AES-128-GCM-enc 7 MiB took 1.000 seconds, 7.397 MiB/s +AES-128-GCM-dec 7 MiB took 1.000 seconds, 7.397 MiB/s +AES-192-GCM-enc 7 MiB took 1.000 seconds, 6.836 MiB/s +AES-192-GCM-dec 7 MiB took 1.000 seconds, 6.812 MiB/s +AES-256-GCM-enc 6 MiB took 1.000 seconds, 6.323 MiB/s +AES-256-GCM-dec 6 MiB took 1.000 seconds, 6.323 MiB/s +AES-128-GCM-enc-no_AAD 7 MiB took 1.000 seconds, 7.495 MiB/s +AES-128-GCM-dec-no_AAD 7 MiB took 1.000 seconds, 7.495 MiB/s +AES-192-GCM-enc-no_AAD 7 MiB took 1.000 seconds, 6.909 MiB/s +AES-192-GCM-dec-no_AAD 7 MiB took 1.000 seconds, 6.885 MiB/s +AES-256-GCM-enc-no_AAD 6 MiB took 1.000 seconds, 6.372 MiB/s +AES-256-GCM-dec-no_AAD 6 MiB took 1.000 seconds, 6.372 MiB/s +GMAC Table 4-bit 14 MiB took 1.000 seconds, 14.010 MiB/s +CHACHA 29 MiB took 1.000 seconds, 29.102 MiB/s +CHA-POLY 20 MiB took 1.000 seconds, 19.580 MiB/s +MD5 51 MiB took 1.000 seconds, 51.416 MiB/s +POLY1305 126 MiB took 1.000 seconds, 125.635 MiB/s +SHA 22 MiB took 1.000 seconds, 21.802 MiB/s +SHA-224 13 MiB took 1.000 seconds, 13.135 MiB/s +SHA-256 13 MiB took 1.000 seconds, 13.110 MiB/s +SHA-384 7 MiB took 1.000 seconds, 7.129 MiB/s +SHA-512 7 MiB took 1.000 seconds, 7.129 MiB/s +SHA-512/224 7 MiB took 1.000 seconds, 7.129 MiB/s +SHA-512/256 7 MiB took 1.000 seconds, 7.129 MiB/s +SHA3-224 7 MiB took 1.000 seconds, 6.665 MiB/s +SHA3-256 6 MiB took 1.000 seconds, 6.274 MiB/s +SHA3-384 5 MiB took 1.000 seconds, 4.858 MiB/s +SHA3-512 3 MiB took 1.004 seconds, 3.404 MiB/s +HMAC-MD5 50 MiB took 1.000 seconds, 50.439 MiB/s +HMAC-SHA 21 MiB took 1.000 seconds, 21.460 MiB/s +HMAC-SHA224 13 MiB took 1.000 seconds, 12.988 MiB/s +HMAC-SHA256 13 MiB took 1.000 seconds, 12.988 MiB/s +HMAC-SHA384 7 MiB took 1.000 seconds, 7.007 MiB/s +HMAC-SHA512 7 MiB took 1.000 seconds, 7.031 MiB/s +PBKDF2 2 KiB took 1.016 seconds, 1.476 KiB/s +RSA 2048 public 494 ops took 1.000 sec, avg 2.024 ms, 494.000 ops/sec +RSA 2048 private 14 ops took 1.027 sec, avg 73.357 ms, 13.632 ops/sec +DH 2048 key gen 30 ops took 1.020 sec, avg 34.000 ms, 29.412 ops/sec +DH 2048 agree 30 ops took 1.019 sec, avg 33.967 ms, 29.441 ops/sec +ECC [ SECP256R1] 256 key gen 966 ops took 1.000 sec, avg 1.035 ms, 966.000 ops/sec +ECDHE [ SECP256R1] 256 agree 462 ops took 1.000 sec, avg 2.165 ms, 462.000 ops/sec +ECDSA [ SECP256R1] 256 sign 532 ops took 1.000 sec, avg 1.880 ms, 532.000 ops/sec +ECDSA [ SECP256R1] 256 verify 306 ops took 1.004 sec, avg 3.281 ms, 304.781 ops/sec +CURVE 25519 key gen 11 ops took 1.015 sec, avg 92.273 ms, 10.837 ops/sec +CURVE 25519 agree 12 ops took 1.110 sec, avg 92.500 ms, 10.811 ops/sec +ED 25519 key gen 11 ops took 1.027 sec, avg 93.364 ms, 10.711 ops/sec +ED 25519 sign 12 ops took 1.138 sec, avg 94.833 ms, 10.545 ops/sec +ED 25519 verify 6 ops took 1.180 sec, avg 196.667 ms, 5.085 ops/sec +``` + +### STM32N657 Benchmarks (Pure C - SP C32 / No ASM / No STM hardware) + +``` +#define WOLF_CONF_MATH 3 /* sp_c32.c */ +#define WOLFSSL_NO_ASM +#define NO_STM32_HASH +#define NO_STM32_CRYPTO +//#define WOLFSSL_STM32_PKA +``` + +``` +wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) +RNG 3 MiB took 1.000 seconds, 3.442 MiB/s +AES-128-CBC-enc 10 MiB took 1.000 seconds, 10.303 MiB/s +AES-128-CBC-dec 10 MiB took 1.000 seconds, 10.132 MiB/s +AES-192-CBC-enc 9 MiB took 1.000 seconds, 8.936 MiB/s +AES-192-CBC-dec 9 MiB took 1.000 seconds, 8.838 MiB/s +AES-256-CBC-enc 8 MiB took 1.000 seconds, 7.935 MiB/s +AES-256-CBC-dec 8 MiB took 1.000 seconds, 7.812 MiB/s +AES-128-GCM-enc 5 MiB took 1.000 seconds, 5.054 MiB/s +AES-128-GCM-dec 5 MiB took 1.000 seconds, 5.029 MiB/s +AES-192-GCM-enc 5 MiB took 1.000 seconds, 4.688 MiB/s +AES-192-GCM-dec 5 MiB took 1.000 seconds, 4.688 MiB/s +AES-256-GCM-enc 4 MiB took 1.000 seconds, 4.370 MiB/s +AES-256-GCM-dec 4 MiB took 1.004 seconds, 4.377 MiB/s +AES-128-GCM-enc-no_AAD 5 MiB took 1.000 seconds, 5.078 MiB/s +AES-128-GCM-dec-no_AAD 5 MiB took 1.000 seconds, 5.078 MiB/s +AES-192-GCM-enc-no_AAD 5 MiB took 1.004 seconds, 4.717 MiB/s +AES-192-GCM-dec-no_AAD 5 MiB took 1.004 seconds, 4.717 MiB/s +AES-256-GCM-enc-no_AAD 4 MiB took 1.000 seconds, 4.419 MiB/s +AES-256-GCM-dec-no_AAD 4 MiB took 1.000 seconds, 4.419 MiB/s +GMAC Table 4-bit 10 MiB took 1.000 seconds, 9.939 MiB/s +CHACHA 20 MiB took 1.000 seconds, 19.678 MiB/s +CHA-POLY 12 MiB took 1.000 seconds, 12.378 MiB/s +MD5 51 MiB took 1.000 seconds, 51.489 MiB/s +POLY1305 53 MiB took 1.000 seconds, 53.442 MiB/s +SHA 23 MiB took 1.000 seconds, 22.949 MiB/s +SHA-224 9 MiB took 1.000 seconds, 8.740 MiB/s +SHA-256 9 MiB took 1.000 seconds, 8.740 MiB/s +SHA-384 5 MiB took 1.000 seconds, 4.541 MiB/s +SHA-512 5 MiB took 1.000 seconds, 4.541 MiB/s +SHA-512/224 5 MiB took 1.004 seconds, 4.523 MiB/s +SHA-512/256 5 MiB took 1.000 seconds, 4.517 MiB/s +SHA3-224 5 MiB took 1.004 seconds, 4.620 MiB/s +SHA3-256 4 MiB took 1.000 seconds, 4.346 MiB/s +SHA3-384 3 MiB took 1.004 seconds, 3.356 MiB/s +SHA3-512 2 MiB took 1.000 seconds, 2.344 MiB/s +HMAC-MD5 51 MiB took 1.000 seconds, 50.659 MiB/s +HMAC-SHA 23 MiB took 1.000 seconds, 22.632 MiB/s +HMAC-SHA224 9 MiB took 1.000 seconds, 8.667 MiB/s +HMAC-SHA256 9 MiB took 1.000 seconds, 8.691 MiB/s +HMAC-SHA384 4 MiB took 1.000 seconds, 4.468 MiB/s +HMAC-SHA512 4 MiB took 1.004 seconds, 4.450 MiB/s +PBKDF2 1 KiB took 1.016 seconds, 1.046 KiB/s +RSA 2048 public 216 ops took 1.008 sec, avg 4.667 ms, 214.286 ops/sec +RSA 2048 private 4 ops took 1.024 sec, avg 256.000 ms, 3.906 ops/sec +DH 2048 key gen 10 ops took 1.086 sec, avg 108.600 ms, 9.208 ops/sec +DH 2048 agree 10 ops took 1.086 sec, avg 108.600 ms, 9.208 ops/sec +ECC [ SECP256R1] 256 key gen 44 ops took 1.035 sec, avg 23.523 ms, 42.512 ops/sec +ECDHE [ SECP256R1] 256 agree 44 ops took 1.031 sec, avg 23.432 ms, 42.677 ops/sec +ECDSA [ SECP256R1] 256 sign 40 ops took 1.036 sec, avg 25.900 ms, 38.610 ops/sec +ECDSA [ SECP256R1] 256 verify 22 ops took 1.043 sec, avg 47.409 ms, 21.093 ops/sec +CURVE 25519 key gen 11 ops took 1.020 sec, avg 92.727 ms, 10.784 ops/sec +CURVE 25519 agree 12 ops took 1.114 sec, avg 92.833 ms, 10.772 ops/sec +ED 25519 key gen 11 ops took 1.027 sec, avg 93.364 ms, 10.711 ops/sec +ED 25519 sign 12 ops took 1.141 sec, avg 95.083 ms, 10.517 ops/sec +ED 25519 verify 6 ops took 1.177 sec, avg 196.167 ms, 5.098 ops/sec +``` diff --git a/wolfcrypt/src/port/st/stm32.c b/wolfcrypt/src/port/st/stm32.c index a0d141454..7360199ec 100644 --- a/wolfcrypt/src/port/st/stm32.c +++ b/wolfcrypt/src/port/st/stm32.c @@ -261,11 +261,11 @@ static int wc_Stm32_Hash_WaitDataReady(STM32_HASH_Context* stmCtx) (void)stmCtx; /* wait until not busy and data input buffer ready */ - while ((HASH->SR & HASH_SR_BUSY) - #ifdef HASH_IMR_DCIE - && (HASH->SR & HASH_SR_DCIS) == 0 + while (((HASH->SR & HASH_SR_BUSY) + #ifdef HASH_IMR_DINIE + || (HASH->SR & HASH_SR_DINIS) == 0 #endif - && ++timeout < STM32_HASH_TIMEOUT) { + ) && ++timeout < STM32_HASH_TIMEOUT) { }; #ifdef DEBUG_STM32_HASH @@ -286,8 +286,8 @@ static int wc_Stm32_Hash_WaitCalcComp(STM32_HASH_Context* stmCtx) /* wait until not busy and hash digest calculation complete */ while (((HASH->SR & HASH_SR_BUSY) - #ifdef HASH_IMR_DINIE - || (HASH->SR & HASH_SR_DINIS) == 0 + #ifdef HASH_IMR_DCIE + || (HASH->SR & HASH_SR_DCIS) == 0 #endif ) && ++timeout < STM32_HASH_TIMEOUT) { }; diff --git a/wolfssl/wolfcrypt/port/st/stm32.h b/wolfssl/wolfcrypt/port/st/stm32.h index f1269f617..9cc77bcfc 100644 --- a/wolfssl/wolfcrypt/port/st/stm32.h +++ b/wolfssl/wolfcrypt/port/st/stm32.h @@ -35,14 +35,16 @@ #ifdef HASH_DIGEST /* The HASH_DIGEST register indicates SHA224/SHA256 support */ #define STM32_HASH_SHA2 - #if defined(WOLFSSL_STM32H5) || defined(WOLFSSL_STM32MP13) + #if defined(WOLFSSL_STM32H5) || defined(WOLFSSL_STM32MP13) || \ + defined(WOLFSSL_STM32N6) #define HASH_CR_SIZE 103 #define HASH_MAX_DIGEST 64 /* Up to SHA512 */ #else #define HASH_CR_SIZE 54 #define HASH_MAX_DIGEST 32 #endif - #if defined(WOLFSSL_STM32MP13) || defined(WOLFSSL_STM32H7S) + #if defined(WOLFSSL_STM32MP13) || defined(WOLFSSL_STM32H7S) || \ + defined(WOLFSSL_STM32N6) #define STM32_HASH_SHA512 #define STM32_HASH_SHA512_224 #define STM32_HASH_SHA512_256 @@ -137,6 +139,10 @@ int wc_Stm32_Hash_Final(STM32_HASH_Context* stmCtx, word32 algo, #define STM32_NOMD5 /* The HASH HAL has no MD5 implementation */ #endif +#if defined(WOLFSSL_STM32N6) + #define STM32_NOMD5 /* The HASH HAL has no MD5 implementation */ +#endif + #ifndef NO_AES #if !defined(STM32_CRYPTO_AES_GCM) && (defined(WOLFSSL_STM32F4) || \ defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32L4) || \ @@ -193,7 +199,8 @@ int wc_Stm32_Hash_Final(STM32_HASH_Context* stmCtx, word32 algo, #ifndef STM_CRYPT_HEADER_WIDTH /* newer crypt HAL requires auth header size as 4 bytes (word) */ #if defined(CRYP_HEADERWIDTHUNIT_BYTE) && \ - !defined(WOLFSSL_STM32MP13) && !defined(WOLFSSL_STM32H7S) + !defined(WOLFSSL_STM32MP13) && !defined(WOLFSSL_STM32H7S) && \ + !defined(WOLFSSL_STM32N6) #define STM_CRYPT_HEADER_WIDTH 1 #else #define STM_CRYPT_HEADER_WIDTH 4