15 #if CRYPTOPP_MSC_VERSION
16 # pragma warning(disable: 4355)
19 #if CRYPTOPP_MSC_VERSION
20 # pragma warning(disable: 4505 4355)
28 unsigned long iterations = 0;
31 clock_t start = ::clock();
34 for (
unsigned int i=0; i<1024; i++)
35 c.SetKey(defaultKey, keyLength, params);
36 timeTaken = double(::clock() - start) / CLOCK_TICKS_PER_SECOND;
39 while (timeTaken < g_allocatedTime);
41 OutputResultKeying(iterations, timeTaken);
52 template <
class T_FactoryOutput,
class T_Interface>
55 std::string name(factoryName ? factoryName :
"");
59 keyLength = obj->DefaultKeyLength();
61 if (displayName != NULLPTR)
63 else if (keyLength != 0)
64 name +=
" (" +
IntToString(keyLength * 8) +
"-bit key)";
67 BenchMark(name.c_str(), *
static_cast<T_Interface *
>(obj.get()), g_allocatedTime);
71 template <
class T_FactoryOutput>
74 BenchMarkByName2<T_FactoryOutput,T_FactoryOutput>(factoryName, keyLength, displayName, params);
77 void Benchmark2(
double t,
double hertz)
82 const char *cpb, *cpk;
85 cpb =
"<TH>Cycles/Byte";
86 cpk =
"<TH>Cycles to<BR>Setup Key and IV";
93 std::cout <<
"\n<TABLE>";
94 std::cout <<
"\n<COLGROUP><COL style=\"text-align: left;\"><COL style=\"text-align: right;\"><COL style=";
95 std::cout <<
"\"text-align: right;\"><COL style=\"text-align: right;\"><COL style=\"text-align: right;\">";
96 std::cout <<
"\n<THEAD style=\"background: #F0F0F0\">";
97 std::cout <<
"\n<TR><TH>Algorithm<TH>Provider<TH>MiB/Second" << cpb;
98 std::cout <<
"<TH>Microseconds to<BR>Setup Key and IV" << cpk;
100 std::cout <<
"\n<TBODY style=\"background: white;\">";
102 #if CRYPTOPP_AESNI_AVAILABLE
104 BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>(
"AES/GCM", 0,
"GMAC(AES)");
106 #elif CRYPTOPP_ARM_PMULL_AVAILABLE
108 BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>(
"AES/GCM", 0,
"GMAC(AES)");
110 #elif CRYPTOPP_POWER8_VMULL_AVAILABLE
112 BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>(
"AES/GCM", 0,
"GMAC(AES)");
116 BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>(
"AES/GCM", 0,
"GMAC(AES) (2K tables)",
MakeParameters(Name::TableSize(), 2048));
117 BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>(
"AES/GCM", 0,
"GMAC(AES) (64K tables)",
MakeParameters(Name::TableSize(), 64 * 1024));
120 BenchMarkByName<MessageAuthenticationCode>(
"VMAC(AES)-64");
121 BenchMarkByName<MessageAuthenticationCode>(
"VMAC(AES)-128");
122 BenchMarkByName<MessageAuthenticationCode>(
"HMAC(SHA-1)");
123 BenchMarkByName<MessageAuthenticationCode>(
"HMAC(SHA-256)");
124 BenchMarkByName<MessageAuthenticationCode>(
"Two-Track-MAC");
125 BenchMarkByName<MessageAuthenticationCode>(
"CMAC(AES)");
126 BenchMarkByName<MessageAuthenticationCode>(
"DMAC(AES)");
127 BenchMarkByName<MessageAuthenticationCode>(
"Poly1305(AES)");
128 BenchMarkByName<MessageAuthenticationCode>(
"Poly1305TLS");
129 BenchMarkByName<MessageAuthenticationCode>(
"BLAKE2s");
130 BenchMarkByName<MessageAuthenticationCode>(
"BLAKE2b");
131 BenchMarkByName<MessageAuthenticationCode>(
"SipHash-2-4");
132 BenchMarkByName<MessageAuthenticationCode>(
"SipHash-4-8");
135 std::cout <<
"\n<TBODY style=\"background: yellow;\">";
137 BenchMarkByName<SymmetricCipher>(
"Panama-LE");
138 BenchMarkByName<SymmetricCipher>(
"Panama-BE");
139 BenchMarkByName<SymmetricCipher>(
"Salsa20", 0,
"Salsa20");
140 BenchMarkByName<SymmetricCipher>(
"Salsa20", 0,
"Salsa20/12",
MakeParameters(Name::Rounds(), 12));
141 BenchMarkByName<SymmetricCipher>(
"Salsa20", 0,
"Salsa20/8",
MakeParameters(Name::Rounds(), 8));
142 BenchMarkByName<SymmetricCipher>(
"ChaCha", 0,
"ChaCha20");
143 BenchMarkByName<SymmetricCipher>(
"ChaCha", 0,
"ChaCha12",
MakeParameters(Name::Rounds(), 12));
144 BenchMarkByName<SymmetricCipher>(
"ChaCha", 0,
"ChaCha8",
MakeParameters(Name::Rounds(), 8));
145 BenchMarkByName<SymmetricCipher>(
"ChaChaTLS");
146 BenchMarkByName<SymmetricCipher>(
"Sosemanuk");
147 BenchMarkByName<SymmetricCipher>(
"Rabbit");
148 BenchMarkByName<SymmetricCipher>(
"RabbitWithIV");
149 BenchMarkByName<SymmetricCipher>(
"HC-128");
150 BenchMarkByName<SymmetricCipher>(
"HC-256");
151 BenchMarkByName<SymmetricCipher>(
"MARC4");
152 BenchMarkByName<SymmetricCipher>(
"SEAL-3.0-LE");
153 BenchMarkByName<SymmetricCipher>(
"WAKE-OFB-LE");
156 std::cout <<
"\n<TBODY style=\"background: white;\">";
158 BenchMarkByName<SymmetricCipher>(
"AES/CTR", 16);
159 BenchMarkByName<SymmetricCipher>(
"AES/CTR", 24);
160 BenchMarkByName<SymmetricCipher>(
"AES/CTR", 32);
161 BenchMarkByName<SymmetricCipher>(
"AES/CBC", 16);
162 BenchMarkByName<SymmetricCipher>(
"AES/CBC", 24);
163 BenchMarkByName<SymmetricCipher>(
"AES/CBC", 32);
164 BenchMarkByName<SymmetricCipher>(
"AES/OFB", 16);
165 BenchMarkByName<SymmetricCipher>(
"AES/CFB", 16);
166 BenchMarkByName<SymmetricCipher>(
"AES/ECB", 16);
167 BenchMarkByName<SymmetricCipher>(
"ARIA/CTR", 16);
168 BenchMarkByName<SymmetricCipher>(
"ARIA/CTR", 32);
169 BenchMarkByName<SymmetricCipher>(
"HIGHT/CTR");
170 BenchMarkByName<SymmetricCipher>(
"Camellia/CTR", 16);
171 BenchMarkByName<SymmetricCipher>(
"Camellia/CTR", 32);
172 BenchMarkByName<SymmetricCipher>(
"Twofish/CTR");
173 BenchMarkByName<SymmetricCipher>(
"Threefish-256(256)/CTR", 32);
174 BenchMarkByName<SymmetricCipher>(
"Threefish-512(512)/CTR", 64);
175 BenchMarkByName<SymmetricCipher>(
"Threefish-1024(1024)/CTR", 128);
176 BenchMarkByName<SymmetricCipher>(
"Serpent/CTR");
177 BenchMarkByName<SymmetricCipher>(
"CAST-128/CTR");
178 BenchMarkByName<SymmetricCipher>(
"CAST-256/CTR", 32);
179 BenchMarkByName<SymmetricCipher>(
"RC6/CTR");
180 BenchMarkByName<SymmetricCipher>(
"MARS/CTR");
181 BenchMarkByName<SymmetricCipher>(
"SHACAL-2/CTR", 16);
182 BenchMarkByName<SymmetricCipher>(
"SHACAL-2/CTR", 64);
183 BenchMarkByName<SymmetricCipher>(
"DES/CTR");
184 BenchMarkByName<SymmetricCipher>(
"DES-XEX3/CTR");
185 BenchMarkByName<SymmetricCipher>(
"DES-EDE3/CTR");
186 BenchMarkByName<SymmetricCipher>(
"IDEA/CTR");
187 BenchMarkByName<SymmetricCipher>(
"RC5/CTR", 0,
"RC5 (r=16)");
188 BenchMarkByName<SymmetricCipher>(
"Blowfish/CTR");
189 BenchMarkByName<SymmetricCipher>(
"SKIPJACK/CTR");
190 BenchMarkByName<SymmetricCipher>(
"SEED/CTR", 0,
"SEED/CTR (1/2 K table)");
191 BenchMarkByName<SymmetricCipher>(
"SM4/CTR");
193 BenchMarkByName<SymmetricCipher>(
"Kalyna-128/CTR", 16,
"Kalyna-128(128)/CTR (128-bit key)");
194 BenchMarkByName<SymmetricCipher>(
"Kalyna-128/CTR", 32,
"Kalyna-128(256)/CTR (256-bit key)");
195 BenchMarkByName<SymmetricCipher>(
"Kalyna-256/CTR", 32,
"Kalyna-256(256)/CTR (256-bit key)");
196 BenchMarkByName<SymmetricCipher>(
"Kalyna-256/CTR", 64,
"Kalyna-256(512)/CTR (512-bit key)");
197 BenchMarkByName<SymmetricCipher>(
"Kalyna-512/CTR", 64,
"Kalyna-512(512)/CTR (512-bit key)");
200 std::cout <<
"\n<TBODY style=\"background: yellow;\">";
202 BenchMarkByName<SymmetricCipher>(
"CHAM-64/CTR", 16,
"CHAM-64(128)/CTR (128-bit key)");
203 BenchMarkByName<SymmetricCipher>(
"CHAM-128/CTR", 16,
"CHAM-128(128)/CTR (128-bit key)");
204 BenchMarkByName<SymmetricCipher>(
"CHAM-128/CTR", 32,
"CHAM-128(256)/CTR (256-bit key)");
206 BenchMarkByName<SymmetricCipher>(
"LEA-128/CTR", 16,
"LEA-128(128)/CTR (128-bit key)");
207 BenchMarkByName<SymmetricCipher>(
"LEA-128/CTR", 24,
"LEA-128(192)/CTR (192-bit key)");
208 BenchMarkByName<SymmetricCipher>(
"LEA-128/CTR", 32,
"LEA-128(256)/CTR (256-bit key)");
210 BenchMarkByName<SymmetricCipher>(
"SIMECK-32/CTR", 8,
"SIMECK-32(64)/CTR (64-bit key)");
211 BenchMarkByName<SymmetricCipher>(
"SIMECK-64/CTR", 16,
"SIMECK-64(128)/CTR (128-bit key)");
213 BenchMarkByName<SymmetricCipher>(
"SIMON-64/CTR", 12,
"SIMON-64(96)/CTR (96-bit key)");
214 BenchMarkByName<SymmetricCipher>(
"SIMON-64/CTR", 16,
"SIMON-64(128)/CTR (128-bit key)");
215 BenchMarkByName<SymmetricCipher>(
"SIMON-128/CTR", 16,
"SIMON-128(128)/CTR (128-bit key)");
216 BenchMarkByName<SymmetricCipher>(
"SIMON-128/CTR", 24,
"SIMON-128(192)/CTR (192-bit key)");
217 BenchMarkByName<SymmetricCipher>(
"SIMON-128/CTR", 32,
"SIMON-128(256)/CTR (256-bit key)");
219 BenchMarkByName<SymmetricCipher>(
"SPECK-64/CTR", 12,
"SPECK-64(96)/CTR (96-bit key)");
220 BenchMarkByName<SymmetricCipher>(
"SPECK-64/CTR", 16,
"SPECK-64(128)/CTR (128-bit key)");
221 BenchMarkByName<SymmetricCipher>(
"SPECK-128/CTR", 16,
"SPECK-128(128)/CTR (128-bit key)");
222 BenchMarkByName<SymmetricCipher>(
"SPECK-128/CTR", 24,
"SPECK-128(192)/CTR (192-bit key)");
223 BenchMarkByName<SymmetricCipher>(
"SPECK-128/CTR", 32,
"SPECK-128(256)/CTR (256-bit key)");
225 BenchMarkByName<SymmetricCipher>(
"TEA/CTR");
226 BenchMarkByName<SymmetricCipher>(
"XTEA/CTR");
229 std::cout <<
"\n<TBODY style=\"background: white;\">";
231 #if CRYPTOPP_AESNI_AVAILABLE
233 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/GCM", 0,
"AES/GCM");
235 #elif CRYPTOPP_ARM_PMULL_AVAILABLE
237 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/GCM", 0,
"AES/GCM");
239 #elif CRYPTOPP_POWER8_VMULL_AVAILABLE
241 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/GCM", 0,
"AES/GCM");
245 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/GCM", 0,
"AES/GCM (2K tables)",
MakeParameters(Name::TableSize(), 2048));
246 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/GCM", 0,
"AES/GCM (64K tables)",
MakeParameters(Name::TableSize(), 64 * 1024));
248 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/CCM");
249 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"AES/EAX");
250 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"ChaCha20/Poly1305");
251 BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>(
"XChaCha20/Poly1305");
254 std::cout <<
"\n</TABLE>" << std::endl;