gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r26585 - gnunet/src/nse


From: gnunet
Subject: [GNUnet-SVN] r26585 - gnunet/src/nse
Date: Sat, 23 Mar 2013 21:00:45 +0100

Author: grothoff
Date: 2013-03-23 21:00:45 +0100 (Sat, 23 Mar 2013)
New Revision: 26585

Added:
   gnunet/src/nse/perf_kdf.c
Modified:
   gnunet/src/nse/Makefile.am
   gnunet/src/nse/gnunet-service-nse.c
   gnunet/src/nse/nse.conf.in
Log:
-towards implementing #2685

Modified: gnunet/src/nse/Makefile.am
===================================================================
--- gnunet/src/nse/Makefile.am  2013-03-23 19:58:15 UTC (rev 26584)
+++ gnunet/src/nse/Makefile.am  2013-03-23 20:00:45 UTC (rev 26585)
@@ -53,7 +53,7 @@
   $(top_builddir)/src/util/libgnunetutil.la \
   $(top_builddir)/src/core/libgnunetcore.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  -lm \
+  -lm -lgcrypt \
   $(GN_LIBINTL)
 gnunet_service_nse_DEPENDENCIES = \
   libgnunetnse.la                               
@@ -64,6 +64,7 @@
 
 check_PROGRAMS = \
  test_nse_api \
+ perf_kdf \
  $(MULTIPEER_TEST)
 
 
@@ -86,6 +87,12 @@
   $(top_builddir)/src/testbed/libgnunettestbed.la \
   -lm
 
+perf_kdf_SOURCES = \
+ perf_kdf.c
+perf_kdf_LDADD = \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  -lgcrypt 
+
 EXTRA_DIST = \
   test_nse.conf \
   nse_profiler_test.conf

