Cryptographic performance on STM32WB Series

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


1 Measurement configuration

1.1 Hardware configuration

STM32 MCU STM32WB55RG
Device ID 0x495
Revision ID 0x2001
Board P-NUCLEO-WB55

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 64 MHz
Flash latency 3 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

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 5846 91 µs
AES CBC 128 bits 32 bytes Encryption Fast 6251 97 µs
AES CBC 128 bits 64 bytes Encryption Small 9287 145 µs
AES CBC 128 bits 64 bytes Encryption Fast 10 068 157 µs
AES CBC 128 bits 128 bytes Encryption Small 16 142 252 µs
AES CBC 128 bits 128 bytes Encryption Fast 17 656 275 µs
AES CBC 192 bits 32 bytes Encryption Small 6458 100 µs
AES CBC 192 bits 32 bytes Encryption Fast 6854 107 µs
AES CBC 192 bits 64 bytes Encryption Small 10 444 163 µs
AES CBC 192 bits 64 bytes Encryption Fast 11 258 175 µs
AES CBC 192 bits 128 bytes Encryption Small 18 416 287 µs
AES CBC 192 bits 128 bytes Encryption Fast 20 036 313 µs
AES CBC 256 bits 32 bytes Encryption Small 7344 114 µs
AES CBC 256 bits 32 bytes Encryption Fast 7855 122 µs
AES CBC 256 bits 64 bytes Encryption Small 11 873 185 µs
AES CBC 256 bits 64 bytes Encryption Fast 12 889 201 µs
AES CBC 256 bits 128 bytes Encryption Small 20 937 327 µs
AES CBC 256 bits 128 bytes Encryption Fast 22 921 358 µs
AES CBC 128 bits 32 bytes Decryption Small 9867 154 µs
AES CBC 128 bits 32 bytes Decryption Fast 8246 128 µs
AES CBC 128 bits 64 bytes Decryption Small 17 226 269 µs
AES CBC 128 bits 64 bytes Decryption Fast 12 218 190 µs
AES CBC 128 bits 128 bytes Decryption Small 31 942 499 µs
AES CBC 128 bits 128 bytes Decryption Fast 20 173 315 µs
AES CBC 192 bits 32 bytes Decryption Small 11 280 176 µs
AES CBC 192 bits 32 bytes Decryption Fast 9360 146 µs
AES CBC 192 bits 64 bytes Decryption Small 20 069 313 µs
AES CBC 192 bits 64 bytes Decryption Fast 13 954 218 µs
AES CBC 192 bits 128 bytes Decryption Small 37 600 587 µs
AES CBC 192 bits 128 bytes Decryption Fast 23 119 361 µs
AES CBC 256 bits 32 bytes Decryption Small 13 094 204 µs
AES CBC 256 bits 32 bytes Decryption Fast 10 691 167 µs
AES CBC 256 bits 64 bytes Decryption Small 23 271 363 µs
AES CBC 256 bits 64 bytes Decryption Fast 15 925 248 µs
AES CBC 256 bits 128 bytes Decryption Small 43 681 682 µs
AES CBC 256 bits 128 bytes Decryption Fast 26 378 412 µs
Cryptolib STM32WB55 AES CBC SB Enc.svg
Cryptolib STM32WB55 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 STM32WB55 AES CBC SB Enc FP.svg
Cryptolib STM32WB55 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 874 960 585 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 969 024 528 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 865 944 591 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 960 056 533 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 864 392 592 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 958 704 534 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 863 608 592 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 958 336 534 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 1 012 088 505 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 1 122 432 456 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 1 003 680 510 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 1 112 856 460 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 1 002 096 510 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 1 111 088 460 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 1 001 464 511 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 1 110 280 461 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 1 150 336 445 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 1 275 136 401 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 1 141 832 448 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 1 266 080 404 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 1 140 464 448 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 1 264 432 404 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 1 139 680 449 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 1 264 392 404 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 1 880 776 272 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 1 028 896 497 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 1 863 960 274 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 1 010 032 506 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 1 859 888 275 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 1 006 504 508 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 1 856 056 275 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 1 002 960 510 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 2 233 624 229 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 1 187 432 431 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 2 217 408 230 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 1 170 632 437 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 2 213 664 231 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 1 166 576 438 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 2 209 952 231 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 1 162 576 440 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 2 588 088 197 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 1 346 928 380 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 2 571 832 199 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 1 327 496 385 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 2 567 816 199 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 1 323 832 386 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 2 564 048 199 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 1 320 216 387 kbyte/s
Cryptolib STM32WB55 AES CBC DF Enc.svg
Cryptolib STM32WB55 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 STM32WB55 AES CBC DF Enc FP.svg
Cryptolib STM32WB55 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 5690 88 µs
SHA256 64 bytes 9037 141 µs
SHA256 128 bytes 12 031 187 µs
SHA384 32 bytes 19 376 302 µs
SHA384 64 bytes 19 582 305 µs
SHA384 128 bytes 36 328 567 µs
Cryptolib STM32WB55 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 STM32WB55 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 425 786 1202 kbyte/s
SHA256 8000 bytes 512 bytes 397 319 1288 kbyte/s
SHA256 8000 bytes 1024 bytes 392 537 1304 kbyte/s
SHA256 8000 bytes 2048 bytes 390 133 1312 kbyte/s
SHA384 8000 bytes 128 bytes 1 076 672 475 kbyte/s
SHA384 8000 bytes 512 bytes 1 028 028 498 kbyte/s
SHA384 8000 bytes 1024 bytes 1 019 596 502 kbyte/s
SHA384 8000 bytes 2048 bytes 1 015 380 504 kbyte/s
Cryptolib STM32WB55 HASH DF Dig.svg


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

