void BenchMark(const char *name, RandomNumberGenerator &rng, double timeTotal) { const int BUF_SIZE = 2048U; AlignedSecByteBlock buf(BUF_SIZE); Test::GlobalRNG().GenerateBlock(buf, BUF_SIZE); buf.SetMark(16); SymmetricCipher * cipher = dynamic_cast<SymmetricCipher*>(&rng); if (cipher != NULLPTR) { const size_t size = cipher->DefaultKeyLength(); if (cipher->IsResynchronizable()) cipher->SetKeyWithIV(buf, size, buf+size); else cipher->SetKey(buf, size); } unsigned long long blocks = 1; double timeTaken; clock_t start = ::clock(); do { rng.GenerateBlock(buf, buf.size()); blocks++; timeTaken = double(::clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
void BenchMark(const char *name, StreamCipher &cipher, double timeTotal) { const int BUF_SIZE=128; // encrypt 128 bytes at a time SecByteBlock buf(BUF_SIZE); clock_t start = clock(); unsigned long i=0, length=BUF_SIZE; double timeTaken; do { length *= 2; for (; i<length; i+=BUF_SIZE) cipher.ProcessString(buf, BUF_SIZE); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, length, timeTaken); }
void BenchMark(const char *name, BlockTransformation &cipher, double timeTotal) { const int BUF_SIZE = cipher.BlockSize(); SecByteBlock buf(BUF_SIZE); clock_t start = clock(); unsigned long i=0, length=BUF_SIZE; double timeTaken; do { length *= 2; for (; i<length; i+=BUF_SIZE) cipher.ProcessBlock(buf); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, length, timeTaken); }
void BenchMark(const char *name, StreamTransformation &cipher, double timeTotal) { const int BUF_SIZE=1024; SecByteBlock buf(BUF_SIZE); clock_t start = clock(); unsigned long i=0, blocks=1; double timeTaken; do { blocks *= 2; for (; i<blocks; i++) cipher.ProcessString(buf, BUF_SIZE); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
void BenchMark(const char *name, BufferedTransformation &bt, double timeTotal) { const int BUF_SIZE=2048U; AlignedSecByteBlock buf(BUF_SIZE); GlobalRNG().GenerateBlock(buf, BUF_SIZE); clock_t start = clock(); unsigned long i=0, blocks=1; double timeTaken; do { blocks *= 2; for (; i<blocks; i++) bt.Put(buf, BUF_SIZE); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
void BenchMark(const char *name, StreamTransformation &cipher, double timeTotal) { const int BUF_SIZE=RoundUpToMultipleOf(2048U, cipher.OptimalBlockSize()); AlignedSecByteBlock buf(BUF_SIZE); GlobalRNG().GenerateBlock(buf, BUF_SIZE); clock_t start = clock(); unsigned long i=0, blocks=1; double timeTaken; do { blocks *= 2; for (; i<blocks; i++) cipher.ProcessString(buf, BUF_SIZE); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
void BenchMark(const char *name, BlockTransformation &cipher, double timeTotal) { const int BUF_SIZE = RoundDownToMultipleOf(1024U, cipher.OptimalNumberOfParallelBlocks() * cipher.BlockSize()); SecByteBlock buf(BUF_SIZE); const int nBlocks = BUF_SIZE / cipher.BlockSize(); clock_t start = clock(); unsigned long i=0, blocks=1; double timeTaken; do { blocks *= 2; for (; i<blocks; i++) cipher.ProcessAndXorMultipleBlocks(buf, NULL, buf, nBlocks); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
// Hack, but we probably need a KeyedRandomNumberGenerator interface // and a few methods to generalize keying a RNG. X917RNG, Hash_DRBG, // HMAC_DRBG, AES/CFB RNG and a few others could use it. "A few others" // includes BLAKE2, ChaCha and Poly1305 when used as a RNG. void BenchMark(const char *name, NIST_DRBG &rng, double timeTotal) { const int BUF_SIZE = 2048U; AlignedSecByteBlock buf(BUF_SIZE); Test::GlobalRNG().GenerateBlock(buf, BUF_SIZE); buf.SetMark(16); rng.IncorporateEntropy(buf, rng.MinEntropyLength()); unsigned long long blocks = 1; double timeTaken; clock_t start = ::clock(); do { rng.GenerateBlock(buf, buf.size()); blocks++; timeTaken = double(::clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
void BenchMark(const char *name, BufferedTransformation &bt, double timeTotal) { const int BUF_SIZE=1024; // update 1024 bytes at a time SecByteBlock buf(BUF_SIZE); LC_RNG rng(time(NULL)); rng.GenerateBlock(buf, BUF_SIZE); clock_t start = clock(); unsigned long i=0, length=BUF_SIZE; double timeTaken; do { length *= 2; for (; i<length; i+=BUF_SIZE) bt.Put(buf, BUF_SIZE); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, length, timeTaken); }
void BenchMark(const char *name, HashTransformation &ht, double timeTotal) { const int BUF_SIZE=1024; SecByteBlock buf(BUF_SIZE); LC_RNG rng(time(NULL)); rng.GenerateBlock(buf, BUF_SIZE); clock_t start = clock(); unsigned long i=0, blocks=1; double timeTaken; do { blocks *= 2; for (; i<blocks; i++) ht.Update(buf, BUF_SIZE); timeTaken = double(clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }
void BenchMark(const char *name, HashTransformation &ht, double timeTotal) { const int BUF_SIZE=2048U; AlignedSecByteBlock buf(BUF_SIZE); Test::GlobalRNG().GenerateBlock(buf, BUF_SIZE); buf.SetMark(16); unsigned long i=0, blocks=1; double timeTaken; clock_t start = ::clock(); do { blocks *= 2; for (; i<blocks; i++) ht.Update(buf, BUF_SIZE); timeTaken = double(::clock() - start) / CLOCK_TICKS_PER_SECOND; } while (timeTaken < 2.0/3*timeTotal); OutputResultBytes(name, double(blocks) * BUF_SIZE, timeTaken); }