Cryptographic performance on STM32WL Series

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 0x1000
Board NUCLEO-WL55JC RevC

1.2 Firmware configuration

Cryptographic Library version 040000B1[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 V8.50.4.261/W32 for ARM
Info white.png Information
NOTE: The measurements are done using a project built with High Speed optimization setting enabled.


2 Performance values for Cortex®-M4

2.1 AES symmetric key encryption & decryption

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

  • Sole buffer: one sole buffer is encrypted or decrypted. Time to perform is given in µs.
  • Data flow: a big message is encrypted or decrypted by chunk. 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 whole 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 5642 117 µs
AES CBC 128 bits 32 bytes Encryption Fast 5703 118 µs
AES CBC 128 bits 64 bytes Encryption Small 9093 189 µs
AES CBC 128 bits 64 bytes Encryption Fast 9216 192 µs
AES CBC 128 bits 128 bytes Encryption Small 16 020 333 µs
AES CBC 128 bits 128 bytes Encryption Fast 16 223 337 µs
AES CBC 192 bits 32 bytes Encryption Small 6285 130 µs
AES CBC 192 bits 32 bytes Encryption Fast 6258 130 µs
AES CBC 192 bits 64 bytes Encryption Small 10 329 215 µs
AES CBC 192 bits 64 bytes Encryption Fast 10 310 214 µs
AES CBC 192 bits 128 bytes Encryption Small 18 327 381 µs
AES CBC 192 bits 128 bytes Encryption Fast 18 416 383 µs
AES CBC 256 bits 32 bytes Encryption Small 7137 148 µs
AES CBC 256 bits 32 bytes Encryption Fast 7145 148 µs
AES CBC 256 bits 64 bytes Encryption Small 11 693 243 µs
AES CBC 256 bits 64 bytes Encryption Fast 11 749 244 µs
AES CBC 256 bits 128 bytes Encryption Small 20 839 434 µs
AES CBC 256 bits 128 bytes Encryption Fast 20 967 436 µs
AES CBC 128 bits 32 bytes Decryption Small 9617 200 µs
AES CBC 128 bits 32 bytes Decryption Fast 7461 155 µs
AES CBC 128 bits 64 bytes Decryption Small 17 011 354 µs
AES CBC 128 bits 64 bytes Decryption Fast 11 086 230 µs
AES CBC 128 bits 128 bytes Decryption Small 31 761 661 µs
AES CBC 128 bits 128 bytes Decryption Fast 18 350 382 µs
AES CBC 192 bits 32 bytes Decryption Small 11 078 230 µs
AES CBC 192 bits 32 bytes Decryption Fast 8409 175 µs
AES CBC 192 bits 64 bytes Decryption Small 19 872 414 µs
AES CBC 192 bits 64 bytes Decryption Fast 12 623 262 µs
AES CBC 192 bits 128 bytes Decryption Small 37 490 781 µs
AES CBC 192 bits 128 bytes Decryption Fast 21 025 438 µs
AES CBC 256 bits 32 bytes Decryption Small 12 815 266 µs
AES CBC 256 bits 32 bytes Decryption Fast 9635 200 µs
AES CBC 256 bits 64 bytes Decryption Small 23 067 480 µs
AES CBC 256 bits 64 bytes Decryption Fast 14 467 301 µs
AES CBC 256 bits 128 bytes Decryption Small 43 525 906 µs
AES CBC 256 bits 128 bytes Decryption Fast 24 026 500 µs
Cryptolib STM32WL55 AES CBC SB Enc.svg
Cryptolib STM32WL55 AES CBC SB Dec.svg


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

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2936 bytes 380 bytes 1 bytes 524 bytes
Encryption Fast 3188 bytes 1404 bytes 1 bytes 548 bytes
Decryption Small 3068 bytes 636 bytes 1 bytes 552 bytes
Decryption Fast 3644 bytes 1660 bytes 1 bytes 556 bytes
Cryptolib STM32WL55 AES CBC SB Enc FP.svg
Cryptolib STM32WL55 AES CBC SB Dec FP.svg


2.1.2 Data flow mode

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

  • cmox_cipher_init
  • cmox_cipher_setKey
  • cmox_cipher_setIV
  • cmox_cipher_append: called several times to encrypt or decrypt the whole message by chunk of fixed size

The table below shows the number of clock cycles and bit rate (in kilobytes per second) needed to perform described operation in small and in 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 872 896 439 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 890 408 431 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 865 712 443 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 881 904 435 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 864 496 444 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 880 496 436 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 863 888 444 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 879 720 436 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 1 014 224 378 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 1 028 424 373 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 1 006 792 381 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 1 020 080 376 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 1 005 528 381 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 1 018 672 376 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 1 004 904 382 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 1 017 968 377 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 1 154 160 332 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 1 165 872 329 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 1 146 888 334 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 1 157 728 331 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 1 145 616 335 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 1 156 328 332 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 1 144 992 335 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 1 155 632 332 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 1 877 960 204 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 938 888 408 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 1 865 616 205 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 927 320 414 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 1 861 904 206 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 924 296 415 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 1 857 992 206 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 921 240 416 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 2 233 824 171 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 1 083 368 354 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 2 220 992 172 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 1 071 960 358 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 2 217 664 173 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 1 068 928 359 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 2 214 200 173 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 1 065 696 360 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 2 589 952 148 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 1 226 736 313 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 2 577 736 148 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 1 215 560 315 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 2 574 408 149 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 1 212 584 316 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 2 571 688 149 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 1 209 728 317 kbyte/s
Cryptolib STM32WL55 AES CBC DF Enc.svg
Cryptolib STM32WL55 AES CBC DF Dec.svg


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

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2828 bytes 372 bytes 1 bytes 140 bytes
Encryption Fast 3080 bytes 1396 bytes 1 bytes 172 bytes
Decryption Small 2960 bytes 628 bytes 1 bytes 176 bytes
Decryption Fast 3536 bytes 1652 bytes 1 bytes 180 bytes
Cryptolib STM32WL55 AES CBC DF Enc FP.svg
Cryptolib STM32WL55 AES CBC DF Dec FP.svg


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. Time to perform is given in us.
  • Data flow: a big message is hashed by chunk. Bit rate is given in bytes per s.

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 described operation.

HASH mode Buffer size Cycles Time
SHA256 32 bytes 5478 114 µs
SHA256 64 bytes 8784 183 µs
SHA256 128 bytes 11 765 245 µs
SHA384 32 bytes 19 094 397 µs
SHA384 64 bytes 19 300 402 µs
SHA384 128 bytes 35 875 747 µs
Cryptolib STM32WL55 HASH SB Dig.svg


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

HASH mode Code Constant data Global data Stack usage
SHA256 1848 296 bytes 1 bytes 564 bytes
SHA384 3004 744 bytes 1 bytes 1124 bytes
Cryptolib STM32WL55 HASH SB Dig FP.svg


2.2.2 Data flow mode

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

  • cmox_hash_init
  • cmox_hash_append: called several times to hash the whole message by chunk of fixed size
  • cmox_hash_generateTag

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

HASH mode Message size Chunk size Cycles Bit rate
SHA256 8000 bytes 128 bytes 418 643 917 kbyte/s
SHA256 8000 bytes 512 bytes 391 249 981 kbyte/s
SHA256 8000 bytes 1024 bytes 386 583 993 kbyte/s
SHA256 8000 bytes 2048 bytes 384 251 999 kbyte/s
SHA384 8000 bytes 128 bytes 1 063 783 360 kbyte/s
SHA384 8000 bytes 512 bytes 1 015 249 378 kbyte/s
SHA384 8000 bytes 1024 bytes 1 006 833 381 kbyte/s
SHA384 8000 bytes 2048 bytes 1 002 625 382 kbyte/s
Cryptolib STM32WL55 HASH DF Dig.svg


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

HASH mode Cycles Time
SHA256 4501 93 µs
SHA384 17 860 372 µs

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

HASH mode Code Constant data Global data Stack usage
SHA256 1856 bytes 288 bytes 1 bytes 372 bytes
SHA384 3012 bytes 736 bytes 1 bytes 828 bytes
Cryptolib STM32WL55 HASH DF Dig FP.svg


2.3 ECDSA signature & verification

In this section we provide the performance results for ECDSA signature & verification.

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

Curve Operation ECC mathematics configuration Curve definition Cycles Time
SECP256R1 Signature Small Low 3 058 008 63 ms
SECP256R1 Signature Small High 2 970 632 61 ms
SECP256R1 Signature SuperFast Low 2 263 088 47 ms
SECP256R1 Signature SuperFast High 2 191 712 45 ms
SECP256R1 Verification Small Low 7 382 280 153 ms
SECP256R1 Verification Small High 6 559 784 136 ms
SECP256R1 Verification SuperFast Low 5 526 416 115 ms
SECP256R1 Verification SuperFast High 4 891 992 101 ms
SECP384R1 Signature Small Low 8 367 256 174 ms
SECP384R1 Signature Small High 8 005 416 166 ms
SECP384R1 Signature Fast Low 8 237 232 171 ms
SECP384R1 Signature Fast High 7 893 280 164 ms
SECP384R1 Verification Small Low 20 101 024 418 ms
SECP384R1 Verification Small High 17 471 688 363 ms
SECP384R1 Verification Fast Low 19 800 624 412 ms
SECP384R1 Verification Fast High 17 244 232 359 ms
Cryptolib STM32WL55 ECDSA Sig.svg
Cryptolib STM32WL55 ECDSA Ver.svg


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

Curve Operation ECC mathematics configuration Curve definition Code Constant data Global data Stack usage Working buffer
SECP256R1 Signature Small Low 11 732 bytes 1184 bytes 1 bytes 328 bytes 628 bytes
SECP256R1 Signature Small High 11 732 bytes 1568 bytes 1 bytes 328 bytes 696 bytes
SECP256R1 Signature SuperFast Low 13 042 bytes 1184 bytes 1 bytes 332 bytes 628 bytes
SECP256R1 Signature SuperFast High 13 042 bytes 1568 bytes 1 bytes 332 bytes 696 bytes
SECP256R1 Verification Small Low 12 216 bytes 1200 bytes 1 bytes 424 bytes 856 bytes
SECP256R1 Verification Small High 12 216 bytes 1584 bytes 1 bytes 424 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 13 526 bytes 1200 bytes 1 bytes 428 bytes 856 bytes
SECP256R1 Verification SuperFast High 13 526 bytes 1584 bytes 1 bytes 428 bytes 1648 bytes
SECP384R1 Signature Small Low 11 732 bytes 1664 bytes 1 bytes 328 bytes 884 bytes
SECP384R1 Signature Small High 11 732 bytes 2240 bytes 1 bytes 328 bytes 984 bytes
SECP384R1 Signature Fast Low 12 102 bytes 1664 bytes 1 bytes 344 bytes 884 bytes
SECP384R1 Signature Fast High 12 102 bytes 2240 bytes 1 bytes 344 bytes 984 bytes
SECP384R1 Verification Small Low 12 216 bytes 1680 bytes 1 bytes 424 bytes 1192 bytes
SECP384R1 Verification Small High 12 216 bytes 2256 bytes 1 bytes 424 bytes 2272 bytes
SECP384R1 Verification Fast Low 12 586 bytes 1680 bytes 1 bytes 440 bytes 1192 bytes
SECP384R1 Verification Fast High 12 586 bytes 2256 bytes 1 bytes 440 bytes 2272 bytes
Cryptolib STM32WL55 ECDSA SECP256R1 Sig FP.svg
Cryptolib STM32WL55 ECDSA SECP256R1 Ver FP.svg
Cryptolib STM32WL55 ECDSA SECP384R1 Sig FP.svg
Cryptolib STM32WL55 ECDSA SECP384R1 Ver FP.svg


2.4 EdDSA signature & verification

In this section we provide the performance results for EdDSA signature & verification.

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

Curve Message size Operation ECC mathematics configuration Curve definition Cycles Time
Ed25519 1023 bytes Signature Small OptLow 4 817 480 100 ms
Ed25519 1023 bytes Signature Small OptHigh 2 818 064 58 ms
Ed25519 1023 bytes Signature SuperFast OptLow 3 792 360 79 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 2 237 272 46 ms
Ed25519 1023 bytes Verification Small OptLow 7 190 080 149 ms
Ed25519 1023 bytes Verification Small OptHigh 6 299 304 131 ms
Ed25519 1023 bytes Verification SuperFast OptLow 5 475 776 114 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 4 788 560 99 ms
Cryptolib STM32WL55 EdDSA Sig.svg
Cryptolib STM32WL55 EdDSA Ver.svg


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

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 088 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptHigh 14 494 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptLow 15 398 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptHigh 15 804 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Verification Small OptLow 14 178 bytes 1748 bytes 1 bytes 1244 bytes 1152 bytes
Ed25519 1023 bytes Verification Small OptHigh 14 584 bytes 2900 bytes 1 bytes 1244 bytes 1992 bytes
Ed25519 1023 bytes Verification SuperFast OptLow 15 488 bytes 1748 bytes 1 bytes 1244 bytes 1152 bytes
Ed25519 1023 bytes Verification SuperFast OptHigh 15 894 bytes 2900 bytes 1 bytes 1244 bytes 1992 bytes
Cryptolib STM32WL55 EdDSA Sig FP.svg
Cryptolib STM32WL55 EdDSA Ver FP.svg


2.5 RSA signature & verification

In this section we provide the performance results for RSA signature & verification.

The table below shows the number of clock cycles and time (in ms) needed to perform 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 679 960 3909 ms
v2.2 CRT SHA-256 3K Signature Small Mid 141 325 512 2944 ms
v2.2 CRT SHA-256 3K Signature Small High 118 679 656 2472 ms
v2.2 CRT SHA-256 3K Signature Fast Low 187 009 264 3896 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 140 833 056 2934 ms
v2.2 CRT SHA-256 3K Signature Fast High 117 761 552 2453 ms
v2.2 No CRT SHA-256 3K Signature Small Low 713 590 200 14 866 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 536 036 040 11 167 ms
v2.2 No CRT SHA-256 3K Signature Small High 448 385 984 9341 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 712 408 424 14 841 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 535 150 912 11 148 ms
v2.2 No CRT SHA-256 3K Signature Fast High 446 644 936 9305 ms
v2.2 n/a SHA-256 3K Verification Small n/a 3 816 560 79 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 3 770 000 78 ms
Cryptolib STM32WL55 RSA Sig.svg
Cryptolib STM32WL55 RSA Ver.svg


The table below shows RSA Flash 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 7034 bytes 370 bytes 5 bytes 700 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7282 bytes 370 bytes 5 bytes 700 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7282 bytes 370 bytes 5 bytes 700 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 7404 bytes 370 bytes 5 bytes 700 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 7652 bytes 370 bytes 5 bytes 700 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 7652 bytes 370 bytes 5 bytes 700 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 6064 bytes 362 bytes 5 bytes 700 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6312 bytes 362 bytes 5 bytes 700 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6312 bytes 362 bytes 5 bytes 700 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 6434 bytes 362 bytes 5 bytes 700 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 6682 bytes 362 bytes 5 bytes 700 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 6682 bytes 362 bytes 5 bytes 700 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 6810 bytes 366 bytes 5 bytes 716 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 7180 bytes 366 bytes 5 bytes 716 bytes 3108 bytes
Cryptolib STM32WL55 RSA 3K CRT Sig FP.svg
Cryptolib STM32WL55 RSA 3K NoCRT Sig FP.svg
Cryptolib STM32WL55 RSA 3K Ver FP.svg



3 Performances values for Cortex®-M0+

3.1 AES symmetric key encryption & decryption

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

  • Sole buffer: one sole buffer is encrypted or decrypted. Time to perform is given in µs.
  • Data flow: a big message is encrypted or decrypted by chunk. Bit rate is given in kilobytes per second.

3.1.1 Sole buffer mode

In this mode the entire encryption or decryption process, for the whole 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 10 231 213 µs
AES CBC 128 bits 32 bytes Encryption Fast 10 057 209 µs
AES CBC 128 bits 64 bytes Encryption Small 17 517 364 µs
AES CBC 128 bits 64 bytes Encryption Fast 16 033 334 µs
AES CBC 128 bits 128 bytes Encryption Small 32 089 668 µs
AES CBC 128 bits 128 bytes Encryption Fast 27 985 583 µs
AES CBC 192 bits 32 bytes Encryption Small 11 560 240 µs
AES CBC 192 bits 32 bytes Encryption Fast 11 098 231 µs
AES CBC 192 bits 64 bytes Encryption Small 20 170 420 µs
AES CBC 192 bits 64 bytes Encryption Fast 18 090 376 µs
AES CBC 192 bits 128 bytes Encryption Small 37 390 778 µs
AES CBC 192 bits 128 bytes Encryption Fast 32 074 668 µs
AES CBC 256 bits 32 bytes Encryption Small 13 230 275 µs
AES CBC 256 bits 32 bytes Encryption Fast 12 549 261 µs
AES CBC 256 bits 64 bytes Encryption Small 23 164 482 µs
AES CBC 256 bits 64 bytes Encryption Fast 20 557 428 µs
AES CBC 256 bits 128 bytes Encryption Small 43 032 896 µs
AES CBC 256 bits 128 bytes Encryption Fast 36 573 761 µs
AES CBC 128 bits 32 bytes Decryption Small 14 383 299 µs
AES CBC 128 bits 32 bytes Decryption Fast 12 702 264 µs
AES CBC 128 bits 64 bytes Decryption Small 25 809 537 µs
AES CBC 128 bits 64 bytes Decryption Fast 18 962 395 µs
AES CBC 128 bits 128 bytes Decryption Small 48 661 1013 µs
AES CBC 128 bits 128 bytes Decryption Fast 31 482 655 µs
AES CBC 192 bits 32 bytes Decryption Small 16 597 345 µs
AES CBC 192 bits 32 bytes Decryption Fast 14 298 297 µs
AES CBC 192 bits 64 bytes Decryption Small 30 239 629 µs
AES CBC 192 bits 64 bytes Decryption Fast 21 606 450 µs
AES CBC 192 bits 128 bytes Decryption Small 57 523 1198 µs
AES CBC 192 bits 128 bytes Decryption Fast 36 222 754 µs
AES CBC 256 bits 32 bytes Decryption Small 19 166 399 µs
AES CBC 256 bits 32 bytes Decryption Fast 16 302 339 µs
AES CBC 256 bits 64 bytes Decryption Small 35 024 729 µs
AES CBC 256 bits 64 bytes Decryption Fast 24 670 513 µs
AES CBC 256 bits 128 bytes Decryption Small 66 740 1390 µs
AES CBC 256 bits 128 bytes Decryption Fast 41 406 862 µs
Cryptolib STM32WL55 CM0PLUS AES CBC SB Enc.svg
Cryptolib STM32WL55 CM0PLUS AES CBC SB Dec.svg


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

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 3028 bytes 380 bytes 1 bytes 536 bytes
Encryption Fast 3276 bytes 1404 bytes 1 bytes 540 bytes
Decryption Small 3104 bytes 636 bytes 1 bytes 584 bytes
Decryption Fast 3696 bytes 1660 bytes 1 bytes 560 bytes
Cryptolib STM32WL55 CM0PLUS AES CBC SB Enc FP.svg
Cryptolib STM32WL55 CM0PLUS AES CBC SB Dec FP.svg


3.1.2 Data flow mode

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

  • cmox_cipher_init
  • cmox_cipher_setKey
  • cmox_cipher_setIV
  • cmox_cipher_append: called several times to encrypt or decrypt the whole message by chunk of fixed size

The table below shows the number of clock cycles and bit rate (in kilobytes per second) needed to perform described operation in small and in 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 1 856 576 206 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 1 530 384 250 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 1 847 600 207 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 1 521 544 252 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 1 846 064 208 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 1 520 048 252 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 1 845 312 208 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 1 519 296 252 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 2 187 576 175 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 1 784 384 215 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 2 178 600 176 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 1 775 552 216 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 2 177 072 176 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 1 774 048 216 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 2 176 304 176 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 1 773 296 216 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 2 518 576 152 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 2 038 384 188 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 2 509 600 153 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 2 029 544 189 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 2 508 064 153 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 2 028 048 189 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 2 507 304 153 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 2 027 296 189 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 2 893 440 132 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 1 602 600 239 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 2 881 448 133 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 1 590 096 241 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 2 878 128 133 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 1 586 688 242 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 2 874 344 133 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 1 582 864 242 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 3 447 440 111 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 1 864 600 205 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 3 435 456 111 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 1 852 104 207 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 3 432 128 111 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 1 848 688 207 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 3 428 344 112 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 1 844 864 208 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 4 001 672 95 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 2 129 360 180 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 3 989 504 96 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 2 117 056 181 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 3 986 136 96 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 2 113 664 181 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 3 982 352 96 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 2 109 864 182 kbyte/s
Cryptolib STM32WL55 CM0PLUS AES CBC DF Enc.svg
Cryptolib STM32WL55 CM0PLUS AES CBC DF Dec.svg


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

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2950 bytes 372 bytes 1 bytes 152 bytes
Encryption Fast 3198 bytes 1396 bytes 1 bytes 164 bytes
Decryption Small 3022 bytes 628 bytes 1 bytes 208 bytes
Decryption Fast 3614 bytes 1652 bytes 1 bytes 184 bytes
Cryptolib STM32WL55 CM0PLUS AES CBC DF Enc FP.svg
Cryptolib STM32WL55 CM0PLUS AES CBC DF Dec FP.svg


3.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. Time to perform is given in us.
  • Data flow: a big message is hashed by chunk. Bit rate is given in bytes per s.

3.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 described operation.

HASH mode Buffer size Cycles Time
SHA256 32 bytes 11 080 230 µs
SHA256 64 bytes 19 241 400 µs
SHA256 128 bytes 27 309 568 µs
SHA384 32 bytes 38 646 805 µs
SHA384 64 bytes 38 656 805 µs
SHA384 128 bytes 72 865 1518 µs
Cryptolib STM32WL55 CM0PLUS HASH SB Dig.svg


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

HASH mode Code Constant data Global data Stack usage
SHA256 1846 296 bytes 1 bytes 580 bytes
SHA384 3158 744 bytes 1 bytes 1132 bytes
Cryptolib STM32WL55 CM0PLUS HASH SB Dig FP.svg


3.2.2 Data flow mode

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

  • cmox_hash_init
  • cmox_hash_append: called several times to hash the whole message by chunk of fixed size
  • cmox_hash_generateTag

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

HASH mode Message size Chunk size Cycles Bit rate
SHA256 8000 bytes 128 bytes 1 030 985 372 kbyte/s
SHA256 8000 bytes 512 bytes 1 017 214 377 kbyte/s
SHA256 8000 bytes 1024 bytes 1 014 870 378 kbyte/s
SHA256 8000 bytes 2048 bytes 1 013 698 378 kbyte/s
SHA384 8000 bytes 128 bytes 2 137 254 179 kbyte/s
SHA384 8000 bytes 512 bytes 2 122 004 180 kbyte/s
SHA384 8000 bytes 1024 bytes 2 119 388 181 kbyte/s
SHA384 8000 bytes 2048 bytes 2 118 080 181 kbyte/s
Cryptolib STM32WL55 CM0PLUS HASH DF Dig.svg


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

HASH mode Cycles Time
SHA256 10 341 215 µs
SHA384 37 843 788 µs

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

HASH mode Code Constant data Global data Stack usage
SHA256 1874 bytes 288 bytes 1 bytes 380 bytes
SHA384 3186 bytes 736 bytes 1 bytes 828 bytes
Cryptolib STM32WL55 CM0PLUS HASH DF Dig FP.svg


3.3 ECDSA signature & verification

In this section we provide the performance results for ECDSA signature & verification.

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

Curve Operation ECC mathematics configuration Curve definition Cycles Time
SECP256R1 Signature Small Low 12 376 176 257 ms
SECP256R1 Signature Small High 11 922 104 248 ms
SECP256R1 Signature SuperFast Low 9 289 128 193 ms
SECP256R1 Signature SuperFast High 9 036 448 188 ms
SECP256R1 Verification Small Low 29 311 368 610 ms
SECP256R1 Verification Small High 25 844 168 538 ms
SECP256R1 Verification SuperFast Low 22 231 544 463 ms
SECP256R1 Verification SuperFast High 19 783 032 412 ms
SECP384R1 Signature Small Low 39 216 312 817 ms
SECP384R1 Signature Small High 37 470 008 780 ms
SECP384R1 Signature Fast Low 33 120 720 690 ms
SECP384R1 Signature Fast High 31 892 880 664 ms
SECP384R1 Verification Small Low 92 644 096 1930 ms
SECP384R1 Verification Small High 80 578 208 1678 ms
SECP384R1 Verification Fast Low 78 657 120 1638 ms
SECP384R1 Verification Fast High 68 981 648 1437 ms
Cryptolib STM32WL55 CM0PLUS ECDSA Sig.svg
Cryptolib STM32WL55 CM0PLUS ECDSA Ver.svg


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

Curve Operation ECC mathematics configuration Curve definition Code Constant data Global data Stack usage Working buffer
SECP256R1 Signature Small Low 11 900 bytes 1184 bytes 1 bytes 320 bytes 628 bytes
SECP256R1 Signature Small High 11 900 bytes 1568 bytes 1 bytes 320 bytes 696 bytes
SECP256R1 Signature SuperFast Low 15 240 bytes 1184 bytes 1 bytes 368 bytes 628 bytes
SECP256R1 Signature SuperFast High 15 240 bytes 1568 bytes 1 bytes 368 bytes 696 bytes
SECP256R1 Verification Small Low 12 370 bytes 1200 bytes 1 bytes 408 bytes 856 bytes
SECP256R1 Verification Small High 12 370 bytes 1584 bytes 1 bytes 408 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 15 710 bytes 1200 bytes 1 bytes 456 bytes 856 bytes
SECP256R1 Verification SuperFast High 15 710 bytes 1584 bytes 1 bytes 456 bytes 1648 bytes
SECP384R1 Signature Small Low 11 900 bytes 1664 bytes 1 bytes 320 bytes 884 bytes
SECP384R1 Signature Small High 11 900 bytes 2240 bytes 1 bytes 320 bytes 984 bytes
SECP384R1 Signature Fast Low 12 738 bytes 1664 bytes 1 bytes 312 bytes 884 bytes
SECP384R1 Signature Fast High 12 738 bytes 2240 bytes 1 bytes 312 bytes 984 bytes
SECP384R1 Verification Small Low 12 370 bytes 1680 bytes 1 bytes 408 bytes 1192 bytes
SECP384R1 Verification Small High 12 370 bytes 2256 bytes 1 bytes 408 bytes 2272 bytes
SECP384R1 Verification Fast Low 13 208 bytes 1680 bytes 1 bytes 400 bytes 1192 bytes
SECP384R1 Verification Fast High 13 208 bytes 2256 bytes 1 bytes 400 bytes 2272 bytes
Cryptolib STM32WL55 CM0PLUS ECDSA SECP256R1 Sig FP.svg
Cryptolib STM32WL55 CM0PLUS ECDSA SECP256R1 Ver FP.svg
Cryptolib STM32WL55 CM0PLUS ECDSA SECP384R1 Sig FP.svg
Cryptolib STM32WL55 CM0PLUS ECDSA SECP384R1 Ver FP.svg


3.4 EdDSA signature & verification

In this section we provide the performance results for EdDSA signature & verification.

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

Curve Message size Operation ECC mathematics configuration Curve definition Cycles Time
Ed25519 1023 bytes Signature Small OptLow 17 541 032 365 ms
Ed25519 1023 bytes Signature Small OptHigh 10 047 072 209 ms
Ed25519 1023 bytes Signature SuperFast OptLow 13 863 464 288 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 7 844 864 163 ms
Ed25519 1023 bytes Verification Small OptLow 27 593 736 574 ms
Ed25519 1023 bytes Verification Small OptHigh 24 073 808 501 ms
Ed25519 1023 bytes Verification SuperFast OptLow 21 353 856 444 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 18 258 080 380 ms
Cryptolib STM32WL55 CM0PLUS EdDSA Sig.svg
Cryptolib STM32WL55 CM0PLUS EdDSA Ver.svg


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

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 550 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptHigh 14 972 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptLow 17 890 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptHigh 18 312 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Verification Small OptLow 14 608 bytes 1748 bytes 1 bytes 1236 bytes 1152 bytes
Ed25519 1023 bytes Verification Small OptHigh 15 030 bytes 2900 bytes 1 bytes 1236 bytes 1992 bytes
Ed25519 1023 bytes Verification SuperFast OptLow 17 948 bytes 1748 bytes 1 bytes 1236 bytes 1152 bytes
Ed25519 1023 bytes Verification SuperFast OptHigh 18 370 bytes 2900 bytes 1 bytes 1236 bytes 1992 bytes
Cryptolib STM32WL55 CM0PLUS EdDSA Sig FP.svg
Cryptolib STM32WL55 CM0PLUS EdDSA Ver FP.svg


3.5 RSA signature & verification

In this section we provide the performance results for RSA signature & verification.

The table below shows the number of clock cycles and time (in ms) needed to perform 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 1 094 403 880 22 800 ms
v2.2 CRT SHA-256 3K Signature Small Mid 832 868 816 17 351 ms
v2.2 CRT SHA-256 3K Signature Small High 694 549 360 14 469 ms
v2.2 CRT SHA-256 3K Signature Fast Low 922 009 088 19 208 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 664 079 472 13 834 ms
v2.2 CRT SHA-256 3K Signature Fast High 551 535 184 11 490 ms
v2.2 No CRT SHA-256 3K Signature Small Low 4 309 167 424 89 774 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 3 276 556 864 68 261 ms
v2.2 No CRT SHA-256 3K Signature Small High 2 722 194 584 56 712 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 3 624 847 920 75 517 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 2 599 469 688 54 155 ms
v2.2 No CRT SHA-256 3K Signature Fast High 2 147 945 432 44 748 ms
v2.2 n/a SHA-256 3K Verification Small n/a 17 091 480 356 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 14 019 104 292 ms
Cryptolib STM32WL55 CM0PLUS RSA Sig.svg
Cryptolib STM32WL55 CM0PLUS RSA Ver.svg


The table below shows RSA Flash 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 7260 bytes 369 bytes 5 bytes 708 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7538 bytes 369 bytes 5 bytes 708 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7538 bytes 369 bytes 5 bytes 708 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 8098 bytes 370 bytes 5 bytes 708 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 8376 bytes 370 bytes 5 bytes 708 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 8376 bytes 370 bytes 5 bytes 708 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 6274 bytes 361 bytes 5 bytes 708 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6552 bytes 362 bytes 5 bytes 708 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6552 bytes 362 bytes 5 bytes 708 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 7112 bytes 362 bytes 5 bytes 708 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 7390 bytes 362 bytes 5 bytes 708 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 7390 bytes 362 bytes 5 bytes 708 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 7054 bytes 365 bytes 5 bytes 724 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 7892 bytes 366 bytes 5 bytes 724 bytes 3108 bytes
Cryptolib STM32WL55 CM0PLUS RSA 3K CRT Sig FP.svg
Cryptolib STM32WL55 CM0PLUS RSA 3K NoCRT Sig FP.svg
Cryptolib STM32WL55 CM0PLUS RSA 3K Ver FP.svg