HASH mode Cycles Time
SHA256 4623 72 µs
SHA384 18 091 282 µ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 STM32WB55 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 075 208 48 ms
SECP256R1 Signature Small High 2 991 968 46 ms
SECP256R1 Signature SuperFast Low 2 694 104 42 ms
SECP256R1 Signature SuperFast High 2 608 416 40 ms
SECP256R1 Verification Small Low 7 448 632 116 ms
SECP256R1 Verification Small High 6 621 144 103 ms
SECP256R1 Verification SuperFast Low 6 549 376 102 ms
SECP256R1 Verification SuperFast High 5 794 800 90 ms
SECP384R1 Signature Small Low 8 388 992 131 ms
SECP384R1 Signature Small High 8 037 800 125 ms
SECP384R1 Signature Fast Low 8 304 872 129 ms
SECP384R1 Signature Fast High 7 939 504 124 ms
SECP384R1 Verification Small Low 20 196 544 315 ms
SECP384R1 Verification Small High 17 572 728 274 ms
SECP384R1 Verification Fast Low 19 993 632 312 ms
SECP384R1 Verification Fast High 17 381 696 271 ms
Cryptolib STM32WB55 ECDSA Sig.svg
Cryptolib STM32WB55 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 STM32WB55 ECDSA SECP256R1 Sig FP.svg
Cryptolib STM32WB55 ECDSA SECP256R1 Ver FP.svg
Cryptolib STM32WB55 ECDSA SECP384R1 Sig FP.svg
Cryptolib STM32WB55 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 867 104 76 ms
Ed25519 1023 bytes Signature Small OptHigh 2 848 296 44 ms
Ed25519 1023 bytes Signature SuperFast OptLow 4 374 312 68 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 2 569 768 40 ms
Ed25519 1023 bytes Verification Small OptLow 7 257 320 113 ms
Ed25519 1023 bytes Verification Small OptHigh 6 367 608 99 ms
Ed25519 1023 bytes Verification SuperFast OptLow 6 428 984 100 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 5 639 016 88 ms
Cryptolib STM32WB55 EdDSA Sig.svg
Cryptolib STM32WB55 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 STM32WB55 EdDSA Sig FP.svg
Cryptolib STM32WB55 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 730 904 2933 ms
v2.2 CRT SHA-256 3K Signature Small Mid 141 318 672 2208 ms
v2.2 CRT SHA-256 3K Signature Small High 118 681 608 1854 ms
v2.2 CRT SHA-256 3K Signature Fast Low 187 024 936 2922 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 140 843 192 2200 ms
v2.2 CRT SHA-256 3K Signature Fast High 118 266 136 1847 ms
v2.2 No CRT SHA-256 3K Signature Small Low 713 657 520 11 150 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 536 044 336 8375 ms
v2.2 No CRT SHA-256 3K Signature Small High 448 383 472 7005 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 712 427 032 11 131 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 535 159 896 8361 ms
v2.2 No CRT SHA-256 3K Signature Fast High 447 635 992 6994 ms
v2.2 n/a SHA-256 3K Verification Small n/a 3 822 504 59 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 3 772 624 58 ms
Cryptolib STM32WB55 RSA Sig.svg
Cryptolib STM32WB55 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 STM32WB55 RSA 3K CRT Sig FP.svg
Cryptolib STM32WB55 RSA 3K NoCRT Sig FP.svg
Cryptolib STM32WB55 RSA 3K Ver FP.svg