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