Cryptographic performance on STM32WL Series V5.x

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


1. Measurement configuration

1.1. Hardware configuration

STM32 MCU STM32WL55JC
Device ID 0x497
Revision ID 0x1003
Board NUCLEO-WL55JC RevC

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 48 MHz
Flash latency 2 wait states
Voltage scaling Range 1
Instruction cache (ART/ICU) 1 (0: disabled / 1: enabled)
Data cache (ART/DCU) 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 3712 77 µs
AES CBC 128 bits 32 bytes Encryption Fast 3696 77 µs
AES CBC 128 bits 64 bytes Encryption Small 6220 129 µs
AES CBC 128 bits 64 bytes Encryption Fast 6193 129 µs
AES CBC 128 bits 128 bytes Encryption Small 11 270 234 µs
AES CBC 128 bits 128 bytes Encryption Fast 11 181 232 µs
AES CBC 192 bits 32 bytes Encryption Small 4041 84 µs
AES CBC 192 bits 32 bytes Encryption Fast 4027 83 µs
AES CBC 192 bits 64 bytes Encryption Small 6918 144 µs
AES CBC 192 bits 64 bytes Encryption Fast 6900 143 µs
AES CBC 192 bits 128 bytes Encryption Small 12 669 263 µs
AES CBC 192 bits 128 bytes Encryption Fast 12 612 262 µs
AES CBC 256 bits 32 bytes Encryption Small 4582 95 µs
AES CBC 256 bits 32 bytes Encryption Fast 4531 94 µs
AES CBC 256 bits 64 bytes Encryption Small 7833 163 µs
AES CBC 256 bits 64 bytes Encryption Fast 7724 160 µs
AES CBC 256 bits 128 bytes Encryption Small 14 253 296 µs
AES CBC 256 bits 128 bytes Encryption Fast 14 112 294 µs
AES CBC 128 bits 32 bytes Decryption Small 4574 95 µs
AES CBC 128 bits 32 bytes Decryption Fast 5087 105 µs
AES CBC 128 bits 64 bytes Decryption Small 7924 165 µs
AES CBC 128 bits 64 bytes Decryption Fast 7588 158 µs
AES CBC 128 bits 128 bytes Decryption Small 14 678 305 µs
AES CBC 128 bits 128 bytes Decryption Fast 12 593 262 µs
AES CBC 192 bits 32 bytes Decryption Small 5073 105 µs
AES CBC 192 bits 32 bytes Decryption Fast 5716 119 µs
AES CBC 192 bits 64 bytes Decryption Small 8964 186 µs
AES CBC 192 bits 64 bytes Decryption Fast 8589 178 µs
AES CBC 192 bits 128 bytes Decryption Small 16 701 347 µs
AES CBC 192 bits 128 bytes Decryption Fast 14 321 298 µs
AES CBC 256 bits 32 bytes Decryption Small 5797 120 µs
AES CBC 256 bits 32 bytes Decryption Fast 6567 136 µs
AES CBC 256 bits 64 bytes Decryption Small 10 283 214 µs
AES CBC 256 bits 64 bytes Decryption Fast 9808 204 µs
AES CBC 256 bits 128 bytes Decryption Small 19 205 400 µs
AES CBC 256 bits 128 bytes Decryption Fast 16 277 339 µs


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

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2302 bytes 324 bytes 0 bytes 552 bytes
Encryption Fast 2246 bytes 1092 bytes 0 bytes 552 bytes
Decryption Small 2650 bytes 580 bytes 0 bytes 568 bytes
Decryption Fast 2600 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 636 904 602 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 631 832 607 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 629 784 609 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 622 864 616 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 628 544 610 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 621 328 618 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 627 696 611 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 620 576 618 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 727 456 527 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 722 352 531 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 718 704 534 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 714 848 537 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 717 448 535 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 713 584 538 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 716 624 535 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 712 952 538 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 821 672 467 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 810 016 474 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 812 040 472 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 802 264 478 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 811 032 473 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 800 944 479 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 810 992 473 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 800 288 479 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 874 288 439 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 658 952 582 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 858 176 447 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 648 032 592 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 854 016 449 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 644 984 595 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 850 608 451 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 642 632 597 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 1 001 336 383 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 749 128 512 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 987 040 389 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 738 056 520 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 983 976 390 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 735 112 522 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 980 176 391 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 731 928 524 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 1 146 224 335 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 839 264 457 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 1 130 696 339 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 827 784 463 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 1 125 704 341 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 824 688 465 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 1 121 616 342 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 822 296 466 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 2222 bytes 316 bytes 0 bytes 176 bytes
Encryption Fast 2166 bytes 1084 bytes 0 bytes 176 bytes
Decryption Small 2570 bytes 572 bytes 0 bytes 192 bytes
Decryption Fast 2520 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 4423 92 µs
SHA256 64 bytes 7620 158 µs
SHA256 128 bytes 10 607 220 µs
SHA384 32 bytes 17 803 370 µs
SHA384 64 bytes 18 017 375 µs
SHA384 128 bytes 34 310 714 µs


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