Modified: gnunet/src/nse/gnunet-service-nse.c
===================================================================
--- gnunet/src/nse/gnunet-service-nse.c 2013-03-23 19:58:15 UTC (rev 26584)
+++ gnunet/src/nse/gnunet-service-nse.c 2013-03-23 20:00:45 UTC (rev 26585)
@@ -1,6 +1,6 @@
 /*
   This file is part of GNUnet.
-  (C) 2009, 2010, 2011, 2012 Christian Grothoff (and other contributing 
authors)
+  (C) 2009, 2010, 2011, 2012, 2013 Christian Grothoff (and other contributing 
authors)
 
   GNUnet is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published
@@ -45,7 +45,9 @@
 #include "gnunet_core_service.h"
 #include "gnunet_nse_service.h"
 #include "nse.h"
+#include <gcrypt.h>
 
+
 /**
  * Should messages be delayed randomly?  This option should be set to
  * GNUNET_NO only for experiments, not in production.  It should also
@@ -477,6 +479,28 @@
 
 
 /**
+ * Calculate the 'proof-of-work' hash (an expensive hash).
+ *
+ * @param buf data to hash
+ * @param buf_len number of bytes in 'buf'
+ * @param result where to write the resulting hash
+ */
+static void
+pow_hash (const void *buf,
+         size_t buf_len,
+         struct GNUNET_HashCode *result)
+{
+  GNUNET_break (0 == 
+               gcry_kdf_derive (buf, buf_len,
+                                GCRY_KDF_PBKDF2 /* FIX: use SCRYPT! */,
+                                1 /* subalgo */,
+                                "gnunet-proof-of-work", strlen 
("gnunet-proof-of-work"),
+                                2 /* iterations; keep cost of individual op 
small */,
+                                sizeof (struct GNUNET_HashCode), result));
+}
+
+
+/**
  * Get the number of matching bits that the given timestamp has to the given 
peer ID.
  *
  * @param timestamp time to generate key
@@ -835,7 +859,7 @@
   memcpy (buf, &val, sizeof (val));
   memcpy (&buf[sizeof (val)], pkey,
           sizeof (struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded));
-  GNUNET_CRYPTO_hash (buf, sizeof (buf), &result);
+  pow_hash (buf, sizeof (buf), &result);
   return (count_leading_zeroes (&result) >=
           nse_work_required) ? GNUNET_YES : GNUNET_NO;
 }
@@ -886,7 +910,7 @@
   while ((counter != UINT64_MAX) && (i < ROUND_SIZE))
   {
     memcpy (buf, &counter, sizeof (uint64_t));
-    GNUNET_CRYPTO_hash (buf, sizeof (buf), &result);
+    pow_hash (buf, sizeof (buf), &result);
     if (nse_work_required <= count_leading_zeroes (&result))
     {
       my_proof = counter;

Modified: gnunet/src/nse/nse.conf.in
===================================================================
--- gnunet/src/nse/nse.conf.in  2013-03-23 19:58:15 UTC (rev 26584)
+++ gnunet/src/nse/nse.conf.in  2013-03-23 20:00:45 UTC (rev 26585)
@@ -19,6 +19,7 @@
 # Note: changing any of the values below will make this peer
 # completely incompatible with other peers! 
 INTERVAL = 1 h
-# 26 is about 10 minutes on a modern i7 (single-core)
+# 26 is about 100 minutes on a modern i7 (single-core) for PBKDF2;
+# need to re-calibrate once we have SCRYPT!
 WORKBITS = 26
 

Added: gnunet/src/nse/perf_kdf.c
===================================================================
--- gnunet/src/nse/perf_kdf.c                           (rev 0)
+++ gnunet/src/nse/perf_kdf.c   2013-03-23 20:00:45 UTC (rev 26585)
@@ -0,0 +1,86 @@
+/*
+     This file is part of GNUnet.
+     (C) 2002, 2003, 2004, 2006, 2013 Christian Grothoff (and other 
contributing authors)
+
+     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 2, 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., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @author Christian Grothoff
+ * @file nse/perf_kdf.c
+ * @brief measure performance of KDF hash function
+ */
+#include "platform.h"
+#include "gnunet_common.h"
+#include "gnunet_util_lib.h"
+#include <gcrypt.h>
+#include <gauger.h>
+
+
+
+/**
+ * Calculate the 'proof-of-work' hash (an expensive hash).
+ *
+ * @param buf data to hash
+ * @param buf_len number of bytes in 'buf'
+ * @param result where to write the resulting hash
+ */
+static void
+pow_hash (const void *buf,
+         size_t buf_len,
+         struct GNUNET_HashCode *result)
+{
+  GNUNET_break (0 == 
+               gcry_kdf_derive (buf, buf_len,
+                                GCRY_KDF_PBKDF2 /* FIX: use SCRYPT! */,
+                                1 /* subalgo */,
+                                "gnunet-proof-of-work", strlen 
("gnunet-proof-of-work"),
+                                2 /* iterations; keep cost of individual op 
small */,
+                                sizeof (struct GNUNET_HashCode), result));
+}
+
+
+static void
+perfHash ()
+{
+  struct GNUNET_HashCode hc;
+  unsigned int i;
+  char buf[64];
+
+  memset (buf, 1,  sizeof (buf));
+  for (i = 0; i < 1024; i++)
+    pow_hash (buf, sizeof (buf), &hc);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  struct GNUNET_TIME_Absolute start;
+
+  start = GNUNET_TIME_absolute_get ();
+  perfHash ();
+  printf ("Hash perf took %s\n",
+          GNUNET_STRINGS_relative_time_to_string 
(GNUNET_TIME_absolute_get_duration (start),
+                                                 GNUNET_YES));
+  GAUGER ("NSE", "Proof-of-work hashing",
+          1024 / (1 +
+                 GNUNET_TIME_absolute_get_duration
+                 (start).rel_value), "hashes/s");
+  return 0;
+}
+
+/* end of perf_kdf.c */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]