diff options
author | Markus Teich <markus.teich@stusta.mhn.de> | 2016-06-13 21:01:14 +0200 |
---|---|---|
committer | Markus Teich <markus.teich@stusta.mhn.de> | 2016-06-13 21:01:14 +0200 |
commit | 557fbe2cc32f3ff6d8c2c0c8aa272f7b55f45618 (patch) | |
tree | 1804896d2e6d2ffb14936a6570b96c65e230143f /smc.c | |
parent | 745dff3ac02a97d5686270fd142a31ad6e5badb2 (diff) |
add first ZKP including test case
Diffstat (limited to 'smc.c')
-rw-r--r-- | smc.c | 91 |
1 files changed, 42 insertions, 49 deletions
@@ -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); -} - +*/ |