diff --git a/bench1.cpp b/bench1.cpp index 11dee0be..714a8637 100644 --- a/bench1.cpp +++ b/bench1.cpp @@ -13,6 +13,10 @@ #include "smartptr.h" #include "stdcpp.h" +#include +#include +#include + #if CRYPTOPP_MSC_VERSION # pragma warning(disable: 4355) #endif @@ -32,7 +36,7 @@ const double CLOCK_TICKS_PER_SECOND = (double)CLK_TCK; const double CLOCK_TICKS_PER_SECOND = 1000000.0; #endif -const byte defaultKey[] = "0123456789" // 168 + NULL +extern const byte defaultKey[] = "0123456789" // 168 + NULL "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" "00000000000000000000000000000000000000000000000000000" "00000000000000000000000000000000000000000000000000000"; @@ -43,67 +47,70 @@ time_t g_testBegin, g_testEnd; void OutputResultBytes(const char *name, const char *provider, double length, double timeTaken) { - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); + std::ostringstream oss; // Coverity finding if (length < 0.000001f) length = 0.000001f; if (timeTaken < 0.000001f) timeTaken = 0.000001f; double mbs = length / timeTaken / (1024*1024); - std::cout << "\n" << name << "" << provider; - std::cout << std::setiosflags(std::ios::fixed); - std::cout << "" << std::setprecision(0) << std::setiosflags(std::ios::fixed) << mbs; + oss << "\n" << name << "" << provider; + oss << std::setiosflags(std::ios::fixed); + oss << "" << std::setprecision(0) << std::setiosflags(std::ios::fixed) << mbs; if (g_hertz > 1.0f) { const double cpb = timeTaken * g_hertz / length; if (cpb < 24.0f) - std::cout << "" << std::setprecision(2) << std::setiosflags(std::ios::fixed) << cpb; + oss << "" << std::setprecision(2) << std::setiosflags(std::ios::fixed) << cpb; else - std::cout << "" << std::setprecision(1) << std::setiosflags(std::ios::fixed) << cpb; + oss << "" << std::setprecision(1) << std::setiosflags(std::ios::fixed) << cpb; } g_logTotal += log(mbs); g_logCount++; + + std::cout << oss.str(); } void OutputResultKeying(double iterations, double timeTaken) { - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); + std::ostringstream oss; // Coverity finding if (iterations < 0.000001f) iterations = 0.000001f; if (timeTaken < 0.000001f) timeTaken = 0.000001f; - std::cout << "" << std::setprecision(3) << std::setiosflags(std::ios::fixed) << (1000*1000*timeTaken/iterations); + oss << "" << std::setprecision(3) << std::setiosflags(std::ios::fixed) << (1000*1000*timeTaken/iterations); // Coverity finding if (g_hertz > 1.0f) - std::cout << "" << std::setprecision(0) << std::setiosflags(std::ios::fixed) << timeTaken * g_hertz / iterations; + oss << "" << std::setprecision(0) << std::setiosflags(std::ios::fixed) << timeTaken * g_hertz / iterations; + + std::cout << oss.str(); } void OutputResultOperations(const char *name, const char *provider, const char *operation, bool pc, unsigned long iterations, double timeTaken) { - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); + std::ostringstream oss; // Coverity finding if (!iterations) iterations++; if (timeTaken < 0.000001f) timeTaken = 0.000001f; - std::cout << "\n" << name << " " << operation << (pc ? " with precomputation" : ""); - std::cout << "" << provider; - std::cout << "" << std::setprecision(2) << std::setiosflags(std::ios::fixed) << (1000*timeTaken/iterations); + oss << "\n" << name << " " << operation << (pc ? " with precomputation" : ""); + oss << "" << provider; + oss << "" << std::setprecision(2) << std::setiosflags(std::ios::fixed) << (1000*timeTaken/iterations); // Coverity finding if (g_hertz > 1.0f) { const double t = timeTaken * g_hertz / iterations / 1000000; - std::cout << "" << std::setprecision(2) << std::setiosflags(std::ios::fixed) << t; + oss << "" << std::setprecision(2) << std::setiosflags(std::ios::fixed) << t; } g_logTotal += log(iterations/timeTaken); g_logCount++; + + std::cout << oss.str(); } /* @@ -276,34 +283,40 @@ void BenchMarkByNameKeyLess(const char *factoryName, const char *displayName = N void AddHtmlHeader() { + std::ostringstream oss; + // HTML5 - std::cout << ""; - std::cout << "\n"; + oss << ""; + oss << "\n"; - std::cout << "\n"; - std::cout << "\n"; - std::cout << "\nSpeed Comparison of Popular Crypto Algorithms"; - std::cout << "\n"; - std::cout << "\n"; + oss << "\n"; + oss << "\n"; + oss << "\nSpeed Comparison of Popular Crypto Algorithms"; + oss << "\n"; + oss << "\n"; - std::cout << "\n"; + oss << "\n"; - std::cout << "\n

