X-Git-Url: https://git.siccegge.de//index.cgi?p=software%2FDIPE.git;a=blobdiff_plain;f=tests%2FtestDIPE.cpp;fp=tests%2FtestDIPE.cpp;h=0a3e209a2be6fff68919733d9d5755f85dab1143;hp=0000000000000000000000000000000000000000;hb=006e87bc592a4e6eabea4f7f9caab8e218ebfd85;hpb=5cb1a82c4ddb3fd578e6b99cce46406e1a6b357f diff --git a/tests/testDIPE.cpp b/tests/testDIPE.cpp new file mode 100644 index 0000000..0a3e209 --- /dev/null +++ b/tests/testDIPE.cpp @@ -0,0 +1,130 @@ +#include +#include + +#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"), ¶m); + + int result = RUN_ALL_TESTS(); + dipe_free_param(param); + return result; +} +