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 }