Cryptographic performance on STM32H7 Series

Revision as of 13:10, 16 September 2021 by Registered User
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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


1 Measurement configuration

1.1 Hardware configuration

STM32 MCU STM32H743ZI
Device ID 0x450
Revision ID 0x2003
Board STM32H743ZI-Nucleo

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 400 MHz
Flash latency 4 wait states
Voltage scaling Range 3
Instruction Cache (ART/ICU) 1 (0: disabled / 1: enabled)
Data Cache (ART/DCU) 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 3843 9 µs
AES CBC 128 bits 32 bytes Encryption Fast 3215 8 µs
AES CBC 128 bits 64 bytes Encryption Small 5903 14 µs
AES CBC 128 bits 64 bytes Encryption Fast 4731 11 µs
AES CBC 128 bits 128 bytes Encryption Small 10 112 25 µs
AES CBC 128 bits 128 bytes Encryption Fast 7846 19 µs
AES CBC 192 bits 32 bytes Encryption Small 4168 10 µs
AES CBC 192 bits 32 bytes Encryption Fast 3414 8 µs
AES CBC 192 bits 64 bytes Encryption Small 6634 16 µs
AES CBC 192 bits 64 bytes Encryption Fast 5146 12 µs
AES CBC 192 bits 128 bytes Encryption Small 11 588 28 µs
AES CBC 192 bits 128 bytes Encryption Fast 8681 21 µs
AES CBC 256 bits 32 bytes Encryption Small 4783 11 µs
AES CBC 256 bits 32 bytes Encryption Fast 3889 9 µs
AES CBC 256 bits 64 bytes Encryption Small 7576 18 µs
AES CBC 256 bits 64 bytes Encryption Fast 5867 14 µs
AES CBC 256 bits 128 bytes Encryption Small 13 233 33 µs
AES CBC 256 bits 128 bytes Encryption Fast 9818 24 µs
AES CBC 128 bits 32 bytes Decryption Small 6672 16 µs
AES CBC 128 bits 32 bytes Decryption Fast 3982 9 µs
AES CBC 128 bits 64 bytes Decryption Small 11 536 28 µs
AES CBC 128 bits 64 bytes Decryption Fast 5314 13 µs
AES CBC 128 bits 128 bytes Decryption Small 21 321 53 µs
AES CBC 128 bits 128 bytes Decryption Fast 8336 20 µs
AES CBC 192 bits 32 bytes Decryption Small 7592 18 µs
AES CBC 192 bits 32 bytes Decryption Fast 4287 10 µs
AES CBC 192 bits 64 bytes Decryption Small 13 432 33 µs
AES CBC 192 bits 64 bytes Decryption Fast 5988 14 µs
AES CBC 192 bits 128 bytes Decryption Small 25 177 62 µs
AES CBC 192 bits 128 bytes Decryption Fast 9396 23 µs
AES CBC 256 bits 32 bytes Decryption Small 8911 22 µs
AES CBC 256 bits 32 bytes Decryption Fast 4927 12 µs
AES CBC 256 bits 64 bytes Decryption Small 15 712 39 µs
AES CBC 256 bits 64 bytes Decryption Fast 6644 16 µs
AES CBC 256 bits 128 bytes Decryption Small 29 387 73 µs
AES CBC 256 bits 128 bytes Decryption Fast 10 467 26 µs
Cryptolib STM32H743 AES CBC SB Enc.svg
Cryptolib STM32H743 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 2948 bytes 380 bytes 1 bytes 528 bytes
Encryption Fast 3268 bytes 1404 bytes 1 bytes 548 bytes
Decryption Small 3060 bytes 636 bytes 1 bytes 552 bytes
Decryption Fast 3720 bytes 1660 bytes 1 bytes 560 bytes
Cryptolib STM32H743 AES CBC SB Enc FP.svg
Cryptolib STM32H743 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 537 264 5956 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Encryption Fast 398 952 8021 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Small 529 952 6038 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Encryption Fast 391 064 8182 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Small 528 888 6050 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Encryption Fast 391 064 8182 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Small 528 432 6055 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Encryption Fast 390 576 8193 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Small 625 960 5112 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Encryption Fast 452 608 7070 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Small 619 328 5166 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Encryption Fast 447 480 7151 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Small 617 888 5178 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Encryption Fast 446 328 7169 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Small 618 360 5174 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Encryption Fast 445 656 7180 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Small 718 736 4452 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Encryption Fast 510 592 6267 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Small 710 296 4505 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Encryption Fast 504 656 6340 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Small 708 920 4513 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Encryption Fast 503 264 6358 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Small 707 736 4521 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Encryption Fast 503 776 6352 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Small 1 242 824 2574 kbyte/s
AES CBC 128 bits 8000 bytes 128 bytes Decryption Fast 393 944 8122 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Small 1 235 936 2589 kbyte/s
AES CBC 128 bits 8000 bytes 512 bytes Decryption Fast 387 032 8268 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Small 1 233 992 2593 kbyte/s
AES CBC 128 bits 8000 bytes 1024 bytes Decryption Fast 385 360 8303 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Small 1 232 352 2596 kbyte/s
AES CBC 128 bits 8000 bytes 2048 bytes Decryption Fast 383 664 8340 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Small 1 483 976 2156 kbyte/s
AES CBC 192 bits 8000 bytes 128 bytes Decryption Fast 446 336 7169 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Small 1 476 912 2166 kbyte/s
AES CBC 192 bits 8000 bytes 512 bytes Decryption Fast 438 888 7291 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Small 1 474 984 2169 kbyte/s
AES CBC 192 bits 8000 bytes 1024 bytes Decryption Fast 436 368 7333 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Small 1 473 312 2171 kbyte/s
AES CBC 192 bits 8000 bytes 2048 bytes Decryption Fast 434 072 7372 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Small 1 733 304 1846 kbyte/s
AES CBC 256 bits 8000 bytes 128 bytes Decryption Fast 503 072 6360 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Small 1 721 392 1858 kbyte/s
AES CBC 256 bits 8000 bytes 512 bytes Decryption Fast 494 360 6473 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Small 1 718 128 1862 kbyte/s
AES CBC 256 bits 8000 bytes 1024 bytes Decryption Fast 492 888 6492 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Small 1 715 608 1865 kbyte/s
AES CBC 256 bits 8000 bytes 2048 bytes Decryption Fast 490 904 6518 kbyte/s
Cryptolib STM32H743 AES CBC DF Enc.svg
Cryptolib STM32H743 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 2840 bytes 372 bytes 1 bytes 144 bytes
Encryption Fast 3160 bytes 1396 bytes 1 bytes 172 bytes
Decryption Small 2952 bytes 628 bytes 1 bytes 176 bytes
Decryption Fast 3612 bytes 1652 bytes 1 bytes 180 bytes
Cryptolib STM32H743 AES CBC DF Enc FP.svg
Cryptolib STM32H743 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 3514 8 µs
SHA256 64 bytes 5267 13 µs
SHA256 128 bytes 6888 17 µs
SHA384 32 bytes 10 630 26 µs
SHA384 64 bytes 10 551 26 µs
SHA384 128 bytes 18 699 46 µs
Cryptolib STM32H743 HASH SB Dig.svg


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

