AesCipherBenchmarks.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using BenchmarkDotNet.Attributes;
  2. using Renci.SshNet.Security.Cryptography.Ciphers;
  3. namespace Renci.SshNet.Benchmarks.Security.Cryptography.Ciphers
  4. {
  5. [MemoryDiagnoser]
  6. public class AesCipherBenchmarks
  7. {
  8. private readonly byte[] _key;
  9. private readonly byte[] _iv;
  10. private readonly byte[] _data;
  11. public AesCipherBenchmarks()
  12. {
  13. _key = new byte[32];
  14. _iv = new byte[16];
  15. _data = new byte[32 * 1024];
  16. Random random = new(Seed: 12345);
  17. random.NextBytes(_key);
  18. random.NextBytes(_iv);
  19. random.NextBytes(_data);
  20. }
  21. [Benchmark]
  22. public byte[] Encrypt_CBC()
  23. {
  24. return new AesCipher(_key, _iv, AesCipherMode.CBC, false).Encrypt(_data);
  25. }
  26. [Benchmark]
  27. public byte[] Decrypt_CBC()
  28. {
  29. return new AesCipher(_key, _iv, AesCipherMode.CBC, false).Decrypt(_data);
  30. }
  31. [Benchmark]
  32. public byte[] Encrypt_CFB()
  33. {
  34. return new AesCipher(_key, _iv, AesCipherMode.CFB, false).Encrypt(_data);
  35. }
  36. [Benchmark]
  37. public byte[] Decrypt_CFB()
  38. {
  39. return new AesCipher(_key, _iv, AesCipherMode.CFB, false).Decrypt(_data);
  40. }
  41. [Benchmark]
  42. public byte[] Encrypt_CTR()
  43. {
  44. return new AesCipher(_key, _iv, AesCipherMode.CTR, false).Encrypt(_data);
  45. }
  46. [Benchmark]
  47. public byte[] Decrypt_CTR()
  48. {
  49. return new AesCipher(_key, _iv, AesCipherMode.CTR, false).Decrypt(_data);
  50. }
  51. [Benchmark]
  52. public byte[] Encrypt_ECB()
  53. {
  54. return new AesCipher(_key, null, AesCipherMode.ECB, false).Encrypt(_data);
  55. }
  56. [Benchmark]
  57. public byte[] Decrypt_ECB()
  58. {
  59. return new AesCipher(_key, null, AesCipherMode.ECB, false).Decrypt(_data);
  60. }
  61. }
  62. }