1 module dcrypt.main; 2 3 import std.stdio; 4 import std.conv; 5 import dcrypt.crypto.streamcipher; 6 import dcrypt.encoders.hex; 7 import dcrypt.crypto.digest; 8 import dcrypt.crypto.digests.sha1; 9 import dcrypt.crypto.digests.sha2; 10 import dcrypt.crypto.digests.sha3; 11 12 import dcrypt.crypto.pbe.pbkdf2; 13 14 import dcrypt.crypto.blockcipher; 15 import dcrypt.crypto.engines.aes; 16 import dcrypt.crypto.engines.aesni; 17 import dcrypt.crypto.engines.aesopenssl; 18 import dcrypt.crypto.engines.rijndael; 19 import dcrypt.crypto.engines.rc6; 20 import dcrypt.crypto.engines.serpent; 21 import dcrypt.crypto.modes.cbc; 22 import dcrypt.crypto.modes.ctr; 23 24 import dcrypt.crypto.modes.gcm.gcm; 25 26 import dcrypt.crypto.engines.poly1305_chacha; 27 28 import dcrypt.benchmark.Benchmark; 29 import dcrypt.benchmark.DigestBenchmark; 30 import dcrypt.benchmark.BlockCipherBenchmark; 31 import dcrypt.benchmark.AEADCipherBenchmark; 32 33 version (Benchmark) { 34 35 public void main(string[] args) { 36 benchmark(); 37 } 38 39 /// run various benchmarks 40 void benchmark() { 41 ulong len = 1<<18; 42 43 debug { 44 writeln("\n--- BENCHMARK (slow debug mode)---\n"); 45 } else { 46 writeln("\n--- BENCHMARK ---\n"); 47 } 48 49 Digest[] digests; 50 digests ~= new SHA1Digest(); 51 digests ~= new SHA256Digest(); 52 digests ~= new SHA384Digest(); 53 digests ~= new SHA512Digest(); 54 digests ~= new SHA3_224Digest; 55 digests ~= new SHA3_256Digest; 56 digests ~= new SHA3_384Digest; 57 digests ~= new SHA3_512Digest; 58 59 Benchmark.doBenchmark(len, digests); 60 61 62 BlockCipher[] ciphers; 63 ciphers ~= new AESEngine(); 64 ciphers ~= new AESNIEngine(); 65 ciphers ~= new AESOpenSSLEngine(); 66 ciphers ~= new CBCBlockCipher!AES; 67 ciphers ~= new CTRBlockCipher!AES; 68 ciphers ~= new CBCBlockCipher!AESNI; 69 ciphers ~= new CTRBlockCipher!AESNI; 70 ciphers ~= new Rijndael128Engine; 71 ciphers ~= new Rijndael256Engine; 72 ciphers ~= new RC6Engine(); 73 ciphers ~= new SerpentEngine(); 74 ciphers ~= new CBCBlockCipher!Serpent; 75 ciphers ~= new CTRBlockCipher!Serpent; 76 77 Benchmark.doBenchmark(len, ciphers); 78 79 AEADCipher[] aeadCiphers = [ 80 new GCMCipher(new AESEngine()), 81 new GCMCipher(new AESNIEngine()), 82 new GCMCipher(new SerpentEngine()) 83 ]; 84 //aeadCiphers ~= new Poly1305ChaChaEngine; 85 86 Benchmark.doBenchmark(len, aeadCiphers); 87 88 Benchmark.doCurved25519Benchmark(1024); 89 Benchmark.doEd25519Benchmark(1024); 90 91 } 92 } else { 93 // public void main(string[] args) { 94 // } 95 }