HASH mode Code Constant data Global data Stack usage
SHA256 1872 296 bytes 1 bytes 564 bytes
SHA384 3068 744 bytes 1 bytes 1124 bytes
Cryptolib STM32H743 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 224 778 14 236 kbyte/s
SHA256 8000 bytes 512 bytes 207 454 15 425 kbyte/s
SHA256 8000 bytes 1024 bytes 205 056 15 605 kbyte/s
SHA256 8000 bytes 2048 bytes 203 898 15 694 kbyte/s
SHA384 8000 bytes 128 bytes 528 527 6054 kbyte/s
SHA384 8000 bytes 512 bytes 502 491 6368 kbyte/s
SHA384 8000 bytes 1024 bytes 497 585 6431 kbyte/s
SHA384 8000 bytes 2048 bytes 495 563 6457 kbyte/s
Cryptolib STM32H743 HASH DF Dig.svg


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

HASH mode Cycles Time
SHA256 2938 7 µs
SHA384 9491 23 µs

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

HASH mode Code Constant data Global data Stack usage
SHA256 1884 bytes 288 bytes 1 bytes 372 bytes
SHA384 3080 bytes 736 bytes 1 bytes 828 bytes
Cryptolib STM32H743 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 166 072 5 ms
SECP256R1 Signature Small High 2 092 568 5 ms
SECP256R1 Signature SuperFast Low 1 275 536 3 ms
SECP256R1 Signature SuperFast High 1 237 576 3 ms
SECP256R1 Verification Small Low 5 196 624 12 ms
SECP256R1 Verification Small High 4 576 344 11 ms
SECP256R1 Verification SuperFast Low 3 079 568 7 ms
SECP256R1 Verification SuperFast High 2 757 832 6 ms
SECP384R1 Signature Small Low 6 080 528 15 ms
SECP384R1 Signature Small High 5 785 832 14 ms
SECP384R1 Signature Fast Low 4 929 360 12 ms
SECP384R1 Signature Fast High 4 672 336 11 ms
SECP384R1 Verification Small Low 14 462 480 36 ms
SECP384R1 Verification Small High 12 559 736 31 ms
SECP384R1 Verification Fast Low 11 769 304 29 ms
SECP384R1 Verification Fast High 10 134 984 25 ms
Cryptolib STM32H743 ECDSA Sig.svg
Cryptolib STM32H743 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 746 bytes 1184 bytes 1 bytes 328 bytes 628 bytes
SECP256R1 Signature Small High 11 746 bytes 1568 bytes 1 bytes 328 bytes 696 bytes
SECP256R1 Signature SuperFast Low 13 056 bytes 1184 bytes 1 bytes 332 bytes 628 bytes
SECP256R1 Signature SuperFast High 13 056 bytes 1568 bytes 1 bytes 332 bytes 696 bytes
SECP256R1 Verification Small Low 12 238 bytes 1200 bytes 1 bytes 424 bytes 856 bytes
SECP256R1 Verification Small High 12 238 bytes 1584 bytes 1 bytes 424 bytes 1648 bytes
SECP256R1 Verification SuperFast Low 13 548 bytes 1200 bytes 1 bytes 428 bytes 856 bytes
SECP256R1 Verification SuperFast High 13 548 bytes 1584 bytes 1 bytes 428 bytes 1648 bytes
SECP384R1 Signature Small Low 11 746 bytes 1664 bytes 1 bytes 328 bytes 884 bytes
SECP384R1 Signature Small High 11 746 bytes 2240 bytes 1 bytes 328 bytes 984 bytes
SECP384R1 Signature Fast Low 12 116 bytes 1664 bytes 1 bytes 344 bytes 884 bytes
SECP384R1 Signature Fast High 12 116 bytes 2240 bytes 1 bytes 344 bytes 984 bytes
SECP384R1 Verification Small Low 12 238 bytes 1680 bytes 1 bytes 424 bytes 1192 bytes
SECP384R1 Verification Small High 12 238 bytes 2256 bytes 1 bytes 424 bytes 2272 bytes
SECP384R1 Verification Fast Low 12 608 bytes 1680 bytes 1 bytes 440 bytes 1192 bytes
SECP384R1 Verification Fast High 12 608 bytes 2256 bytes 1 bytes 440 bytes 2272 bytes
Cryptolib STM32H743 ECDSA SECP256R1 Sig FP.svg
Cryptolib STM32H743 ECDSA SECP256R1 Ver FP.svg
Cryptolib STM32H743 ECDSA SECP384R1 Sig FP.svg
Cryptolib STM32H743 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 3 261 192 8 ms
Ed25519 1023 bytes Signature Small OptHigh 1 908 832 4 ms
Ed25519 1023 bytes Signature SuperFast OptLow 2 142 424 5 ms
Ed25519 1023 bytes Signature SuperFast OptHigh 1 273 056 3 ms
Ed25519 1023 bytes Verification Small OptLow 4 950 344 12 ms
Ed25519 1023 bytes Verification Small OptHigh 4 368 744 10 ms
Ed25519 1023 bytes Verification SuperFast OptLow 3 079 368 7 ms
Ed25519 1023 bytes Verification SuperFast OptHigh 2 721 280 6 ms
Cryptolib STM32H743 EdDSA Sig.svg
Cryptolib STM32H743 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 158 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature Small OptHigh 14 562 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptLow 15 468 bytes 1744 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Signature SuperFast OptHigh 15 872 bytes 2896 bytes 1 bytes 1236 bytes 1388 bytes
Ed25519 1023 bytes Verification Small OptLow 14 256 bytes 1748 bytes 1 bytes 1244 bytes 1152 bytes
Ed25519 1023 bytes Verification Small OptHigh 14 660 bytes 2900 bytes 1 bytes 1244 bytes 1992 bytes
Ed25519 1023 bytes Verification SuperFast OptLow 15 566 bytes 1748 bytes 1 bytes 1244 bytes 1152 bytes
Ed25519 1023 bytes Verification SuperFast OptHigh 15 970 bytes 2900 bytes 1 bytes 1244 bytes 1992 bytes
Cryptolib STM32H743 EdDSA Sig FP.svg
Cryptolib STM32H743 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 151 225 960 378 ms
v2.2 CRT SHA-256 3K Signature Small Mid 114 153 976 285 ms
v2.2 CRT SHA-256 3K Signature Small High 95 541 592 238 ms
v2.2 CRT SHA-256 3K Signature Fast Low 102 089 176 255 ms
v2.2 CRT SHA-256 3K Signature Fast Mid 77 088 368 192 ms
v2.2 CRT SHA-256 3K Signature Fast High 64 063 776 160 ms
v2.2 No CRT SHA-256 3K Signature Small Low 584 168 344 1460 ms
v2.2 No CRT SHA-256 3K Signature Small Mid 439 243 552 1098 ms
v2.2 No CRT SHA-256 3K Signature Small High 367 004 808 917 ms
v2.2 No CRT SHA-256 3K Signature Fast Low 379 077 872 947 ms
v2.2 No CRT SHA-256 3K Signature Fast Mid 285 045 456 712 ms
v2.2 No CRT SHA-256 3K Signature Fast High 237 407 016 593 ms
v2.2 n/a SHA-256 3K Verification Small n/a 3 078 184 7 ms
v2.2 n/a SHA-256 3K Verification Fast n/a 2 034 528 5 ms
Cryptolib STM32H743 RSA Sig.svg
Cryptolib STM32H743 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 7056 bytes 370 bytes 5 bytes 700 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Small Mid 7308 bytes 370 bytes 5 bytes 700 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Small High 7308 bytes 370 bytes 5 bytes 700 bytes 6708 bytes
v2.2 CRT SHA-256 3K Signature Fast Low 7426 bytes 370 bytes 5 bytes 700 bytes 3704 bytes
v2.2 CRT SHA-256 3K Signature Fast Mid 7678 bytes 370 bytes 5 bytes 700 bytes 4308 bytes
v2.2 CRT SHA-256 3K Signature Fast High 7678 bytes 370 bytes 5 bytes 700 bytes 6708 bytes
v2.2 No CRT SHA-256 3K Signature Small Low 6088 bytes 362 bytes 5 bytes 700 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Small Mid 6340 bytes 362 bytes 5 bytes 700 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Small High 6340 bytes 362 bytes 5 bytes 700 bytes 9368 bytes
v2.2 No CRT SHA-256 3K Signature Fast Low 6458 bytes 362 bytes 5 bytes 700 bytes 3484 bytes
v2.2 No CRT SHA-256 3K Signature Fast Mid 6710 bytes 362 bytes 5 bytes 700 bytes 4664 bytes
v2.2 No CRT SHA-256 3K Signature Fast High 6710 bytes 362 bytes 5 bytes 700 bytes 9368 bytes
v2.2 n/a SHA-256 3K Verification Small n/a 6842 bytes 366 bytes 5 bytes 716 bytes 3108 bytes
v2.2 n/a SHA-256 3K Verification Fast n/a 7212 bytes 366 bytes 5 bytes 716 bytes 3108 bytes
Cryptolib STM32H743 RSA 3K CRT Sig FP.svg
Cryptolib STM32H743 RSA 3K NoCRT Sig FP.svg
Cryptolib STM32H743 RSA 3K Ver FP.svg