This page shows the measured performance results 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.
STM32H753
This section reports the performance using the STM32H753 MCU. Measurements are done while executing the code from the internal flash memory.
1. Measurement configuration
1.1. Hardware configuration
| STM32 MCU | STM32H753ZI |
| Device ID | 0x450 |
| Revision ID | 0x2003 |
| Board | STM32H753ZI-Nucleo |
1.2. Firmware configuration
| Cryptographic library version | 050000B2[ver. 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 V9.40.1.364/W64 for ARM |
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 | 2546 | 6 µs |
| AES CBC | 128 bits | 32 bytes | Encryption | Fast | 2106 | 5 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Small | 4235 | 10 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Fast | 3296 | 8 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Small | 7599 | 18 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Fast | 5775 | 14 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Small | 2759 | 6 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Fast | 2200 | 5 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Small | 4708 | 11 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Fast | 3612 | 9 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Small | 8598 | 21 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Fast | 6385 | 15 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Small | 3121 | 7 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Fast | 2469 | 6 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Small | 5264 | 13 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Fast | 3987 | 9 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Small | 9730 | 24 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Fast | 7112 | 17 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Small | 3068 | 7 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Fast | 2767 | 6 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Small | 5282 | 13 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Fast | 3897 | 9 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Small | 9743 | 24 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Fast | 6331 | 15 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Small | 3428 | 8 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Fast | 2958 | 7 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Small | 6071 | 15 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Fast | 4254 | 10 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Small | 11 322 | 28 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Fast | 7081 | 17 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Small | 3895 | 9 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Fast | 3358 | 8 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Small | 6923 | 17 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Fast | 4798 | 11 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Small | 12 920 | 32 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Fast | 7926 | 19 µs |
The table below shows flash memory and RAM usage (in bytes).
| Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|---|
| Encryption | Small | 2298 bytes | 324 bytes | 0 bytes | 552 bytes |
| Encryption | Fast | 2242 bytes | 1092 bytes | 0 bytes | 552 bytes |
| Decryption | Small | 2650 bytes | 580 bytes | 0 bytes | 568 bytes |
| Decryption | Fast | 2600 bytes | 2372 bytes | 0 bytes | 568 bytes |
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_initcmox_cipher_setKeycmox_cipher_setIVcmox_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 | 429 808 | 7445 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 318 104 | 10 059 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 422 720 | 7570 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 310 768 | 10 297 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 422 152 | 7580 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 308 512 | 10 372 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 421 664 | 7588 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 308 360 | 10 377 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 494 600 | 6469 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 359 728 | 8895 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 488 472 | 6551 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 353 744 | 9046 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 488 280 | 6553 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 350 536 | 9128 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 487 800 | 6560 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 350 320 | 9134 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 561 920 | 5694 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 401 488 | 7970 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 555 992 | 5755 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 392 080 | 8161 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 553 800 | 5778 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 393 624 | 8129 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 553 200 | 5784 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 391 160 | 8180 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 575 440 | 5560 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 324 904 | 9849 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 570 520 | 5608 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 320 608 | 9981 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 569 776 | 5616 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 319 080 | 10 028 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 568 016 | 5633 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 317 552 | 10 077 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 672 280 | 4759 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 365 344 | 8758 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 667 816 | 4791 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 361 400 | 8854 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 666 160 | 4803 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 359 864 | 8892 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 664 528 | 4815 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 358 072 | 8936 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 769 432 | 4158 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 407 168 | 7859 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 764 328 | 4186 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 402 712 | 7946 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 762 976 | 4194 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 402 128 | 7957 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 761 360 | 4203 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 400 728 | 7985 Kbytes/s |
The table below shows flash memory and RAM usage (in bytes).
| Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|---|
| Encryption | Small | 2218 bytes | 316 bytes | 0 bytes | 176 bytes |
| Encryption | Fast | 2162 bytes | 1084 bytes | 0 bytes | 176 bytes |
| Decryption | Small | 2570 bytes | 572 bytes | 0 bytes | 192 bytes |
| Decryption | Fast | 2520 bytes | 2364 bytes | 0 bytes | 192 bytes |
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 | 2646 | 6 µs |
| SHA256 | 64 bytes | 4460 | 11 µs |
| SHA256 | 128 bytes | 6050 | 15 µs |
| SHA384 | 32 bytes | 9161 | 22 µs |
| SHA384 | 64 bytes | 9227 | 23 µs |
| SHA384 | 128 bytes | 17 302 | 43 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1358 | 280 bytes | 0 bytes | 532 bytes |
| SHA384 | 2550 | 728 bytes | 0 bytes | 1076 bytes |
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_initcmox_hash_append: called several times to hash the whole message in fixed-size chunkscmox_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 | 225 512 | 14 189 Kbytes/s |
| SHA256 | 8000 bytes | 512 bytes | 208 765 | 15 328 Kbytes/s |
| SHA256 | 8000 bytes | 1024 bytes | 206 342 | 15 508 Kbytes/s |
| SHA256 | 8000 bytes | 2048 bytes | 205 220 | 15 593 Kbytes/s |
| SHA384 | 8000 bytes | 128 bytes | 517 880 | 6179 Kbytes/s |
| SHA384 | 8000 bytes | 512 bytes | 493 690 | 6481 Kbytes/s |
| SHA384 | 8000 bytes | 1024 bytes | 489 210 | 6541 Kbytes/s |
| SHA384 | 8000 bytes | 2048 bytes | 487 171 | 6568 Kbytes/s |
The table below shows the final tag generation done through the call to cmox_hash_generateTag.
| HASH mode | Cycles | Time |
|---|---|---|
| SHA256 | 2058 | 5 µs |
| SHA384 | 8493 | 21 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1358 bytes | 272 bytes | 0 bytes | 340 bytes |
| SHA384 | 2550 bytes | 720 bytes | 0 bytes | 780 bytes |
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 | 2 174 680 | 5 ms |
| SECP256R1 | Signature | Small | High | 2 083 888 | 5 ms |
| SECP256R1 | Signature | SuperFast | Low | 1 363 808 | 3 ms |
| SECP256R1 | Signature | SuperFast | High | 1 261 904 | 3 ms |
| SECP256R1 | Verification | Small | Low | 5 190 656 | 12 ms |
| SECP256R1 | Verification | Small | High | 4 577 320 | 11 ms |
| SECP256R1 | Verification | SuperFast | Low | 3 254 432 | 8 ms |
| SECP256R1 | Verification | SuperFast | High | 2 790 480 | 6 ms |
| SECP384R1 | Signature | Small | Low | 6 118 312 | 15 ms |
| SECP384R1 | Signature | Small | High | 5 789 608 | 14 ms |
| SECP384R1 | Signature | Fast | Low | 5 017 784 | 12 ms |
| SECP384R1 | Signature | Fast | High | 4 708 896 | 11 ms |
| SECP384R1 | Verification | Small | Low | 14 569 504 | 36 ms |
| SECP384R1 | Verification | Small | High | 12 567 032 | 31 ms |
| SECP384R1 | Verification | Fast | Low | 11 930 384 | 29 ms |
| SECP384R1 | Verification | Fast | High | 10 227 400 | 25 ms |
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 | 13 440 bytes | 1212 bytes | 0 bytes | 440 bytes | 628 bytes |
| SECP256R1 | Signature | Small | High | 13 440 bytes | 1596 bytes | 0 bytes | 440 bytes | 696 bytes |
| SECP256R1 | Signature | SuperFast | Low | 14 750 bytes | 1212 bytes | 0 bytes | 444 bytes | 628 bytes |
| SECP256R1 | Signature | SuperFast | High | 14 750 bytes | 1596 bytes | 0 bytes | 444 bytes | 696 bytes |
| SECP256R1 | Verification | Small | Low | 13 428 bytes | 1212 bytes | 0 bytes | 488 bytes | 856 bytes |
| SECP256R1 | Verification | Small | High | 13 428 bytes | 1596 bytes | 0 bytes | 488 bytes | 1648 bytes |
| SECP256R1 | Verification | SuperFast | Low | 14 738 bytes | 1212 bytes | 0 bytes | 492 bytes | 856 bytes |
| SECP256R1 | Verification | SuperFast | High | 14 738 bytes | 1596 bytes | 0 bytes | 492 bytes | 1648 bytes |
| SECP384R1 | Signature | Small | Low | 13 440 bytes | 1692 bytes | 0 bytes | 440 bytes | 884 bytes |
| SECP384R1 | Signature | Small | High | 13 440 bytes | 2268 bytes | 0 bytes | 440 bytes | 984 bytes |
| SECP384R1 | Signature | Fast | Low | 13 810 bytes | 1692 bytes | 0 bytes | 456 bytes | 884 bytes |
| SECP384R1 | Signature | Fast | High | 13 810 bytes | 2268 bytes | 0 bytes | 456 bytes | 984 bytes |
| SECP384R1 | Verification | Small | Low | 13 428 bytes | 1692 bytes | 0 bytes | 488 bytes | 1192 bytes |
| SECP384R1 | Verification | Small | High | 13 428 bytes | 2268 bytes | 0 bytes | 488 bytes | 2272 bytes |
| SECP384R1 | Verification | Fast | Low | 13 798 bytes | 1692 bytes | 0 bytes | 504 bytes | 1192 bytes |
| SECP384R1 | Verification | Fast | High | 13 798 bytes | 2268 bytes | 0 bytes | 504 bytes | 2272 bytes |
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 | 3 275 368 | 8 ms |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 1 877 520 | 4 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 2 162 680 | 5 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 1 300 624 | 3 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 4 992 840 | 12 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 4 319 624 | 10 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 3 140 912 | 7 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 2 837 744 | 7 ms |
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 820 bytes | 1748 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 15 238 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 16 130 bytes | 1748 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 16 548 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 14 816 bytes | 1748 bytes | 0 bytes | 1172 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 15 234 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1992 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 16 126 bytes | 1748 bytes | 0 bytes | 1172 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 16 544 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1992 bytes |
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 | 150 764 608 | 376 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 113 332 408 | 283 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 95 403 392 | 238 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 101 069 544 | 252 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 76 095 400 | 190 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 63 923 240 | 159 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 583 504 952 | 1458 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 437 891 496 | 1094 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 366 741 864 | 916 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 377 414 704 | 943 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 283 480 408 | 708 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 237 153 368 | 592 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 2 640 240 | 6 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 1 977 488 | 4 ms |
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 | 6850 bytes | 372 bytes | 0 bytes | 668 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 7088 bytes | 372 bytes | 0 bytes | 668 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 7088 bytes | 372 bytes | 0 bytes | 668 bytes | 6708 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 7220 bytes | 372 bytes | 0 bytes | 668 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 7458 bytes | 372 bytes | 0 bytes | 668 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 7458 bytes | 372 bytes | 0 bytes | 668 bytes | 6708 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 5918 bytes | 364 bytes | 0 bytes | 668 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 6156 bytes | 364 bytes | 0 bytes | 668 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 6156 bytes | 364 bytes | 0 bytes | 668 bytes | 9368 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 6288 bytes | 364 bytes | 0 bytes | 668 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 6526 bytes | 364 bytes | 0 bytes | 668 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 6526 bytes | 364 bytes | 0 bytes | 668 bytes | 9368 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 6102 bytes | 368 bytes | 0 bytes | 684 bytes | 3108 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 6472 bytes | 368 bytes | 0 bytes | 684 bytes | 3108 bytes |
2.6. Post-Quantum Cryptography ML-DSA key pair generation, Signature and verification
This section provides the performance results for ML-DSA key Generation, signature and verification.
The table below shows the number of clock cycles and time (in ms) needed to perform the described function in different suites and functions configurations. Note: For signature generation, the number of clock cycles is not bounded in time. The measurement was taken using one predefined private key and one 32-byte message, and the reported value corresponds to the minimum observed time.
| Suite | Function | Cycles | Time (in ms) | Stack usage | Working buffer |
|---|---|---|---|---|---|
| ML-DSA-44 | keyGen | 1 196 384 | 2 | 476 | 7116 |
| ML-DSA-65 | keyGen | 2 074 640 | 5 | 476 | 8140 |
| ML-DSA-87 | keyGen | 3 475 096 | 8 | 476 | 10 188 |
| ML-DSA-44 | Signature | 2 089 192 | 5 | 772 | 30 796 |
| ML-DSA-44 | Signature Low RAM | 2 263 024 | 5 | 756 | 11 340 |
| ML-DSA-65 | Signature | 3 198 648 | 7 | 772 | 43 084 |
| ML-DSA-65 | Signature Low RAM | 3 425 152 | 8 | 756 | 15 436 |
| ML-DSA-87 | Signature | 5 027 000 | 12 | 772 | 57 420 |
| ML-DSA-87 | Signature Low RAM | 5 341 992 | 13 | 756 | 19 532 |
| ML-DSA-44 | Verification | 1 333 896 | 3 | 700 | 8908 |
| ML-DSA-44 | Verification Low RAM | 1 815 680 | 4 | 700 | 4812 |
| ML-DSA-65 | Verification | 2 182 496 | 5 | 700 | 9948 |
| ML-DSA-65 | Verification Low RAM | 3 151 512 | 7 | 700 | 4828 |
| ML-DSA-87 | Verification | 3 634 256 | 9 | 700 | 12 268 |
| ML-DSA-87 | Verification Low RAM | 5 443 960 | 13 | 700 | 5100 |
2.7. Post-Quantum Cryptography ML-KEM key pair generation, encapsulation, decapsulation
This section provides the performance results for ML-KEM key pair generation, encapsulation and decapsulation.
The table below shows the number of clock cycles and time (in ms) needed to perform the described function in different functions and suites.
| Function | Suites | Cycles | Time (in ms) | Stack usage |
|---|---|---|---|---|
| Key-pair-Generation | ML-KEM-512 | 410 816 | 1 | 3 060 |
| Key-pair-Generation | ML-KEM-768 | 676 320 | 2 | 3 572 |
| Key-pair-Generation | ML-KEM-1024 | 1 064 896 | 3 | 4 084 |
| Key-Encapsulation | ML-KEM-512 | 1 410 832 | 4 | 4 588 |
| Key-Encapsulation | ML-KEM-768 | 2 027 568 | 5 | 5 100 |
| Key-Encapsulation | ML-KEM-1024 | 2 748 104 | 7 | 5 612 |
| Key-Decapsulation | ML-KEM-512 | 1 580 552 | 4 | 4 684 |
| Key-Decapsulation | ML-KEM-768 | 2 257 552 | 6 | 5 516 |
| Key-Decapsulation | ML-KEM-1024 | 3 041 824 | 8 | 6 508 |
2.8. Post-Quantum Cryptography HBS-LMS signature verification
This section provides the performance results for ML-LMS signature verification.
The table below shows the number of clock cycles minimum, average and maximum and average time (in ms) needed to perform the described function in different functions and suite. Note: Clock cycles were measured for 10 different generated key and message pairs, and the reported Cycles avg values are averages over these measurements.
| Function | Suite | Cycles min | Cycles avg | Time avg (in ms) | Cycles max | Stack usage |
|---|---|---|---|---|---|---|
| LMS-Verify | LMS_N32_H10_W1_SHA256 | 656 992 | 685 506 | 2 | 715 952 | 1 668 |
| LMS-Verify | LMS_N32_H10_W2_SHA256 | 659 688 | 703 725 | 2 | 765 096 | 1 668 |
| LMS-Verify | LMS_N32_H10_W4_SHA256 | 1 113 288 | 1 289 884 | 3 | 1 494 672 | 1 668 |
| LMS-Verify | LMS_N32_H10_W8_SHA256 | 9 721 008 | 11 162 355 | 28 | 12 725 840 | 1 668 |
3. STM32H7S3
This section reports the performance with the STM32H7S3 MCU. Measurements are done while executing the code from the external flash memory in execute-in-place mode (XIP).
3.1. Measurement configuration
3.1.1. Hardware configuration
| STM32 MCU | STM32H7S3L8Hx |
| Device ID | 0x485 |
| Revision ID | 0x2000 |
| Board | NUCLEO-H7S3L8 |
3.1.2. Firmware configuration
| Cryptographic library version | 050000B2[ver. 1] |
- ↑ This value corresponds to the information returned by a call to
cmox_getInfos
3.1.3. System configuration
| System core clock frequency | 600 MHz |
| Flash latency | 55 wait states |
| Voltage scaling | Range 1 |
| Instruction cache (ART/ICU) | 1 (0: disabled / 1: enabled) |
| Data cache (ART/DCU) | 1 (0: disabled / 1: enabled) |
3.1.4. Development toolchains and compilers
| IAR Embedded Workbench | IAR ANSI C/C++ Compiler V9.40.1.364/W64 for ARM |
3.2. Performance values
3.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.
3.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 | 20 944 | 34 µs |
| AES CBC | 128 bits | 32 bytes | Encryption | Fast | 30 544 | 50 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Small | 22 624 | 37 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Fast | 31 736 | 52 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Small | 25 920 | 43 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Fast | 34 136 | 56 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Small | 21 584 | 35 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Fast | 28 752 | 47 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Small | 23 632 | 39 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Fast | 30 248 | 50 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Small | 27 496 | 45 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Fast | 32 920 | 54 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Small | 21 152 | 35 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Fast | 29 112 | 48 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Small | 23 344 | 38 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Fast | 30 648 | 51 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Small | 27 672 | 46 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Fast | 33 672 | 56 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Small | 25 968 | 43 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Fast | 44 488 | 74 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Small | 28 200 | 47 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Fast | 45 936 | 76 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Small | 32 608 | 54 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Fast | 48 560 | 80 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Small | 25 048 | 41 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Fast | 45 808 | 76 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Small | 27 816 | 46 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Fast | 47 280 | 78 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Small | 32 968 | 54 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Fast | 50 056 | 83 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Small | 25 624 | 42 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Fast | 43 824 | 73 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Small | 28 616 | 47 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Fast | 45 472 | 75 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Small | 34 576 | 57 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Fast | 48 624 | 81 µs |
The table below shows flash memory and RAM usage (in bytes).
| Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|---|
| Encryption | Small | 2298 bytes | 324 bytes | 0 bytes | 552 bytes |
| Encryption | Fast | 2242 bytes | 1092 bytes | 0 bytes | 552 bytes |
| Decryption | Small | 2650 bytes | 580 bytes | 0 bytes | 568 bytes |
| Decryption | Fast | 2600 bytes | 2372 bytes | 0 bytes | 568 bytes |
3.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_initcmox_cipher_setKeycmox_cipher_setIVcmox_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 | 420 720 | 11 409 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 317 768 | 15 105 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 417 152 | 11 506 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 313 640 | 15 304 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 416 552 | 11 523 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 312 968 | 15 337 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 416 136 | 11 534 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 312 456 | 15 362 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 488 600 | 9823 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 359 224 | 13 362 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 485 008 | 9896 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 355 080 | 13 518 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 484 392 | 9909 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 354 240 | 13 550 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 484 016 | 9917 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 353 776 | 13 567 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 551 184 | 8708 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 398 904 | 12 032 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 547 640 | 8764 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 394 824 | 12 157 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 547 040 | 8774 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 393 848 | 12 187 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 546 664 | 8780 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 393 880 | 12 186 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 600 112 | 7998 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 354 552 | 13 538 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 583 712 | 8223 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 337 624 | 14 216 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 580 232 | 8272 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 333 976 | 14 372 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 577 392 | 8313 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 330 760 | 14 512 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 696 344 | 6893 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 397 576 | 12 073 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 679 816 | 7060 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 380 576 | 12 612 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 676 240 | 7098 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 376 768 | 12 739 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 673 784 | 7123 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 373 848 | 12 839 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 792 080 | 6059 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 441 184 | 10 879 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 775 624 | 6188 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 424 032 | 11 319 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 772 160 | 6216 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 420 312 | 11 420 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 769 544 | 6237 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 417 560 | 11 495 Kbytes/s |
The table below shows flash memory and RAM usage (in bytes).
| Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|---|
| Encryption | Small | 2218 bytes | 316 bytes | 0 bytes | 176 bytes |
| Encryption | Fast | 2162 bytes | 1084 bytes | 0 bytes | 176 bytes |
| Decryption | Small | 2570 bytes | 572 bytes | 0 bytes | 192 bytes |
| Decryption | Fast | 2520 bytes | 2364 bytes | 0 bytes | 192 bytes |
3.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.
3.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 | 18 280 | 30 µs |
| SHA256 | 64 bytes | 20 040 | 33 µs |
| SHA256 | 128 bytes | 21 880 | 36 µs |
| SHA384 | 32 bytes | 27 928 | 46 µs |
| SHA384 | 64 bytes | 28 000 | 46 µs |
| SHA384 | 128 bytes | 36 472 | 60 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1358 | 280 bytes | 0 bytes | 532 bytes |
| SHA384 | 2550 | 728 bytes | 0 bytes | 1076 bytes |
3.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_initcmox_hash_append: called several times to hash the whole message in fixed-size chunkscmox_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 | 233 208 | 20 582 Kbytes/s |
| SHA256 | 8000 bytes | 512 bytes | 221 512 | 21 669 Kbytes/s |
| SHA256 | 8000 bytes | 1024 bytes | 219 248 | 21 893 Kbytes/s |
| SHA256 | 8000 bytes | 2048 bytes | 217 528 | 22 066 Kbytes/s |
| SHA384 | 8000 bytes | 128 bytes | 527 664 | 9096 Kbytes/s |
| SHA384 | 8000 bytes | 512 bytes | 509 888 | 9413 Kbytes/s |
| SHA384 | 8000 bytes | 1024 bytes | 506 432 | 9478 Kbytes/s |
| SHA384 | 8000 bytes | 2048 bytes | 504 080 | 9522 Kbytes/s |
The table below shows the final tag generation done through the call to cmox_hash_generateTag.
| HASH mode | Cycles | Time |
|---|---|---|
| SHA256 | 6016 | 10 µs |
| SHA384 | 13 384 | 22 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1358 bytes | 272 bytes | 0 bytes | 340 bytes |
| SHA384 | 2550 bytes | 720 bytes | 0 bytes | 780 bytes |
3.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 | 2 181 536 | 3 ms |
| SECP256R1 | Signature | Small | High | 2 121 200 | 3 ms |
| SECP256R1 | Signature | SuperFast | Low | 1 633 224 | 2 ms |
| SECP256R1 | Signature | SuperFast | High | 1 261 656 | 2 ms |
| SECP256R1 | Verification | Small | Low | 5 178 360 | 8 ms |
| SECP256R1 | Verification | Small | High | 4 604 304 | 7 ms |
| SECP256R1 | Verification | SuperFast | Low | 3 395 264 | 5 ms |
| SECP256R1 | Verification | SuperFast | High | 2 754 632 | 4 ms |
| SECP384R1 | Signature | Small | Low | 6 081 528 | 10 ms |
| SECP384R1 | Signature | Small | High | 5 805 672 | 9 ms |
| SECP384R1 | Signature | Fast | Low | 4 963 816 | 8 ms |
| SECP384R1 | Signature | Fast | High | 4 684 664 | 7 ms |
| SECP384R1 | Verification | Small | Low | 14 419 120 | 24 ms |
| SECP384R1 | Verification | Small | High | 12 535 952 | 20 ms |
| SECP384R1 | Verification | Fast | Low | 11 846 128 | 19 ms |
| SECP384R1 | Verification | Fast | High | 10 127 568 | 16 ms |
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 | 13 440 bytes | 1212 bytes | 0 bytes | 440 bytes | 628 bytes |
| SECP256R1 | Signature | Small | High | 13 440 bytes | 1596 bytes | 0 bytes | 440 bytes | 696 bytes |
| SECP256R1 | Signature | SuperFast | Low | 14 750 bytes | 1212 bytes | 0 bytes | 444 bytes | 628 bytes |
| SECP256R1 | Signature | SuperFast | High | 14 750 bytes | 1596 bytes | 0 bytes | 444 bytes | 696 bytes |
| SECP256R1 | Verification | Small | Low | 13 428 bytes | 1212 bytes | 0 bytes | 488 bytes | 856 bytes |
| SECP256R1 | Verification | Small | High | 13 428 bytes | 1596 bytes | 0 bytes | 488 bytes | 1648 bytes |
| SECP256R1 | Verification | SuperFast | Low | 14 738 bytes | 1212 bytes | 0 bytes | 492 bytes | 856 bytes |
| SECP256R1 | Verification | SuperFast | High | 14 738 bytes | 1596 bytes | 0 bytes | 492 bytes | 1648 bytes |
| SECP384R1 | Signature | Small | Low | 13 440 bytes | 1692 bytes | 0 bytes | 440 bytes | 884 bytes |
| SECP384R1 | Signature | Small | High | 13 440 bytes | 2268 bytes | 0 bytes | 440 bytes | 984 bytes |
| SECP384R1 | Signature | Fast | Low | 13 810 bytes | 1692 bytes | 0 bytes | 456 bytes | 884 bytes |
| SECP384R1 | Signature | Fast | High | 13 810 bytes | 2268 bytes | 0 bytes | 456 bytes | 984 bytes |
| SECP384R1 | Verification | Small | Low | 13 428 bytes | 1692 bytes | 0 bytes | 488 bytes | 1192 bytes |
| SECP384R1 | Verification | Small | High | 13 428 bytes | 2268 bytes | 0 bytes | 488 bytes | 2272 bytes |
| SECP384R1 | Verification | Fast | Low | 13 798 bytes | 1692 bytes | 0 bytes | 504 bytes | 1192 bytes |
| SECP384R1 | Verification | Fast | High | 13 798 bytes | 2268 bytes | 0 bytes | 504 bytes | 2272 bytes |
3.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 | 3 261 840 | 5 ms |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 1 917 888 | 3 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 2 157 008 | 3 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 1 291 760 | 2 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 4 938 800 | 8 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 4 337 760 | 7 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 3 102 840 | 5 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 2 726 560 | 4 ms |
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 820 bytes | 1748 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 15 238 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 16 130 bytes | 1748 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 16 548 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 14 816 bytes | 1748 bytes | 0 bytes | 1172 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 15 234 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1992 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 16 126 bytes | 1748 bytes | 0 bytes | 1172 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 16 544 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1992 bytes |
3.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 | 150 953 240 | 251 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 113 794 952 | 189 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 95 281 944 | 158 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 101 256 032 | 168 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 76 469 216 | 127 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 64 230 224 | 107 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 583 836 592 | 973 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 438 791 448 | 731 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 366 440 064 | 610 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 377 746 720 | 629 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 284 184 456 | 473 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 237 732 920 | 396 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 2 687 336 | 4 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 2 013 544 | 3 ms |
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 | 6850 bytes | 372 bytes | 0 bytes | 668 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 7088 bytes | 372 bytes | 0 bytes | 668 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 7088 bytes | 372 bytes | 0 bytes | 668 bytes | 6708 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 7220 bytes | 372 bytes | 0 bytes | 668 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 7458 bytes | 372 bytes | 0 bytes | 668 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 7458 bytes | 372 bytes | 0 bytes | 668 bytes | 6708 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 5918 bytes | 364 bytes | 0 bytes | 668 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 6156 bytes | 364 bytes | 0 bytes | 668 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 6156 bytes | 364 bytes | 0 bytes | 668 bytes | 9368 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 6288 bytes | 364 bytes | 0 bytes | 668 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 6526 bytes | 364 bytes | 0 bytes | 668 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 6526 bytes | 364 bytes | 0 bytes | 668 bytes | 9368 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 6102 bytes | 368 bytes | 0 bytes | 684 bytes | 3108 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 6472 bytes | 368 bytes | 0 bytes | 684 bytes | 3108 bytes |