Cryptographic performance on STM32WBA Series V5.x

This page reports measured performance when using the pure software cryptographic library algorithms with an STM32WBA MCU. In addition to performance figures, the required code footprint and memory are also given.


1. Measurement configuration

1.1. Hardware configuration

STM32 MCU STM32WBA52CGUx
Device ID 0x492
Revision ID 0x1000
Board NUCLEO-WBA52CG

1.2. Firmware configuration

Cryptographic library version 050000B2[ver. 1]
  1. This value corresponds to the information returned by a call to cmox_getInfos

1.3. System configuration

System core clock frequency 100 MHz
Flash latency 3 wait states
Voltage scaling Range 1
ICACHE peripheral 1 (0: disabled / 1: enabled)
Prefetch cache (ART) 1 (0: disabled / 1: enabled)

1.4. Development toolchains and compilers

IAR Embedded Workbench IAR ANSI C/C++ Compiler V9.40.1.364/W64 for ARM
Information
The measurements are done using a project built with the High Speed optimization setting enabled.


2. Performance values

2.1. AES symmetric key encryption and decryption

This section provides the performance results for AES-CBC using different operation modes:

  • Sole buffer: one sole buffer is encrypted or decrypted. The performance time is given in µs.
  • Data flow: a big message is encrypted or decrypted in chunks. The bit rate is given in kilobytes per second.

2.1.1. Sole buffer mode

In this mode, the entire encryption or decryption process, for the full message size, is managed through a single API call provided by the CMOX library.

The table below shows the number of clock cycles and time (in µs) needed to perform the described operation in small and fast configurations.

AES mode Key size Buffer size Cipher operation Configuration Cycles Time
AES CBC 128 bits 32 bytes Encryption Small 3650 36 µs
AES CBC 128 bits 32 bytes Encryption Fast 3323 33 µs
AES CBC 128 bits 64 bytes Encryption Small 6294 62 µs
AES CBC 128 bits 64 bytes Encryption Fast 5396 53 µs
AES CBC 128 bits 128 bytes Encryption Small 11 580 115 µs
AES CBC 128 bits 128 bytes Encryption Fast 9625 96 µs
AES CBC 192 bits 32 bytes Encryption Small 4030 40 µs
AES CBC 192 bits 32 bytes Encryption Fast 3540 35 µs
AES CBC 192 bits 64 bytes Encryption Small 7094 70 µs
AES CBC 192 bits 64 bytes Encryption Fast 5925 59 µs
AES CBC 192 bits 128 bytes Encryption Small 13 220 132 µs
AES CBC 192 bits 128 bytes Encryption Fast 10 716 107 µs
AES CBC 256 bits 32 bytes Encryption Small 4613 46 µs
AES CBC 256 bits 32 bytes Encryption Fast 3999 39 µs
AES CBC 256 bits 64 bytes Encryption Small 8099 80 µs
AES CBC 256 bits 64 bytes Encryption Fast 6673 66 µs
AES CBC 256 bits 128 bytes Encryption Small 15 070 150 µs
AES CBC 256 bits 128 bytes Encryption Fast 12 065 120 µs
AES CBC 128 bits 32 bytes Decryption Small 4837 48 µs
AES CBC 128 bits 32 bytes Decryption Fast 4594 45 µs
AES CBC 128 bits 64 bytes Decryption Small 8667 86 µs
AES CBC 128 bits 64 bytes Decryption Fast 6693 66 µs
AES CBC 128 bits 128 bytes Decryption Small 16 332 163 µs
AES CBC 128 bits 128 bytes Decryption Fast 10 918 109 µs
AES CBC 192 bits 32 bytes Decryption Small 5493 54 µs
AES CBC 192 bits 32 bytes Decryption Fast 5063 50 µs
AES CBC 192 bits 64 bytes Decryption Small 10 003 100 µs
AES CBC 192 bits 64 bytes Decryption Fast 7463 74 µs
AES CBC 192 bits 128 bytes Decryption Small 19 025 190 µs
AES CBC 192 bits 128 bytes Decryption Fast 12 274 122 µs
AES CBC 256 bits 32 bytes Decryption Small 6325 63 µs
AES CBC 256 bits 32 bytes Decryption Fast 5764 57 µs
AES CBC 256 bits 64 bytes Decryption Small 11 518 115 µs
AES CBC 256 bits 64 bytes Decryption Fast 8463 84 µs
AES CBC 256 bits 128 bytes Decryption Small 21 900 219 µs
AES CBC 256 bits 128 bytes Decryption Fast 13 882 138 µs


