Performance benchmarks
emCrypt implements all algorithms in platform-independent C code. The following benchmarks show some performance of these software implementations with and without hardware acceleration.
![SEGGER emCrypt SEGGER emCrypt](https://c.a.segger.com/fileadmin/_processed_/b/3/csm_Produkt-Icon_emCrypt_ff2f7c2237.png)
Overview
All algorithms in emCrypt can be independently tailored for higher speed or lower size. The benchmarks are done on the emPower Board with a NXP K66, running @ 168 MHz, configured for highest speed, compiled with Embedded Studio using clang.
Please note:
For further information that goes beyond these details including not listed devices or cores, please take a look at our online documentation:
https://wiki.segger.com/emCrypt
Modular exponentiation benchmark
(c) 2014-2017 SEGGER Microcontroller GmbH & Co. KG www.segger.com
Modular Exponentiation Benchmark compiled Apr 21 2017 15:54:06
Compiler: clang 3.9.1 (tags/RELEASE_391/final)
System: Processor speed = 168.000 MHz
Config: Static heap size = 39600 bytes
Config: CRYPTO_MPI_BITS_PER_LIMB = 32
Modular Arithmetic Performance
==============================
CRT private key, exponent length = modulus length, all times in ms
+---------------------------+---------------+---------------+---------------+
| Algorithm | 512 | 1024 | 2048 |
+---------------------------+---------------+---------------+---------------+
| Basic, ladder | 67.87 1.0x | 287.25 1.0x | 1497.00 1.0x |
| Basic, fast | 50.55 1.3x | 202.80 1.4x | 955.00 1.6x |
| Basic, 2b, FW | 47.41 1.4x | 192.50 1.5x | 923.50 1.6x |
| Basic, 3b, FW | 44.35 1.5x | 182.50 1.6x | 909.50 1.6x |
| Basic, 4b, FW | 43.33 1.6x | 176.17 1.6x | 887.00 1.7x |
| Basic, 5b, FW | 44.13 1.5x | 174.83 1.6x | 872.00 1.7x |
| Basic, 6b, FW | 47.41 1.4x | 178.67 1.6x | 865.00 1.7x |
+---------------------------+---------------+---------------+---------------+
| Basic, 2b, RM | 46.73 1.5x | 189.33 1.5x | 911.00 1.6x |
| Basic, 3b, RM | 43.87 1.5x | 180.17 1.6x | 889.50 1.7x |
| Basic, 4b, RM | 42.58 1.6x | 173.67 1.7x | 870.00 1.7x |
| Basic, 5b, RM | 42.33 1.6x | 171.00 1.7x | 856.50 1.7x |
| Basic, 6b, RM | 43.38 1.6x | 171.00 1.7x | 847.00 1.8x |
+---------------------------+---------------+---------------+---------------+
| Barrett, ladder | 53.84 1.3x | 202.00 1.4x | 1021.00 1.5x |
| Barrett, fast | 40.08 1.7x | 145.14 2.0x | 666.50 2.2x |
| Barrett, 2b, FW | 38.73 1.8x | 139.12 2.1x | 645.50 2.3x |
| Barrett, 3b, FW | 35.59 1.9x | 129.00 2.2x | 620.50 2.4x |
| Barrett, 4b, FW | 34.48 2.0x | 123.78 2.3x | 599.50 2.5x |
| Barrett, 5b, FW | 35.10 1.9x | 122.56 2.3x | 587.50 2.5x |
| Barrett, 6b, FW | 37.78 1.8x | 125.50 2.3x | 583.00 2.6x |
+---------------------------+---------------+---------------+---------------+
| Barrett, 2b, RM | 37.11 1.8x | 133.75 2.1x | 628.00 2.4x |
| Barrett, 3b, RM | 34.79 2.0x | 126.50 2.3x | 606.00 2.5x |
| Barrett, 4b, RM | 33.73 2.0x | 121.78 2.4x | 588.50 2.5x |
| Barrett, 5b, RM | 33.57 2.0x | 119.56 2.4x | 577.50 2.6x |
| Barrett, 6b, RM | 34.43 2.0x | 119.56 2.4x | 570.50 2.6x |
+---------------------------+---------------+---------------+---------------+
| Montgomery, fast | 21.17 3.2x | 92.64 3.1x | 486.33 3.1x |
| Montgomery, 2b, FW | 21.40 3.2x | 93.73 3.1x | 484.67 3.1x |
| Montgomery, 3b, FW | 19.35 3.5x | 84.17 3.4x | 433.00 3.5x |
| Montgomery, 4b, FW | 18.61 3.6x | 80.08 3.6x | 409.00 3.7x |
| Montgomery, 5b, FW | 18.94 3.6x | 79.08 3.6x | 398.67 3.8x |
| Montgomery, 6b, FW | 20.36 3.3x | 81.15 3.5x | 398.00 3.8x |
+---------------------------+---------------+---------------+---------------+
| Montgomery, 2b, RM | 19.84 3.4x | 85.50 3.4x | 446.00 3.4x |
| Montgomery, 3b, RM | 18.65 3.6x | 81.08 3.5x | 419.00 3.6x |
| Montgomery, 4b, RM | 18.14 3.7x | 78.23 3.7x | 401.33 3.7x |
| Montgomery, 5b, RM | 18.07 3.8x | 76.92 3.7x | 392.67 3.8x |
| Montgomery, 6b, RM | 18.59 3.7x | 77.08 3.7x | 387.00 3.9x |
+---------------------------+---------------+---------------+---------------+
Public key, exponent length = 17 bits, all times in ms
+---------------------------+---------------+---------------+---------------+
| Algorithm | 512 | 1024 | 2048 |
+---------------------------+---------------+---------------+---------------+
| Basic, ladder | 4.38 1.0x | 9.62 1.0x | 25.77 1.0x |
| Basic, fast | 2.23 2.0x | 4.68 2.1x | 12.14 2.1x |
| Basic, 2b, FW | 2.41 1.8x | 4.87 2.0x | 12.42 2.1x |
| Basic, 3b, FW | 2.62 1.7x | 5.00 1.9x | 12.44 2.1x |
| Basic, 4b, FW | 3.14 1.4x | 5.67 1.7x | 13.09 2.0x |
| Basic, 5b, FW | 4.17 1.1x | 6.99 1.4x | 15.07 1.7x |
| Basic, 6b, FW | 5.88 0.7x | 9.18 1.0x | 18.70 1.4x |
+---------------------------+---------------+---------------+---------------+
| Basic, 2b, RM | 2.29 1.9x | 4.73 2.0x | 12.20 2.1x |
| Basic, 3b, RM | 2.52 1.7x | 4.87 2.0x | 12.27 2.1x |
| Basic, 4b, RM | 2.99 1.5x | 5.48 1.8x | 12.82 2.0x |
| Basic, 5b, RM | 3.89 1.1x | 6.66 1.4x | 14.64 1.8x |
| Basic, 6b, RM | 5.69 0.8x | 9.02 1.1x | 18.22 1.4x |
+---------------------------+---------------+---------------+---------------+
| Barrett, ladder | 3.46 1.3x | 7.83 1.2x | 22.22 1.2x |
| Barrett, fast | 1.78 2.5x | 3.82 2.5x | 10.42 2.5x |
| Barrett, 2b, FW | 2.15 2.0x | 4.24 2.3x | 11.02 2.3x |
| Barrett, 3b, FW | 2.32 1.9x | 4.38 2.2x | 11.00 2.3x |
| Barrett, 4b, FW | 2.87 1.5x | 5.23 1.8x | 11.95 2.2x |
| Barrett, 5b, FW | 3.96 1.1x | 6.91 1.4x | 14.85 1.7x |
| Barrett, 6b, FW | 5.93 0.7x | 9.96 1.0x | 20.34 1.3x |
+---------------------------+---------------+---------------+---------------+
| Barrett, 2b, RM | 1.88 2.3x | 3.89 2.5x | 10.50 2.5x |
| Barrett, 3b, RM | 2.06 2.1x | 4.07 2.4x | 10.60 2.4x |
| Barrett, 4b, RM | 2.45 1.8x | 4.69 2.0x | 11.31 2.3x |
| Barrett, 5b, RM | 3.18 1.4x | 5.90 1.6x | 13.44 1.9x |
| Barrett, 6b, RM | 4.63 0.9x | 8.30 1.2x | 17.70 1.5x |
+---------------------------+---------------+---------------+---------------+
| Montgomery, fast | 1.41 3.1x | 3.37 2.9x | 9.98 2.6x |
| Montgomery, 2b, FW | 2.06 2.1x | 5.12 1.9x | 15.38 1.7x |
| Montgomery, 3b, FW | 2.13 2.1x | 5.29 1.8x | 15.89 1.6x |
| Montgomery, 4b, FW | 2.69 1.6x | 6.77 1.4x | 20.34 1.3x |
| Montgomery, 5b, FW | 3.61 1.2x | 9.20 1.0x | 27.73 0.9x |
| Montgomery, 6b, FW | 5.41 0.8x | 13.97 0.7x | 42.13 0.6x |
+---------------------------+---------------+---------------+---------------+
| Montgomery, 2b, RM | 1.60 2.7x | 3.87 2.5x | 11.47 2.2x |
| Montgomery, 3b, RM | 1.72 2.5x | 4.19 2.3x | 12.46 2.1x |
| Montgomery, 4b, RM | 2.09 2.1x | 5.14 1.9x | 15.43 1.7x |
| Montgomery, 5b, RM | 2.58 1.7x | 6.41 1.5x | 19.40 1.3x |
| Montgomery, 6b, RM | 3.48 1.3x | 8.66 1.1x | 26.37 1.0x |
+---------------------------+---------------+---------------+---------------+
Benchmark complete
AES benchmark
Benchmarked on a SEGGER emPower board
(c) 2014-2017 SEGGER Microcontroller GmbH & Co. KG www.segger.com
AES Benchmark V1.16 compiled Apr 21 2017 16:00:55
Compiler: clang 3.9.1 (tags/RELEASE_391/final)
System: Processor speed = 168.000 MHz
Config: CRYPTO_CONFIG_AES_OPTIMIZE = 15
Config: CRYPTO_CONFIG_AES_HW_OPTIMIZE = 1
+--------------+------+-----------------+-----------------+
| | | ECB MB/s | CBC MB/s |
| Cipher | Bits | Enc Dec | Enc Dec |
+--------------+------+-----------------+-----------------+
| AES | 128 | 2.03 2.18 | 1.64 1.61 |
| AES (HW) | 128 | 8.14 7.70 | 7.52 6.72 |
| AES | 192 | 1.74 1.88 | 1.44 1.44 |
| AES (HW) | 192 | 6.83 6.52 | 6.30 5.66 |
| AES | 256 | 1.53 1.64 | 1.29 1.30 |
| AES (HW) | 256 | 6.05 5.89 | 5.63 5.00 |
+--------------+------+-----------------+-----------------+
| | | GCM MB/s | CCM MB/s |
| Cipher | Bits | Enc Dec | Enc Dec |
+--------------+------+-----------------+-----------------+
| AES | 128 | 0.05 0.05 | 0.83 0.83 |
| AES (HW) | 128 | 0.05 0.05 | 1.23 1.24 |
| AES | 192 | 0.05 0.05 | 0.73 0.73 |
| AES (HW) | 192 | 0.05 0.05 | 1.16 1.16 |
| AES | 256 | 0.06 0.06 | 0.65 0.65 |
| AES (HW) | 256 | 0.06 0.06 | 1.10 1.11 |
+--------------+------+-----------------+-----------------+
Benchmark complete
ECDSA benchmark
Benchmarked on a SEGGER emPower board
(c) 2014-2017 SEGGER Microcontroller GmbH & Co. KG www.segger.com
ECDSA Sign and Verify Benchmark compiled Apr 21 2017 16:03:45
Compiler: clang 3.9.1 (tags/RELEASE_391/final)
System: Processor speed = 168.000 MHz
Config: Static heap size = 4440 bytes
Config: CRYPTO_MPI_BITS_PER_LIMB = 32
Config: CRYPTO_CONFIG_ECDSA_TWIN_MULTIPLY = 1
+------------------+-----------+-----------+-----------+-----------+
| | Sign | Sign | Verify | Verify |
| Curve | ms | bytes | ms | bytes |
+------------------+-----------+-----------+-----------+-----------+
| secp192r1 | 40.54 | 1152 | 37.64 | 1920 |
| secp224r1 | 50.85 | 1296 | 48.27 | 2160 |
| secp256r1 | 79.07 | 1440 | 75.86 | 2400 |
| secp384r1 | 129.00 | 2016 | 122.00 | 3360 |
| secp521r1 | 238.67 | 2664 | 218.50 | 4440 |
| brainpoolP160r1 | 68.87 | 1008 | 66.81 | 1680 |
| brainpoolP160t1 | 62.88 | 1008 | 60.50 | 1680 |
| brainpoolP192r1 | 98.67 | 1152 | 90.92 | 1920 |
| brainpoolP192t1 | 89.42 | 1152 | 80.86 | 1920 |
| brainpoolP224r1 | 130.87 | 1296 | 122.40 | 2160 |
| brainpoolP224t1 | 119.50 | 1296 | 111.20 | 2160 |
| brainpoolP256r1 | 171.33 | 1440 | 162.00 | 2400 |
| brainpoolP256t1 | 158.00 | 1440 | 145.62 | 2400 |
| brainpoolP320r1 | 260.75 | 1728 | 242.83 | 2880 |
| brainpoolP320t1 | 241.00 | 1728 | 216.00 | 2880 |
| brainpoolP384r1 | 399.00 | 2016 | 372.00 | 3360 |
| brainpoolP384t1 | 376.25 | 2016 | 327.75 | 3360 |
| brainpoolP512r1 | 754.50 | 2592 | 694.00 | 4320 |
| brainpoolP512t1 | 649.00 | 2592 | 613.50 | 4320 |
+------------------+-----------+-----------+-----------+-----------+
Benchmark complete