From b3bb9dcb3225fbbd9f04cb8d97f2b876b35104fd Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 10 May 2018 01:19:34 +0200 Subject: add gnscrypto benchmark --- src/gnsrecord/.gitignore | 1 + src/gnsrecord/Makefile.am | 10 ++- src/gnsrecord/perf_gnsrecord_crypto.c | 137 ++++++++++++++++++++++++++++++++++ src/gnsrecord/test_gnsrecord_crypto.c | 6 +- 4 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 src/gnsrecord/perf_gnsrecord_crypto.c (limited to 'src/gnsrecord') diff --git a/src/gnsrecord/.gitignore b/src/gnsrecord/.gitignore index 374abdb60..53d3bb22d 100644 --- a/src/gnsrecord/.gitignore +++ b/src/gnsrecord/.gitignore @@ -2,3 +2,4 @@ test_gnsrecord_block_expiration test_gnsrecord_crypto test_gnsrecord_serialization zonefiles +perf_gnsrecord_crypto diff --git a/src/gnsrecord/Makefile.am b/src/gnsrecord/Makefile.am index 2fb427c69..c83aa3307 100644 --- a/src/gnsrecord/Makefile.am +++ b/src/gnsrecord/Makefile.am @@ -19,7 +19,8 @@ endif check_PROGRAMS = \ test_gnsrecord_crypto \ test_gnsrecord_serialization \ - test_gnsrecord_block_expiration + test_gnsrecord_block_expiration \ + perf_gnsrecord_crypto if ENABLE_TEST_RUN AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; @@ -85,3 +86,10 @@ test_gnsrecord_crypto_LDADD = \ libgnunetgnsrecord.la \ $(top_builddir)/src/util/libgnunetutil.la + +perf_gnsrecord_crypto_SOURCES = \ + perf_gnsrecord_crypto.c +perf_gnsrecord_crypto_LDADD = \ + $(top_builddir)/src/testing/libgnunettesting.la \ + libgnunetgnsrecord.la \ + $(top_builddir)/src/util/libgnunetutil.la diff --git a/src/gnsrecord/perf_gnsrecord_crypto.c b/src/gnsrecord/perf_gnsrecord_crypto.c new file mode 100644 index 000000000..ff9721006 --- /dev/null +++ b/src/gnsrecord/perf_gnsrecord_crypto.c @@ -0,0 +1,137 @@ +/* + This file is part of GNUnet. + Copyright (C) 2018 GNUnet e.V. + + GNUnet 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. + + GNUnet 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 GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +/** + * @file gnsrecord/test_gnsrecord_crypto.c + * @brief testcase for block creation, verification and decryption + */ +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_gnsrecord_lib.h" + +#define ROUNDS 1000 + +#define RECORDS 5 + +#define TEST_RECORD_TYPE 1234 + +#define TEST_RECORD_DATALEN 123 + +#define TEST_RECORD_DATA 'a' + +#define TEST_REMOVE_RECORD_TYPE 4321 + +#define TEST_REMOVE_RECORD_DATALEN 255 + +#define TEST_REMOVE_RECORD_DATA 'b' + + +static struct GNUNET_GNSRECORD_Data * +create_record (int count) +{ + struct GNUNET_GNSRECORD_Data *rd; + + rd = GNUNET_new_array (count, + struct GNUNET_GNSRECORD_Data); + for (unsigned int c = 0; c < count; c++) + { + rd[c].expiration_time = GNUNET_TIME_absolute_get().abs_value_us + 1000000000; + rd[c].record_type = TEST_RECORD_TYPE; + rd[c].data_size = TEST_RECORD_DATALEN; + rd[c].data = GNUNET_malloc(TEST_RECORD_DATALEN); + memset ((char *) rd[c].data, TEST_RECORD_DATA, TEST_RECORD_DATALEN); + } + return rd; +} + + +static void +run (void *cls, + char *const *args, + const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + struct GNUNET_GNSRECORD_Block *block; + struct GNUNET_HashCode query; + struct GNUNET_GNSRECORD_Data *s_rd; + const char *s_name; + struct GNUNET_TIME_Absolute start_time; + struct GNUNET_CRYPTO_EcdsaPrivateKey * privkey; + struct GNUNET_TIME_Absolute expire; + + (void) cls; + (void) args; + (void) cfgfile; + (void) cfg; + expire = GNUNET_TIME_absolute_get(); + privkey = GNUNET_CRYPTO_ecdsa_key_create (); + GNUNET_assert (NULL != privkey); + + /* test block creation */ + s_name = "DUMMY.dummy.gnunet"; + s_rd = create_record (RECORDS); + start_time = GNUNET_TIME_absolute_get (); + for (unsigned int i=0;i