/* This file is part of libbrandt. * Copyright (C) 2016 GNUnet e.V. * * libbrandt is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * libbrandt is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * libbrandt. If not, see . */ /** * @file crypto.h * @brief Interface of the crypto primitives. */ #ifndef _BRANDT_CRYPTO_H #define _BRANDT_CRYPTO_H #include #include #include "internals.h" void brandt_crypto_init (); /* --- RANDOM --- */ void brandt_rand_poll (); /* --- HASHING --- */ struct brandt_hash_code { uint32_t bits[512 / 8 / sizeof (uint32_t)]; /* = 16 */ }; void brandt_hash (const void *block, size_t size, struct brandt_hash_code *ret); /* --- EC --- */ /* used for serialized mpis and serialized curve points (they are the same size * when compressed) */ struct ec_mpi { unsigned char data[256 / 8]; }; int ec_point_cmp (const gcry_mpi_point_t a, const gcry_mpi_point_t b); void ec_skey_create (gcry_mpi_t skey); void ec_keypair_create (gcry_mpi_point_t pkey, gcry_mpi_t skey); void ec_keypair_create_base (gcry_mpi_point_t pkey, gcry_mpi_t skey, const gcry_mpi_point_t base); /* --- Zero knowledge proofs --- */ void smc_zkp_dl (const gcry_mpi_point_t v, const gcry_mpi_point_t g, const gcry_mpi_t x, const gcry_mpi_point_t a, gcry_mpi_t c, gcry_mpi_t r); int smc_zkp_dl_check (const gcry_mpi_point_t v, const gcry_mpi_point_t g, const gcry_mpi_point_t a, const gcry_mpi_t c, const gcry_mpi_t r); void smc_zkp_2dle (const gcry_mpi_point_t v, const gcry_mpi_point_t w, const gcry_mpi_point_t g1, const gcry_mpi_point_t g2, const gcry_mpi_t x, gcry_mpi_point_t a, gcry_mpi_point_t b, gcry_mpi_t c, gcry_mpi_t r); int smc_zkp_2dle_check (const gcry_mpi_point_t v, const gcry_mpi_point_t w, const gcry_mpi_point_t g1, const gcry_mpi_point_t g2, const gcry_mpi_point_t a, const gcry_mpi_point_t b, const gcry_mpi_t c, const gcry_mpi_t r); void smc_zkp_0og (gcry_mpi_point_t alpha, const gcry_mpi_point_t m, const gcry_mpi_point_t y, gcry_mpi_point_t beta, gcry_mpi_point_t a1, gcry_mpi_point_t a2, gcry_mpi_point_t b1, gcry_mpi_point_t b2, gcry_mpi_t c, gcry_mpi_t d1, gcry_mpi_t d2, gcry_mpi_t r1, gcry_mpi_t r2); int smc_zkp_0og_check (const gcry_mpi_point_t alpha, const gcry_mpi_point_t y, const gcry_mpi_point_t beta, const gcry_mpi_point_t a1, const gcry_mpi_point_t a2, const gcry_mpi_point_t b1, const gcry_mpi_point_t b2, const gcry_mpi_t c, const gcry_mpi_t d1, const gcry_mpi_t d2, const gcry_mpi_t r1, const gcry_mpi_t r2); /* --- Protocol implementation --- */ void smc_gen_keyshare (struct AuctionData *ad); void smc_compute_pkey (struct AuctionData *ad); #endif /* ifndef _BRANDT_CRYPTO_H */