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 DES_Process(const char *keyString, byte *block, size_t length, CryptoPP::CipherDir direction){ using namespace CryptoPP; byte key[DES_EDE2::KEYLENGTH]; memcpy(key, keyString, DES_EDE2::KEYLENGTH); BlockTransformation *t = NULL; if(direction == ENCRYPTION) t = new DES_EDE2_Encryption(key, DES_EDE2::KEYLENGTH); else t = new DES_EDE2_Decryption(key, DES_EDE2::KEYLENGTH); int steps = length / t->BlockSize(); for(int i=0; i<steps; i++){ int offset = i * t->BlockSize(); t->ProcessBlock(block + offset); } delete t; }
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); }
FeedBackMode::FeedBackMode(const BlockTransformation &cipher, const byte *IV, int fbs) : CipherMode(cipher, IV), FBS(fbs ? fbs : S) { cipher.ProcessBlock(reg, buffer); counter = 0; }