HASH mode Code Constant data Global data Stack usage
SHA256 1358 280 bytes 0 bytes 532 bytes
SHA384 2504 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 404 718 948 Kbytes/s
SHA256 8000 bytes 512 bytes 379 056 1013 Kbytes/s
SHA256 8000 bytes 1024 bytes 374 700 1024 Kbytes/s
SHA256 8000 bytes 2048 bytes 372 504 1030 Kbytes/s
SHA384 8000 bytes 128 bytes 1 045 358 367 Kbytes/s
SHA384 8000 bytes 512 bytes 997 679 384 Kbytes/s
SHA384 8000 bytes 1024 bytes 989 407 388 Kbytes/s
SHA384 8000 bytes 2048 bytes 985 271 389 Kbytes/s


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

HASH mode Cycles Time
SHA256 3477 72 µs
SHA384 16 668 347 µs

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

HASH mode Code Constant data Global data Stack usage
SHA256 1354 bytes 272 bytes 0 bytes 340 bytes
SHA384 2500 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 3 047 920 63 ms
SECP256R1 Signature Small High 2 957 288 61 ms
SECP256R1 Signature SuperFast Low 2 241 352 46 ms
SECP256R1 Signature SuperFast High 2 182 696 45 ms
SECP256R1 Verification Small Low 7 369 080 153 ms
SECP256R1 Verification Small High 6 529 480 136 ms
SECP256R1 Verification SuperFast Low 5 479 616 114 ms
SECP256R1 Verification SuperFast High 4 872 152 101 ms
SECP384R1 Signature Small Low 8 365 392 174 ms
SECP384R1 Signature Small High 7 994 808 166 ms
SECP384R1 Signature Fast Low 8 227 088 171 ms
SECP384R1 Signature Fast High 7 802 960 162 ms
SECP384R1 Verification Small Low 20 119 416 419 ms
SECP384R1 Verification Small High 17 458 528 363 ms
SECP384R1 Verification Fast Low 19 798 712 412 ms
SECP384R1 Verification Fast High 17 048 984 355 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 442 bytes 1212 bytes 0 bytes 440 bytes 628 bytes
SECP256R1 Signature Small High 13 442 bytes 1596 bytes 0 bytes 440 bytes 696 bytes
SECP256R1 Signature SuperFast Low 14 752 bytes 1212 bytes 0 bytes 444 bytes 628 bytes
SECP256R1 Signature SuperFast High 14 752 bytes 1596 bytes 0 bytes 444 bytes 696 bytes
SECP256R1 Verification Small Low 13 430 bytes 1212 bytes 0 bytes 488 bytes 856 bytes
SECP256R1 Verification Small High 13 430 bytes 1596 bytes 0 bytes 488 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 14 740 bytes 1212 bytes 0 bytes 492 bytes 856 bytes
SECP256R1 Verification SuperFast High 14 740 bytes 1596 bytes 0 bytes 492 bytes 1648 bytes
SECP384R1 Signature Small Low 13 442 bytes 1692 bytes 0 bytes 440 bytes 884 bytes
SECP384R1 Signature Small High 13 442 bytes 2268 bytes 0 bytes 440 bytes 984 bytes
SECP384R1 Signature Fast Low 13 812 bytes 1692 bytes 0 bytes 456 bytes 884 bytes
SECP384R1 Signature Fast High 13 812 bytes 2268 bytes 0 bytes 456 bytes 984 bytes
SECP384R1 Verification Small Low 13 430 bytes 1692 bytes 0 bytes 488 bytes 1192 bytes
SECP384R1 Verification Small High 13 430 bytes 2268 bytes 0 bytes 488 bytes 2272 bytes
SECP384R1 Verification Fast Low 13 800 bytes 1692 bytes 0 bytes 504 bytes 1192 bytes
SECP384R1 Verification Fast High 13 800 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 775 952 99 ms
Ed25519 1023 bytes Signature Small OptHigh 2 788 080 58 ms
Ed25519 1023 bytes Signature SuperFast OptLow 3 743 624 77 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 2 214 384 46 ms
Ed25519 1023 bytes Verification Small OptLow 7 136 408 148 ms
Ed25519 1023 bytes Verification Small OptHigh 6 267 432 130 ms
Ed25519 1023 bytes Verification SuperFast OptLow 5 417 456 112 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 4 773 056 99 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 752 bytes 1748 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Signature Small OptHigh 15 172 bytes 2900 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Signature SuperFast OptLow 16 062 bytes 1748 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Signature SuperFast OptHigh 16 482 bytes 2900 bytes 0 bytes 1172 bytes 1672 bytes
Ed25519 1023 bytes Verification Small OptLow 14 748 bytes 1748 bytes 0 bytes 1172 bytes 984 bytes
Ed25519 1023 bytes Verification Small OptHigh 15 168 bytes 2900 bytes 0 bytes 1172 bytes 1992 bytes
Ed25519 1023 bytes Verification SuperFast OptLow 16 058 bytes 1748 bytes 0 bytes 1172 bytes 984 bytes
Ed25519 1023 bytes Verification SuperFast OptHigh 16 478 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 187 603 896 3908 ms
v2.2 CRT SHA-256 3K Signature Small Mid 141 253 840 2942 ms
v2.2 CRT SHA-256 3K Signature Small High 118 639 656 2471 ms
v2.2 CRT SHA-256 3K Signature Fast Low 186 956 624 3894 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 140 765 160 2932 ms
v2.2 CRT SHA-256 3K Signature Fast High 118 241 472 2463 ms
v2.2 No CRT SHA-256 3K Signature Small Low 713 462 520 14 863 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 535 912 648 11 164 ms
v2.2 No CRT SHA-256 3K Signature Small High 448 304 264 9339 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 712 308 848 14 839 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 535 036 080 11 146 ms
v2.2 No CRT SHA-256 3K Signature Fast High 447 583 416 9324 ms
v2.2 n/a SHA-256 3K Verification Small n/a 3 728 344 77 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 3 724 552 77 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 6850 bytes 372 bytes 0 bytes 668 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7086 bytes 372 bytes 0 bytes 668 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7086 bytes 372 bytes 0 bytes 668 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 7220 bytes 372 bytes 0 bytes 668 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 7456 bytes 372 bytes 0 bytes 668 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 7456 bytes 372 bytes 0 bytes 668 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 5918 bytes 364 bytes 0 bytes 668 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6154 bytes 364 bytes 0 bytes 668 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6154 bytes 364 bytes 0 bytes 668 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 6288 bytes 364 bytes 0 bytes 668 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 6524 bytes 364 bytes 0 bytes 668 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 6524 bytes 364 bytes 0 bytes 668 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 6102 bytes 368 bytes 0 bytes 684 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 6472 bytes 368 bytes 0 bytes 684 bytes 3108 bytes