This page shows the measured performance results when using the pure software cryptographic library algorithms with an STM32U3 MCU. In addition to performance figures, it also gives the required code footprint and memory.
1. Measurement configuration
1.1. Hardware configuration
| STM32 MCU | STM32U385RGTxQ |
| Device ID | 0x454 |
| Revision ID | 0x1001 |
| Board | NUCLEO-U385RG-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 | 96 MHz |
| Flash latency | 2 wait states |
| Voltage scaling | Range 1 |
| 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 | 3672 | 38 µs |
| AES CBC | 128 bits | 32 bytes | Encryption | Fast | 3184 | 33 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Small | 6319 | 65 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Fast | 5260 | 54 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Small | 11 609 | 120 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Fast | 9443 | 98 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Small | 4029 | 41 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Fast | 3426 | 35 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Small | 7099 | 73 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Fast | 5811 | 60 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Small | 13 227 | 137 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Fast | 10 601 | 110 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Small | 4591 | 47 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Fast | 3855 | 40 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Small | 8081 | 84 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Fast | 6555 | 68 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Small | 15 054 | 156 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Fast | 11 936 | 124 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Small | 4947 | 51 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Fast | 4491 | 46 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Small | 8794 | 91 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Fast | 6610 | 68 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Small | 16 443 | 171 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Fast | 10 851 | 113 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Small | 5581 | 58 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Fast | 5035 | 52 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Small | 10 107 | 105 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Fast | 7477 | 77 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Small | 19 119 | 199 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Fast | 12 288 | 128 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Small | 6377 | 66 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Fast | 5790 | 60 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Small | 11 581 | 120 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Fast | 8505 | 88 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Small | 21 965 | 228 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Fast | 13 925 | 145 µ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 280 | 1149 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 532 208 | 1443 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 663 048 | 1158 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 527 152 | 1456 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 662 136 | 1159 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 526 240 | 1459 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 661 680 | 1160 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 525 776 | 1460 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 773 288 | 993 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 606 232 | 1266 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 768 056 | 999 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 601 216 | 1277 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 767 144 | 1001 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 600 304 | 1279 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 766 688 | 1001 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 599 848 | 1280 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 878 288 | 874 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 680 200 | 1129 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 873 048 | 879 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 675 096 | 1137 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 872 136 | 880 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 674 176 | 1139 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 871 672 | 881 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 673 720 | 1139 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 985 384 | 779 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 557 496 | 1377 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 977 688 | 785 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 549 920 | 1396 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 975 360 | 787 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 547 576 | 1402 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 972 632 | 789 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 544 792 | 1409 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 155 392 | 664 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 631 424 | 1216 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 147 696 | 669 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 623 792 | 1231 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 145 360 | 670 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 621 472 | 1235 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 142 600 | 672 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 618 680 | 1241 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 325 384 | 579 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 705 456 | 1088 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 317 720 | 582 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 697 896 | 1100 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 315 376 | 583 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 695 568 | 1104 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 312 608 | 585 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 692 792 | 1108 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 | 4068 | 42 µs |
| SHA256 | 64 bytes | 7135 | 74 µs |
| SHA256 | 128 bytes | 9992 | 104 µs |
| SHA384 | 32 bytes | 15 342 | 159 µs |
| SHA384 | 64 bytes | 15 515 | 161 µs |
| SHA384 | 128 bytes | 28 923 | 301 µ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 078 | 1989 Kbytes/s |
| SHA256 | 8000 bytes | 512 bytes | 364 406 | 2107 Kbytes/s |
| SHA256 | 8000 bytes | 1024 bytes | 360 752 | 2128 Kbytes/s |
| SHA256 | 8000 bytes | 2048 bytes | 358 929 | 2139 Kbytes/s |
| SHA384 | 8000 bytes | 128 bytes | 858 548 | 894 Kbytes/s |
| SHA384 | 8000 bytes | 512 bytes | 819 692 | 936 Kbytes/s |
| SHA384 | 8000 bytes | 1024 bytes | 812 961 | 944 Kbytes/s |
| SHA384 | 8000 bytes | 2048 bytes | 809 579 | 948 Kbytes/s |
The table below shows the final tag generation done through the call to cmox_hash_generateTag.
| HASH mode | Cycles | Time |
|---|---|---|
| SHA256 | 3371 | 35 µs |
| SHA384 | 14 261 | 148 µ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 874 456 | 29 ms |
| SECP256R1 | Signature | Small | High | 2 811 544 | 29 ms |
| SECP256R1 | Signature | SuperFast | Low | 1 900 192 | 19 ms |
| SECP256R1 | Signature | SuperFast | High | 1 828 304 | 19 ms |
| SECP256R1 | Verification | Small | Low | 6 896 824 | 71 ms |
| SECP256R1 | Verification | Small | High | 6 164 240 | 64 ms |
| SECP256R1 | Verification | SuperFast | Low | 4 653 080 | 48 ms |
| SECP256R1 | Verification | SuperFast | High | 4 076 936 | 42 ms |
| SECP384R1 | Signature | Small | Low | 8 165 704 | 85 ms |
| SECP384R1 | Signature | Small | High | 7 859 056 | 81 ms |
| SECP384R1 | Signature | Fast | Low | 7 014 408 | 73 ms |
| SECP384R1 | Signature | Fast | High | 6 579 048 | 68 ms |
| SECP384R1 | Verification | Small | Low | 19 525 256 | 203 ms |
| SECP384R1 | Verification | Small | High | 17 082 392 | 177 ms |
| SECP384R1 | Verification | Fast | Low | 16 882 240 | 175 ms |
| SECP384R1 | Verification | Fast | High | 14 369 720 | 149 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 429 144 | 46 ms |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 2 566 584 | 26 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 3 156 904 | 32 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 1 862 232 | 19 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 6 669 856 | 69 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 5 834 880 | 60 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 4 578 432 | 47 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 4 013 480 | 41 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 776 | 2059 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 148 814 880 | 1550 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 124 974 424 | 1301 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 158 845 736 | 1654 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 119 613 032 | 1245 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 100 473 128 | 1046 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 762 181 864 | 7939 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 572 421 048 | 5962 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 478 812 944 | 4987 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 606 772 640 | 6320 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 455 788 408 | 4747 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 381 290 368 | 3971 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 3 745 608 | 39 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 3 239 984 | 33 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 pair 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 988 616 | 20 | 476 | 7116 |
| ML-DSA-65 | keyGen | 3 443 896 | 35 | 476 | 8140 |
| ML-DSA-87 | keyGen | 5 795 152 | 60 | 476 | 10 188 |
| ML-DSA-44 | Signature | 3 549 040 | 36 | 772 | 30 796 |
| ML-DSA-44 | Signature Low RAM | 3 811 968 | 39 | 756 | 11 340 |
| ML-DSA-65 | Signature | 5 459 216 | 56 | 772 | 43 084 |
| ML-DSA-65 | Signature Low RAM | 5 797 488 | 60 | 756 | 15 436 |
| ML-DSA-87 | Signature | 8 541 328 | 88 | 772 | 57 420 |
| ML-DSA-87 | Signature Low RAM | 9 008 800 | 93 | 756 | 19 532 |
| ML-DSA-44 | Verification | 2 244 248 | 23 | 700 | 8908 |
| ML-DSA-44 | Verification Low RAM | 3 036 096 | 31 | 700 | 4812 |
| ML-DSA-65 | Verification | 3 685 000 | 38 | 700 | 9948 |
| ML-DSA-65 | Verification Low RAM | 5 302 640 | 55 | 700 | 4828 |
| ML-DSA-87 | Verification | 6 118 224 | 63 | 700 | 12 268 |
| ML-DSA-87 | Verification Low RAM | 9 125 624 | 95 | 700 | 5100 |
2.7. Post-Quantum Cryptography ML-KEM key pair generation, encapsulation, decapsulation
This section is under construction.
2.8. Post-Quantum Cryptography HBS-LMS signature verification
This section is under construction.