The table below shows flash memory and RAM usage (in bytes).

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2386 bytes 324 bytes 0 bytes 552 bytes
Encryption Fast 2330 bytes 1092 bytes 0 bytes 552 bytes
Decryption Small 2746 bytes 580 bytes 0 bytes 568 bytes
Decryption Fast 2696 bytes 2372 bytes 0 bytes 568 bytes


2.1.2. Data flow mode

In this mode, the operation is performed in several calls to the CMOX library APIs, as shown below:

  • cmox_cipher_init
  • cmox_cipher_setKey
  • cmox_cipher_setIV
  • cmox_cipher_append: called several times to encrypt or decrypt the whole message in fixed-size chunks

The table below shows the number of clock cycles and the bit rate (in kilobytes per second) needed to perform the described operation in small and fast configuration.

AES mode Key size Message size Chunk size Cipher operation Configuration Cycles Bit rate
AES CBC 128 bits 8000 bytes 128 bytes Encryption Small 668 792 1196 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 532 840 1501 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 663 544 1205 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 527 688 1516 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 662 624 1207 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 526 768 1518 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 662 168 1208 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 526 304 1520 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 773 808 1033 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 606 912 1318 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 768 560 1040 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 601 760 1329 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 767 648 1042 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 600 840 1331 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 767 184 1042 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 600 392 1332 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 878 832 910 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 680 920 1174 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 873 528 915 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 675 672 1184 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 872 616 916 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 674 760 1185 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 872 152 917 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 674 296 1186 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 985 032 812 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 557 040 1436 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 977 424 818 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 549 408 1456 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 975 088 820 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 546 944 1462 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 972 296 822 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 544 272 1469 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 1 155 064 692 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 630 992 1267 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 1 147 448 697 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 623 392 1283 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 1 145 104 698 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 620 920 1288 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 1 142 304 700 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 618 248 1293 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 1 325 120 603 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 704 968 1134 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 1 317 488 607 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 697 368 1147 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 1 315 144 608 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 694 896 1151 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 1 312 344 609 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 692 232 1155 Kbytes/s


The table below shows flash memory and RAM usage (in bytes).

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2306 bytes 316 bytes 0 bytes 176 bytes
Encryption Fast 2250 bytes 1084 bytes 0 bytes 176 bytes
Decryption Small 2666 bytes 572 bytes 0 bytes 192 bytes
Decryption Fast 2616 bytes 2364 bytes 0 bytes 192 bytes


2.2. HASH digest

In this section we provide the performance results for HASH, using different modes of operation:

  • Sole buffer: one sole buffer is hashed. The performance time is given in us.
  • Data flow: a big message is hashed in chunks. The bit rate is given in bytes per second.

2.2.1. Sole buffer mode

In this mode, the entire message hashing process is managed through a single API call provided by the CMOX library.

The table below shows the number of clock cycles and time (in µs) needed to perform the described operation.

HASH mode Buffer size Cycles Time
SHA256 32 bytes 4085 40 µs
SHA256 64 bytes 7149 71 µs
SHA256 128 bytes 10 004 100 µs
SHA384 32 bytes 15 206 152 µs
SHA384 64 bytes 15 389 153 µs
SHA384 128 bytes 28 800 288 µs


The table below shows flash memory and RAM usage (in bytes).

HASH mode Code Constant data Global data Stack usage
SHA256 1378 280 bytes 0 bytes 532 bytes
SHA384 2590 728 bytes 0 bytes 1076 bytes


2.2.2. Data flow mode

In this mode, the operation is performed in several calls to the CMOX library APIs, as shown below:

  • cmox_hash_init
  • cmox_hash_append: called several times to hash the whole message in fixed-size chunks
  • cmox_hash_generateTag

The table below shows the number of clock cycles and the bit rate (in kilobytes per second) needed to perform the described operation.

HASH mode Message size Chunk size Cycles Bit rate
SHA256 8000 bytes 128 bytes 386 255 2071 Kbytes/s
SHA256 8000 bytes 512 bytes 364 351 2195 Kbytes/s
SHA256 8000 bytes 1024 bytes 360 653 2218 Kbytes/s
SHA256 8000 bytes 2048 bytes 358 797 2229 Kbytes/s
SHA384 8000 bytes 128 bytes 859 073 931 Kbytes/s
SHA384 8000 bytes 512 bytes 819 794 975 Kbytes/s
SHA384 8000 bytes 1024 bytes 812 983 984 Kbytes/s
SHA384 8000 bytes 2048 bytes 809 577 988 Kbytes/s


