This page shows the measured performance results when using the pure software cryptographic library algorithms with an STM32U0 MCU. In addition to performance figures, it also gives the required code footprint and memory.
1. Measurement configuration
1.1. Hardware configuration
| STM32 MCU | STM32U083RCTx |
| Device ID | 0x489 |
| Revision ID | 0x1000 |
| Board | NUCLEO-U083RC |
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 | 56 MHz |
| Flash latency | 1 wait states |
| Voltage scaling | Range 1 |
| Instruction cache (ART/ICU) | 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 | 5547 | 99 µs |
| AES CBC | 128 bits | 32 bytes | Encryption | Fast | 5586 | 99 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Small | 9802 | 175 µs |
| AES CBC | 128 bits | 64 bytes | Encryption | Fast | 9869 | 176 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Small | 18 310 | 326 µs |
| AES CBC | 128 bits | 128 bytes | Encryption | Fast | 18 433 | 329 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Small | 6216 | 111 µs |
| AES CBC | 192 bits | 32 bytes | Encryption | Fast | 6258 | 111 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Small | 11 168 | 199 µs |
| AES CBC | 192 bits | 64 bytes | Encryption | Fast | 11 244 | 200 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Small | 21 072 | 376 µs |
| AES CBC | 192 bits | 128 bytes | Encryption | Fast | 21 216 | 378 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Small | 7141 | 127 µs |
| AES CBC | 256 bits | 32 bytes | Encryption | Fast | 7181 | 128 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Small | 12 787 | 228 µs |
| AES CBC | 256 bits | 64 bytes | Encryption | Fast | 12 856 | 229 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Small | 24 079 | 429 µs |
| AES CBC | 256 bits | 128 bytes | Encryption | Fast | 24 208 | 432 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Small | 7157 | 127 µs |
| AES CBC | 128 bits | 32 bytes | Decryption | Fast | 7196 | 128 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Small | 13 038 | 232 µs |
| AES CBC | 128 bits | 64 bytes | Decryption | Fast | 13 104 | 234 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Small | 24 800 | 442 µs |
| AES CBC | 128 bits | 128 bytes | Decryption | Fast | 24 918 | 444 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Small | 8172 | 145 µs |
| AES CBC | 192 bits | 32 bytes | Decryption | Fast | 8210 | 146 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Small | 15 102 | 269 µs |
| AES CBC | 192 bits | 64 bytes | Decryption | Fast | 15 166 | 270 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Small | 28 956 | 517 µs |
| AES CBC | 192 bits | 128 bytes | Decryption | Fast | 29 072 | 519 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Small | 9447 | 168 µs |
| AES CBC | 256 bits | 32 bytes | Decryption | Fast | 9485 | 169 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Small | 17 418 | 311 µs |
| AES CBC | 256 bits | 64 bytes | Decryption | Fast | 17 482 | 312 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Small | 33 358 | 595 µs |
| AES CBC | 256 bits | 128 bytes | Decryption | Fast | 33 474 | 597 µs |
The table below shows flash memory and RAM usage (in bytes).
| Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|---|
| Encryption | Small | 2338 bytes | 324 bytes | 0 bytes | 544 bytes |
| Encryption | Fast | 2362 bytes | 324 bytes | 0 bytes | 552 bytes |
| Decryption | Small | 2742 bytes | 592 bytes | 0 bytes | 564 bytes |
| Decryption | Fast | 2766 bytes | 592 bytes | 0 bytes | 572 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 | 1 074 184 | 417 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 081 304 | 414 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 1 066 264 | 420 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 073 296 | 417 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 1 064 912 | 420 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 071 928 | 417 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 1 064 248 | 420 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 071 240 | 418 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 1 248 528 | 358 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 257 520 | 356 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 1 240 728 | 361 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 249 720 | 358 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 1 239 392 | 361 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 247 240 | 359 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 1 238 728 | 361 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 247 224 | 359 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 1 422 272 | 314 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 429 800 | 313 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 1 414 288 | 316 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 421 792 | 315 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 1 412 920 | 317 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 420 416 | 315 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 1 412 240 | 317 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 419 744 | 315 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 503 696 | 297 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 1 510 136 | 296 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 492 712 | 300 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 1 499 200 | 298 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 489 672 | 300 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 1 496 160 | 299 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 486 232 | 301 Kbytes/s |
| AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 1 492 728 | 300 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 764 976 | 253 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 1 771 472 | 252 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 754 032 | 255 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 1 760 536 | 254 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 751 056 | 255 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 1 757 552 | 254 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 747 664 | 256 Kbytes/s |
| AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 1 754 160 | 255 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 2 025 872 | 221 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 2 032 376 | 220 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 2 014 896 | 222 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 2 021 392 | 221 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 2 012 120 | 222 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 2 018 624 | 221 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 2 008 400 | 223 Kbytes/s |
| AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 2 014 896 | 222 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 | 2274 bytes | 316 bytes | 0 bytes | 168 bytes |
| Encryption | Fast | 2298 bytes | 316 bytes | 0 bytes | 176 bytes |
| Decryption | Small | 2678 bytes | 584 bytes | 0 bytes | 188 bytes |
| Decryption | Fast | 2702 bytes | 584 bytes | 0 bytes | 196 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 | 9050 | 161 µs |
| SHA256 | 64 bytes | 16 916 | 302 µs |
| SHA256 | 128 bytes | 24 712 | 441 µs |
| SHA384 | 32 bytes | 36 210 | 646 µs |
| SHA384 | 64 bytes | 36 226 | 646 µs |
| SHA384 | 128 bytes | 70 074 | 1251 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1502 | 280 bytes | 0 bytes | 564 bytes |
| SHA384 | 2810 | 728 bytes | 0 bytes | 1116 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 | 989 417 | 452 Kbytes/s |
| SHA256 | 8000 bytes | 512 bytes | 978 137 | 458 Kbytes/s |
| SHA256 | 8000 bytes | 1024 bytes | 976 217 | 458 Kbytes/s |
| SHA256 | 8000 bytes | 2048 bytes | 975 255 | 459 Kbytes/s |
| SHA384 | 8000 bytes | 128 bytes | 2 110 364 | 212 Kbytes/s |
| SHA384 | 8000 bytes | 512 bytes | 2 096 770 | 213 Kbytes/s |
| SHA384 | 8000 bytes | 1024 bytes | 2 094 434 | 213 Kbytes/s |
| SHA384 | 8000 bytes | 2048 bytes | 2 093 266 | 214 Kbytes/s |
The table below shows the final tag generation done through the call to cmox_hash_generateTag.
| HASH mode | Cycles | Time |
|---|---|---|
| SHA256 | 8498 | 151 µs |
| SHA384 | 35 625 | 636 µs |
The table below shows flash memory and RAM usage (in bytes).
| HASH mode | Code | Constant data | Global data | Stack usage |
|---|---|---|---|---|
| SHA256 | 1526 bytes | 272 bytes | 0 bytes | 372 bytes |
| SHA384 | 2834 bytes | 720 bytes | 0 bytes | 820 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 | 10 978 664 | 196 ms |
| SECP256R1 | Signature | Small | High | 10 652 336 | 190 ms |
| SECP256R1 | Signature | SuperFast | Low | 8 333 144 | 148 ms |
| SECP256R1 | Signature | SuperFast | High | 8 076 160 | 144 ms |
| SECP256R1 | Verification | Small | Low | 25 956 800 | 463 ms |
| SECP256R1 | Verification | Small | High | 23 042 200 | 411 ms |
| SECP256R1 | Verification | SuperFast | Low | 19 918 056 | 355 ms |
| SECP256R1 | Verification | SuperFast | High | 17 647 832 | 315 ms |
| SECP384R1 | Signature | Small | Low | 34 723 480 | 620 ms |
| SECP384R1 | Signature | Small | High | 33 186 296 | 592 ms |
| SECP384R1 | Signature | Fast | Low | 29 986 904 | 535 ms |
| SECP384R1 | Signature | Fast | High | 28 576 760 | 510 ms |
| SECP384R1 | Verification | Small | Low | 81 913 232 | 1462 ms |
| SECP384R1 | Verification | Small | High | 71 253 592 | 1272 ms |
| SECP384R1 | Verification | Fast | Low | 71 304 720 | 1273 ms |
| SECP384R1 | Verification | Fast | High | 61 795 168 | 1103 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 670 bytes | 1212 bytes | 0 bytes | 424 bytes | 628 bytes |
| SECP256R1 | Signature | Small | High | 13 670 bytes | 1596 bytes | 0 bytes | 424 bytes | 696 bytes |
| SECP256R1 | Signature | SuperFast | Low | 17 010 bytes | 1212 bytes | 0 bytes | 472 bytes | 628 bytes |
| SECP256R1 | Signature | SuperFast | High | 17 010 bytes | 1596 bytes | 0 bytes | 472 bytes | 696 bytes |
| SECP256R1 | Verification | Small | Low | 13 658 bytes | 1212 bytes | 0 bytes | 472 bytes | 856 bytes |
| SECP256R1 | Verification | Small | High | 13 658 bytes | 1596 bytes | 0 bytes | 472 bytes | 1648 bytes |
| SECP256R1 | Verification | SuperFast | Low | 16 998 bytes | 1212 bytes | 0 bytes | 520 bytes | 856 bytes |
| SECP256R1 | Verification | SuperFast | High | 16 998 bytes | 1596 bytes | 0 bytes | 520 bytes | 1648 bytes |
| SECP384R1 | Signature | Small | Low | 13 670 bytes | 1692 bytes | 0 bytes | 424 bytes | 884 bytes |
| SECP384R1 | Signature | Small | High | 13 670 bytes | 2268 bytes | 0 bytes | 424 bytes | 984 bytes |
| SECP384R1 | Signature | Fast | Low | 14 508 bytes | 1692 bytes | 0 bytes | 416 bytes | 884 bytes |
| SECP384R1 | Signature | Fast | High | 14 508 bytes | 2268 bytes | 0 bytes | 416 bytes | 984 bytes |
| SECP384R1 | Verification | Small | Low | 13 658 bytes | 1692 bytes | 0 bytes | 472 bytes | 1192 bytes |
| SECP384R1 | Verification | Small | High | 13 658 bytes | 2268 bytes | 0 bytes | 472 bytes | 2272 bytes |
| SECP384R1 | Verification | Fast | Low | 14 496 bytes | 1692 bytes | 0 bytes | 464 bytes | 1192 bytes |
| SECP384R1 | Verification | Fast | High | 14 496 bytes | 2268 bytes | 0 bytes | 464 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 | 15 531 040 | 277 ms |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 8 942 544 | 159 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 12 385 936 | 221 ms |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 7 145 008 | 127 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 24 442 544 | 436 ms |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 21 368 816 | 381 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 19 080 128 | 340 ms |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 16 602 008 | 296 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 | 15 360 bytes | 1748 bytes | 0 bytes | 1212 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | Small | OptHigh | 15 798 bytes | 2900 bytes | 0 bytes | 1212 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 18 700 bytes | 1748 bytes | 0 bytes | 1212 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 19 138 bytes | 2900 bytes | 0 bytes | 1212 bytes | 1672 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptLow | 15 356 bytes | 1748 bytes | 0 bytes | 1204 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | Small | OptHigh | 15 794 bytes | 2900 bytes | 0 bytes | 1204 bytes | 1992 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 18 696 bytes | 1748 bytes | 0 bytes | 1204 bytes | 984 bytes |
| Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 19 134 bytes | 2900 bytes | 0 bytes | 1204 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 | 1 008 694 816 | 18 012 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 758 179 888 | 13 538 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 636 388 128 | 11 364 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 854 688 160 | 15 262 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 620 902 104 | 11 087 ms |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 506 902 592 | 9051 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 3 967 989 856 | 70 856 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 2 978 698 984 | 53 191 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 2 491 007 984 | 44 482 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 3 355 790 576 | 59 924 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 2 428 244 688 | 43 361 ms |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 1 970 314 112 | 35 184 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 15 447 328 | 275 ms |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 12 743 448 | 227 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 | 7178 bytes | 372 bytes | 0 bytes | 692 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 7430 bytes | 372 bytes | 0 bytes | 692 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 7430 bytes | 372 bytes | 0 bytes | 692 bytes | 6708 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 8016 bytes | 372 bytes | 0 bytes | 692 bytes | 3704 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 8268 bytes | 372 bytes | 0 bytes | 692 bytes | 4308 bytes |
| v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 8268 bytes | 372 bytes | 0 bytes | 692 bytes | 6708 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 6268 bytes | 364 bytes | 0 bytes | 692 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 6520 bytes | 364 bytes | 0 bytes | 692 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 6520 bytes | 364 bytes | 0 bytes | 692 bytes | 9368 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 7106 bytes | 364 bytes | 0 bytes | 692 bytes | 3484 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 7358 bytes | 364 bytes | 0 bytes | 692 bytes | 4664 bytes |
| v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 7358 bytes | 364 bytes | 0 bytes | 692 bytes | 9368 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 6464 bytes | 368 bytes | 0 bytes | 708 bytes | 3108 bytes |
| v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 7302 bytes | 368 bytes | 0 bytes | 708 bytes | 3108 bytes |