Cryptographic performance on STM32U0 MCUs


This page shows the measured performance results when using the pure software cryptographic library algorithms with an STM32U0 MCU. In addition to performance figures, it also gives the required code footprint and memory.


1. Measurement configuration

1.1. Hardware configuration

STM32 MCU STM32U083RCTx
Device ID 0x489
Revision ID 0x1000
Board NUCLEO-U083RC

1.2. Firmware configuration

Cryptographic library version 040000B1[ver. 1]
  1. This value corresponds to the information returned by calling cmox_getInfos

1.3. System configuration

System core clock frequency 56 MHz
Flash latency 1 wait state
Voltage scaling Range 1
Instruction cache (ART/ICU) 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.20.4.327/W64 for ARM
Info white.png 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 8928 159 µs
AES CBC 128 bits 32 bytes Encryption Fast 7694 137 µs
AES CBC 128 bits 64 bytes Encryption Small 15 240 272 µs
AES CBC 128 bits 64 bytes Encryption Fast 12 758 227 µs
AES CBC 128 bits 128 bytes Encryption Small 27 864 497 µs
AES CBC 128 bits 128 bytes Encryption Fast 22 886 408 µs
AES CBC 192 bits 32 bytes Encryption Small 10 094 180 µs
AES CBC 192 bits 32 bytes Encryption Fast 8565 152 µs
AES CBC 192 bits 64 bytes Encryption Small 17 545 313 µs
AES CBC 192 bits 64 bytes Encryption Fast 14 473 258 µs
AES CBC 192 bits 128 bytes Encryption Small 32 449 579 µs
AES CBC 192 bits 128 bytes Encryption Fast 26 293 469 µs
AES CBC 256 bits 32 bytes Encryption Small 11 614 207 µs
AES CBC 256 bits 32 bytes Encryption Fast 9779 174 µs
AES CBC 256 bits 64 bytes Encryption Small 20 206 360 µs
AES CBC 256 bits 64 bytes Encryption Fast 16 529 295 µs
AES CBC 256 bits 128 bytes Encryption Small 37 390 667 µs
AES CBC 256 bits 128 bytes Encryption Fast 30 032 536 µs
AES CBC 128 bits 32 bytes Decryption Small 12 731 227 µs
AES CBC 128 bits 32 bytes Decryption Fast 9620 171 µs
AES CBC 128 bits 64 bytes Decryption Small 22 843 407 µs
AES CBC 128 bits 64 bytes Decryption Fast 14 804 264 µs
AES CBC 128 bits 128 bytes Decryption Small 43 067 769 µs
AES CBC 128 bits 128 bytes Decryption Fast 25 172 449 µs
AES CBC 192 bits 32 bytes Decryption Small 14 733 263 µs
AES CBC 192 bits 32 bytes Decryption Fast 10 891 194 µs
AES CBC 192 bits 64 bytes Decryption Small 26 821 478 µs
AES CBC 192 bits 64 bytes Decryption Fast 16 925 302 µs
AES CBC 192 bits 128 bytes Decryption Small 50 997 910 µs
AES CBC 192 bits 128 bytes Decryption Fast 28 990 517 µs
AES CBC 256 bits 32 bytes Decryption Small 17 087 305 µs
AES CBC 256 bits 32 bytes Decryption Fast 12 523 223 µs
AES CBC 256 bits 64 bytes Decryption Small 31 151 556 µs
AES CBC 256 bits 64 bytes Decryption Fast 19 434 347 µs
AES CBC 256 bits 128 bytes Decryption Small 59 279 1058 µs
AES CBC 256 bits 128 bytes Decryption Fast 33 257 593 µs
Cryptolib STM32U083 AES CBC SB Enc.svg
Cryptolib STM32U083 AES CBC SB Dec.svg


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

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


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 1 589 432 281 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 1 277 632 350 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 1 580 920 283 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 1 268 896 353 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 1 579 464 283 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 1 267 336 353 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 1 578 752 283 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 1 266 608 353 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 1 874 312 239 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 1 488 584 300 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 1 865 896 240 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 1 479 968 302 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 1 864 464 240 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 1 478 512 303 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 1 863 744 240 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 1 477 776 303 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 2 159 248 207 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 1 699 448 263 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 2 150 880 208 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 1 690 832 264 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 2 149 456 208 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 1 689 400 265 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 2 148 752 208 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 1 688 688 265 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 2 561 368 174 Kbytes/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 1 329 928 336 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 2 550 656 175 Kbytes/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 1 318 008 339 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 2 547 656 175 Kbytes/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 1 314 848 340 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 2 544 240 176 Kbytes/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 1 312 200 341 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 3 055 272 146 Kbytes/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 1 542 512 290 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 3 044 624 147 Kbytes/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 1 531 312 292 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 3 041 640 147 Kbytes/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 1 528 416 293 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 3 038 232 147 Kbytes/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 1 525 536 293 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 3 549 592 126 Kbytes/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 1 761 832 254 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 3 538 704 126 Kbytes/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 1 750 408 255 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 3 535 680 126 Kbytes/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 1 747 312 256 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 3 532 248 126 Kbytes/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 1 743 880 256 Kbytes/s
Cryptolib STM32U083 AES CBC DF Enc.svg
Cryptolib STM32U083 AES CBC DF Dec.svg


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