Crypto++ " << CRYPTOPP_VERSION / 100; - std::cout << '.' << (CRYPTOPP_VERSION % 100) / 10 << '.' << CRYPTOPP_VERSION % 10 << " Benchmarks

"; + oss << "\n

Crypto++ " << CRYPTOPP_VERSION / 100; + oss << '.' << (CRYPTOPP_VERSION % 100) / 10 << '.' << CRYPTOPP_VERSION % 10 << " Benchmarks

"; - std::cout << "\n

Here are speed benchmarks for some commonly used cryptographic algorithms.

"; + oss << "\n

Here are speed benchmarks for some commonly used cryptographic algorithms.

"; if (g_hertz > 1.0f) - std::cout << "\n

CPU frequency of the test platform is " << g_hertz << " Hz.

"; + oss << "\n

CPU frequency of the test platform is " << g_hertz << " Hz.

"; else - std::cout << "\n

CPU frequency of the test platform was not provided.

" << std::endl; + oss << "\n

CPU frequency of the test platform was not provided.

" << std::endl; + + std::cout << oss.str(); } void AddHtmlFooter() { + std::ostringstream oss; std::cout << "\n"; std::cout << "\n" << std::endl; + std::cout << oss.str(); } void BenchmarkWithCommand(int argc, const char* const argv[]) @@ -327,6 +340,7 @@ void Benchmark(Test::TestClass suites, double t, double hertz) { g_allocatedTime = t; g_hertz = hertz; + std::ostringstream oss; AddHtmlHeader(); @@ -338,37 +352,36 @@ void Benchmark(Test::TestClass suites, double t, double hertz) // Unkeyed algorithms if (suites & Test::Unkeyed) { - std::cout << "\n
"; + oss << "\n
"; Benchmark1(t, hertz); } // Shared key algorithms if (suites & Test::SharedKey) { - std::cout << "\n
"; + oss << "\n
"; Benchmark2(t, hertz); } // Public key algorithms if (suites & Test::PublicKey) { - std::cout << "\n
"; + oss << "\n
"; Benchmark3(t, hertz); } g_testEnd = ::time(NULLPTR); - { - StreamState state(std::cout); - std::cout << "\n

Throughput Geometric Average: " << std::setiosflags(std::ios::fixed); - std::cout << std::exp(g_logTotal/(g_logCount > 0.0f ? g_logCount : 1.0f)) << std::endl; - } + oss << "\n

Throughput Geometric Average: " << std::setiosflags(std::ios::fixed); + oss << std::exp(g_logTotal/(g_logCount > 0.0f ? g_logCount : 1.0f)) << std::endl; - std::cout << "\n

Test started at " << TimeToString(g_testBegin); - std::cout << "\n
Test ended at " << TimeToString(g_testEnd); - std::cout << std::endl; + oss << "\n