The table below shows the final tag generation done through the call to cmox_hash_generateTag.

HASH mode Cycles Time
SHA256 3368 33 µs
SHA384 14 280 142 µs

The table below shows flash memory and RAM usage (in bytes).

HASH mode Code Constant data Global data Stack usage
SHA256 1374 bytes 272 bytes 0 bytes 340 bytes
SHA384 2586 bytes 720 bytes 0 bytes 780 bytes


2.3. ECDSA signature and verification

This section provides the performance results for ECDSA signature and verification.

The table below shows the number of clock cycles and time (in ms) needed to perform the described operation in different configurations.

Curve Operation ECC mathematics configuration Curve definition Cycles Time
SECP256R1 Signature Small Low 2 879 760 28 ms
SECP256R1 Signature Small High 2 810 904 28 ms
SECP256R1 Signature SuperFast Low 1 881 400 18 ms
SECP256R1 Signature SuperFast High 1 824 736 18 ms
SECP256R1 Verification Small Low 6 926 200 69 ms
SECP256R1 Verification Small High 6 162 616 61 ms
SECP256R1 Verification SuperFast Low 4 589 400 45 ms
SECP256R1 Verification SuperFast High 4 058 680 40 ms
SECP384R1 Signature Small Low 8 166 952 81 ms
SECP384R1 Signature Small High 7 861 856 78 ms
SECP384R1 Signature Fast Low 6 999 080 69 ms
SECP384R1 Signature Fast High 6 595 464 65 ms
SECP384R1 Verification Small Low 19 535 912 195 ms
SECP384R1 Verification Small High 17 076 032 170 ms
SECP384R1 Verification Fast Low 16 807 840 168 ms
SECP384R1 Verification Fast High 14 400 936 144 ms


The table below shows ECDSA flash memory and RAM usage (in bytes).

Note
The footpring is measured using the general-purpose CMOX_ECC_XXX_HIGHMEM or CMOX_ECC_XXX_LOWMEM configuration, which shows the footprint increase compared with the V4.x.x. To reduce the footprint, the optimized confinguration CMOX_ECC_XXX_YYY_SIGN or CMOX_ECC_XXX_YYY_VERIFY is recommended.
Curve Operation ECC mathematics configuration Curve definition Code Constant data Global data Stack usage Working buffer
SECP256R1 Signature Small Low 13 468 bytes 1212 bytes 0 bytes 440 bytes 628 bytes
SECP256R1 Signature Small High 13 468 bytes 1596 bytes 0 bytes 440 bytes 696 bytes
SECP256R1 Signature SuperFast Low 14 778 bytes 1212 bytes 0 bytes 444 bytes 628 bytes
SECP256R1 Signature SuperFast High 14 778 bytes 1596 bytes 0 bytes 444 bytes 696 bytes
SECP256R1 Verification Small Low 13 456 bytes 1212 bytes 0 bytes 488 bytes 856 bytes
SECP256R1 Verification Small High 13 456 bytes 1596 bytes 0 bytes 488 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 14 766 bytes 1212 bytes 0 bytes 492 bytes 856 bytes
SECP256R1 Verification SuperFast High 14 766 bytes 1596 bytes 0 bytes 492 bytes 1648 bytes
SECP384R1 Signature Small Low 13 468 bytes 1692 bytes 0 bytes 440 bytes 884 bytes
SECP384R1 Signature Small High 13 468 bytes 2268 bytes 0 bytes 440 bytes 984 bytes
SECP384R1 Signature Fast Low 13 838 bytes 1692 bytes 0 bytes 456 bytes 884 bytes
SECP384R1 Signature Fast High 13 838 bytes 2268 bytes 0 bytes 456 bytes 984 bytes
SECP384R1 Verification Small Low 13 456 bytes 1692 bytes 0 bytes 488 bytes 1192 bytes
SECP384R1 Verification Small High 13 456 bytes 2268 bytes 0 bytes 488 bytes 2272 bytes
SECP384R1 Verification Fast Low 13 826 bytes 1692 bytes 0 bytes 504 bytes 1192 bytes
SECP384R1 Verification Fast High 13 826 bytes 2268 bytes 0 bytes 504 bytes 2272 bytes


2.4. EdDSA signature and verification

This section provides the performance results for EdDSA signature and verification.

The table below shows the number of clock cycles and time (in ms) needed to perform the described operation in different configurations.