Cipher operation Configuration Code Constant data Global data Stack usage
Encryption Small 2950 bytes 372 bytes 1 byte 152 bytes
Encryption Fast 3198 bytes 1396 bytes 1 byte 164 bytes
Decryption Small 3022 bytes 628 bytes 1 byte 208 bytes
Decryption Fast 3614 bytes 1652 bytes 1 byte 184 bytes
Cryptolib STM32U083 AES CBC DF Enc FP.svg
Cryptolib STM32U083 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. 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 10 406 185 µs
SHA256 64 bytes 18 339 327 µs
SHA256 128 bytes 26 198 467 µs
SHA384 32 bytes 37 626 671 µs
SHA384 64 bytes 37 640 672 µs
SHA384 128 bytes 71 588 1278 µs
Cryptolib STM32U083 HASH SB Dig.svg


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

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


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 997 920 448 Kbytes/s
SHA256 8000 bytes 512 bytes 986 076 454 Kbytes/s
SHA256 8000 bytes 1024 bytes 984 060 455 Kbytes/s
SHA256 8000 bytes 2048 bytes 983 052 455 Kbytes/s
SHA384 8000 bytes 128 bytes 2 117 500 211 Kbytes/s
SHA384 8000 bytes 512 bytes 2 103 391 212 Kbytes/s
SHA384 8000 bytes 1024 bytes 2 100 967 213 Kbytes/s
SHA384 8000 bytes 2048 bytes 2 099 755 213 Kbytes/s
Cryptolib STM32U083 HASH DF Dig.svg


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

HASH mode Cycles Time
SHA256 9753 174 µs
SHA384 36 922 659 µs

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

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


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 11 075 896 197 ms
SECP256R1 Signature Small High 10 749 392 191 ms
SECP256R1 Signature SuperFast Low 8 433 960 150 ms
SECP256R1 Signature SuperFast High 8 178 104 146 ms
SECP256R1 Verification Small Low 26 233 784 468 ms
SECP256R1 Verification Small High 23 303 112 416 ms
SECP256R1 Verification SuperFast Low 20 205 624 360 ms
SECP256R1 Verification SuperFast High 17 913 424 319 ms
SECP384R1 Signature Small Low 34 925 656 623 ms
SECP384R1 Signature Small High 33 386 776 596 ms
SECP384R1 Signature Fast Low 30 190 104 539 ms
SECP384R1 Signature Fast High 28 783 704 513 ms
SECP384R1 Verification Small Low 82 503 576 1473 ms
SECP384R1 Verification Small High 71 798 080 1282 ms
SECP384R1 Verification Fast Low 71 905 328 1284 ms
SECP384R1 Verification Fast High 62 344 352 1113 ms
Cryptolib STM32U083 ECDSA Sig.svg
Cryptolib STM32U083 ECDSA Ver.svg


