This page reports measured performance when using the pure software cryptographic library algorithms with an STM32WL MCU. In addition to performance figures, the required code footprint and memory are also given.
1. Measurement configuration
1.1. Hardware configuration
STM32 MCU | STM32WL55JC |
Device ID | 0x497 |
Revision ID | 0x1000 |
Board | NUCLEO-WL55JC RevC |
1.2. Firmware configuration
Cryptographic Library version | 040000B1[ver. 1] |
- ↑ This value corresponds to the information returned by a call to cmox_getInfos
1.3. System configuration
System Core Clock Frequency | 48 MHz |
Flash latency | 2 wait states |
Voltage scaling | Range 1 |
Instruction Cache (ART/ICU) | 1 (0: disabled / 1: enabled) |
Data Cache (ART/DCU) | 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 V8.50.4.261/W32 for ARM |
2. Performance values for Cortex®-M4
2.1. AES symmetric key encryption & decryption
This section provides the performance results for AES-CBC using different modes of operation:
- Sole buffer: one sole buffer is encrypted or decrypted. Time to perform is given in µs.
- Data flow: a big message is encrypted or decrypted by chunk. Bit rate is given in kilobytes per second.
2.1.1. Sole buffer mode
In this mode the entire encryption or decryption process, for the whole message size, is managed through a single API call provided by the CMOX library.
The table below shows the number of clock cycles and time (in µs) needed to perform the described operation in small and fast configurations.
AES mode | Key size | Buffer size | Cipher operation | Configuration | Cycles | Time |
---|---|---|---|---|---|---|
AES CBC | 128 bits | 32 bytes | Encryption | Small | 5642 | 117 µs |
AES CBC | 128 bits | 32 bytes | Encryption | Fast | 5703 | 118 µs |
AES CBC | 128 bits | 64 bytes | Encryption | Small | 9093 | 189 µs |
AES CBC | 128 bits | 64 bytes | Encryption | Fast | 9216 | 192 µs |
AES CBC | 128 bits | 128 bytes | Encryption | Small | 16 020 | 333 µs |
AES CBC | 128 bits | 128 bytes | Encryption | Fast | 16 223 | 337 µs |
AES CBC | 192 bits | 32 bytes | Encryption | Small | 6285 | 130 µs |
AES CBC | 192 bits | 32 bytes | Encryption | Fast | 6258 | 130 µs |
AES CBC | 192 bits | 64 bytes | Encryption | Small | 10 329 | 215 µs |
AES CBC | 192 bits | 64 bytes | Encryption | Fast | 10 310 | 214 µs |
AES CBC | 192 bits | 128 bytes | Encryption | Small | 18 327 | 381 µs |
AES CBC | 192 bits | 128 bytes | Encryption | Fast | 18 416 | 383 µs |
AES CBC | 256 bits | 32 bytes | Encryption | Small | 7137 | 148 µs |
AES CBC | 256 bits | 32 bytes | Encryption | Fast | 7145 | 148 µs |
AES CBC | 256 bits | 64 bytes | Encryption | Small | 11 693 | 243 µs |
AES CBC | 256 bits | 64 bytes | Encryption | Fast | 11 749 | 244 µs |
AES CBC | 256 bits | 128 bytes | Encryption | Small | 20 839 | 434 µs |
AES CBC | 256 bits | 128 bytes | Encryption | Fast | 20 967 | 436 µs |
AES CBC | 128 bits | 32 bytes | Decryption | Small | 9617 | 200 µs |
AES CBC | 128 bits | 32 bytes | Decryption | Fast | 7461 | 155 µs |
AES CBC | 128 bits | 64 bytes | Decryption | Small | 17 011 | 354 µs |
AES CBC | 128 bits | 64 bytes | Decryption | Fast | 11 086 | 230 µs |
AES CBC | 128 bits | 128 bytes | Decryption | Small | 31 761 | 661 µs |
AES CBC | 128 bits | 128 bytes | Decryption | Fast | 18 350 | 382 µs |
AES CBC | 192 bits | 32 bytes | Decryption | Small | 11 078 | 230 µs |
AES CBC | 192 bits | 32 bytes | Decryption | Fast | 8409 | 175 µs |
AES CBC | 192 bits | 64 bytes | Decryption | Small | 19 872 | 414 µs |
AES CBC | 192 bits | 64 bytes | Decryption | Fast | 12 623 | 262 µs |
AES CBC | 192 bits | 128 bytes | Decryption | Small | 37 490 | 781 µs |
AES CBC | 192 bits | 128 bytes | Decryption | Fast | 21 025 | 438 µs |
AES CBC | 256 bits | 32 bytes | Decryption | Small | 12 815 | 266 µs |
AES CBC | 256 bits | 32 bytes | Decryption | Fast | 9635 | 200 µs |
AES CBC | 256 bits | 64 bytes | Decryption | Small | 23 067 | 480 µs |
AES CBC | 256 bits | 64 bytes | Decryption | Fast | 14 467 | 301 µs |
AES CBC | 256 bits | 128 bytes | Decryption | Small | 43 525 | 906 µs |
AES CBC | 256 bits | 128 bytes | Decryption | Fast | 24 026 | 500 µs |
The table below shows Flash and RAM usage (in bytes).
Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|---|
Encryption | Small | 2936 bytes | 380 bytes | 1 bytes | 524 bytes |
Encryption | Fast | 3188 bytes | 1404 bytes | 1 bytes | 548 bytes |
Decryption | Small | 3068 bytes | 636 bytes | 1 bytes | 552 bytes |
Decryption | Fast | 3644 bytes | 1660 bytes | 1 bytes | 556 bytes |
2.1.2. Data flow mode
In this mode, operation is performed in several calls to the CMOX library APIs, as below:
- cmox_cipher_init
- cmox_cipher_setKey
- cmox_cipher_setIV
- cmox_cipher_append: called several times to encrypt or decrypt the whole message by chunk of fixed size
The table below shows the number of clock cycles and bit rate (in kilobytes per second) needed to perform described operation in small and in fast configuration.
AES mode | Key size | Message size | Chunk size | Cipher operation | Configuration | Cycles | Bit rate |
---|---|---|---|---|---|---|---|
AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Small | 872 896 | 439 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 890 408 | 431 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 865 712 | 443 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 881 904 | 435 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 864 496 | 444 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 880 496 | 436 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 863 888 | 444 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 879 720 | 436 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 1 014 224 | 378 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 028 424 | 373 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 1 006 792 | 381 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 020 080 | 376 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 1 005 528 | 381 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 018 672 | 376 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 1 004 904 | 382 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 017 968 | 377 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 1 154 160 | 332 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 165 872 | 329 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 1 146 888 | 334 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 157 728 | 331 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 1 145 616 | 335 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 156 328 | 332 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 1 144 992 | 335 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 155 632 | 332 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 1 877 960 | 204 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 938 888 | 408 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 1 865 616 | 205 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 927 320 | 414 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 1 861 904 | 206 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 924 296 | 415 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 1 857 992 | 206 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 921 240 | 416 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 2 233 824 | 171 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 1 083 368 | 354 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 2 220 992 | 172 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 1 071 960 | 358 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 2 217 664 | 173 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 1 068 928 | 359 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 2 214 200 | 173 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 1 065 696 | 360 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 2 589 952 | 148 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 1 226 736 | 313 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 2 577 736 | 148 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 1 215 560 | 315 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 2 574 408 | 149 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 1 212 584 | 316 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 2 571 688 | 149 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 1 209 728 | 317 kbyte/s |
The table below shows Flash and RAM usage (in bytes).
Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|---|
Encryption | Small | 2828 bytes | 372 bytes | 1 bytes | 140 bytes |
Encryption | Fast | 3080 bytes | 1396 bytes | 1 bytes | 172 bytes |
Decryption | Small | 2960 bytes | 628 bytes | 1 bytes | 176 bytes |
Decryption | Fast | 3536 bytes | 1652 bytes | 1 bytes | 180 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. Time to perform is given in us.
- Data flow: a big message is hashed by chunk. Bit rate is given in bytes per s.
2.2.1. Sole buffer mode
In this mode, the entire message hashing process is managed through a single API call provided by the CMOX library.
The table below shows the number of clock cycles and time (in µs) needed to perform described operation.
HASH mode | Buffer size | Cycles | Time |
---|---|---|---|
SHA256 | 32 bytes | 5478 | 114 µs |
SHA256 | 64 bytes | 8784 | 183 µs |
SHA256 | 128 bytes | 11 765 | 245 µs |
SHA384 | 32 bytes | 19 094 | 397 µs |
SHA384 | 64 bytes | 19 300 | 402 µs |
SHA384 | 128 bytes | 35 875 | 747 µs |
The table below shows Flash and RAM usage (in bytes).
HASH mode | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|
SHA256 | 1848 | 296 bytes | 1 bytes | 564 bytes |
SHA384 | 3004 | 744 bytes | 1 bytes | 1124 bytes |
2.2.2. Data flow mode
In this mode, operation is performed in several calls to the CMOX library APIs, as below:
- cmox_hash_init
- cmox_hash_append: called several times to hash the whole message by chunk of fixed size
- cmox_hash_generateTag
The table below shows the number of clock cycles and bit rate (in kilobytes per second) needed to perform described operation.
HASH mode | Message size | Chunk size | Cycles | Bit rate |
---|---|---|---|---|
SHA256 | 8000 bytes | 128 bytes | 418 643 | 917 kbyte/s |
SHA256 | 8000 bytes | 512 bytes | 391 249 | 981 kbyte/s |
SHA256 | 8000 bytes | 1024 bytes | 386 583 | 993 kbyte/s |
SHA256 | 8000 bytes | 2048 bytes | 384 251 | 999 kbyte/s |
SHA384 | 8000 bytes | 128 bytes | 1 063 783 | 360 kbyte/s |
SHA384 | 8000 bytes | 512 bytes | 1 015 249 | 378 kbyte/s |
SHA384 | 8000 bytes | 1024 bytes | 1 006 833 | 381 kbyte/s |
SHA384 | 8000 bytes | 2048 bytes | 1 002 625 | 382 kbyte/s |
The table below shows final tag generation done through the call to cmox_hash_generateTag.
HASH mode | Cycles | Time |
---|---|---|
SHA256 | 4501 | 93 µs |
SHA384 | 17 860 | 372 µs |
The table below shows Flash and RAM usage (in bytes).
HASH mode | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|
SHA256 | 1856 bytes | 288 bytes | 1 bytes | 372 bytes |
SHA384 | 3012 bytes | 736 bytes | 1 bytes | 828 bytes |
2.3. ECDSA signature & verification
In this section we provide the performance results for ECDSA signature & verification.
The table below shows the number of clock cycles and time (in ms) needed to perform described operation in different configurations.
Curve | Operation | ECC mathematics configuration | Curve definition | Cycles | Time |
---|---|---|---|---|---|
SECP256R1 | Signature | Small | Low | 3 058 008 | 63 ms |
SECP256R1 | Signature | Small | High | 2 970 632 | 61 ms |
SECP256R1 | Signature | SuperFast | Low | 2 263 088 | 47 ms |
SECP256R1 | Signature | SuperFast | High | 2 191 712 | 45 ms |
SECP256R1 | Verification | Small | Low | 7 382 280 | 153 ms |
SECP256R1 | Verification | Small | High | 6 559 784 | 136 ms |
SECP256R1 | Verification | SuperFast | Low | 5 526 416 | 115 ms |
SECP256R1 | Verification | SuperFast | High | 4 891 992 | 101 ms |
SECP384R1 | Signature | Small | Low | 8 367 256 | 174 ms |
SECP384R1 | Signature | Small | High | 8 005 416 | 166 ms |
SECP384R1 | Signature | Fast | Low | 8 237 232 | 171 ms |
SECP384R1 | Signature | Fast | High | 7 893 280 | 164 ms |
SECP384R1 | Verification | Small | Low | 20 101 024 | 418 ms |
SECP384R1 | Verification | Small | High | 17 471 688 | 363 ms |
SECP384R1 | Verification | Fast | Low | 19 800 624 | 412 ms |
SECP384R1 | Verification | Fast | High | 17 244 232 | 359 ms |
The table below shows ECDSA Flash and RAM usage (in bytes).
Curve | Operation | ECC mathematics configuration | Curve definition | Code | Constant data | Global data | Stack usage | Working buffer |
---|---|---|---|---|---|---|---|---|
SECP256R1 | Signature | Small | Low | 11 732 bytes | 1184 bytes | 1 bytes | 328 bytes | 628 bytes |
SECP256R1 | Signature | Small | High | 11 732 bytes | 1568 bytes | 1 bytes | 328 bytes | 696 bytes |
SECP256R1 | Signature | SuperFast | Low | 13 042 bytes | 1184 bytes | 1 bytes | 332 bytes | 628 bytes |
SECP256R1 | Signature | SuperFast | High | 13 042 bytes | 1568 bytes | 1 bytes | 332 bytes | 696 bytes |
SECP256R1 | Verification | Small | Low | 12 216 bytes | 1200 bytes | 1 bytes | 424 bytes | 856 bytes |
SECP256R1 | Verification | Small | High | 12 216 bytes | 1584 bytes | 1 bytes | 424 bytes | 1648 bytes |
SECP256R1 | Verification | SuperFast | Low | 13 526 bytes | 1200 bytes | 1 bytes | 428 bytes | 856 bytes |
SECP256R1 | Verification | SuperFast | High | 13 526 bytes | 1584 bytes | 1 bytes | 428 bytes | 1648 bytes |
SECP384R1 | Signature | Small | Low | 11 732 bytes | 1664 bytes | 1 bytes | 328 bytes | 884 bytes |
SECP384R1 | Signature | Small | High | 11 732 bytes | 2240 bytes | 1 bytes | 328 bytes | 984 bytes |
SECP384R1 | Signature | Fast | Low | 12 102 bytes | 1664 bytes | 1 bytes | 344 bytes | 884 bytes |
SECP384R1 | Signature | Fast | High | 12 102 bytes | 2240 bytes | 1 bytes | 344 bytes | 984 bytes |
SECP384R1 | Verification | Small | Low | 12 216 bytes | 1680 bytes | 1 bytes | 424 bytes | 1192 bytes |
SECP384R1 | Verification | Small | High | 12 216 bytes | 2256 bytes | 1 bytes | 424 bytes | 2272 bytes |
SECP384R1 | Verification | Fast | Low | 12 586 bytes | 1680 bytes | 1 bytes | 440 bytes | 1192 bytes |
SECP384R1 | Verification | Fast | High | 12 586 bytes | 2256 bytes | 1 bytes | 440 bytes | 2272 bytes |
2.4. EdDSA signature & verification
In this section we provide the performance results for EdDSA signature & verification.
The table below shows the number of clock cycles and time (in ms) needed to perform described operation in different configurations.
Curve | Message size | Operation | ECC mathematics configuration | Curve definition | Cycles | Time |
---|---|---|---|---|---|---|
Ed25519 | 1023 bytes | Signature | Small | OptLow | 4 817 480 | 100 ms |
Ed25519 | 1023 bytes | Signature | Small | OptHigh | 2 818 064 | 58 ms |
Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 3 792 360 | 79 ms |
Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 2 237 272 | 46 ms |
Ed25519 | 1023 bytes | Verification | Small | OptLow | 7 190 080 | 149 ms |
Ed25519 | 1023 bytes | Verification | Small | OptHigh | 6 299 304 | 131 ms |
Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 5 475 776 | 114 ms |
Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 4 788 560 | 99 ms |
The table below shows EdDSA Flash and RAM usage (in bytes).
Curve | Message size | Operation | ECC mathematics configuration | Curve definition | Code | Constant data | Global data | Stack usage | Working buffer |
---|---|---|---|---|---|---|---|---|---|
Ed25519 | 1023 bytes | Signature | Small | OptLow | 14 088 bytes | 1744 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Signature | Small | OptHigh | 14 494 bytes | 2896 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 15 398 bytes | 1744 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 15 804 bytes | 2896 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Verification | Small | OptLow | 14 178 bytes | 1748 bytes | 1 bytes | 1244 bytes | 1152 bytes |
Ed25519 | 1023 bytes | Verification | Small | OptHigh | 14 584 bytes | 2900 bytes | 1 bytes | 1244 bytes | 1992 bytes |
Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 15 488 bytes | 1748 bytes | 1 bytes | 1244 bytes | 1152 bytes |
Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 15 894 bytes | 2900 bytes | 1 bytes | 1244 bytes | 1992 bytes |
2.5. RSA signature & verification
In this section we provide the performance results for RSA signature & verification.
The table below shows the number of clock cycles and time (in ms) needed to perform described operation in different configurations.
PKCS#1 | Priv. key mod. exp. method | Hash method | Modulus size | Operation | RSA mathematics configuration | Priv. key mod. exp. implementation | Cycles | Time |
---|---|---|---|---|---|---|---|---|
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Low | 187 679 960 | 3909 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 141 325 512 | 2944 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 118 679 656 | 2472 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 187 009 264 | 3896 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 140 833 056 | 2934 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 117 761 552 | 2453 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 713 590 200 | 14 866 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 536 036 040 | 11 167 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 448 385 984 | 9341 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 712 408 424 | 14 841 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 535 150 912 | 11 148 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 446 644 936 | 9305 ms |
v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 3 816 560 | 79 ms |
v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 3 770 000 | 78 ms |
The table below shows RSA Flash and RAM usage (in bytes).
PKCS#1 | Priv. key mod. exp. method | Hash method | Modulus size | Operation | RSA mathematics configuration | Priv. key mod. exp. implementation | Code | Constant data | Global data | Stack usage | Working buffer |
---|---|---|---|---|---|---|---|---|---|---|---|
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Low | 7034 bytes | 370 bytes | 5 bytes | 700 bytes | 3704 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 7282 bytes | 370 bytes | 5 bytes | 700 bytes | 4308 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 7282 bytes | 370 bytes | 5 bytes | 700 bytes | 6708 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 7404 bytes | 370 bytes | 5 bytes | 700 bytes | 3704 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 7652 bytes | 370 bytes | 5 bytes | 700 bytes | 4308 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 7652 bytes | 370 bytes | 5 bytes | 700 bytes | 6708 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 6064 bytes | 362 bytes | 5 bytes | 700 bytes | 3484 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 6312 bytes | 362 bytes | 5 bytes | 700 bytes | 4664 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 6312 bytes | 362 bytes | 5 bytes | 700 bytes | 9368 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 6434 bytes | 362 bytes | 5 bytes | 700 bytes | 3484 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 6682 bytes | 362 bytes | 5 bytes | 700 bytes | 4664 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 6682 bytes | 362 bytes | 5 bytes | 700 bytes | 9368 bytes |
v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 6810 bytes | 366 bytes | 5 bytes | 716 bytes | 3108 bytes |
v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 7180 bytes | 366 bytes | 5 bytes | 716 bytes | 3108 bytes |
3. Performances values for Cortex®-M0+
3.1. AES symmetric key encryption & decryption
This section provides the performance results for AES-CBC using different modes of operation:
- Sole buffer: one sole buffer is encrypted or decrypted. Time to perform is given in µs.
- Data flow: a big message is encrypted or decrypted by chunk. Bit rate is given in kilobytes per second.
3.1.1. Sole buffer mode
In this mode the entire encryption or decryption process, for the whole message size, is managed through a single API call provided by the CMOX library.
The table below shows the number of clock cycles and time (in µs) needed to perform the described operation in small and fast configurations.
AES mode | Key size | Buffer size | Cipher operation | Configuration | Cycles | Time |
---|---|---|---|---|---|---|
AES CBC | 128 bits | 32 bytes | Encryption | Small | 10 231 | 213 µs |
AES CBC | 128 bits | 32 bytes | Encryption | Fast | 10 057 | 209 µs |
AES CBC | 128 bits | 64 bytes | Encryption | Small | 17 517 | 364 µs |
AES CBC | 128 bits | 64 bytes | Encryption | Fast | 16 033 | 334 µs |
AES CBC | 128 bits | 128 bytes | Encryption | Small | 32 089 | 668 µs |
AES CBC | 128 bits | 128 bytes | Encryption | Fast | 27 985 | 583 µs |
AES CBC | 192 bits | 32 bytes | Encryption | Small | 11 560 | 240 µs |
AES CBC | 192 bits | 32 bytes | Encryption | Fast | 11 098 | 231 µs |
AES CBC | 192 bits | 64 bytes | Encryption | Small | 20 170 | 420 µs |
AES CBC | 192 bits | 64 bytes | Encryption | Fast | 18 090 | 376 µs |
AES CBC | 192 bits | 128 bytes | Encryption | Small | 37 390 | 778 µs |
AES CBC | 192 bits | 128 bytes | Encryption | Fast | 32 074 | 668 µs |
AES CBC | 256 bits | 32 bytes | Encryption | Small | 13 230 | 275 µs |
AES CBC | 256 bits | 32 bytes | Encryption | Fast | 12 549 | 261 µs |
AES CBC | 256 bits | 64 bytes | Encryption | Small | 23 164 | 482 µs |
AES CBC | 256 bits | 64 bytes | Encryption | Fast | 20 557 | 428 µs |
AES CBC | 256 bits | 128 bytes | Encryption | Small | 43 032 | 896 µs |
AES CBC | 256 bits | 128 bytes | Encryption | Fast | 36 573 | 761 µs |
AES CBC | 128 bits | 32 bytes | Decryption | Small | 14 383 | 299 µs |
AES CBC | 128 bits | 32 bytes | Decryption | Fast | 12 702 | 264 µs |
AES CBC | 128 bits | 64 bytes | Decryption | Small | 25 809 | 537 µs |
AES CBC | 128 bits | 64 bytes | Decryption | Fast | 18 962 | 395 µs |
AES CBC | 128 bits | 128 bytes | Decryption | Small | 48 661 | 1013 µs |
AES CBC | 128 bits | 128 bytes | Decryption | Fast | 31 482 | 655 µs |
AES CBC | 192 bits | 32 bytes | Decryption | Small | 16 597 | 345 µs |
AES CBC | 192 bits | 32 bytes | Decryption | Fast | 14 298 | 297 µs |
AES CBC | 192 bits | 64 bytes | Decryption | Small | 30 239 | 629 µs |
AES CBC | 192 bits | 64 bytes | Decryption | Fast | 21 606 | 450 µs |
AES CBC | 192 bits | 128 bytes | Decryption | Small | 57 523 | 1198 µs |
AES CBC | 192 bits | 128 bytes | Decryption | Fast | 36 222 | 754 µs |
AES CBC | 256 bits | 32 bytes | Decryption | Small | 19 166 | 399 µs |
AES CBC | 256 bits | 32 bytes | Decryption | Fast | 16 302 | 339 µs |
AES CBC | 256 bits | 64 bytes | Decryption | Small | 35 024 | 729 µs |
AES CBC | 256 bits | 64 bytes | Decryption | Fast | 24 670 | 513 µs |
AES CBC | 256 bits | 128 bytes | Decryption | Small | 66 740 | 1390 µs |
AES CBC | 256 bits | 128 bytes | Decryption | Fast | 41 406 | 862 µs |
The table below shows Flash and RAM usage (in bytes).
Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|---|
Encryption | Small | 3028 bytes | 380 bytes | 1 bytes | 536 bytes |
Encryption | Fast | 3276 bytes | 1404 bytes | 1 bytes | 540 bytes |
Decryption | Small | 3104 bytes | 636 bytes | 1 bytes | 584 bytes |
Decryption | Fast | 3696 bytes | 1660 bytes | 1 bytes | 560 bytes |
3.1.2. Data flow mode
In this mode, operation is performed in several calls to the CMOX library APIs, as below:
- cmox_cipher_init
- cmox_cipher_setKey
- cmox_cipher_setIV
- cmox_cipher_append: called several times to encrypt or decrypt the whole message by chunk of fixed size
The table below shows the number of clock cycles and bit rate (in kilobytes per second) needed to perform described operation in small and in fast configuration.
AES mode | Key size | Message size | Chunk size | Cipher operation | Configuration | Cycles | Bit rate |
---|---|---|---|---|---|---|---|
AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Small | 1 856 576 | 206 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 530 384 | 250 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Small | 1 847 600 | 207 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 521 544 | 252 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Small | 1 846 064 | 208 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 520 048 | 252 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Small | 1 845 312 | 208 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 519 296 | 252 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Small | 2 187 576 | 175 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Encryption | Fast | 1 784 384 | 215 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Small | 2 178 600 | 176 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Encryption | Fast | 1 775 552 | 216 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Small | 2 177 072 | 176 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 1 774 048 | 216 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Small | 2 176 304 | 176 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 1 773 296 | 216 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Small | 2 518 576 | 152 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Encryption | Fast | 2 038 384 | 188 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Small | 2 509 600 | 153 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Encryption | Fast | 2 029 544 | 189 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Small | 2 508 064 | 153 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Encryption | Fast | 2 028 048 | 189 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Small | 2 507 304 | 153 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Encryption | Fast | 2 027 296 | 189 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Small | 2 893 440 | 132 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 128 bytes | Decryption | Fast | 1 602 600 | 239 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Small | 2 881 448 | 133 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 512 bytes | Decryption | Fast | 1 590 096 | 241 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Small | 2 878 128 | 133 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 1 586 688 | 242 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Small | 2 874 344 | 133 kbyte/s |
AES CBC | 128 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 1 582 864 | 242 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Small | 3 447 440 | 111 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 128 bytes | Decryption | Fast | 1 864 600 | 205 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Small | 3 435 456 | 111 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 512 bytes | Decryption | Fast | 1 852 104 | 207 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Small | 3 432 128 | 111 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 1 848 688 | 207 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Small | 3 428 344 | 112 kbyte/s |
AES CBC | 192 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 1 844 864 | 208 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Small | 4 001 672 | 95 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 128 bytes | Decryption | Fast | 2 129 360 | 180 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Small | 3 989 504 | 96 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 512 bytes | Decryption | Fast | 2 117 056 | 181 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Small | 3 986 136 | 96 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 1024 bytes | Decryption | Fast | 2 113 664 | 181 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Small | 3 982 352 | 96 kbyte/s |
AES CBC | 256 bits | 8000 bytes | 2048 bytes | Decryption | Fast | 2 109 864 | 182 kbyte/s |
The table below shows Flash and RAM usage (in bytes).
Cipher operation | Configuration | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|---|
Encryption | Small | 2950 bytes | 372 bytes | 1 bytes | 152 bytes |
Encryption | Fast | 3198 bytes | 1396 bytes | 1 bytes | 164 bytes |
Decryption | Small | 3022 bytes | 628 bytes | 1 bytes | 208 bytes |
Decryption | Fast | 3614 bytes | 1652 bytes | 1 bytes | 184 bytes |
3.2. HASH digest
In this section we provide the performance results for HASH using different modes of operation:
- Sole buffer: one sole buffer is hashed. Time to perform is given in us.
- Data flow: a big message is hashed by chunk. Bit rate is given in bytes per s.
3.2.1. Sole buffer mode
In this mode, the entire message hashing process is managed through a single API call provided by the CMOX library.
The table below shows the number of clock cycles and time (in µs) needed to perform described operation.
HASH mode | Buffer size | Cycles | Time |
---|---|---|---|
SHA256 | 32 bytes | 11 080 | 230 µs |
SHA256 | 64 bytes | 19 241 | 400 µs |
SHA256 | 128 bytes | 27 309 | 568 µs |
SHA384 | 32 bytes | 38 646 | 805 µs |
SHA384 | 64 bytes | 38 656 | 805 µs |
SHA384 | 128 bytes | 72 865 | 1518 µs |
The table below shows Flash and RAM usage (in bytes).
HASH mode | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|
SHA256 | 1846 | 296 bytes | 1 bytes | 580 bytes |
SHA384 | 3158 | 744 bytes | 1 bytes | 1132 bytes |
3.2.2. Data flow mode
In this mode, operation is performed in several calls to the CMOX library APIs, as below:
- cmox_hash_init
- cmox_hash_append: called several times to hash the whole message by chunk of fixed size
- cmox_hash_generateTag
The table below shows the number of clock cycles and bit rate (in kilobytes per second) needed to perform described operation.
HASH mode | Message size | Chunk size | Cycles | Bit rate |
---|---|---|---|---|
SHA256 | 8000 bytes | 128 bytes | 1 030 985 | 372 kbyte/s |
SHA256 | 8000 bytes | 512 bytes | 1 017 214 | 377 kbyte/s |
SHA256 | 8000 bytes | 1024 bytes | 1 014 870 | 378 kbyte/s |
SHA256 | 8000 bytes | 2048 bytes | 1 013 698 | 378 kbyte/s |
SHA384 | 8000 bytes | 128 bytes | 2 137 254 | 179 kbyte/s |
SHA384 | 8000 bytes | 512 bytes | 2 122 004 | 180 kbyte/s |
SHA384 | 8000 bytes | 1024 bytes | 2 119 388 | 181 kbyte/s |
SHA384 | 8000 bytes | 2048 bytes | 2 118 080 | 181 kbyte/s |
The table below shows final tag generation done through the call to cmox_hash_generateTag.
HASH mode | Cycles | Time |
---|---|---|
SHA256 | 10 341 | 215 µs |
SHA384 | 37 843 | 788 µs |
The table below shows Flash and RAM usage (in bytes).
HASH mode | Code | Constant data | Global data | Stack usage |
---|---|---|---|---|
SHA256 | 1874 bytes | 288 bytes | 1 bytes | 380 bytes |
SHA384 | 3186 bytes | 736 bytes | 1 bytes | 828 bytes |
3.3. ECDSA signature & verification
In this section we provide the performance results for ECDSA signature & verification.
The table below shows the number of clock cycles and time (in ms) needed to perform described operation in different configurations.
Curve | Operation | ECC mathematics configuration | Curve definition | Cycles | Time |
---|---|---|---|---|---|
SECP256R1 | Signature | Small | Low | 12 376 176 | 257 ms |
SECP256R1 | Signature | Small | High | 11 922 104 | 248 ms |
SECP256R1 | Signature | SuperFast | Low | 9 289 128 | 193 ms |
SECP256R1 | Signature | SuperFast | High | 9 036 448 | 188 ms |
SECP256R1 | Verification | Small | Low | 29 311 368 | 610 ms |
SECP256R1 | Verification | Small | High | 25 844 168 | 538 ms |
SECP256R1 | Verification | SuperFast | Low | 22 231 544 | 463 ms |
SECP256R1 | Verification | SuperFast | High | 19 783 032 | 412 ms |
SECP384R1 | Signature | Small | Low | 39 216 312 | 817 ms |
SECP384R1 | Signature | Small | High | 37 470 008 | 780 ms |
SECP384R1 | Signature | Fast | Low | 33 120 720 | 690 ms |
SECP384R1 | Signature | Fast | High | 31 892 880 | 664 ms |
SECP384R1 | Verification | Small | Low | 92 644 096 | 1930 ms |
SECP384R1 | Verification | Small | High | 80 578 208 | 1678 ms |
SECP384R1 | Verification | Fast | Low | 78 657 120 | 1638 ms |
SECP384R1 | Verification | Fast | High | 68 981 648 | 1437 ms |
The table below shows ECDSA Flash and RAM usage (in bytes).
Curve | Operation | ECC mathematics configuration | Curve definition | Code | Constant data | Global data | Stack usage | Working buffer |
---|---|---|---|---|---|---|---|---|
SECP256R1 | Signature | Small | Low | 11 900 bytes | 1184 bytes | 1 bytes | 320 bytes | 628 bytes |
SECP256R1 | Signature | Small | High | 11 900 bytes | 1568 bytes | 1 bytes | 320 bytes | 696 bytes |
SECP256R1 | Signature | SuperFast | Low | 15 240 bytes | 1184 bytes | 1 bytes | 368 bytes | 628 bytes |
SECP256R1 | Signature | SuperFast | High | 15 240 bytes | 1568 bytes | 1 bytes | 368 bytes | 696 bytes |
SECP256R1 | Verification | Small | Low | 12 370 bytes | 1200 bytes | 1 bytes | 408 bytes | 856 bytes |
SECP256R1 | Verification | Small | High | 12 370 bytes | 1584 bytes | 1 bytes | 408 bytes | 1648 bytes |
SECP256R1 | Verification | SuperFast | Low | 15 710 bytes | 1200 bytes | 1 bytes | 456 bytes | 856 bytes |
SECP256R1 | Verification | SuperFast | High | 15 710 bytes | 1584 bytes | 1 bytes | 456 bytes | 1648 bytes |
SECP384R1 | Signature | Small | Low | 11 900 bytes | 1664 bytes | 1 bytes | 320 bytes | 884 bytes |
SECP384R1 | Signature | Small | High | 11 900 bytes | 2240 bytes | 1 bytes | 320 bytes | 984 bytes |
SECP384R1 | Signature | Fast | Low | 12 738 bytes | 1664 bytes | 1 bytes | 312 bytes | 884 bytes |
SECP384R1 | Signature | Fast | High | 12 738 bytes | 2240 bytes | 1 bytes | 312 bytes | 984 bytes |
SECP384R1 | Verification | Small | Low | 12 370 bytes | 1680 bytes | 1 bytes | 408 bytes | 1192 bytes |
SECP384R1 | Verification | Small | High | 12 370 bytes | 2256 bytes | 1 bytes | 408 bytes | 2272 bytes |
SECP384R1 | Verification | Fast | Low | 13 208 bytes | 1680 bytes | 1 bytes | 400 bytes | 1192 bytes |
SECP384R1 | Verification | Fast | High | 13 208 bytes | 2256 bytes | 1 bytes | 400 bytes | 2272 bytes |
3.4. EdDSA signature & verification
In this section we provide the performance results for EdDSA signature & verification.
The table below shows the number of clock cycles and time (in ms) needed to perform described operation in different configurations.
Curve | Message size | Operation | ECC mathematics configuration | Curve definition | Cycles | Time |
---|---|---|---|---|---|---|
Ed25519 | 1023 bytes | Signature | Small | OptLow | 17 541 032 | 365 ms |
Ed25519 | 1023 bytes | Signature | Small | OptHigh | 10 047 072 | 209 ms |
Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 13 863 464 | 288 ms |
Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 7 844 864 | 163 ms |
Ed25519 | 1023 bytes | Verification | Small | OptLow | 27 593 736 | 574 ms |
Ed25519 | 1023 bytes | Verification | Small | OptHigh | 24 073 808 | 501 ms |
Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 21 353 856 | 444 ms |
Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 18 258 080 | 380 ms |
The table below shows EdDSA Flash and RAM usage (in bytes).
Curve | Message size | Operation | ECC mathematics configuration | Curve definition | Code | Constant data | Global data | Stack usage | Working buffer |
---|---|---|---|---|---|---|---|---|---|
Ed25519 | 1023 bytes | Signature | Small | OptLow | 14 550 bytes | 1744 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Signature | Small | OptHigh | 14 972 bytes | 2896 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Signature | SuperFast | OptLow | 17 890 bytes | 1744 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Signature | SuperFast | OptHigh | 18 312 bytes | 2896 bytes | 1 bytes | 1236 bytes | 1388 bytes |
Ed25519 | 1023 bytes | Verification | Small | OptLow | 14 608 bytes | 1748 bytes | 1 bytes | 1236 bytes | 1152 bytes |
Ed25519 | 1023 bytes | Verification | Small | OptHigh | 15 030 bytes | 2900 bytes | 1 bytes | 1236 bytes | 1992 bytes |
Ed25519 | 1023 bytes | Verification | SuperFast | OptLow | 17 948 bytes | 1748 bytes | 1 bytes | 1236 bytes | 1152 bytes |
Ed25519 | 1023 bytes | Verification | SuperFast | OptHigh | 18 370 bytes | 2900 bytes | 1 bytes | 1236 bytes | 1992 bytes |
3.5. RSA signature & verification
In this section we provide the performance results for RSA signature & verification.
The table below shows the number of clock cycles and time (in ms) needed to perform described operation in different configurations.
PKCS#1 | Priv. key mod. exp. method | Hash method | Modulus size | Operation | RSA mathematics configuration | Priv. key mod. exp. implementation | Cycles | Time |
---|---|---|---|---|---|---|---|---|
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Low | 1 094 403 880 | 22 800 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 832 868 816 | 17 351 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 694 549 360 | 14 469 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 922 009 088 | 19 208 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 664 079 472 | 13 834 ms |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 551 535 184 | 11 490 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 4 309 167 424 | 89 774 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 3 276 556 864 | 68 261 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 2 722 194 584 | 56 712 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 3 624 847 920 | 75 517 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 2 599 469 688 | 54 155 ms |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 2 147 945 432 | 44 748 ms |
v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 17 091 480 | 356 ms |
v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 14 019 104 | 292 ms |
The table below shows RSA Flash and RAM usage (in bytes).
PKCS#1 | Priv. key mod. exp. method | Hash method | Modulus size | Operation | RSA mathematics configuration | Priv. key mod. exp. implementation | Code | Constant data | Global data | Stack usage | Working buffer |
---|---|---|---|---|---|---|---|---|---|---|---|
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Low | 7260 bytes | 369 bytes | 5 bytes | 708 bytes | 3704 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | Mid | 7538 bytes | 369 bytes | 5 bytes | 708 bytes | 4308 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Small | High | 7538 bytes | 369 bytes | 5 bytes | 708 bytes | 6708 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Low | 8098 bytes | 370 bytes | 5 bytes | 708 bytes | 3704 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | Mid | 8376 bytes | 370 bytes | 5 bytes | 708 bytes | 4308 bytes |
v2.2 | CRT | SHA-256 | 3K | Signature | Fast | High | 8376 bytes | 370 bytes | 5 bytes | 708 bytes | 6708 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Low | 6274 bytes | 361 bytes | 5 bytes | 708 bytes | 3484 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | Mid | 6552 bytes | 362 bytes | 5 bytes | 708 bytes | 4664 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Small | High | 6552 bytes | 362 bytes | 5 bytes | 708 bytes | 9368 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Low | 7112 bytes | 362 bytes | 5 bytes | 708 bytes | 3484 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | Mid | 7390 bytes | 362 bytes | 5 bytes | 708 bytes | 4664 bytes |
v2.2 | No CRT | SHA-256 | 3K | Signature | Fast | High | 7390 bytes | 362 bytes | 5 bytes | 708 bytes | 9368 bytes |
v2.2 | n/a | SHA-256 | 3K | Verification | Small | n/a | 7054 bytes | 365 bytes | 5 bytes | 724 bytes | 3108 bytes |
v2.2 | n/a | SHA-256 | 3K | Verification | Fast | n/a | 7892 bytes | 366 bytes | 5 bytes | 724 bytes | 3108 bytes |