void BenchmarkAll(double t, double hertz) { #if 1 logtotal = 0; logcount = 0; g_allocatedTime = t; g_hertz = hertz; const char *cpb, *cpk; if (g_hertz) { cpb = "<TH>Cycles Per Byte"; cpk = "<TH>Cycles to<br>Setup Key and IV"; cout << "CPU frequency of the test platform is " << g_hertz << " Hz.\n"; } else { cpb = cpk = ""; cout << "CPU frequency of the test platform was not provided.\n"; } cout << "<TABLE border=1><COLGROUP><COL align=left><COL align=right><COL align=right><COL align=right><COL align=right>" << endl; cout << "<THEAD><TR><TH>Algorithm<TH>MiB/Second" << cpb << "<TH>Microseconds to<br>Setup Key and IV" << cpk << endl; cout << "\n<TBODY style=\"background: yellow\">"; #if CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE if (HasCLMUL()) BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM"); else #endif { BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM (2K tables)", MakeParameters(Name::TableSize(), 2048)); BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM (64K tables)", MakeParameters(Name::TableSize(), 64*1024)); } BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/CCM"); BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/EAX"); cout << "\n<TBODY style=\"background: white\">"; #if CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE if (HasCLMUL()) BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES)"); else #endif { BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES) (2K tables)", MakeParameters(Name::TableSize(), 2048)); BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES) (64K tables)", MakeParameters(Name::TableSize(), 64*1024)); } BenchMarkByName<MessageAuthenticationCode>("VMAC(AES)-64"); BenchMarkByName<MessageAuthenticationCode>("VMAC(AES)-128"); BenchMarkByName<MessageAuthenticationCode>("HMAC(SHA-1)"); BenchMarkByName<MessageAuthenticationCode>("Two-Track-MAC"); BenchMarkByName<MessageAuthenticationCode>("CMAC(AES)"); BenchMarkByName<MessageAuthenticationCode>("DMAC(AES)"); cout << "\n<TBODY style=\"background: yellow\">"; BenchMarkByNameKeyLess<HashTransformation>("CRC32"); BenchMarkByNameKeyLess<HashTransformation>("Adler32"); BenchMarkByNameKeyLess<HashTransformation>("MD5"); BenchMarkByNameKeyLess<HashTransformation>("SHA-1"); BenchMarkByNameKeyLess<HashTransformation>("SHA-256"); BenchMarkByNameKeyLess<HashTransformation>("SHA-512"); BenchMarkByNameKeyLess<HashTransformation>("SHA-3-224"); BenchMarkByNameKeyLess<HashTransformation>("SHA-3-256"); BenchMarkByNameKeyLess<HashTransformation>("SHA-3-384"); BenchMarkByNameKeyLess<HashTransformation>("SHA-3-512"); BenchMarkByNameKeyLess<HashTransformation>("Tiger"); BenchMarkByNameKeyLess<HashTransformation>("Whirlpool"); BenchMarkByNameKeyLess<HashTransformation>("RIPEMD-160"); BenchMarkByNameKeyLess<HashTransformation>("RIPEMD-320"); BenchMarkByNameKeyLess<HashTransformation>("RIPEMD-128"); BenchMarkByNameKeyLess<HashTransformation>("RIPEMD-256"); cout << "\n<TBODY style=\"background: white\">"; BenchMarkByName<SymmetricCipher>("Panama-LE"); BenchMarkByName<SymmetricCipher>("Panama-BE"); BenchMarkByName<SymmetricCipher>("Salsa20"); BenchMarkByName<SymmetricCipher>("Salsa20", 0, "Salsa20/12", MakeParameters(Name::Rounds(), 12)); BenchMarkByName<SymmetricCipher>("Salsa20", 0, "Salsa20/8", MakeParameters(Name::Rounds(), 8)); BenchMarkByName<SymmetricCipher>("Sosemanuk"); BenchMarkByName<SymmetricCipher>("MARC4"); BenchMarkByName<SymmetricCipher>("SEAL-3.0-LE"); BenchMarkByName<SymmetricCipher>("WAKE-OFB-LE"); cout << "\n<TBODY style=\"background: yellow\">"; BenchMarkByName<SymmetricCipher>("AES/CTR", 16); BenchMarkByName<SymmetricCipher>("AES/CTR", 24); BenchMarkByName<SymmetricCipher>("AES/CTR", 32); BenchMarkByName<SymmetricCipher>("AES/CBC", 16); BenchMarkByName<SymmetricCipher>("AES/CBC", 24); BenchMarkByName<SymmetricCipher>("AES/CBC", 32); BenchMarkByName<SymmetricCipher>("AES/OFB", 16); BenchMarkByName<SymmetricCipher>("AES/CFB", 16); BenchMarkByName<SymmetricCipher>("AES/ECB", 16); BenchMarkByName<SymmetricCipher>("Camellia/CTR", 16); BenchMarkByName<SymmetricCipher>("Camellia/CTR", 32); BenchMarkByName<SymmetricCipher>("Twofish/CTR"); BenchMarkByName<SymmetricCipher>("Serpent/CTR"); BenchMarkByName<SymmetricCipher>("CAST-256/CTR"); BenchMarkByName<SymmetricCipher>("RC6/CTR"); BenchMarkByName<SymmetricCipher>("MARS/CTR"); BenchMarkByName<SymmetricCipher>("SHACAL-2/CTR", 16); BenchMarkByName<SymmetricCipher>("SHACAL-2/CTR", 64); BenchMarkByName<SymmetricCipher>("DES/CTR"); BenchMarkByName<SymmetricCipher>("DES-XEX3/CTR"); BenchMarkByName<SymmetricCipher>("DES-EDE3/CTR"); BenchMarkByName<SymmetricCipher>("IDEA/CTR"); BenchMarkByName<SymmetricCipher>("RC5/CTR", 0, "RC5 (r=16)"); BenchMarkByName<SymmetricCipher>("Blowfish/CTR"); BenchMarkByName<SymmetricCipher>("TEA/CTR"); BenchMarkByName<SymmetricCipher>("XTEA/CTR"); BenchMarkByName<SymmetricCipher>("CAST-128/CTR"); BenchMarkByName<SymmetricCipher>("SKIPJACK/CTR"); BenchMarkByName<SymmetricCipher>("SEED/CTR", 0, "SEED/CTR (1/2 K table)"); cout << "</TABLE>" << endl; BenchmarkAll2(t, hertz); cout << "Throughput Geometric Average: " << setiosflags(ios::fixed) << exp(logtotal/(logcount ? logcount : 1)) << endl; // Safer functions on Windows for C&A, https://github.com/weidai11/cryptopp/issues/55 #if (CRYPTOPP_MSC_VERSION >= 1400) tm localTime = {}; char timeBuf[64]; errno_t err; const time_t endTime = time(NULL); err = localtime_s(&localTime, &endTime); assert(err == 0); err = asctime_s(timeBuf, sizeof(timeBuf), &localTime); assert(err == 0); cout << "\nTest ended at " << timeBuf; #else const time_t endTime = time(NULL); cout << "\nTest ended at " << asctime(localtime(&endTime)); #endif #endif }
void Benchmark2(double t, double hertz) { g_allocatedTime = t; g_hertz = hertz; const char *cpb, *cpk; if (g_hertz > 1.0f) { cpb = "<TH>Cycles Per Byte"; cpk = "<TH>Cycles to<BR>Setup Key and IV"; } else { cpb = cpk = ""; } std::cout << "\n<TABLE>"; std::cout << "\n<COLGROUP><COL style=\"text-align: left;\"><COL style=\"text-align: right;\"><COL style="; std::cout << "\"text-align: right;\"><COL style=\"text-align: right;\"><COL style=\"text-align: right;\">"; std::cout << "\n<THEAD style=\"background: #F0F0F0\">"; std::cout << "\n<TR><TH>Algorithm<TH>MiB/Second" << cpb; std::cout << "<TH>Microseconds to<BR>Setup Key and IV" << cpk; std::cout << "\n<TBODY style=\"background: white;\">"; { #if CRYPTOPP_AESNI_AVAILABLE if (HasCLMUL()) BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES)"); else #elif CRYPTOPP_ARM_PMULL_AVAILABLE if (HasPMULL()) BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES)"); else #endif { BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES) (2K tables)", MakeParameters(Name::TableSize(), 2048)); BenchMarkByName2<AuthenticatedSymmetricCipher, MessageAuthenticationCode>("AES/GCM", 0, "GMAC(AES) (64K tables)", MakeParameters(Name::TableSize(), 64 * 1024)); } BenchMarkByName<MessageAuthenticationCode>("VMAC(AES)-64"); BenchMarkByName<MessageAuthenticationCode>("VMAC(AES)-128"); BenchMarkByName<MessageAuthenticationCode>("HMAC(SHA-1)"); BenchMarkByName<MessageAuthenticationCode>("HMAC(SHA-256)"); BenchMarkByName<MessageAuthenticationCode>("Two-Track-MAC"); BenchMarkByName<MessageAuthenticationCode>("CMAC(AES)"); BenchMarkByName<MessageAuthenticationCode>("DMAC(AES)"); BenchMarkByName<MessageAuthenticationCode>("Poly1305(AES)"); BenchMarkByName<MessageAuthenticationCode>("BLAKE2s"); BenchMarkByName<MessageAuthenticationCode>("BLAKE2b"); BenchMarkByName<MessageAuthenticationCode>("SipHash-2-4"); BenchMarkByName<MessageAuthenticationCode>("SipHash-4-8"); } std::cout << "\n<TBODY style=\"background: yellow;\">"; { BenchMarkByName<SymmetricCipher>("Panama-LE"); BenchMarkByName<SymmetricCipher>("Panama-BE"); BenchMarkByName<SymmetricCipher>("Salsa20"); BenchMarkByName<SymmetricCipher>("Salsa20", 0, "Salsa20/12", MakeParameters(Name::Rounds(), 12)); BenchMarkByName<SymmetricCipher>("Salsa20", 0, "Salsa20/8", MakeParameters(Name::Rounds(), 8)); BenchMarkByName<SymmetricCipher>("ChaCha20"); BenchMarkByName<SymmetricCipher>("ChaCha12"); BenchMarkByName<SymmetricCipher>("ChaCha8"); BenchMarkByName<SymmetricCipher>("Sosemanuk"); BenchMarkByName<SymmetricCipher>("MARC4"); BenchMarkByName<SymmetricCipher>("SEAL-3.0-LE"); BenchMarkByName<SymmetricCipher>("WAKE-OFB-LE"); } std::cout << "\n<TBODY style=\"background: white;\">"; { BenchMarkByName<SymmetricCipher>("AES/CTR", 16); BenchMarkByName<SymmetricCipher>("AES/CTR", 24); BenchMarkByName<SymmetricCipher>("AES/CTR", 32); BenchMarkByName<SymmetricCipher>("AES/CBC", 16); BenchMarkByName<SymmetricCipher>("AES/CBC", 24); BenchMarkByName<SymmetricCipher>("AES/CBC", 32); BenchMarkByName<SymmetricCipher>("AES/OFB", 16); BenchMarkByName<SymmetricCipher>("AES/CFB", 16); BenchMarkByName<SymmetricCipher>("AES/ECB", 16); BenchMarkByName<SymmetricCipher>("ARIA/CTR", 16); BenchMarkByName<SymmetricCipher>("ARIA/CTR", 32); BenchMarkByName<SymmetricCipher>("Camellia/CTR", 16); BenchMarkByName<SymmetricCipher>("Camellia/CTR", 32); BenchMarkByName<SymmetricCipher>("Twofish/CTR"); BenchMarkByName<SymmetricCipher>("Threefish-256(256)/CTR", 32); BenchMarkByName<SymmetricCipher>("Threefish-512(512)/CTR", 64); BenchMarkByName<SymmetricCipher>("Threefish-1024(1024)/CTR", 128); BenchMarkByName<SymmetricCipher>("Serpent/CTR"); BenchMarkByName<SymmetricCipher>("CAST-128/CTR"); BenchMarkByName<SymmetricCipher>("CAST-256/CTR"); BenchMarkByName<SymmetricCipher>("RC6/CTR"); BenchMarkByName<SymmetricCipher>("MARS/CTR"); BenchMarkByName<SymmetricCipher>("SHACAL-2/CTR", 16); BenchMarkByName<SymmetricCipher>("SHACAL-2/CTR", 64); BenchMarkByName<SymmetricCipher>("DES/CTR"); BenchMarkByName<SymmetricCipher>("DES-XEX3/CTR"); BenchMarkByName<SymmetricCipher>("DES-EDE3/CTR"); BenchMarkByName<SymmetricCipher>("IDEA/CTR"); BenchMarkByName<SymmetricCipher>("RC5/CTR", 0, "RC5 (r=16)"); BenchMarkByName<SymmetricCipher>("Blowfish/CTR"); BenchMarkByName<SymmetricCipher>("TEA/CTR"); BenchMarkByName<SymmetricCipher>("XTEA/CTR"); BenchMarkByName<SymmetricCipher>("SKIPJACK/CTR"); BenchMarkByName<SymmetricCipher>("SEED/CTR", 0, "SEED/CTR (1/2 K table)"); BenchMarkByName<SymmetricCipher>("SM4/CTR"); BenchMarkByName<SymmetricCipher>("Kalyna-128/CTR", 16, "Kalyna-128(128)/CTR (128-bit key)"); BenchMarkByName<SymmetricCipher>("Kalyna-128/CTR", 32, "Kalyna-128(256)/CTR (256-bit key)"); BenchMarkByName<SymmetricCipher>("Kalyna-256/CTR", 32, "Kalyna-256(256)/CTR (256-bit key)"); BenchMarkByName<SymmetricCipher>("Kalyna-256/CTR", 64, "Kalyna-256(512)/CTR (512-bit key)"); BenchMarkByName<SymmetricCipher>("Kalyna-512/CTR", 64, "Kalyna-512(512)/CTR (512-bit key)"); BenchMarkByName<SymmetricCipher>("SIMON-64/CTR", 12, "SIMON-64(96)/CTR (96-bit key)"); BenchMarkByName<SymmetricCipher>("SIMON-64/CTR", 16, "SIMON-64(128)/CTR (128-bit key)"); BenchMarkByName<SymmetricCipher>("SIMON-128/CTR", 16, "SIMON-128(128)/CTR (128-bit key)"); BenchMarkByName<SymmetricCipher>("SIMON-128/CTR", 24, "SIMON-128(192)/CTR (192-bit key)"); BenchMarkByName<SymmetricCipher>("SIMON-128/CTR", 32, "SIMON-128(256)/CTR (256-bit key)"); BenchMarkByName<SymmetricCipher>("SPECK-64/CTR", 12, "SPECK-64(96)/CTR (96-bit key)"); BenchMarkByName<SymmetricCipher>("SPECK-64/CTR", 16, "SPECK-64(128)/CTR (128-bit key)"); BenchMarkByName<SymmetricCipher>("SPECK-128/CTR", 16, "SPECK-128(128)/CTR (128-bit key)"); BenchMarkByName<SymmetricCipher>("SPECK-128/CTR", 24, "SPECK-128(192)/CTR (192-bit key)"); BenchMarkByName<SymmetricCipher>("SPECK-128/CTR", 32, "SPECK-128(256)/CTR (256-bit key)"); } std::cout << "\n<TBODY style=\"background: yellow;\">"; { #if CRYPTOPP_AESNI_AVAILABLE if (HasCLMUL()) BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM"); else #elif CRYPTOPP_ARM_PMULL_AVAILABLE if (HasPMULL()) BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM"); else #endif { BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM (2K tables)", MakeParameters(Name::TableSize(), 2048)); BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/GCM", 0, "AES/GCM (64K tables)", MakeParameters(Name::TableSize(), 64 * 1024)); } BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/CCM"); BenchMarkByName2<AuthenticatedSymmetricCipher, AuthenticatedSymmetricCipher>("AES/EAX"); } std::cout << "\n</TABLE>" << std::endl; }