Do not use this in production! This is a toy project to explore System.Runtime.Intrinsics
and AES-NI
Currently with support for ECB, CBC and GCM encrypt/decrypt (all NIST KATs passing). Adding all sorts of paddings is also supported, removing & verifying it is on my todo list... Other modes of use may follow as well.
Method | Mean | Error | StdDev |
---|---|---|---|
Aes128BitKeyExpansion | 35.91 ns | 0.6520 ns | 0.6099 ns |
Aes192BitKeyExpansion | 47.13 ns | 0.7675 ns | 0.6804 ns |
Aes256BitKeyExpansion | 42.32 ns | 0.9240 ns | 0.9887 ns |
Method | CipherMode | PaddingMode | KeySize | DataSize | Mean | Error | Ratio |
---|---|---|---|---|---|---|---|
AesNi | CBC | None | 128 | 16 | 53.12 ns | 0.1889 ns | 0.69 |
Framework | CBC | None | 128 | 16 | 76.60 ns | 0.4616 ns | 1.00 |
AesNi | CBC | None | 128 | 1024 | 874.72 ns | 1.2827 ns | 1.14 |
Framework | CBC | None | 128 | 1024 | 769.68 ns | 1.1661 ns | 1.00 |
AesNi | CBC | None | 128 | 1048576 | 856,481.12 ns | 3,484.9597 ns | 1.19 |
Framework | CBC | None | 128 | 1048576 | 717,848.19 ns | 13,624.5112 ns | 1.00 |
AesNi | CBC | None | 192 | 16 | 56.57 ns | 0.1945 ns | 0.71 |
Framework | CBC | None | 192 | 16 | 80.23 ns | 0.4021 ns | 1.00 |
AesNi | CBC | None | 192 | 1024 | 1,027.52 ns | 2.2520 ns | 1.15 |
Framework | CBC | None | 192 | 1024 | 892.94 ns | 2.3952 ns | 1.00 |
AesNi | CBC | None | 192 | 1048576 | 967,634.92 ns | 2,962.3339 ns | 1.14 |
Framework | CBC | None | 192 | 1048576 | 847,375.78 ns | 707.3181 ns | 1.00 |
AesNi | CBC | None | 256 | 16 | 60.10 ns | 0.1200 ns | 0.65 |
Framework | CBC | None | 256 | 16 | 91.95 ns | 0.4771 ns | 1.00 |
AesNi | CBC | None | 256 | 1024 | 1,054.53 ns | 2.8493 ns | 0.97 |
Framework | CBC | None | 256 | 1024 | 1,084.55 ns | 1.1230 ns | 1.00 |
AesNi | CBC | None | 256 | 1048576 | 1,039,090.65 ns | 13,291.9184 ns | 1.00 |
Framework | CBC | None | 256 | 1048576 | 1,039,724.18 ns | 2,317.5920 ns | 1.00 |
AesNi | ECB | None | 128 | 16 | 46.73 ns | 0.2436 ns | 0.57 |
Framework | ECB | None | 128 | 16 | 81.31 ns | 1.0505 ns | 1.00 |
AesNi | ECB | None | 128 | 1024 | 127.32 ns | 2.0895 ns | 0.77 |
Framework | ECB | None | 128 | 1024 | 164.75 ns | 0.2017 ns | 1.00 |
AesNi | ECB | None | 128 | 1048576 | 140,822.30 ns | 174.8443 ns | 1.48 |
Framework | ECB | None | 128 | 1048576 | 95,159.98 ns | 264.9020 ns | 1.00 |
AesNi | ECB | None | 192 | 16 | 52.33 ns | 0.0688 ns | 0.69 |
Framework | ECB | None | 192 | 16 | 75.50 ns | 0.1966 ns | 1.00 |
AesNi | ECB | None | 192 | 1024 | 150.59 ns | 0.3047 ns | 0.79 |
Framework | ECB | None | 192 | 1024 | 190.23 ns | 0.9903 ns | 1.00 |
AesNi | ECB | None | 192 | 1048576 | 115,244.18 ns | 308.2288 ns | 1.03 |
Framework | ECB | None | 192 | 1048576 | 111,538.64 ns | 96.6564 ns | 1.00 |
AesNi | ECB | None | 256 | 16 | 52.15 ns | 0.1719 ns | 0.66 |
Framework | ECB | None | 256 | 16 | 79.17 ns | 0.1428 ns | 1.00 |
AesNi | ECB | None | 256 | 1024 | 157.85 ns | 3.1763 ns | 0.73 |
Framework | ECB | None | 256 | 1024 | 217.51 ns | 0.5000 ns | 1.00 |
AesNi | ECB | None | 256 | 1048576 | 122,834.53 ns | 424.0743 ns | 0.89 |
Framework | ECB | None | 256 | 1048576 | 138,721.29 ns | 286.2300 ns | 1.00 |
Method | CipherMode | PaddingMode | KeySize | DataSize | Mean | Error | StdDev | Ratio |
---|---|---|---|---|---|---|---|---|
AesNi | CBC | None | 128 | 16 | 40.56 ns | 0.3099 ns | 0.2588 ns | 0.48 |
Framework | CBC | None | 128 | 16 | 85.17 ns | 0.7217 ns | 0.6751 ns | 1.00 |
AesNi | CBC | None | 128 | 1024 | 150.37 ns | 6.1546 ns | 18.1471 ns | 0.82 |
Framework | CBC | None | 128 | 1024 | 189.60 ns | 1.9181 ns | 1.7942 ns | 1.00 |
AesNi | CBC | None | 128 | 1048576 | 105,309.20 ns | 536.4942 ns | 475.5881 ns | 0.97 |
Framework | CBC | None | 128 | 1048576 | 108,803.69 ns | 670.8807 ns | 627.5422 ns | 1.00 |
AesNi | CBC | None | 192 | 16 | 45.69 ns | 0.9025 ns | 0.7536 ns | 0.54 |
Framework | CBC | None | 192 | 16 | 84.60 ns | 0.4631 ns | 0.4332 ns | 1.00 |
AesNi | CBC | None | 192 | 1024 | 155.21 ns | 1.7375 ns | 1.6253 ns | 0.77 |
Framework | CBC | None | 192 | 1024 | 202.52 ns | 0.8997 ns | 0.8416 ns | 1.00 |
AesNi | CBC | None | 192 | 1048576 | 124,210.60 ns | 459.2670 ns | 429.5986 ns | 0.99 |
Framework | CBC | None | 192 | 1048576 | 125,101.53 ns | 198.4721 ns | 165.7332 ns | 1.00 |
AesNi | CBC | None | 256 | 16 | 45.23 ns | 0.2512 ns | 0.2227 ns | 0.51 |
Framework | CBC | None | 256 | 16 | 89.06 ns | 0.7113 ns | 0.6654 ns | 1.00 |
AesNi | CBC | None | 256 | 1024 | 155.90 ns | 1.9114 ns | 1.7879 ns | 0.70 |
Framework | CBC | None | 256 | 1024 | 224.04 ns | 2.2041 ns | 2.0617 ns | 1.00 |
AesNi | CBC | None | 256 | 1048576 | 127,773.17 ns | 3,084.0620 ns | 5,639.3817 ns | 0.90 |
Framework | CBC | None | 256 | 1048576 | 144,033.44 ns | 359.6341 ns | 336.4020 ns | 1.00 |
AesNi | ECB | None | 128 | 16 | 31.46 ns | 0.1889 ns | 0.1674 ns | 0.41 |
Framework | ECB | None | 128 | 16 | 76.86 ns | 0.3054 ns | 0.2708 ns | 1.00 |
AesNi | ECB | None | 128 | 1024 | 111.58 ns | 1.0203 ns | 0.9544 ns | 0.33 |
Framework | ECB | None | 128 | 1024 | 339.31 ns | 3.0097 ns | 2.8153 ns | 1.00 |
AesNi | ECB | None | 128 | 1048576 | 139,299.30 ns | 476.1600 ns | 422.1034 ns | 0.56 |
Framework | ECB | None | 128 | 1048576 | 250,596.04 ns | 2,637.1993 ns | 2,466.8379 ns | 1.00 |
AesNi | ECB | None | 192 | 16 | 36.16 ns | 0.1581 ns | 0.1320 ns | 0.48 |
Framework | ECB | None | 192 | 16 | 75.77 ns | 0.5718 ns | 0.5069 ns | 1.00 |
AesNi | ECB | None | 192 | 1024 | 134.45 ns | 0.7831 ns | 0.7325 ns | 0.40 |
Framework | ECB | None | 192 | 1024 | 333.48 ns | 5.6652 ns | 5.2993 ns | 1.00 |
AesNi | ECB | None | 192 | 1048576 | 162,322.50 ns | 954.9279 ns | 893.2401 ns | 0.63 |
Framework | ECB | None | 192 | 1048576 | 259,364.61 ns | 1,087.2464 ns | 1,017.0110 ns | 1.00 |
AesNi | ECB | None | 256 | 16 | 36.13 ns | 0.0700 ns | 0.0655 ns | 0.47 |
Framework | ECB | None | 256 | 16 | 76.63 ns | 0.7104 ns | 0.6297 ns | 1.00 |
AesNi | ECB | None | 256 | 1024 | 133.11 ns | 0.4417 ns | 0.3916 ns | 0.35 |
Framework | ECB | None | 256 | 1024 | 375.75 ns | 0.9654 ns | 0.8062 ns | 1.00 |
AesNi | ECB | None | 256 | 1048576 | 161,534.95 ns | 905.5891 ns | 802.7811 ns | 0.55 |
Framework | ECB | None | 256 | 1048576 | 294,344.69 ns | 1,807.6672 ns | 1,602.4499 ns | 293,761 |