Test started at " << TimeToString(g_testBegin); + oss << "\n
Test ended at " << TimeToString(g_testEnd); + oss << std::endl; AddHtmlFooter(); + + std::cout << oss.str(); } void Benchmark1(double t, double hertz) diff --git a/validat3.cpp b/validat3.cpp index e393715d..218b08c1 100644 --- a/validat3.cpp +++ b/validat3.cpp @@ -1061,6 +1061,9 @@ bool TestMersenne() bool pass = true, fail = false; member_ptr rng; + std::ostringstream oss; + oss << std::setiosflags(std::ios::fixed) << std::setprecision(6); + try {rng.reset(new PadlockRNG);} catch (const PadlockRNG_Err &) {} if (rng.get()) @@ -1081,37 +1084,37 @@ bool TestMersenne() fail = !(msr & (1 << 6U)); pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " VIA RNG is activated\n"; + oss << "passed:"; + oss << " VIA RNG is activated\n"; // Bit 13 should be unset fail = !!(msr & (1 << 13U)); pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " von Neumann corrector is activated\n"; + oss << "passed:"; + oss << " von Neumann corrector is activated\n"; // Bit 14 should be unset fail = !!(msr & (1 << 14U)); pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " String filter is deactivated\n"; + oss << "passed:"; + oss << " String filter is deactivated\n"; // Bit 12:10 should be unset fail = !!(msr & (0x7 << 10U)); pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " Bias voltage is unmodified\n"; + oss << "passed:"; + oss << " Bias voltage is unmodified\n"; fail = false; if (t == zero || t == one) @@ -1119,10 +1122,10 @@ bool TestMersenne() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " All 0's or all 1's test\n"; + oss << "passed:"; + oss << " All 0's or all 1's test\n"; MeterFilter meter(new Redirector(TheBitBucket())); Deflator deflator(new Redirector(meter)); @@ -1141,16 +1144,12 @@ bool TestMersenne() if (mv < 0.98f) fail = true; - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); - std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(6); - pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " Maurer Randomness Test returned value " << mv << "\n"; + oss << "passed:"; + oss << " Maurer Randomness Test returned value " << mv << "\n"; fail = false; if (meter.GetTotalBytes() < SIZE) @@ -1158,10 +1157,10 @@ bool TestMersenne() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " " << SIZE << " generated bytes compressed to " << meter.GetTotalBytes() << " bytes by DEFLATE\n"; + oss << "passed:"; + oss << " " << SIZE << " generated bytes compressed to " << meter.GetTotalBytes() << " bytes by DEFLATE\n"; try { @@ -1175,10 +1174,10 @@ bool TestMersenne() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " discarded " << SIZE << " bytes\n"; + oss << "passed:"; + oss << " discarded " << SIZE << " bytes\n"; try { @@ -1202,14 +1201,15 @@ bool TestMersenne() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " GenerateWord32 and Crop\n"; + oss << "passed:"; + oss << " GenerateWord32 and Crop\n"; } else - std::cout << "Padlock RNG generator not available, skipping test.\n"; + oss << "Padlock RNG generator not available, skipping test.\n"; + std::cout << oss.str(); return pass; } @@ -1220,6 +1220,9 @@ bool TestRDRAND() bool pass = true, fail = false; member_ptr rng; + std::ostringstream oss; + oss << std::setiosflags(std::ios::fixed) << std::setprecision(6); + try {rng.reset(new RDRAND);} catch (const RDRAND_Err &) {} if (rng.get()) @@ -1243,16 +1246,12 @@ bool TestRDRAND() if (mv < 0.98f) fail = true; - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); - std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(6); - pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " Maurer Randomness Test returned value " << mv << "\n"; + oss << "passed:"; + oss << " Maurer Randomness Test returned value " << mv << "\n"; fail = false; if (meter.GetTotalBytes() < SIZE) @@ -1260,10 +1259,10 @@ bool TestRDRAND() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " " << SIZE << " generated bytes compressed to " << meter.GetTotalBytes() << " bytes by DEFLATE\n"; + oss << "passed:"; + oss << " " << SIZE << " generated bytes compressed to " << meter.GetTotalBytes() << " bytes by DEFLATE\n"; try { @@ -1277,10 +1276,10 @@ bool TestRDRAND() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " discarded " << SIZE << " bytes\n"; + oss << "passed:"; + oss << " discarded " << SIZE << " bytes\n"; try { @@ -1304,14 +1303,15 @@ bool TestRDRAND() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " GenerateWord32 and Crop\n"; + oss << "passed:"; + oss << " GenerateWord32 and Crop\n"; } else - std::cout << "RDRAND generator not available, skipping test.\n"; + oss << "RDRAND generator not available, skipping test.\n"; + std::cout << oss.str(); return pass; } @@ -1322,6 +1322,9 @@ bool TestRDSEED() bool pass = true, fail = false; member_ptr rng; + std::ostringstream oss; + oss << std::setiosflags(std::ios::fixed) << std::setprecision(6); + try {rng.reset(new RDSEED);} catch (const RDSEED_Err &) {} if (rng.get()) @@ -1345,16 +1348,12 @@ bool TestRDSEED() if (mv < 0.98f) fail = true; - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); - std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(6); - pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " Maurer Randomness Test returned value " << mv << "\n"; + oss << "passed:"; + oss << " Maurer Randomness Test returned value " << mv << "\n"; fail = false; if (meter.GetTotalBytes() < SIZE) @@ -1362,10 +1361,10 @@ bool TestRDSEED() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " " << SIZE << " generated bytes compressed to " << meter.GetTotalBytes() << " bytes by DEFLATE\n"; + oss << "passed:"; + oss << " " << SIZE << " generated bytes compressed to " << meter.GetTotalBytes() << " bytes by DEFLATE\n"; try { @@ -1379,10 +1378,10 @@ bool TestRDSEED() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " discarded " << SIZE << " bytes\n"; + oss << "passed:"; + oss << " discarded " << SIZE << " bytes\n"; try { @@ -1406,14 +1405,15 @@ bool TestRDSEED() pass &= !fail; if (fail) - std::cout << "FAILED:"; + oss << "FAILED:"; else - std::cout << "passed:"; - std::cout << " GenerateWord32 and Crop\n"; + oss << "passed:"; + oss << " GenerateWord32 and Crop\n"; } else - std::cout << "RDSEED generator not available, skipping test.\n"; + oss << "RDSEED generator not available, skipping test.\n"; + std::cout << oss.str(); return pass; } #endif diff --git a/validat5.cpp b/validat5.cpp index 44c004a9..b0b27849 100644 --- a/validat5.cpp +++ b/validat5.cpp @@ -69,10 +69,9 @@ struct HashTestTuple bool HashModuleTest(HashTransformation &md, const HashTestTuple *testSet, unsigned int testSetSize) { bool pass=true, fail; - SecByteBlock digest(md.DigestSize()); + std::ostringstream oss; - // Coverity finding, also see http://stackoverflow.com/a/34509163/608639. - StreamState ss(std::cout); + SecByteBlock digest(md.DigestSize()); for (unsigned int i=0; i