Cryptographic performance on STM32L5 Series

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


1. Measurement configuration

1.1. Hardware configuration

STM32 MCU STM32L552ZET6Q
Device ID 0x472
Revision ID 0x2000
Board NUCLEO-L552ZE-Q

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 110 MHz
Flash latency 5 wait states
Voltage scaling Range 0
Dual bank 0 (0: Single / 1: Dual)
ICACHE peripheral 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

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 5299 48 µs
AES CBC 128 bits 32 bytes Encryption Fast 4870 44 µs
AES CBC 128 bits 64 bytes Encryption Small 8692 79 µs
AES CBC 128 bits 64 bytes Encryption Fast 7466 67 µs
AES CBC 128 bits 128 bytes Encryption Small 15 483 140 µs
AES CBC 128 bits 128 bytes Encryption Fast 12 725 115 µs
AES CBC 192 bits 32 bytes Encryption Small 5922 53 µs
AES CBC 192 bits 32 bytes Encryption Fast 5221 47 µs
AES CBC 192 bits 64 bytes Encryption Small 9887 89 µs
AES CBC 192 bits 64 bytes Encryption Fast 8218 74 µs
AES CBC 192 bits 128 bytes Encryption Small 17 820 162 µs
AES CBC 192 bits 128 bytes Encryption Fast 14 277 129 µs
AES CBC 256 bits 32 bytes Encryption Small 6751 61 µs
AES CBC 256 bits 32 bytes Encryption Fast 6164 56 µs
AES CBC 256 bits 64 bytes Encryption Small 11 308 102 µs
AES CBC 256 bits 64 bytes Encryption Fast 9629 87 µs
AES CBC 256 bits 128 bytes Encryption Small 20 400 185 µs
AES CBC 256 bits 128 bytes Encryption Fast 16 467 149 µs
AES CBC 128 bits 32 bytes Decryption Small 8968 81 µs
AES CBC 128 bits 32 bytes Decryption Fast 6198 56 µs
AES CBC 128 bits 64 bytes Decryption Small 15 907 144 µs
AES CBC 128 bits 64 bytes Decryption Fast 8827 80 µs
AES CBC 128 bits 128 bytes Decryption Small 29 785 270 µs
AES CBC 128 bits 128 bytes Decryption Fast 14 122 128 µs
AES CBC 192 bits 32 bytes Decryption Small 10 428 94 µs
AES CBC 192 bits 32 bytes Decryption Fast 6919 62 µs
AES CBC 192 bits 64 bytes Decryption Small 18 739 170 µs
AES CBC 192 bits 64 bytes Decryption Fast 9986 90 µs
AES CBC 192 bits 128 bytes Decryption Small 35 345 321 µs
AES CBC 192 bits 128 bytes Decryption Fast 16 093 146 µs
AES CBC 256 bits 32 bytes Decryption Small 12 165 110 µs
AES CBC 256 bits 32 bytes Decryption Fast 7648 69 µs
AES CBC 256 bits 64 bytes Decryption Small 21 838 198 µs
AES CBC 256 bits 64 bytes Decryption Fast 11 082 100 µs
AES CBC 256 bits 128 bytes Decryption Small 41 185 374 µs
AES CBC 256 bits 128 bytes Decryption Fast 18 073 164 µs
Cryptolib STM32L552 AES CBC SB Enc.svg
Cryptolib STM32L552 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 2960 bytes 380 bytes 1 bytes 524 bytes
Encryption Fast 3292 bytes 1404 bytes 1 bytes 548 bytes
Decryption Small 3056 bytes 636 bytes 1 bytes 552 bytes
Decryption Fast 3716 bytes 1660 bytes 1 bytes 556 bytes
Cryptolib STM32L552 AES CBC SB Enc FP.svg
Cryptolib STM32L552 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 859 280 1024 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 669 184 1315 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 852 768 1031 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 663 696 1325 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 851 624 1033 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 662 616 1328 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 851 056 1034 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 662 112 1329 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 1 004 288 876 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 769 432 1143 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 997 784 881 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 764 032 1151 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 996 632 882 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 763 008 1153 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 996 064 883 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 762 504 1154 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 1 149 240 765 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 869 920 1011 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 1 142 736 770 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 864 416 1018 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 1 141 592 770 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 863 400 1019 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 1 141 008 771 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 862 904 1019 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 1 765 960 498 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 703 032 1251 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 1 758 240 500 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 689 304 1276 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 1 755 760 501 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 685 704 1283 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 1 752 592 502 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 681 856 1290 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 2 107 136 417 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 804 624 1093 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 2 099 456 419 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 790 792 1112 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 2 096 880 419 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 787 216 1117 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 2 093 720 420 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 783 304 1123 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 2 447 976 359 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 907 496 969 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 2 440 272 360 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 892 664 985 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 2 437 816 360 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 888 864 990 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 2 434 672 361 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 884 960 994 kbyte/s
Cryptolib STM32L552 AES CBC DF Enc.svg
Cryptolib STM32L552 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 2852 bytes 372 bytes 1 bytes 140 bytes
Encryption Fast 3184 bytes 1396 bytes 1 bytes 172 bytes
Decryption Small 2948 bytes 628 bytes 1 bytes 176 bytes
Decryption Fast 3608 bytes 1652 bytes 1 bytes 180 bytes
Cryptolib STM32L552 AES CBC DF Enc FP.svg
Cryptolib STM32L552 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 5337 48 µs
SHA256 64 bytes 8507 77 µs
SHA256 128 bytes 11 413 103 µs
SHA384 32 bytes 16 969 154 µs
SHA384 64 bytes 17 165 156 µs
SHA384 128 bytes 30 803 280 µs
Cryptolib STM32L552 HASH SB Dig.svg


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

