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);