]> git.siccegge.de Git - software/DIPE.git/blobdiff - tests/testDIPE.cpp
Code drop
[software/DIPE.git] / tests / testDIPE.cpp
diff --git a/tests/testDIPE.cpp b/tests/testDIPE.cpp
new file mode 100644 (file)
index 0000000..0a3e209
--- /dev/null
@@ -0,0 +1,130 @@
+#include <gtest/gtest.h>
+#include <pbc/pbc.h>
+
+#include "DIPE.h"
+
+static dipe_param_t param;
+
+TEST(DipeTest, DipeMasterKeygen) {
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t sk;
+
+       dipe_master_keygen(param, 12, &pk, &sk);
+
+       dipe_free_master_secretkey(sk);
+       dipe_free_master_publickey(pk);
+}
+
+TEST(DipeTest, DipeKeygen) {
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+       element_t y[5];
+       for (size_t i = 0; i < 5; ++i) {
+               element_init_Zr(y[i], *dipe_get_pairing(param));
+               element_random(y[i]);
+       }
+       
+       dipe_master_keygen(param, 5, &pk, &msk);
+       dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+       
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(pk);
+       dipe_free_secretkey(sk);
+
+       for (size_t i = 0; i < 5; ++i) {
+               element_clear(y[i]);
+       }
+}
+
+TEST(DipeTest, DipeDecryptFail) {
+       dipe_ctxt_t ctxt;
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+       
+       element_t y[5];
+       for (size_t i = 0; i < 5; ++i) {
+               element_init_Zr(y[i], *dipe_get_pairing(param));
+               element_random(y[i]);
+       }
+       
+       dipe_master_keygen(param, 5, &pk, &msk);
+       dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+
+       element_t ptxt, ptxtp;
+       element_init_GT(ptxt, *dipe_get_pairing(param));
+       element_init_GT(ptxtp, *dipe_get_pairing(param));
+
+       element_random(ptxt);
+       
+       dipe_encrypt(param, pk, y, ptxt, &ctxt);
+       dipe_decrypt(param, sk, "1234567890abcdef", y, ctxt, ptxtp);
+
+       EXPECT_NE(element_cmp(ptxt, ptxtp), 0);
+
+       for (size_t i = 0; i < 5; ++i) {
+               element_clear(y[i]);
+       }
+       
+       element_clear(ptxt);
+       element_clear(ptxtp);
+
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(pk);
+       dipe_free_secretkey(sk);
+       dipe_free_ctxt(ctxt);
+}
+
+TEST(DipeTest, DipeDecryptSuccess) {
+       dipe_ctxt_t ctxt;
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+       
+       element_t y[5];
+       for (size_t i = 0; i < 5; ++i) {
+               element_init_Zr(y[i], *dipe_get_pairing(param));
+               element_set0(y[i]);
+       }
+       
+       dipe_master_keygen(param, 5, &pk, &msk);
+       dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+
+       element_t ptxt, ptxtp;
+       element_init_GT(ptxt, *dipe_get_pairing(param));
+       element_init_GT(ptxtp, *dipe_get_pairing(param));
+
+       element_random(ptxt);
+       
+       dipe_encrypt(param, pk, y, ptxt, &ctxt);
+       dipe_decrypt(param, sk, "1234567890abcdef", y, ctxt, ptxtp);
+       element_printf("%B\n", ptxt);
+       element_printf("%B\n", ptxtp);
+
+       EXPECT_EQ(element_cmp(ptxt, ptxtp), 0);
+
+       for (size_t i = 0; i < 5; ++i) {
+               element_clear(y[i]);
+       }
+       
+       element_clear(ptxt);
+       element_clear(ptxtp);
+
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(pk);
+       dipe_free_secretkey(sk);
+       dipe_free_ctxt(ctxt);
+}
+
+
+int main(int argc, char **argv) {
+    ::testing::InitGoogleTest(&argc, argv);
+
+       dipe_init(fopen("../tests/a.param", "r"), &param);
+
+       int result = RUN_ALL_TESTS();
+       dipe_free_param(param);
+       return result;
+}
+