aboutsummaryrefslogtreecommitdiff
path: root/smc.c
diff options
context:
space:
mode:
authorMarkus Teich <markus.teich@stusta.mhn.de>2016-06-13 21:01:14 +0200
committerMarkus Teich <markus.teich@stusta.mhn.de>2016-06-13 21:01:14 +0200
commit557fbe2cc32f3ff6d8c2c0c8aa272f7b55f45618 (patch)
tree1804896d2e6d2ffb14936a6570b96c65e230143f /smc.c
parent745dff3ac02a97d5686270fd142a31ad6e5badb2 (diff)
add first ZKP including test case
Diffstat (limited to 'smc.c')
-rw-r--r--smc.c91
1 files changed, 42 insertions, 49 deletions
diff --git a/smc.c b/smc.c
index 399f031..52afa35 100644
--- a/smc.c
+++ b/smc.c
@@ -19,17 +19,55 @@
* @brief Implementation of the smc primitives.
*/
+#include <gcrypt.h>
+
+#include "crypto.h"
#include "util.h"
+#include "smc.h"
+
+extern gcry_ctx_t ec_ctx;
+
+void
+smc_zkp_dl (gcry_mpi_point_t v, gcry_mpi_point_t g, gcry_mpi_t x, gcry_mpi_point_t *a, gcry_mpi_t *c, gcry_mpi_t *r)
+{
+ gcry_mpi_t z = gcry_mpi_new(0);
+
+ brandt_ec_keypair_create_base(a, &z, g);
+ /**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);
+
+ gcry_mpi_release(z);
+}
+
+int
+smc_zkp_dl_check (gcry_mpi_point_t v, gcry_mpi_point_t g, gcry_mpi_point_t a, 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, g, ec_ctx);
+ gcry_mpi_ec_mul(right, c, v, ec_ctx);
+ gcry_mpi_ec_add(right, a, right, ec_ctx);
-#include <pari/pari.h>
+ 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) /* int */
+smc_hextodec (const char *s)
{
size_t i;
char c;
pari_sp ltop = avma;
- GEN ret = gen_0; /* int */
+ GEN ret = gen_0;
for (i = 0; i < strlen (s); i++)
{
@@ -43,49 +81,4 @@ smc_hextodec (const char *s) /* int */
}
return gerepilecopy (ltop, ret);
}
-
-
-void
-smc_genbid (struct AuctionData *ad, uint16_t bid)
-{
- uint16_t j;
- pari_sp ltop = avma;
- GEN ret = cgetg (itos (ad->k)+1, t_VEC); /* vec */
-
- for (j = 1; j <= ad->k; j++)
- {
- gel (ret, j) = gpowgs (ad->g, bid == j);
- }
- ad->b = gerepilecopy (ltop, ret);
-}
-
-
-void
-smc_genalpha (struct AuctionData *ad)
-{
- uint16_t j;
- pari_sp ltop = avma;
- GEN ret = cgetg (ad->k+1, t_VEC);
-
- for (j = 1; j <= ad->k; ++j)
- {
- gel (ret, j) = gmul (gel (ad->b, j), gpowgi (ad->y, gel (ad->r, j)));
- }
- ad->alpha = gerepilecopy (ltop, ret);
-}
-
-
-void
-smc_genbeta (struct AuctionData *ad)
-{
- uint16_t j;
- pari_sp ltop = avma;
- GEN ret = cgetg (ad->k+1, t_VEC);
-
- for (j = 1; j <= ad->k; ++j)
- {
- gel (ret, j) = gpowgi (ad->g, gel (ad->r, j));
- }
- ad->beta = gerepilecopy (ltop, ret);
-}
-
+*/