Рассчитать время шифрования AES / CCM в Visual Studio 2017

Я использую библиотеку Crypto ++ 5.6.5 и Visual Studio 2017.

Как я могу рассчитать время шифрования для AES-CCM?

0

Решение

Я хотел бы знать, как рассчитать время шифрования для AES-CCM.

Вики Crypto ++ предоставляет статью Ориентиры. Он предоставляет много деталей относительно производительности библиотеки, как рассчитывается пропускная способность, и даже ссылается на исходный код, где измеряется фактическая пропускная способность. Хотите верьте, хотите нет, простой призыв clock прекрасно работает для измерения объемного шифрования. Также см Тесты | Сроки петли в той же статье вики.

Чтобы сравнить AES / CCM, сделайте что-то вроде следующего. Он основан на коде бенчмаркинга Crypto ++, но использует ThreadUserTimer вместо прямого звонка clock, ThreadUserTimer работает во всех операционных системах и всех версиях C ++.

Вам нужно набрать скорость вашего процессора на cpuFreq, Вы должен также беги ./governor.sh perf перевести процессор из состояния ожидания или ожидания уровня C, но вы не можете, потому что это скрипт Linux. Вы можете найти его в TestScript/ папка.

#include "cryptlib.h"#include "secblock.h"#include "hrtimer.h"#include "osrng.h"#include "modes.h"#include "aes.h"#include "ccm.h"#include <iostream>

const double runTimeInSeconds = 3.0;
const double cpuFreq = 2.7*1000*1000*1000;

int main(int argc, char* argv[])
{
using namespace CryptoPP;
AutoSeededRandomPool prng;

SecByteBlock key(16);
prng.GenerateBlock(key, key.size());

CCM<AES>::Encryption cipher;
cipher.SetKeyWithIV(key, key.size(), key);

const int BUF_SIZE=RoundUpToMultipleOf(2048U,
dynamic_cast<StreamTransformation&>(cipher).OptimalBlockSize());

AlignedSecByteBlock buf(BUF_SIZE);
prng.GenerateBlock(buf, BUF_SIZE);

double elapsedTimeInSeconds;
unsigned long i=0, blocks=1;

ThreadUserTimer timer;
timer.StartTimer();

do
{
blocks *= 2;
for (; i<blocks; i++)
cipher.ProcessString(buf, BUF_SIZE);
elapsedTimeInSeconds = timer.ElapsedTimeAsDouble();
}
while (elapsedTimeInSeconds < runTimeInSeconds);

const double bytes = static_cast<double>(BUF_SIZE) * blocks;
const double ghz = cpuFreq / 1000 / 1000 / 1000;
const double mbs = bytes / 1024 / 1024 / elapsedTimeInSeconds;
const double cpb = elapsedTimeInSeconds * cpuFreq / bytes;

std::cout << cipher.AlgorithmName() << " benchmarks..." << std::endl;
std::cout << "  " << ghz << " GHz cpu frequency" << std::endl;
std::cout << "  " << cpb << " cycles per byte (cpb)" << std::endl;
std::cout << "  " << mbs << " MiB per second (MiB)" << std::endl;
// std::cout << "  " << elapsedTimeInSeconds << " seconds passed" << std::endl;
// std::cout << "  " << (word64) bytes << " bytes processed"  << std::endl;

return 0;
}

Запуск его на Core i5-6400 с частотой 2,7 ГГц приводит к:

$ g++ bench.cxx ./libcryptopp.a -o bench.exe
$ ./bench.exe
AES/CCM benchmarks...
2.7 GHz cpu frequency
3.00491 cycles per byte (cpb)
856.904 MiB per second (MiB)

Обычно вы тестируете библиотеку в режиме CTR. Например, все Суперполицейский тесты выполняются в режиме. Вы можете переключиться в режим CTR, включив "modes.h", а потом:

CTR_Mode<AES>::Encryption cipher;
cipher.SetKeyWithIV(key, key.size(), key);

Наконец, тот же тест с использованием режима CTR:

$ ./bench.exe
AES/CTR benchmarks...
2.7 GHz cpu frequency
0.568922 cycles per byte (cpb)
4525.97 MiB per second (MiB)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]