· 7 years ago · Jun 11, 2018, 11:36 PM
1package net.eckenfels.test.jmh;
2
3
4import java.nio.ByteBuffer;
5import java.security.InvalidKeyException;
6import java.security.MessageDigest;
7import java.security.NoSuchAlgorithmException;
8import java.util.concurrent.TimeUnit;
9
10import javax.crypto.KeyGenerator;
11import javax.crypto.Mac;
12import javax.crypto.SecretKey;
13
14import org.openjdk.jmh.annotations.Benchmark;
15import org.openjdk.jmh.annotations.BenchmarkMode;
16import org.openjdk.jmh.annotations.Fork;
17import org.openjdk.jmh.annotations.Measurement;
18import org.openjdk.jmh.annotations.Mode;
19import org.openjdk.jmh.annotations.OutputTimeUnit;
20import org.openjdk.jmh.annotations.Param;
21import org.openjdk.jmh.annotations.Scope;
22import org.openjdk.jmh.annotations.Setup;
23import org.openjdk.jmh.annotations.State;
24import org.openjdk.jmh.annotations.Warmup;
25
26
27@BenchmarkMode(Mode.AverageTime)
28@OutputTimeUnit(TimeUnit.MILLISECONDS)
29@Warmup(iterations = 1, time = 3, timeUnit = TimeUnit.SECONDS)
30@Measurement(iterations = 3, time = 6, timeUnit = TimeUnit.SECONDS)
31@Fork(1)
32@State(Scope.Thread)
33public class HashBenchmark
34{
35
36 @Param(value = {"1", "1024", "1048576"})
37 int bufsize;
38
39 public ByteBuffer buf;
40
41 private MessageDigest sha1;
42
43 private MessageDigest sha256;
44
45 private MessageDigest sha512;
46
47 private MessageDigest md5;
48
49 private SecretKey key;
50
51
52 @Setup
53 public void init()
54 throws NoSuchAlgorithmException
55 {
56 buf = ByteBuffer.allocate(bufsize);
57 sha1 = MessageDigest.getInstance("SHA-1");
58 sha256 = MessageDigest.getInstance("SHA-256");
59 sha512 = MessageDigest.getInstance("SHA-512");
60 md5 = MessageDigest.getInstance("MD5");
61
62 KeyGenerator keyGen = KeyGenerator.getInstance("HmacSHA512");
63 key = keyGen.generateKey();
64 //System.out.println("key " + key.getFormat());
65 }
66
67
68 @Benchmark
69 public byte[] testMD5()
70 throws NoSuchAlgorithmException
71 {
72 byte[] arr = buf.array();
73 MessageDigest digest = MessageDigest.getInstance("MD5");
74 return digest.digest(arr);
75 }
76
77
78 @Benchmark
79 public byte[] testSHA1()
80 throws NoSuchAlgorithmException
81 {
82 byte[] arr = buf.array();
83 MessageDigest digest = MessageDigest.getInstance("SHA-1");
84 return digest.digest(arr);
85 }
86
87
88 @Benchmark
89 public byte[] testSHA256()
90 throws NoSuchAlgorithmException
91 {
92 byte[] arr = buf.array();
93 MessageDigest digest = MessageDigest.getInstance("SHA-256");
94 return digest.digest(arr);
95 }
96
97
98 @Benchmark
99 public byte[] testSHA512()
100 throws NoSuchAlgorithmException
101 {
102 byte[] arr = buf.array();
103 MessageDigest digest = MessageDigest.getInstance("SHA-512");
104 return digest.digest(arr);
105 }
106
107
108 @Benchmark
109 public byte[] testMD5Reuse()
110 {
111 byte[] arr = buf.array();
112 MessageDigest digest = md5;
113 return digest.digest(arr);
114 }
115
116
117 @Benchmark
118 public byte[] testSHA1Reuse()
119 {
120 byte[] arr = buf.array();
121 MessageDigest digest = sha1;
122 return digest.digest(arr);
123 }
124
125
126 @Benchmark
127 public byte[] testSHA256Reuse()
128 {
129 byte[] arr = buf.array();
130 MessageDigest digest = sha256;
131 return digest.digest(arr);
132 }
133
134
135 @Benchmark
136 public byte[] testSHA512Reuse()
137 {
138 byte[] arr = buf.array();
139 MessageDigest digest = sha512;
140 return digest.digest(arr);
141 }
142
143
144 @Benchmark
145 public byte[] testHmacSHA1()
146 throws NoSuchAlgorithmException, InvalidKeyException
147 {
148 byte[] arr = buf.array();
149 Mac mac = Mac.getInstance("HmacSHA1");
150 mac.init(key);
151 return mac.doFinal(arr);
152 }
153
154
155 @Benchmark
156 public byte[] testHmacSHA256()
157 throws NoSuchAlgorithmException, InvalidKeyException
158 {
159 byte[] arr = buf.array();
160 Mac mac = Mac.getInstance("HmacSHA256");
161 mac.init(key);
162 return mac.doFinal(arr);
163 }
164
165
166 @Benchmark
167 public byte[] testHmacSHA512()
168 throws NoSuchAlgorithmException, InvalidKeyException
169 {
170 byte[] arr = buf.array();
171 Mac mac = Mac.getInstance("HmacSHA512");
172 mac.init(key);
173 return mac.doFinal(arr);
174 }
175
176}