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);
49 BenchMark(name, static_cast<StreamTransformation &>(cipher), timeTotal);
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");
142 BenchMarkByName<SymmetricCipher>(
"ChaCha", 0,
"ChaCha20");
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;
Used to pass byte array input as part of a NameValuePairs object.
Standard names for retrieving values by name when working with NameValuePairs.
Classes for working with NameValuePairs.
virtual bool NeedsPrespecifiedDataLengths() const
Determines if data lengths must be specified prior to inputting data.
Interface for authenticated encryption modes of operation.
Abstract base classes that provide a uniform interface to this library.
Classes for automatic resource management.
Combines two sets of NameValuePairs.
Pointer that overloads operator ->
const char * TableSize()
int, in bytes
AlgorithmParameters MakeParameters(const char *name, const T &value, bool throwIfNotUsed=true)
Create an object that implements NameValuePairs.
bool HasCLMUL()
Determines Carryless Multiply availability.
Interface for algorithms that take byte strings as keys.
const NameValuePairs & g_nullNameValuePairs
An empty set of name-value pairs.
Namespace containing testing and benchmark classes.
Classes and functions for registering and locating library objects.
Functions for CPU features and intrinsics.
const char * IV()
ConstByteArrayParameter, also accepts const byte * for backwards compatibility.
virtual lword MaxMessageLength() const =0
Provides the maximum length of encrypted data.
std::string IntToString(T value, unsigned int base=10)
Converts a value to a string.
void SpecifyDataLengths(lword headerLength, lword messageLength, lword footerLength=0)
Prescribes the data lengths.
Crypto++ library namespace.
bool HasPMULL()
Determine if an ARM processor provides Polynomial Multiplication.
Interface for retrieving values given their names.