The table below shows ECDSA flash memory 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 byte 320 bytes 628 bytes
SECP256R1 Signature Small High 11 900 bytes 1568 bytes 1 byte 320 bytes 696 bytes
SECP256R1 Signature SuperFast Low 15 240 bytes 1184 bytes 1 byte 368 bytes 628 bytes
SECP256R1 Signature SuperFast High 15 240 bytes 1568 bytes 1 byte 368 bytes 696 bytes
SECP256R1 Verification Small Low 12 370 bytes 1200 bytes 1 byte 408 bytes 856 bytes
SECP256R1 Verification Small High 12 370 bytes 1584 bytes 1 byte 408 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 15 710 bytes 1200 bytes 1 byte 456 bytes 856 bytes
SECP256R1 Verification SuperFast High 15 710 bytes 1584 bytes 1 byte 456 bytes 1648 bytes
SECP384R1 Signature Small Low 11 900 bytes 1664 bytes 1 byte 320 bytes 884 bytes
SECP384R1 Signature Small High 11 900 bytes 2240 bytes 1 byte 320 bytes 984 bytes
SECP384R1 Signature Fast Low 12 738 bytes 1664 bytes 1 byte 312 bytes 884 bytes
SECP384R1 Signature Fast High 12 738 bytes 2240 bytes 1 byte 312 bytes 984 bytes
SECP384R1 Verification Small Low 12 370 bytes 1680 bytes 1 byte 408 bytes 1192 bytes
SECP384R1 Verification Small High 12 370 bytes 2256 bytes 1 byte 408 bytes 2272 bytes
SECP384R1 Verification Fast Low 13 208 bytes 1680 bytes 1 byte 400 bytes 1192 bytes
SECP384R1 Verification Fast High 13 208 bytes 2256 bytes 1 byte 400 bytes 2272 bytes
Cryptolib STM32U083 ECDSA SECP256R1 Sig FP.svg
Cryptolib STM32U083 ECDSA SECP256R1 Ver FP.svg
Cryptolib STM32U083 ECDSA SECP384R1 Sig FP.svg
Cryptolib STM32U083 ECDSA SECP384R1 Ver FP.svg


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 15 768 800 281 ms
Ed25519 1023 bytes Signature Small OptHigh 9 067 432 161 ms
Ed25519 1023 bytes Signature SuperFast OptLow 12 623 392 225 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 7 270 680 129 ms
Ed25519 1023 bytes Verification Small OptLow 24 767 632 442 ms
Ed25519 1023 bytes Verification Small OptHigh 21 653 960 386 ms
Ed25519 1023 bytes Verification SuperFast OptLow 19 404 504 346 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 16 892 176 301 ms
Cryptolib STM32U083 EdDSA Sig.svg
Cryptolib STM32U083 EdDSA Ver.svg


The table below shows EdDSA flash memory 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 byte 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptHigh 14 972 bytes 2896 bytes 1 byte 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptLow 17 890 bytes 1744 bytes 1 byte 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptHigh 18 312 bytes 2896 bytes 1 byte 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptLow 14 608 bytes 1748 bytes 1 byte 1236 bytes 1152 bytes
Ed25519 1023 bytes Signature Small OptHigh 15 030 bytes 2900 bytes 1 byte 1236 bytes 1992 bytes
Ed25519 1023 bytes Signature Small OptLow 17 948 bytes 1748 bytes 1 byte 1236 bytes 1152 bytes
Ed25519 1023 bytes Signature Small OptHigh 18 370 bytes 2900 bytes 1 byte 1236 bytes 1992 bytes
Cryptolib STM32U083 EdDSA Sig FP.svg
Cryptolib STM32U083 EdDSA Ver FP.svg


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 1 008 687 664 18 012 ms
v2.2 CRT SHA-256 3K Signature Small Mid 758 194 128 13 539 ms
v2.2 CRT SHA-256 3K Signature Small High 636 388 760 11 364 ms
v2.2 CRT SHA-256 3K Signature Fast Low 854 703 880 15 262 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 620 894 400 11 087 ms
v2.2 CRT SHA-256 3K Signature Fast High 506 889 648 9051 ms
v2.2 No CRT SHA-256 3K Signature Small Low 3 968 112 976 70 859 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 2 978 835 136 53 193 ms
v2.2 No CRT SHA-256 3K Signature Small High 2 491 131 976 44 484 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 3 355 930 880 59 927 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 2 428 359 688 43 363 ms
v2.2 No CRT SHA-256 3K Signature Fast High 1 970 423 440 35 186 ms
v2.2 n/a SHA-256 3K Verification Small n/a 15 538 464 277 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 12 834 568 229 ms
Cryptolib STM32U083 RSA Sig.svg
Cryptolib STM32U083 RSA Ver.svg


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 7260 bytes 372 bytes 5 bytes 708 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7538 bytes 372 bytes 5 bytes 708 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7538 bytes 372 bytes 5 bytes 708 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 8098 bytes 372 bytes 5 bytes 708 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 8376 bytes 372 bytes 5 bytes 708 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 8376 bytes 372 bytes 5 bytes 708 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 6274 bytes 364 bytes 5 bytes 708 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6552 bytes 364 bytes 5 bytes 708 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6552 bytes 364 bytes 5 bytes 708 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 7112 bytes 364 bytes 5 bytes 708 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 7390 bytes 364 bytes 5 bytes 708 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 7390 bytes 364 bytes 5 bytes 708 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 7054 bytes 368 bytes 5 bytes 724 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 7892 bytes 368 bytes 5 bytes 724 bytes 3108 bytes
Cryptolib STM32U083 RSA 3K CRT Sig FP.svg
Cryptolib STM32U083 RSA 3K NoCRT Sig FP.svg
Cryptolib STM32U083 RSA 3K Ver FP.svg


Usage: