6 #include <ckmc/ckmc-manager.h>
8 const char* const ALIAS = "enc_perf_test";
10 int main(int argc, char* argv[])
13 ckmc_policy_s policy {nullptr, false};
14 ckmc_raw_buffer_s* input = nullptr;
15 ckmc_raw_buffer_s* output = nullptr;
16 ckmc_raw_buffer_s* iv = nullptr;
17 ckmc_param_list_h params = nullptr;
20 std::cerr << "Invalid arguments. Usage: " << argv[0] << " INPUT_SIZE [MAX_CHUNK_SIZE]\n";
24 // size of data to encrypt
25 size_t size = std::stoi(argv[1]);
28 size_t maxSize = size;
30 maxSize = std::stoi(argv[2]);
32 unsigned char *data = new unsigned char[maxSize];
35 ret = ckmc_create_key_aes(256, ALIAS, policy);
36 if (ret != CKMC_ERROR_NONE && ret != CKMC_ERROR_DB_ALIAS_EXISTS) {
37 std::cerr << "ckmc_create_key_aes() failed: " << ret << "\n";
41 // setup encryption params
42 ret = ckmc_generate_new_params(CKMC_ALGO_AES_GCM, ¶ms);
43 if (ret != CKMC_ERROR_NONE) {
44 std::cerr << "ckmc_generate_new_params() failed: " << ret << "\n";
48 ret = ckmc_buffer_new(data, 16, &iv);
49 if (ret != CKMC_ERROR_NONE) {
50 std::cerr << "ckmc_buffer_new() for IV failed: " << ret << "\n";
54 ret = ckmc_param_list_set_buffer(params, CKMC_PARAM_ED_IV, iv);
55 if (ret != CKMC_ERROR_NONE) {
56 std::cerr << "ckmc_param_list_set_buffer() failed: " << ret << "\n";
60 std::chrono::duration<double> duration;
62 size_t chunkSize = std::min(size, maxSize);
65 ret = ckmc_buffer_new(data, chunkSize, &input);
66 if (ret != CKMC_ERROR_NONE) {
67 std::cerr << "ckmc_buffer_new() for input failed: " << ret << "\n";
71 auto before = std::chrono::steady_clock::now();
74 ret = ckmc_encrypt_data(params, ALIAS, "", *input, &output);
76 auto after = std::chrono::steady_clock::now();
77 duration += after - before;
79 ckmc_buffer_free(input);
81 ckmc_buffer_free(output);
83 if (ret != CKMC_ERROR_NONE) {
84 std::cerr << "ckmc_encrypt_data() failed: " << ret << "\n";
87 std::cout << "." << std::flush;
91 std::cout << "\nEncryption duration: " << duration.count() << "s\n";
98 ckmc_remove_key(ALIAS);
99 ckmc_buffer_free(input);
100 ckmc_buffer_free(output);
101 ckmc_buffer_free(iv);
102 ckmc_param_list_free(params);