HASH mode Code Constant data Global data Stack usage
SHA256 1780 296 bytes 1 bytes 564 bytes
SHA384 3012 744 bytes 1 bytes 1124 bytes
Cryptolib STM32L552 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 402 655 2185 kbyte/s
SHA256 8000 bytes 512 bytes 378 001 2328 kbyte/s
SHA256 8000 bytes 1024 bytes 373 926 2353 kbyte/s
SHA256 8000 bytes 2048 bytes 371 867 2366 kbyte/s
SHA384 8000 bytes 128 bytes 881 240 998 kbyte/s
SHA384 8000 bytes 512 bytes 840 224 1047 kbyte/s
SHA384 8000 bytes 1024 bytes 833 191 1056 kbyte/s
SHA384 8000 bytes 2048 bytes 829 645 1060 kbyte/s
Cryptolib STM32L552 HASH DF Dig.svg


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

HASH mode Cycles Time
SHA256 4370 39 µs
SHA384 15 552 141 µs

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

HASH mode Code Constant data Global data Stack usage
SHA256 1788 bytes 288 bytes 1 bytes 372 bytes
SHA384 3020 bytes 736 bytes 1 bytes 828 bytes
Cryptolib STM32L552 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 2 924 624 26 ms
SECP256R1 Signature Small High 2 833 152 25 ms
SECP256R1 Signature SuperFast Low 1 914 056 17 ms
SECP256R1 Signature SuperFast High 1 856 016 16 ms
SECP256R1 Verification Small Low 7 008 992 63 ms
SECP256R1 Verification Small High 6 237 136 56 ms
SECP256R1 Verification SuperFast Low 4 680 328 42 ms
SECP256R1 Verification SuperFast High 4 119 384 37 ms
SECP384R1 Signature Small Low 8 249 576 74 ms
SECP384R1 Signature Small High 7 884 680 71 ms
SECP384R1 Signature Fast Low 7 034 360 63 ms
SECP384R1 Signature Fast High 6 713 312 61 ms
SECP384R1 Verification Small Low 19 730 496 179 ms
SECP384R1 Verification Small High 17 141 648 155 ms
SECP384R1 Verification Fast Low 17 015 888 154 ms
SECP384R1 Verification Fast High 14 637 488 133 ms
Cryptolib STM32L552 ECDSA Sig.svg
Cryptolib STM32L552 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 636 bytes 1184 bytes 1 bytes 328 bytes 628 bytes
SECP256R1 Signature Small High 11 636 bytes 1568 bytes 1 bytes 328 bytes 696 bytes
SECP256R1 Signature SuperFast Low 12 946 bytes 1184 bytes 1 bytes 332 bytes 628 bytes
SECP256R1 Signature SuperFast High 12 946 bytes 1568 bytes 1 bytes 332 bytes 696 bytes
SECP256R1 Verification Small Low 12 158 bytes 1200 bytes 1 bytes 424 bytes 856 bytes
SECP256R1 Verification Small High 12 158 bytes 1584 bytes 1 bytes 424 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 13 468 bytes 1200 bytes 1 bytes 428 bytes 856 bytes
SECP256R1 Verification SuperFast High 13 468 bytes 1584 bytes 1 bytes 428 bytes 1648 bytes
SECP384R1 Signature Small Low 11 636 bytes 1664 bytes 1 bytes 328 bytes 884 bytes
SECP384R1 Signature Small High 11 636 bytes 2240 bytes 1 bytes 328 bytes 984 bytes
SECP384R1 Signature Fast Low 12 006 bytes 1664 bytes 1 bytes 344 bytes 884 bytes
SECP384R1 Signature Fast High 12 006 bytes 2240 bytes 1 bytes 344 bytes 984 bytes
SECP384R1 Verification Small Low 12 158 bytes 1680 bytes 1 bytes 424 bytes 1192 bytes
SECP384R1 Verification Small High 12 158 bytes 2256 bytes 1 bytes 424 bytes 2272 bytes
SECP384R1 Verification Fast Low 12 528 bytes 1680 bytes 1 bytes 440 bytes 1192 bytes
SECP384R1 Verification Fast High 12 528 bytes 2256 bytes 1 bytes 440 bytes 2272 bytes
Cryptolib STM32L552 ECDSA SECP256R1 Sig FP.svg
Cryptolib STM32L552 ECDSA SECP256R1 Ver FP.svg
Cryptolib STM32L552 ECDSA SECP384R1 Sig FP.svg
Cryptolib STM32L552 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 511 896 41 ms
Ed25519 1023 bytes Signature Small OptHigh 2 632 648 23 ms
Ed25519 1023 bytes Signature SuperFast OptLow 3 242 920 29 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 1 919 992 17 ms
Ed25519 1023 bytes Verification Small OptLow 6 792 304 61 ms
Ed25519 1023 bytes Verification Small OptHigh 5 958 792 54 ms
Ed25519 1023 bytes Verification SuperFast OptLow 4 654 664 42 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 4 072 960 37 ms
Cryptolib STM32L552 EdDSA Sig.svg
Cryptolib STM32L552 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 100 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptHigh 14 506 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptLow 15 410 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptHigh 15 816 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Verification Small OptLow 14 186 bytes 1748 bytes 1 bytes 1244 bytes 1152 bytes
Ed25519 1023 bytes Verification Small OptHigh 14 592 bytes 2900 bytes 1 bytes 1244 bytes 1992 bytes
Ed25519 1023 bytes Verification SuperFast OptLow 15 496 bytes 1748 bytes 1 bytes 1244 bytes 1152 bytes
Ed25519 1023 bytes Verification SuperFast OptHigh 15 902 bytes 2900 bytes 1 bytes 1244 bytes 1992 bytes
Cryptolib STM32L552 EdDSA Sig FP.svg
Cryptolib STM32L552 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 198 353 328 1803 ms
v2.2 CRT SHA-256 3K Signature Small Mid 149 293 056 1357 ms
v2.2 CRT SHA-256 3K Signature Small High 125 370 232 1139 ms
v2.2 CRT SHA-256 3K Signature Fast Low 158 894 368 1444 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 119 683 376 1088 ms
v2.2 CRT SHA-256 3K Signature Fast High 100 074 160 909 ms
v2.2 No CRT SHA-256 3K Signature Small Low 763 443 336 6940 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 573 386 688 5212 ms
v2.2 No CRT SHA-256 3K Signature Small High 479 617 744 4360 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 606 866 800 5516 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 455 903 856 4144 ms
v2.2 No CRT SHA-256 3K Signature Fast High 380 471 192 3458 ms
v2.2 n/a SHA-256 3K Verification Small n/a 3 813 464 34 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 3 286 840 29 ms
Cryptolib STM32L552 RSA Sig.svg
Cryptolib STM32L552 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 6986 bytes 371 bytes 5 bytes 700 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7234 bytes 371 bytes 5 bytes 700 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7234 bytes 371 bytes 5 bytes 700 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 7356 bytes 371 bytes 5 bytes 700 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 7604 bytes 371 bytes 5 bytes 700 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 7604 bytes 371 bytes 5 bytes 700 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 6016 bytes 363 bytes 5 bytes 700 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6264 bytes 363 bytes 5 bytes 700 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6264 bytes 363 bytes 5 bytes 700 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 6386 bytes 363 bytes 5 bytes 700 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 6634 bytes 363 bytes 5 bytes 700 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 6634 bytes 363 bytes 5 bytes 700 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 6762 bytes 367 bytes 5 bytes 716 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 7132 bytes 367 bytes 5 bytes 716 bytes 3108 bytes
Cryptolib STM32L552 RSA 3K CRT Sig FP.svg
Cryptolib STM32L552 RSA 3K NoCRT Sig FP.svg
Cryptolib STM32L552 RSA 3K Ver FP.svg