]> git.siccegge.de Git - software/DIPE.git/blobdiff - tests/testSS.cpp
test & fix
[software/DIPE.git] / tests / testSS.cpp
diff --git a/tests/testSS.cpp b/tests/testSS.cpp
new file mode 100644 (file)
index 0000000..d5c1244
--- /dev/null
@@ -0,0 +1,85 @@
+#include <gtest/gtest.h>
+#include <pbc/pbc.h>
+
+#include "DIPE.h"
+
+static dipe_param_t param;
+
+TEST(SSText, SSBaseTest) {
+       element_t types[3];
+       element_init_G1(types[0], *dipe_get_pairing(param));
+       element_init_G2(types[1], *dipe_get_pairing(param));
+       element_init_GT(types[2], *dipe_get_pairing(param));
+       size_t parties = 7;
+       size_t dummies = 7;
+       
+       element_t shared_secret;
+       element_t recovered_secret;
+
+       element_t* shares[parties];
+       element_t* dummy_shares[dummies];
+       element_t identities[parties];
+       element_t dummy_identities[dummies];
+
+       for (size_t j = 0; j < parties; ++j) {
+               shares[j] = (element_t*)calloc(1, sizeof(element_t));
+               element_init_Zr(identities[j], *dipe_get_pairing(param));
+               element_random(identities[j]);
+
+               if (j < dummies) {
+                       dummy_shares[j] = (element_t*)calloc(1, sizeof(element_t));
+                       element_init_Zr(dummy_identities[j], *dipe_get_pairing(param));
+                       element_random(dummy_identities[j]);
+               }
+       }
+
+       
+       for (size_t i = 0; i < 3; ++i) {
+               element_init_same_as(shared_secret, types[i]);
+               element_init_same_as(recovered_secret, types[i]);
+               
+               for (size_t j = 0; j < parties; ++j) {
+                       element_init_same_as(shares[j][0], types[i]);
+                       //element_init_same_as(dummy_shares[j][0], types[i]);
+                       element_random(shares[j][0]);
+               }
+
+               dipe_ss_share(param, parties, identities, parties, dummy_identities, 1, shares, &shared_secret, dummy_shares);
+               dipe_ss_recover(param, parties, identities, 1, shares, &recovered_secret);
+               EXPECT_EQ(element_cmp(shared_secret, recovered_secret), 0);
+               dipe_ss_recover(param, parties, dummy_identities, 1, dummy_shares, &recovered_secret);
+               EXPECT_EQ(element_cmp(shared_secret, recovered_secret), 0);
+
+               
+               for (size_t j = 0; j < parties; ++j) {
+                       element_clear(shares[j][0]);
+                       element_clear(dummy_shares[j][0]);
+               }
+               
+               element_clear(shared_secret);
+               element_clear(recovered_secret);
+       }
+
+       for (size_t i = 0; i < 3; ++i) {
+               element_clear(types[i]);
+       }
+       for (size_t j = 0; j < parties; ++j) {
+               element_clear(identities[j]);
+               element_clear(dummy_identities[j]);
+
+               free(shares[j]);
+               free(dummy_shares[j]);
+       }
+}
+
+
+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;
+}
+