Merge branch 'master' of git+ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / util / perf_crypto_hash.c
index 746b33ecaa053bc36d3348ee30208717067a870a..8bea26e4b129e6701858b658d15c45a087ab923b 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
 /*
      This file is part of GNUnet.
-     (C) 2002, 2003, 2004, 2006 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2002, 2003, 2004, 2006 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
 
      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
+     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
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -14,8 +14,8 @@
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
 
      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.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 
 /**
 */
 
 /**
  * @brief measure performance of hash function
  */
 #include "platform.h"
  * @brief measure performance of hash function
  */
 #include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_time_lib.h"
+#include "gnunet_util_lib.h"
 #include <gauger.h>
 #include <gauger.h>
+#include <gcrypt.h>
+
 
 static void
 perfHash ()
 {
 
 static void
 perfHash ()
 {
-  GNUNET_HashCode hc1;
-  GNUNET_HashCode hc2;
-  GNUNET_HashCode hc3;
-  int i;
-  char *buf;
-
-  buf = GNUNET_malloc (1024 * 64);
-  memset (buf, 1, 1024 * 64);
-  GNUNET_CRYPTO_hash ("foo", 3, &hc1);
+  struct GNUNET_HashCode hc;
+  unsigned int i;
+  char buf[64 * 1024];
+
+  memset (buf, 1, sizeof (buf));
+  for (i = 0; i < 1024; i++)
+    GNUNET_CRYPTO_hash (buf, sizeof (buf), &hc);
+}
+
+
+static void
+perfHashSmall ()
+{
+  struct GNUNET_HashCode hc;
+  unsigned int i;
+  char buf[64];
+
+  memset (buf, 1, sizeof (buf));
+  for (i = 0; i < 1024; i++)
+    GNUNET_CRYPTO_hash (buf, sizeof (buf), &hc);
+}
+
+
+static void
+perfHKDF ()
+{
+  unsigned int i;
+  char res[128];
+  char buf[128];
+  char skm[64];
+
+  memset (buf, 1, sizeof (buf));
+  memset (skm, 2, sizeof (skm));
   for (i = 0; i < 1024; i++)
   for (i = 0; i < 1024; i++)
-    {
-      GNUNET_CRYPTO_hash (&hc1, sizeof (GNUNET_HashCode), &hc2);
-      GNUNET_CRYPTO_hash (&hc2, sizeof (GNUNET_HashCode), &hc1);
-      GNUNET_CRYPTO_hash (buf, 1024 * 64, &hc3);
-    }
-  GNUNET_free (buf);
+    GNUNET_CRYPTO_hkdf (res, sizeof (res),
+                        GCRY_MD_SHA512, GCRY_MD_SHA256,
+                        buf, sizeof (buf),
+                        skm, sizeof (skm),
+                        "test", (size_t) 4,
+                        NULL, 0);
 }
 
 }
 
+
 int
 main (int argc, char *argv[])
 {
   struct GNUNET_TIME_Absolute start;
 
 int
 main (int argc, char *argv[])
 {
   struct GNUNET_TIME_Absolute start;
 
+  start = GNUNET_TIME_absolute_get ();
+  perfHashSmall ();
+  printf ("1024x 64-byte Hash perf took %s\n",
+          GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
+                                                 GNUNET_YES));
+
   start = GNUNET_TIME_absolute_get ();
   perfHash ();
   start = GNUNET_TIME_absolute_get ();
   perfHash ();
-  printf ("Hash perf took %llu ms\n",
-         (unsigned long long)
-         GNUNET_TIME_absolute_get_duration (start).rel_value);
+  printf ("1024x 64k Hash perf took %s\n",
+          GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
+                                                 GNUNET_YES));
   GAUGER ("UTIL", "Cryptographic hashing",
   GAUGER ("UTIL", "Cryptographic hashing",
-         1024 * 64 * 1024 / (1 +
-                             GNUNET_TIME_absolute_get_duration
-                             (start).rel_value), "kb/s");
+          64 * 1024 / (1 +
+                      GNUNET_TIME_absolute_get_duration
+                      (start).rel_value_us / 1000LL), "kb/ms");
+  start = GNUNET_TIME_absolute_get ();
+  perfHKDF ();
+  printf ("HKDF perf took %s\n",
+          GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start),
+                                                 GNUNET_YES));
+  GAUGER ("UTIL", "Cryptographic HKDF",
+          64 * 1024 / (1 +
+                      GNUNET_TIME_absolute_get_duration
+                      (start).rel_value_us / 1000LL), "kb/ms");
   return 0;
 }
 
   return 0;
 }
 
-/* end of hashperf.c */
+/* end of perf_crypto_hash.c */