From 26fcdb55cd7032e021f1eadfae3cade76ff8f8bb Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Fri, 19 Oct 2018 04:57:10 -0400 Subject: [PATCH] Add additional RNG tests --- validat3.cpp | 50 ++++++++++---------------------------------------- 1 file changed, 10 insertions(+), 40 deletions(-) diff --git a/validat3.cpp b/validat3.cpp index 8463ae2c..c0fc1ce8 100644 --- a/validat3.cpp +++ b/validat3.cpp @@ -406,7 +406,7 @@ bool TestSettings() bool Test_RandomNumberGenerator(RandomNumberGenerator& prng, bool drain=false) { bool pass = true, result = true; - const size_t GENERATE_SIZE = 1024*10, ENTROPY_SIZE = 32; + const size_t GENERATE_SIZE = 1024*10, DISCARD_SIZE = 256, ENTROPY_SIZE = 32; if(drain) { @@ -438,9 +438,9 @@ bool Test_RandomNumberGenerator(RandomNumberGenerator& prng, bool drain=false) GlobalRNG().GenerateBlock(entropy, entropy.SizeInBytes()); prng.IncorporateEntropy(entropy, entropy.SizeInBytes()); - prng.IncorporateEntropy(entropy, entropy.SizeInBytes()); - prng.IncorporateEntropy(entropy, entropy.SizeInBytes()); - prng.IncorporateEntropy(entropy, entropy.SizeInBytes()); + prng.IncorporateEntropy(entropy, entropy.SizeInBytes()-1); + prng.IncorporateEntropy(entropy, entropy.SizeInBytes()-2); + prng.IncorporateEntropy(entropy, entropy.SizeInBytes()-3); } } catch (const Exception& /*ex*/) @@ -481,7 +481,10 @@ bool Test_RandomNumberGenerator(RandomNumberGenerator& prng, bool drain=false) try { pass = true; - prng.DiscardBytes(GENERATE_SIZE); + prng.DiscardBytes(DISCARD_SIZE); + prng.DiscardBytes(DISCARD_SIZE-1); + prng.DiscardBytes(DISCARD_SIZE-2); + prng.DiscardBytes(DISCARD_SIZE-3); } catch (const Exception&) { @@ -493,7 +496,7 @@ bool Test_RandomNumberGenerator(RandomNumberGenerator& prng, bool drain=false) std::cout << "FAILED:"; else std::cout << "passed:"; - std::cout << " DiscardBytes with " << GENERATE_SIZE << " bytes\n"; + std::cout << " DiscardBytes with " << 4*DISCARD_SIZE << " bytes\n"; // Miscellaneous for code coverage (void)prng.AlgorithmName(); // "unknown" @@ -517,9 +520,8 @@ bool TestOS_RNG() MeterFilter meter(new Redirector(TheBitBucket())); RandomNumberSource test(*rng, UINT_MAX, false, new Deflator(new Redirector(meter))); - unsigned long total=0, length=0; + unsigned long total=0; time_t t = time(NULLPTR), t1 = 0; - CRYPTOPP_UNUSED(length); // check that it doesn't take too long to generate a reasonable amount of randomness while (total < 16 && (t1 < 10 || total*8 > (unsigned long)t1)) @@ -538,38 +540,6 @@ bool TestOS_RNG() std::cout << "passed:"; std::cout << " it took " << long(t1) << " seconds to generate " << total << " bytes" << std::endl; -#if 0 // disable this part. it's causing an unpredictable pause during the validation testing - if (t1 < 2) - { - // that was fast, are we really blocking? - // first exhaust the extropy reserve - t = time(NULLPTR); - while (time(NULLPTR) - t < 2) - { - test.Pump(1); - total += 1; - } - - // if it generates too many bytes in a certain amount of time, - // something's probably wrong - t = time(NULLPTR); - while (time(NULLPTR) - t < 2) - { - test.Pump(1); - total += 1; - length += 1; - } - if (length > 1024) - { - std::cout << "FAILED:"; - pass = false; - } - else - std::cout << "passed:"; - std::cout << " it generated " << length << " bytes in " << long(time(NULLPTR) - t) << " seconds" << std::endl; - } -#endif - test.AttachedTransformation()->MessageEnd(); if (meter.GetTotalBytes() < total)