aboutsummaryrefslogtreecommitdiff
path: root/src/nse/perf_kdf.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-03-23 20:00:45 +0000
committerChristian Grothoff <christian@grothoff.org>2013-03-23 20:00:45 +0000
commitd5eec64dbfd73da3f179d9223a3108a6bff5ed71 (patch)
treeb28f93b247e1eee4a6e442a11be34daa7d0c6690 /src/nse/perf_kdf.c
parent856ce6820e23c219d58816dd12b5a99a59b9e667 (diff)
downloadgnunet-d5eec64dbfd73da3f179d9223a3108a6bff5ed71.tar.gz
gnunet-d5eec64dbfd73da3f179d9223a3108a6bff5ed71.zip
-towards implementing #2685
Diffstat (limited to 'src/nse/perf_kdf.c')
-rw-r--r--src/nse/perf_kdf.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/nse/perf_kdf.c b/src/nse/perf_kdf.c
new file mode 100644
index 000000000..e462c129f
--- /dev/null
+++ b/src/nse/perf_kdf.c
@@ -0,0 +1,86 @@
1/*
2 This file is part of GNUnet.
3 (C) 2002, 2003, 2004, 2006, 2013 Christian Grothoff (and other contributing authors)
4
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 2, or (at your
8 option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
19*/
20
21/**
22 * @author Christian Grothoff
23 * @file nse/perf_kdf.c
24 * @brief measure performance of KDF hash function
25 */
26#include "platform.h"
27#include "gnunet_common.h"
28#include "gnunet_util_lib.h"
29#include <gcrypt.h>
30#include <gauger.h>
31
32
33
34/**
35 * Calculate the 'proof-of-work' hash (an expensive hash).
36 *
37 * @param buf data to hash
38 * @param buf_len number of bytes in 'buf'
39 * @param result where to write the resulting hash
40 */
41static void
42pow_hash (const void *buf,
43 size_t buf_len,
44 struct GNUNET_HashCode *result)
45{
46 GNUNET_break (0 ==
47 gcry_kdf_derive (buf, buf_len,
48 GCRY_KDF_PBKDF2 /* FIX: use SCRYPT! */,
49 1 /* subalgo */,
50 "gnunet-proof-of-work", strlen ("gnunet-proof-of-work"),
51 2 /* iterations; keep cost of individual op small */,
52 sizeof (struct GNUNET_HashCode), result));
53}
54
55
56static void
57perfHash ()
58{
59 struct GNUNET_HashCode hc;
60 unsigned int i;
61 char buf[64];
62
63 memset (buf, 1, sizeof (buf));
64 for (i = 0; i < 1024; i++)
65 pow_hash (buf, sizeof (buf), &hc);
66}
67
68
69int
70main (int argc, char *argv[])
71{
72 struct GNUNET_TIME_Absolute start;
73
74 start = GNUNET_TIME_absolute_get ();
75 perfHash ();
76 printf ("Hash perf took %s\n",
77 GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
78 GNUNET_YES));
79 GAUGER ("NSE", "Proof-of-work hashing",
80 1024 / (1 +
81 GNUNET_TIME_absolute_get_duration
82 (start).rel_value), "hashes/s");
83 return 0;
84}
85
86/* end of perf_kdf.c */