]> git.siccegge.de Git - software/DIPE.git/blobdiff - tests/testDIPE.cpp
implement hybrid encryption
[software/DIPE.git] / tests / testDIPE.cpp
index f1b6332398d5f95b6ad7aed938424324b5959260..4219ba46ec3f182ef9c178b34478f97628b21424 100644 (file)
@@ -172,6 +172,61 @@ TEST(DipeTest, DipeDecapSuccess) {
        dipe_free_ctxt(ctxt);
 }
 
+TEST(DipeTest, DipeDecryptSuccessSmall) {
+       char ctxt[768];
+       char ptxt[768];
+       size_t ptxt_len;
+       size_t overhead;
+       dipe_master_publickey_t pk;
+       dipe_master_secretkey_t msk;
+       dipe_secretkey_t sk;
+
+       element_t y[6];
+       element_t x[6];
+
+       for (size_t i = 0; i < 6; 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, 6, &pk, &msk);
+       dipe_keygen(param, msk, "1234567890abcdef", y, &sk);
+       overhead = dipe_ciphertext_overhead(param, 6);
+
+       for (size_t clen = overhead; clen < 768; ++clen) {
+               memset(ctxt, 0, 768);
+               memset(ptxt, 0, 768);
+               memcpy(ptxt, "test", 4);
+
+               dipe_encrypt(param, pk, x, 4, ptxt, clen, ctxt);
+               ptxt_len = dipe_decrypt(param, sk, "1234567890abcdef", y, clen, ctxt, ptxt);
+
+               if (clen >= overhead) {
+                       ASSERT_EQ(ptxt_len, 4);
+                       ASSERT_STREQ(ptxt, "test");
+               }
+               else {
+                       ASSERT_EQ(ptxt_len, 0);
+               }
+       }
+       
+       for (size_t i = 0; i < 6; ++i) {
+               element_clear(y[i]);
+               element_clear(x[i]);
+       }
+
+       dipe_free_master_secretkey(msk);
+       dipe_free_master_publickey(pk);
+       dipe_free_secretkey(sk);
+}
+
 
 int main(int argc, char **argv) {
        ::testing::InitGoogleTest(&argc, argv);