/* 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 test_crypto.c * @brief testing crypto and smc functions. */ #include "brandt.h" #include "crypto.h" #include "smc.h" #include "test.h" extern gcry_mpi_point_t ec_gen; extern gcry_ctx_t ec_ctx; int test_brandt_ec_keypair_create () { gcry_mpi_t skey; gcry_mpi_point_t pkey1; gcry_mpi_point_t pkey2 = gcry_mpi_point_new (0); brandt_ec_keypair_create (&pkey1, &skey); check (skey, "no sec key created"); check (pkey1, "no pub key created"); check (pkey2, "could not init pkey2"); gcry_mpi_ec_mul (pkey2, skey, ec_gen, ec_ctx); check (!brandt_ec_point_cmp (pkey1, pkey2), "pkeys do not match"); gcry_mpi_release (skey); gcry_mpi_point_release (pkey1); gcry_mpi_point_release (pkey2); } int test_smc_zkp_dl () { static int first = 1; gcry_mpi_t c; gcry_mpi_t r; gcry_mpi_t s; gcry_mpi_t x; gcry_mpi_point_t a; gcry_mpi_point_t g; gcry_mpi_point_t v = gcry_mpi_point_new (0); check (v, "no pub key initialized"); brandt_ec_keypair_create (&g, &s); check (g, "no gen created"); if (first) { gcry_mpi_ec_mul (g, GCRYMPI_CONST_ONE, ec_gen, ec_ctx); first = 0; } brandt_ec_skey_create (&x); check (x, "no sec key created"); gcry_mpi_ec_mul (v, x, g, ec_ctx); check (v, "no pub key created"); smc_zkp_dl (v, g, x, &a, &c, &r); check (!smc_zkp_dl_check (v, g, a, c, r), "zkp was false, should be true"); gcry_mpi_release (c); gcry_mpi_release (r); gcry_mpi_release (s); gcry_mpi_release (x); gcry_mpi_point_release (a); gcry_mpi_point_release (g); gcry_mpi_point_release (v); } int main (int argc, char *argv[]) { int repeat = 50; int i; BRANDT_init (); for (i = 0; i < repeat; i++) { run (test_brandt_ec_keypair_create); run (test_smc_zkp_dl); } return ret; }