some stuff

- finish BRANDT_destroy()
- fix include mess related to platform.h and brandt_config.h
- add first brandt.c testcase
This commit is contained in:
Markus Teich 2016-08-16 20:58:20 +02:00
parent 01c2b8d710
commit fe7b138892
9 changed files with 199 additions and 54 deletions

View File

@ -16,9 +16,13 @@ libbrandt_la_LDFLAGS = \
-version-info 0:0:0
check_PROGRAMS = \
test_crypto
test_crypto \
test_brandt
test_crypto_SOURCES = test_crypto.c
test_crypto_LDADD = libbrandt.la -lgcrypt -lgpg-error -lgnunetutil
test_brandt_SOURCES = test_brandt.c
test_brandt_LDADD = libbrandt.la -lgcrypt -lgpg-error -lgnunetutil
TESTS = $(check_PROGRAMS)

View File

@ -20,7 +20,8 @@
* @author Markus Teich
*/
#include "brandt_config.h"
#include "platform.h"
#include "crypto.h"
#include "internals.h"
#include "util.h"
@ -52,7 +53,7 @@ BRANDT_init (struct GNUNET_CRYPTO_EccDlogContext *dlogctx)
static void
start_auction (void *arg)
{
struct BRANDT_Auction *ad = (struct BRANDT_Auction *)arg;
// struct BRANDT_Auction *ad = (struct BRANDT_Auction *)arg;
/* \todo: broadcast start message to all participants */
}
@ -64,18 +65,18 @@ BRANDT_new (BRANDT_CbBroadcast broadcast,
void *auction_closure,
void **auction_desc,
size_t *auction_desc_len,
const void *description,
uint32_t description_len,
struct GNUNET_TIME_Absolute time_start,
struct GNUNET_TIME_Relative time_round,
void *description,
uint32_t description_len,
uint16_t num_prices,
uint16_t m,
int outcome_public)
{
struct BRANDT_Auction *ret = GNUNET_new (struct BRANDT_Auction);
struct BRANDT_DescrP *desc = GNUNET_new (struct BRANDT_DescrP);
struct GNUNET_TIME_Relative until_start;
struct GNUNET_HashContext *hc = GNUNET_CRYPTO_hash_context_start ();
struct GNUNET_TIME_Relative until_start;
desc->time_start = GNUNET_TIME_absolute_hton (time_start);
desc->time_round = GNUNET_TIME_relative_hton (time_round);
@ -220,7 +221,22 @@ BRANDT_join (BRANDT_CbBroadcast broadcast,
void
BRANDT_destroy (struct BRANDT_Auction *auction)
{
GNUNET_SCHEDULER_cancel (auction->task);
if (auction->task)
GNUNET_SCHEDULER_cancel (auction->task);
gcry_mpi_release (auction->round_progress);
gcry_mpi_release (auction->x);
smc_free1 (auction->y, auction->n);
gcry_mpi_point_release (auction->Y);
smc_free2 (auction->alpha, auction->n, auction->k);
smc_free2 (auction->beta, auction->n, auction->k);
smc_free2 (auction->gamma2, auction->n, auction->k);
smc_free3 (auction->gamma3, auction->n, auction->n, auction->k);
smc_free2 (auction->delta2, auction->n, auction->k);
smc_free3 (auction->delta3, auction->n, auction->n, auction->k);
smc_free2 (auction->phi2, auction->n, auction->k);
smc_free3 (auction->phi3, auction->n, auction->n, auction->k);
smc_free1 (auction->tmpa1, auction->k);
smc_free1 (auction->tmpb1, auction->k);
}

View File

@ -187,10 +187,10 @@ BRANDT_new (BRANDT_CbBroadcast broadcast,
void *auction_closure,
void **auction_desc,
size_t *auction_desc_len,
const void *description,
uint32_t description_len,
struct GNUNET_TIME_Absolute time_start,
struct GNUNET_TIME_Relative time_round,
void *description,
uint32_t description_len,
uint16_t num_prices,
uint16_t m,
int outcome_public);

View File

@ -22,8 +22,13 @@ CC=$(echo "${CC}" | sed 's/-std=gnu99/-std=c99/')
CPP=$(echo "${CPP}" | sed 's/-std=gnu99/-std=c99/')
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_INTMAX_T
AC_TYPE_UINTMAX_T
# Checks for libraries.
AC_SEARCH_LIBS([gcry_check_version], [gcrypt], [], [AC_MSG_ERROR([unable to find the gcry_check_version() function from libgcrypt])])
@ -105,16 +110,6 @@ AC_ARG_ENABLE(linker-hardening,
LDFLAGS="$LDFLAGS -z relro -z now"
fi])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_INTMAX_T
AC_TYPE_UINTMAX_T
AC_CONFIG_FILES([
Makefile
doc/Makefile

View File

@ -20,15 +20,15 @@
* @author Markus Teich
*/
#include "brandt_config.h"
#include "platform.h"
#include <arpa/inet.h>
#include <gcrypt.h>
#include "crypto.h"
#include "internals.h"
#include "util.h"
#define CURVE "Ed25519"
@ -377,7 +377,7 @@ ec_point_parse (gcry_mpi_point_t dst, const struct ec_mpi *src)
* @param[in,out] dst The 1 dimensional array to clean up
* @param[in] size1 size of the first dimension
*/
static void
void
smc_free1 (gcry_mpi_point_t *dst, uint16_t size1)
{
if (NULL == dst)
@ -399,7 +399,7 @@ smc_free1 (gcry_mpi_point_t *dst, uint16_t size1)
* @return a pointer to the array or NULL on error.
* If not used anymore use smc_free2 to reclaim the memory.
*/
static gcry_mpi_point_t *
gcry_mpi_point_t *
smc_init1 (uint16_t size1)
{
gcry_mpi_point_t *ret;
@ -427,7 +427,7 @@ smc_init1 (uint16_t size1)
* @param[in] size1 size of the first dimension
* @param[in] size2 size of the second dimension
*/
static void
void
smc_free2 (gcry_mpi_point_t **dst, uint16_t size1, uint16_t size2)
{
if (NULL == dst)
@ -451,7 +451,7 @@ smc_free2 (gcry_mpi_point_t **dst, uint16_t size1, uint16_t size2)
* @return a pointer to the array or NULL on error.
* If not used anymore use smc_free2 to reclaim the memory.
*/
static gcry_mpi_point_t **
gcry_mpi_point_t **
smc_init2 (uint16_t size1, uint16_t size2)
{
gcry_mpi_point_t **ret;
@ -490,7 +490,7 @@ smc_init2 (uint16_t size1, uint16_t size2)
* @param[in] size2 size of the second dimension
* @param[in] size3 size of the third dimension
*/
static void
void
smc_free3 (gcry_mpi_point_t ***dst,
uint16_t size1,
uint16_t size2,
@ -519,7 +519,7 @@ smc_free3 (gcry_mpi_point_t ***dst,
* @return a pointer to the array or NULL on error.
* If not used anymore use smc_free3 to reclaim the memory.
*/
static gcry_mpi_point_t ***
gcry_mpi_point_t ***
smc_init3 (uint16_t size1, uint16_t size2, uint16_t size3)
{
gcry_mpi_point_t ***ret;

View File

@ -26,7 +26,6 @@
#include <gcrypt.h>
#include <stdint.h>
#include "platform.h"
#include <gnunet/gnunet_util_lib.h>
#include "internals.h"
@ -42,6 +41,16 @@ struct ec_mpi {
unsigned char data[256 / 8];
};
gcry_mpi_point_t *smc_init1 (uint16_t size1);
gcry_mpi_point_t **smc_init2 (uint16_t size1, uint16_t size2);
gcry_mpi_point_t ***smc_init3 (uint16_t size1, uint16_t size2, uint16_t size3);
void smc_free1 (gcry_mpi_point_t *dst, uint16_t size1);
void smc_free2 (gcry_mpi_point_t **dst, uint16_t size1, uint16_t size2);
void smc_free3 (gcry_mpi_point_t ***dst,
uint16_t size1,
uint16_t size2,
uint16_t size3);
void ec_point_copy (gcry_mpi_point_t dst, const gcry_mpi_point_t src);
int ec_point_cmp (const gcry_mpi_point_t a, const gcry_mpi_point_t b);
void ec_skey_create (gcry_mpi_t skey);

View File

@ -1,24 +1,25 @@
/*
This file is part of TALER
Copyright (C) 2014 Chrisitan Grothoff (and other contributing authors)
TALER 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, or (at your option) any later version.
TALER 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
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
/* 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 <http://www.gnu.org/licenses/>.
*/
/**
* @file platform.h
* @brief This file contains the includes and definitions which are used by the
* rest of the modules
* @author Sree Harsha Totakura <sreeharsha@totakura.in>
* @brief This file was adapted from TALER and contains some magic
* configuration. It should be included in every compilation as the first
* include directive, since it sets up defines which are used in other includes.
* @author Markus Teich
*/
#ifndef PLATFORM_H_
@ -29,11 +30,8 @@
# define HAVE_USED_CONFIG_H
# ifdef HAVE_CONFIG_H
# include "brandt_config.h"
# endif
#endif
/* Include the features available for GNU source */
#define _GNU_SOURCE
# endif /* ifdef HAVE_CONFIG_H */
#endif /* ifndef HAVE_USED_CONFIG_H */
/* Include GNUnet's platform file */
#include <gnunet/platform.h>

124
test_brandt.c Normal file
View File

@ -0,0 +1,124 @@
/* 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 <http://www.gnu.org/licenses/>.
*/
/**
* @file test_brandt.c
* @brief testing API functions.
* @author Markus Teich
*/
#include "platform.h"
#include <gnunet/gnunet_util_lib.h>
#include "brandt.h"
#include "crypto.h"
#include "test.h"
#include "util.h"
static void
run_new_join (void *arg)
{
int *ret = arg;
const char description[] = "test description for test_new_join";
struct BRANDT_Auction *ad_seller;
struct BRANDT_Auction *ad_bidder;
void *desc;
size_t desc_len;
ad_seller = BRANDT_new (NULL,
NULL,
NULL,
&desc,
&desc_len,
description,
sizeof (description),
GNUNET_TIME_absolute_get (),
GNUNET_TIME_UNIT_MINUTES,
8,
0,
1);
if (!ad_seller)
{
weprintf ("BRANDT_new() failed.");
*ret = 0;
return;
}
ad_bidder = BRANDT_join (NULL,
NULL,
NULL,
NULL,
desc,
desc_len,
description,
sizeof (description));
if (!ad_bidder)
{
weprintf ("BRANDT_join() failed.");
*ret = 0;
return;
}
BRANDT_destroy (ad_seller);
BRANDT_destroy (ad_bidder);
*ret = 1;
}
static int
test_new_join ()
{
int ret = 0;
GNUNET_SCHEDULER_run (&run_new_join, &ret);
return ret;
}
/*
static void
cleanup_auction_data ()
{
for (uint16_t i = 0; i < bidders; i++)
{
}
free (ad);
}
*/
int
main (int argc, char *argv[])
{
int repeat = 1;
struct GNUNET_CRYPTO_EccDlogContext *edc;
edc = GNUNET_CRYPTO_ecc_dlog_prepare (1024, 16);
BRANDT_init (edc);
RUN (test_new_join);
for (tests_run = 0; tests_run < repeat; tests_run++)
{
}
GNUNET_CRYPTO_ecc_dlog_release (edc);
return ret;
}

View File

@ -20,13 +20,11 @@
* @author Markus Teich
*/
#include "brandt_config.h"
#include "platform.h"
/* For testing static functions and variables we include the whole source */
#include "crypto.c"
#include "brandt.h"
#include "crypto.h"
#include "test.h"
@ -198,6 +196,7 @@ test_setup_auction_data ()
return 1;
}
/*
*/
#define ROUND(type, oc, index) do { \