]> git.siccegge.de Git - software/DIPE.git/blobdiff - benchmark/benchDIPE.cpp
benchmarks\~
[software/DIPE.git] / benchmark / benchDIPE.cpp
diff --git a/benchmark/benchDIPE.cpp b/benchmark/benchDIPE.cpp
new file mode 100644 (file)
index 0000000..d6f9bce
--- /dev/null
@@ -0,0 +1,164 @@
+#include <benchmark/benchmark.h>
+#include <DIPE.h>
+#include <string.h>
+
+void dipe_bench_master_keygen(benchmark::State& state) {
+       dipe_param_t param;
+       dipe_init(fopen("../tests/a.param", "r"), &param);
+
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t sk;
+
+       for (auto _ : state) {
+               dipe_master_keygen(param, 12, &pk, &sk);
+       }
+
+       dipe_free_param(param);
+}
+
+
+void dipe_bench_keygen(benchmark::State& state) {
+       dipe_param_t param;
+       dipe_init(fopen("../tests/a.param", "r"), &param);
+
+       dipe_master_publickey_t mpk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+
+       dipe_master_keygen(param, 2, &mpk, &msk);
+       element_t y[2];
+       for (size_t i = 0; i < 2; ++i) {
+               element_init_Zr(y[i], *dipe_get_pairing(param));
+               element_random(y[i]);
+       }
+
+       for (auto _ : state) {
+               dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+       }
+
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(mpk);
+       dipe_free_param(param);
+}
+
+
+
+void dipe_bench_encryption(benchmark::State& state) {
+       dipe_param_t param;
+       dipe_init(fopen("../tests/a.param", "r"), &param);
+
+       char ctxt[state.range(0)];
+       char ptxt[state.range(0)];
+       size_t ptxt_len;
+       size_t overhead;
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+
+       element_t y[2];
+       element_t x[2];
+
+       for (size_t i = 0; i < 2; i+=2) {
+               element_init_Zr(y[i], *dipe_get_pairing(param));
+               element_init_Zr(x[i], *dipe_get_pairing(param));
+               element_init_Zr(y[i+1], *dipe_get_pairing(param));
+               element_init_Zr(x[i+1], *dipe_get_pairing(param));
+
+               element_set1(y[i]);
+               element_set1(x[i+1]);
+               element_random(y[i+1]);
+               element_neg(x[i], y[i+1]);
+       }
+
+       dipe_master_keygen(param, 2, &pk, &msk);
+       dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+       overhead = dipe_ciphertext_overhead(param, 2, 0);
+
+       memset(ctxt, 0, state.range(0));
+       memset(ptxt, 0, state.range(0));
+       memcpy(ptxt, "test", 4);
+
+       for (auto _ : state) {
+               dipe_encrypt(param, 1, &pk, 1, x, 4, ptxt, state.range(0), ctxt);
+       }
+
+       
+       ptxt_len = dipe_decrypt(param, 1, &sk, 0, "1234567890abcdef", y, state.range(0), ctxt, ptxt);
+
+
+       for (size_t i = 0; i < 2; ++i) {
+               element_clear(y[i]);
+               element_clear(x[i]);
+       }
+
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(pk);
+       dipe_free_secretkey(sk);
+
+       
+
+       dipe_free_param(param);
+}
+
+void dipe_bench_decryption(benchmark::State& state) {
+       dipe_param_t param;
+       dipe_init(fopen("../tests/a.param", "r"), &param);
+
+       char ctxt[state.range(0)];
+       char ptxt[state.range(0)];
+       size_t ptxt_len;
+       size_t overhead;
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+
+       element_t y[2*state.range(1)];
+       element_t x[2*state.range(1)];
+
+       for (size_t i = 0; i < 2*state.range(1); i+=2) {
+               element_init_Zr(y[i], *dipe_get_pairing(param));
+               element_init_Zr(x[i], *dipe_get_pairing(param));
+               element_init_Zr(y[i+1], *dipe_get_pairing(param));
+               element_init_Zr(x[i+1], *dipe_get_pairing(param));
+
+               element_set1(y[i]);
+               element_set1(x[i+1]);
+               element_random(y[i+1]);
+               element_neg(x[i], y[i+1]);
+       }
+
+       dipe_master_keygen(param, 2*state.range(1), &pk, &msk);
+       dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+       overhead = dipe_ciphertext_overhead(param, 2*state.range(1), 0);
+
+       memset(ctxt, 0, state.range(0));
+       memset(ptxt, 0, state.range(0));
+       memcpy(ptxt, "test", 4);
+
+       dipe_encrypt(param, 1, &pk, 1, x, 4, ptxt, state.range(0), ctxt);
+       
+       for (auto _ : state) {
+               dipe_decrypt(param, 1, &sk, 0, "1234567890abcdef", y, state.range(0), ctxt, ptxt);
+       }
+
+       for (size_t i = 0; i < 2*state.range(1); ++i) {
+               element_clear(y[i]);
+               element_clear(x[i]);
+       }
+
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(pk);
+       dipe_free_secretkey(sk);
+
+       dipe_free_param(param);
+}
+
+
+
+
+BENCHMARK(dipe_bench_master_keygen)->Unit(benchmark::kMillisecond);
+BENCHMARK(dipe_bench_keygen)->Unit(benchmark::kMillisecond);
+BENCHMARK(dipe_bench_encryption)->Ranges({{1<<12, 1<<15}, {1, 18}})->Unit(benchmark::kMillisecond);
+BENCHMARK(dipe_bench_decryption)->Ranges({{1<<12, 1<<15}, {1, 18}})->Unit(benchmark::kMillisecond);
+
+BENCHMARK_MAIN();