This page reports measured performance when using the pure software cryptographic library algorithms with an STM32U5 MCU. In addition to performance figures, the required code footprint and memory are also given.
1. Measurement configuration
1.1. Hardware configuration
| STM32 MCU | STM32U575ZITxQ |
| Device ID | 0x482 |
| Revision ID | 0x1001 |
| Board | NUCLEO-U575ZI-Q |
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 | 160 MHz |
| Flash latency | 4 wait states |
| Voltage scaling | Range 0 |
| ICACHE peripheral | 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.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 | 3694 | 23 µs |
| AES CBC | 128 bits | 32 bytes | Encryption | Fast | 3371 | 21 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Small | 6340 | 39 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Fast | 5473 | 34 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Small | 11 627 | 72 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Fast | 9708 | 60 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Small | 4050 | 25 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Fast | 3572 | 22 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Small | 7114 | 44 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Fast | 5987 | 37 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Small | 13 246 | 82 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Fast | 10 781 | 67 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Small | 4642 | 29 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Fast | 3970 | 24 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Small | 8129 | 50 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Fast | 6701 | 41 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Small | 15 107 | 94 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Fast | 12 093 | 75 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Small | 4858 | 30 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Fast | 4562 | 28 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Small | 8691 | 54 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Fast | 6709 | 41 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Small | 16 359 | 102 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Fast | 10 989 | 68 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Small | 5471 | 34 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Fast | 5080 | 31 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Small | 9982 | 62 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Fast | 7498 | 46 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Small | 18 998 | 118 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Fast | 12 361 | 77 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Small | 6320 | 39 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Fast | 5800 | 36 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Small | 11 512 | 71 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Fast | 8519 | 53 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Small | 21 889 | 136 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Fast | 13 981 | 87 µs |
The table below shows flash memory and RAM usage (in bytes).
| Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|---|
| Encryption | Small | 2386 bytes | 324 bytes | 0 bytes | 552 bytes |
| Encryption | Fast | 2330 bytes | 1092 bytes | 0 bytes | 552 bytes |
| Decryption | Small | 2746 bytes | 580 bytes | 0 bytes | 568 bytes |
| Decryption | Fast | 2696 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 | 668 944 | 1913 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 532 992 | 2401 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 663 600 | 1928 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 527 736 | 2425 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 662 680 | 1931 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 526 824 | 2429 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 662 208 | 1932 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 526 360 | 2431 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 773 936 | 1653 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 607 008 | 2108 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 768 624 | 1665 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 601 776 | 2127 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 767 712 | 1667 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 600 864 | 2130 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 767 248 | 1668 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 600 400 | 2131 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 878 944 | 1456 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 680 984 | 1879 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 873 576 | 1465 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 675 680 | 1894 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 872 656 | 1466 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 674 768 | 1896 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 872 192 | 1467 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 674 296 | 1898 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 985 088 | 1299 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 557 576 | 2295 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 977 496 | 1309 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 549 952 | 2327 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 975 112 | 1312 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 547 632 | 2337 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 972 312 | 1316 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 544 856 | 2349 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 155 080 | 1108 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 631 616 | 2026 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 147 480 | 1115 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 623 960 | 2051 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 145 104 | 1117 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 621 632 | 2059 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 142 312 | 1120 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 618 848 | 2068 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 325 088 | 965 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 705 648 | 1813 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 317 480 | 971 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 697 984 | 1833 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 315 128 | 973 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 695 704 | 1839 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 312 352 | 975 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 692 912 | 1847 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 | 2306 bytes | 316 bytes | 0 bytes | 176 bytes |
| Encryption | Fast | 2250 bytes | 1084 bytes | 0 bytes | 176 bytes |
| Decryption | Small | 2666 bytes | 572 bytes | 0 bytes | 192 bytes |
| Decryption | Fast | 2616 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 | 4100 | 25 µs |
| SHA256 | 64 bytes | 7167 | 44 µs |
| SHA256 | 128 bytes | 10 010 | 62 µs |
| SHA384 | 32 bytes | 15 321 | 95 µs |
| SHA384 | 64 bytes | 15 509 | 96 µs |
| SHA384 | 128 bytes | 28 910 | 180 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1378 | 280 bytes | 0 bytes | 532 bytes |
| SHA384 | 2590 | 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 | 386 193 | 3314 Kbytes/s |
| SHA256 | 8000 bytes | 512 bytes | 364 264 | 3513 Kbytes/s |
| SHA256 | 8000 bytes | 1024 bytes | 360 586 | 3549 Kbytes/s |
| SHA256 | 8000 bytes | 2048 bytes | 358 731 | 3568 Kbytes/s |
| SHA384 | 8000 bytes | 128 bytes | 859 212 | 1489 Kbytes/s |
| SHA384 | 8000 bytes | 512 bytes | 819 907 | 1561 Kbytes/s |
| SHA384 | 8000 bytes | 1024 bytes | 813 051 | 1574 Kbytes/s |
| SHA384 | 8000 bytes | 2048 bytes | 809 663 | 1580 Kbytes/s |
The table below shows the final tag generation done through the call to cmox_hash_generateTag.
| HASH mode | Cycles | Time |
|---|---|---|
| SHA256 | 3368 | 21 µs |
| SHA384 | 14 349 | 89 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1374 bytes | 272 bytes | 0 bytes | 340 bytes |
| SHA384 | 2586 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 877 896 | 17 ms |
| SECP256R1 | Signature | Small | High | 2 810 640 | 17 ms |
| SECP256R1 | Signature | SuperFast | Low | 1 885 576 | 11 ms |
| SECP256R1 | Signature | SuperFast | High | 1 823 440 | 11 ms |
| SECP256R1 | Verification | Small | Low | 6 902 328 | 43 ms |
| SECP256R1 | Verification | Small | High | 6 163 608 | 38 ms |
| SECP256R1 | Verification | SuperFast | Low | 4 602 232 | 28 ms |
| SECP256R1 | Verification | SuperFast | High | 4 059 752 | 25 ms |
| SECP384R1 | Signature | Small | Low | 8 165 504 | 51 ms |
| SECP384R1 | Signature | Small | High | 7 858 512 | 49 ms |
| SECP384R1 | Signature | Fast | Low | 7 006 752 | 43 ms |
| SECP384R1 | Signature | Fast | High | 6 590 040 | 41 ms |
| SECP384R1 | Verification | Small | Low | 19 527 224 | 122 ms |
| SECP384R1 | Verification | Small | High | 17 071 504 | 106 ms |
| SECP384R1 | Verification | Fast | Low | 16 838 360 | 105 ms |
| SECP384R1 | Verification | Fast | High | 14 409 816 | 90 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 468 bytes | 1212 bytes | 0 bytes | 440 bytes | 628 bytes |
| SECP256R1 | Signature | Small | High | 13 468 bytes | 1596 bytes | 0 bytes | 440 bytes | 696 bytes |
| SECP256R1 | Signature | SuperFast | Low | 14 778 bytes | 1212 bytes | 0 bytes | 444 bytes | 628 bytes |
| SECP256R1 | Signature | SuperFast | High | 14 778 bytes | 1596 bytes | 0 bytes | 444 bytes | 696 bytes |
| SECP256R1 | Verification | Small | Low | 13 456 bytes | 1212 bytes | 0 bytes | 488 bytes | 856 bytes |
| SECP256R1 | Verification | Small | High | 13 456 bytes | 1596 bytes | 0 bytes | 488 bytes | 1648 bytes |
| SECP256R1 | Verification | SuperFast | Low | 14 766 bytes | 1212 bytes | 0 bytes | 492 bytes | 856 bytes |
| SECP256R1 | Verification | SuperFast | High | 14 766 bytes | 1596 bytes | 0 bytes | 492 bytes | 1648 bytes |
| SECP384R1 | Signature | Small | Low | 13 468 bytes | 1692 bytes | 0 bytes | 440 bytes | 884 bytes |
| SECP384R1 | Signature | Small | High | 13 468 bytes | 2268 bytes | 0 bytes | 440 bytes | 984 bytes |
| SECP384R1 | Signature | Fast | Low | 13 838 bytes | 1692 bytes | 0 bytes | 456 bytes | 884 bytes |
| SECP384R1 | Signature | Fast | High | 13 838 bytes | 2268 bytes | 0 bytes | 456 bytes | 984 bytes |
| SECP384R1 | Verification | Small | Low | 13 456 bytes | 1692 bytes | 0 bytes | 488 bytes | 1192 bytes |
| SECP384R1 | Verification | Small | High | 13 456 bytes | 2268 bytes | 0 bytes | 488 bytes | 2272 bytes |
| SECP384R1 | Verification | Fast | Low | 13 826 bytes | 1692 bytes | 0 bytes | 504 bytes | 1192 bytes |
| SECP384R1 | Verification | Fast | High | 13 826 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 | 4 425 936 | 27 ms |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 2 569 824 | 16 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 3 166 232 | 19 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 1 857 520 | 11 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 6 666 008 | 41 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 5 839 656 | 36 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 4 565 232 | 28 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 3 986 568 | 24 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 840 bytes | 1748 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 15 260 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 16 150 bytes | 1748 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 16 570 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 14 836 bytes | 1748 bytes | 0 bytes | 1172 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 15 256 bytes | 2900 bytes | 0 bytes | 1172 bytes | 1992 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 16 146 bytes | 1748 bytes | 0 bytes | 1172 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 16 566 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 | 197 726 848 | 1235 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 148 815 040 | 930 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 124 974 464 | 781 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 158 845 920 | 992 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 119 640 824 | 747 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 100 480 200 | 628 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 762 181 920 | 4763 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 572 421 224 | 3577 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 478 813 000 | 2992 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 606 772 816 | 3792 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 455 816 224 | 2848 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 381 297 416 | 2383 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 3 745 920 | 23 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 3 240 520 | 20 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 | 6890 bytes | 372 bytes | 0 bytes | 668 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 7126 bytes | 372 bytes | 0 bytes | 668 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 7126 bytes | 372 bytes | 0 bytes | 668 bytes | 6708 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 7260 bytes | 372 bytes | 0 bytes | 668 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 7496 bytes | 372 bytes | 0 bytes | 668 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 7496 bytes | 372 bytes | 0 bytes | 668 bytes | 6708 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 5958 bytes | 364 bytes | 0 bytes | 668 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 6194 bytes | 364 bytes | 0 bytes | 668 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 6194 bytes | 364 bytes | 0 bytes | 668 bytes | 9368 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 6328 bytes | 364 bytes | 0 bytes | 668 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 6564 bytes | 364 bytes | 0 bytes | 668 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 6564 bytes | 364 bytes | 0 bytes | 668 bytes | 9368 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 6142 bytes | 368 bytes | 0 bytes | 684 bytes | 3108 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 6512 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 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. .
| Function | Suite | Cycles | Time (in ms) | Stack usage | Working buffer |
|---|---|---|---|---|---|
| ML-DSA-44 | keyGen | 1 990 528 | 12 | 476 | 7116 |
| ML-DSA-65 | keyGen | 3 448 376 | 21 | 476 | 8140 |
| ML-DSA-87 | keyGen | 5 801 936 | 36 | 476 | 10 188 |
| ML-DSA-44 | Signature | 3 549 536 | 22 | 772 | 30 796 |
| ML-DSA-44 | Signature Low RAM | 3 819 040 | 23 | 756 | 11 340 |
| ML-DSA-65 | Signature | 5 456 960 | 34 | 772 | 43 084 |
| ML-DSA-65 | Signature Low RAM | 5 806 584 | 36 | 756 | 15 436 |
| ML-DSA-87 | Signature | 8 542 904 | 53 | 772 | 57 420 |
| ML-DSA-87 | Signature Low RAM | 9 027 344 | 56 | 756 | 19 532 |
| ML-DSA-44 | Verification | 2 244 672 | 14 | 700 | 8908 |
| ML-DSA-44 | Verification Low RAM | 3 039 376 | 18 | 700 | 4812 |
| ML-DSA-65 | Verification | 3 684 176 | 23 | 700 | 9948 |
| ML-DSA-65 | Verification Low RAM | 5 305 072 | 33 | 700 | 4828 |
| ML-DSA-87 | Verification | 6 121 608 | 38 | 700 | 12 268 |
| ML-DSA-87 | Verification Low RAM | 9 136 872 | 57 | 700 | 5100 |