Skip to content

vcsjones/AesNi

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fully managed .NET AES implementation (based on AES-NI)

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.

AES key expansion performance

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

AES encrypt performance

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

AES decrypt performance

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

About

Fully managed AES implementation in .NET based on AES-NI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%