aboutsummaryrefslogtreecommitdiff
path: root/smc.c
diff options
context:
space:
mode:
authorMarkus Teich <markus.teich@stusta.mhn.de>2016-06-15 00:52:18 +0200
committerMarkus Teich <markus.teich@stusta.mhn.de>2016-06-15 00:52:18 +0200
commit8035afa583d323060c6f05804024bbe4069a1f60 (patch)
tree06e22415b1a7a260ff2091438f87053006b78abb /smc.c
parent338c95de4190065149ddc995e5404d335c05f432 (diff)
add second ZKP (equality of two EC DLs) with test case
Diffstat (limited to 'smc.c')
-rw-r--r--smc.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/smc.c b/smc.c
index 52c1b3b..c58b1c2 100644
--- a/smc.c
+++ b/smc.c
@@ -45,8 +45,11 @@ smc_zkp_dl (gcry_mpi_point_t v, gcry_mpi_point_t g, gcry_mpi_t x,
gcry_mpi_t z = gcry_mpi_new (0);
brandt_ec_keypair_create_base (a, &z, g);
+
+ /* compute challange c */
/**TODO: generate c from HASH(g,v,a) and don't output it */
brandt_ec_skey_create (c);
+
*r = gcry_mpi_new (0);
gcry_mpi_mul (*r, *c, x);
gcry_mpi_add (*r, *r, z);
@@ -54,6 +57,7 @@ smc_zkp_dl (gcry_mpi_point_t v, gcry_mpi_point_t g, gcry_mpi_t x,
gcry_mpi_release (z);
}
+
/**
* smc_zkp_dl_check
*
@@ -84,6 +88,51 @@ smc_zkp_dl_check (gcry_mpi_point_t v, gcry_mpi_point_t g, gcry_mpi_point_t a,
return ret;
}
+
+void
+smc_zkp_2dle (gcry_mpi_point_t v, gcry_mpi_point_t w, gcry_mpi_point_t g1, gcry_mpi_point_t g2, gcry_mpi_t x, gcry_mpi_point_t *a, gcry_mpi_point_t *b, gcry_mpi_t *c, gcry_mpi_t *r)
+{
+ gcry_mpi_t z = gcry_mpi_new (0);
+
+ brandt_ec_keypair_create_base (a, &z, g1);
+ *b = gcry_mpi_point_new(0);
+ gcry_mpi_ec_mul(*b, z, g2, ec_ctx);
+
+ /* compute challange c */
+ /**TODO: generate c from HASH(g1,g2,v,w,a,b) and don't output it */
+ brandt_ec_skey_create (c);
+
+ *r = gcry_mpi_new (0);
+ gcry_mpi_mul (*r, *c, x);
+ gcry_mpi_add (*r, *r, z);
+
+ gcry_mpi_release (z);
+}
+
+
+int
+smc_zkp_2dle_check (gcry_mpi_point_t v, gcry_mpi_point_t w, gcry_mpi_point_t g1, gcry_mpi_point_t g2, gcry_mpi_point_t a, gcry_mpi_point_t b, gcry_mpi_t c, gcry_mpi_t r)
+{
+ int ret;
+ gcry_mpi_point_t left = gcry_mpi_point_new (0);
+ gcry_mpi_point_t right = gcry_mpi_point_new (0);
+
+ gcry_mpi_ec_mul (left, r, g1, ec_ctx);
+ gcry_mpi_ec_mul (right, c, v, ec_ctx);
+ gcry_mpi_ec_add (right, a, right, ec_ctx);
+ ret = brandt_ec_point_cmp (left, right);
+
+ gcry_mpi_ec_mul (left, r, g2, ec_ctx);
+ gcry_mpi_ec_mul (right, c, w, ec_ctx);
+ gcry_mpi_ec_add (right, b, right, ec_ctx);
+ ret &= brandt_ec_point_cmp (left, right);
+
+ gcry_mpi_point_release (left);
+ gcry_mpi_point_release (right);
+
+ return ret;
+}
+
//GEN
//smc_hextodec (const char *s)
//{