1 module dcrypt.benchmark.Benchmark;
2
3 public import std.datetime: StopWatch;
4 import std.conv;
5 import dcrypt.benchmark.BlockCipherBenchmark;
6 import dcrypt.benchmark.AEADCipherBenchmark;
7 import dcrypt.benchmark.DigestBenchmark;
8 import dcrypt.blockcipher.blockcipher;
9 import dcrypt.digest;
10 import dcrypt.aead.aead;
11
12 import std.stdio;
13 import std..string;
14
15 public class Benchmark {
16
17
18 /// Params:
19 /// length = the length of benchmark in bytes
20 /// ciphers = BlockCiphers to test
21 public static void doBenchmark(ulong length, IBlockCipher[] ciphers...) {
22 writeln();
23
24 printTabbed(BlockCipherBenchmark.header);
25 writeln();
26 foreach(c; ciphers) {
27 auto bench = new BlockCipherBenchmark(c);
28 printTabbed(bench.benchmark(length));
29 stdout.flush();
30 }
31 }
32
33 public static void doBenchmark(ulong length, IAEADEngine[] ciphers...) {
34 writeln();
35 printTabbed(AEADCipherBenchmark.header);
36 writeln();
37 foreach(c; ciphers) {
38 auto bench = new AEADCipherBenchmark(c);
39 printTabbed(bench.benchmark(length));
40 stdout.flush();
41 }
42 }
43
44 public static void doBenchmark(ulong length, Digest[] digests...) {
45 writeln();
46 printTabbed(DigestBenchmark.header);
47 writeln();
48 foreach(d; digests) {
49 auto bench = new DigestBenchmark(d);
50 printTabbed(bench.benchmark(length));
51 stdout.flush();
52 }
53 }
54
55 public static void doCurved25519Benchmark(ulong length) {
56 import dcrypt.benchmark.curved25519;
57
58 writeln();
59 printTabbed(Curved25519Benchmark.header);
60 writeln();
61 auto bench = new Curved25519Benchmark;
62 printTabbed(bench.benchmark(length));
63 stdout.flush();
64 }
65
66 public static void doEd25519Benchmark(ulong length) {
67 import dcrypt.benchmark.curved25519;
68
69 writeln();
70 printTabbed(Ed25519Benchmark.header);
71 writeln();
72 auto bench = new Ed25519Benchmark;
73 printTabbed(bench.benchmark(length));
74 stdout.flush();
75 }
76
77 public static void doSphincs256Benchmark(ulong length) {
78 import dcrypt.benchmark.sphincs256;
79
80 writeln();
81 printTabbed(Sphincs256Benchmark.header);
82 writeln();
83 auto bench = new Sphincs256Benchmark;
84 printTabbed(bench.benchmark(length));
85 stdout.flush();
86 }
87
88 /// do the calculations, (compute hashes, encrypt data, ...)
89 /// Params: length = length of benchmark (numbers of bytes to process)
90 /// Returns: a string containing the benchmark results
91 public abstract string[] benchmark(ulong length);
92
93 @trusted
94 static void printTabbed(string[] strs...) {
95 writefln("%-(%-20s%)", strs);
96 }
97
98 public string numberFormat(double d) {
99 return format("%10.2f", d);
100 }
101 }