Curve Message size Operation ECC mathematics configuration Curve definition Cycles Time
Ed25519 1023 bytes Signature Small OptLow 4 428 640 44 ms
Ed25519 1023 bytes Signature Small OptHigh 2 568 400 25 ms
Ed25519 1023 bytes Signature SuperFast OptLow 3 173 120 31 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 1 866 520 18 ms
Ed25519 1023 bytes Verification Small OptLow 6 673 784 66 ms
Ed25519 1023 bytes Verification Small OptHigh 5 835 512 58 ms
Ed25519 1023 bytes Verification SuperFast OptLow 4 582 304 45 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 4 007 872 40 ms


The table below shows EdDSA flash memory and RAM usage (in bytes).

Note
The footpring is measured using the general-purpose CMOX_ECC_XXX_HIGHMEM or CMOX_ECC_XXX_LOWMEM configuration, which shows the footprint increase compared with the V4.x.x. To reduce the footprint, the optimized confinguration CMOX_ECC_XXX_YYY_SIGN or CMOX_ECC_XXX_YYY_VERIFY is recommended.
Curve Message size Operation ECC mathematics configuration Curve definition Code Constant data Global data Stack usage Working buffer
Ed25519 1023 bytes Signature Small OptLow 14 840 bytes 1748 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Signature Small OptHigh 15 260 bytes 2900 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Signature SuperFast OptLow 16 150 bytes 1748 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Signature SuperFast OptHigh 16 570 bytes 2900 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Verification Small OptLow 14 836 bytes 1748 bytes 0 bytes 1172 bytes 984 bytes
Ed25519 1023 bytes Verification Small OptHigh 15 256 bytes 2900 bytes 0 bytes 1172 bytes 1992 bytes
Ed25519 1023 bytes Verification SuperFast OptLow 16 146 bytes 1748 bytes 0 bytes 1172 bytes 984 bytes
Ed25519 1023 bytes Verification SuperFast OptHigh 16 566 bytes 2900 bytes 0 bytes 1172 bytes 1992 bytes


2.5. RSA signature and verification

This section provides the performance results for RSA signature and verification.

The table below shows the number of clock cycles and time (in ms) needed to perform the described operation in different configurations.

PKCS#1 Priv. key mod. exp. method Hash method Modulus size Operation RSA mathematics configuration Priv. key mod. exp. implementation Cycles Time
v2.2 CRT SHA-256 3K Signature Small Low 197 726 616 1977 ms
v2.2 CRT SHA-256 3K Signature Small Mid 148 814 744 1488 ms
v2.2 CRT SHA-256 3K Signature Small High 124 974 176 1249 ms
v2.2 CRT SHA-256 3K Signature Fast Low 158 169 456 1581 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 119 106 744 1191 ms
v2.2 CRT SHA-256 3K Signature Fast High 100 473 032 1004 ms
v2.2 No CRT SHA-256 3K Signature Small Low 762 181 720 7621 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 572 420 960 5724 ms
v2.2 No CRT SHA-256 3K Signature Small High 478 812 712 4788 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 605 354 616 6053 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 454 724 640 4547 ms
v2.2 No CRT SHA-256 3K Signature Fast High 381 290 248 3812 ms
v2.2 n/a SHA-256 3K Verification Small n/a 3 745 384 37 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 3 239 776 32 ms


The table below shows RSA flash memory and RAM usage (in bytes).

PKCS#1 Priv. key mod. exp. method Hash method Modulus size Operation RSA mathematics configuration Priv. key mod. exp. implementation Code Constant data Global data Stack usage Working buffer
v2.2 CRT SHA-256 3K Signature Small Low 6890 bytes 372 bytes 0 bytes 668 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7126 bytes 372 bytes 0 bytes 668 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7126 bytes 372 bytes 0 bytes 668 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 7260 bytes 372 bytes 0 bytes 668 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 7496 bytes 372 bytes 0 bytes 668 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 7496 bytes 372 bytes 0 bytes 668 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 5958 bytes 364 bytes 0 bytes 668 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6194 bytes 364 bytes 0 bytes 668 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6194 bytes 364 bytes 0 bytes 668 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 6328 bytes 364 bytes 0 bytes 668 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 6564 bytes 364 bytes 0 bytes 668 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 6564 bytes 364 bytes 0 bytes 668 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 6142 bytes 368 bytes 0 bytes 684 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 6512 bytes 368 bytes 0 bytes 684 bytes 3108 bytes