-remove async ecc key generation, not needed
[oweals/gnunet.git] / src / util / test_crypto_ksk.c
index c8555b5de4231085ee2388fc9a97db3383427a15..f062e31f500fadd1c3fbe7c48d8678e7b7f06fff 100644 (file)
@@ -4,7 +4,7 @@
 
      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
@@ -25,9 +25,9 @@
  */
 #include "platform.h"
 #include "gnunet_common.h"
-#include "gnunet_crypto_lib.h"
+#include "gnunet_util_lib.h"
 #include "gnunet_signatures.h"
-#include "gnunet_time_lib.h"
+
 
 #define TESTSTRING "Hello World\0"
 #define MAX_TESTVAL 20
 
 
 static int
-testMultiKey (const char *word)
+testCorrectKey ()
 {
-  GNUNET_HashCode in;
+  const char *want =
+      "010601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b73c215f7a5e6b09bec55713c901786c09324a150980e014bdb0d04426934929c3b4971a9711af5455536cd6eeb8bfa004ee904972a737455f53c752987d8c82b755bc02882b44950c4acdc1672ba74c3b94d81a4c1ea3d74e7700ae5594c3a4f3c559e4bff2df6844fac302e4b66175e14dc8bad3ce44281d2fec1a1abef06301010000";
+  struct GNUNET_HashCode in;
   struct GNUNET_CRYPTO_RsaPrivateKey *hostkey;
   struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
-  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey1;
   int i;
+  char out[3];
 
-  fprintf (stderr, "Testing KBlock key uniqueness (%s) ", word);
-  GNUNET_CRYPTO_hash (word, strlen (word), &in);
+  FPRINTF (stderr, "%s",  "Testing KBlock key correctness");
+  GNUNET_CRYPTO_hash ("X", strlen ("X"), &in);
   hostkey = GNUNET_CRYPTO_rsa_key_create_from_hash (&in);
   if (hostkey == NULL)
+  {
+    GNUNET_break (0);
+    return GNUNET_SYSERR;
+  }
+  GNUNET_CRYPTO_rsa_key_get_public (hostkey, &pkey);
+  GNUNET_CRYPTO_rsa_key_free (hostkey);
+#if 0
+  for (i = 0; i < sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded); i++)
+    printf ("%02x", ((unsigned char *) &pkey)[i]);
+  printf ("\n");
+#endif
+  for (i = 0; i < sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded); i++)
+  {
+    snprintf (out, sizeof (out), "%02x", ((unsigned char *) &pkey)[i]);
+    if (0 != strncmp (out, &want[i * 2], 2))
     {
-      GNUNET_break (0);
+      FPRINTF (stderr, " Failed! Wanted %.2s but got %2s at %d\n", &want[i * 2],
+               out, i);
       return GNUNET_SYSERR;
     }
+  }
+  FPRINTF (stderr, "%s",  " OK\n");
+  return GNUNET_OK;
+}
+
+
+static int
+testMultiKey (const char *word)
+{
+  struct GNUNET_HashCode in;
+  struct GNUNET_CRYPTO_RsaPrivateKey *hostkey;
+  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey;
+  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pkey1;
+  int i;
+
+  FPRINTF (stderr, "Testing KBlock key uniqueness (%s) ", word);
+  GNUNET_CRYPTO_hash (word, strlen (word), &in);
+  hostkey = GNUNET_CRYPTO_rsa_key_create_from_hash (&in);
+  if (hostkey == NULL)
+  {
+    GNUNET_break (0);
+    return GNUNET_SYSERR;
+  }
   GNUNET_CRYPTO_rsa_key_get_public (hostkey, &pkey);
   /*
-     for (i=0;i<sizeof(struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded);i++)
-     printf("%02x", ((unsigned char*) &pkey)[i]);
-     printf("\n"); */
+   * for (i=0;i<sizeof(struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded);i++)
+   * printf("%02x", ((unsigned char*) &pkey)[i]);
+   * printf("\n"); */
   GNUNET_CRYPTO_rsa_key_free (hostkey);
   for (i = 0; i < UNIQUE_ITER; i++)
+  {
+    FPRINTF (stderr, "%s",  ".");
+    hostkey = GNUNET_CRYPTO_rsa_key_create_from_hash (&in);
+    if (hostkey == NULL)
     {
-      fprintf (stderr, ".");
-      hostkey = GNUNET_CRYPTO_rsa_key_create_from_hash (&in);
-      if (hostkey == NULL)
-        {
-          GNUNET_break (0);
-          fprintf (stderr, " ERROR\n");
-          return GNUNET_SYSERR;
-        }
-      GNUNET_CRYPTO_rsa_key_get_public (hostkey, &pkey1);
-      GNUNET_CRYPTO_rsa_key_free (hostkey);
-      if (0 !=
-          memcmp (&pkey, &pkey1,
-                  sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)))
-        {
-          GNUNET_break (0);
-          fprintf (stderr, " ERROR\n");
-          return GNUNET_SYSERR;
-        }
+      GNUNET_break (0);
+      FPRINTF (stderr, "%s",  " ERROR\n");
+      return GNUNET_SYSERR;
     }
-  fprintf (stderr, " OK\n");
+    GNUNET_CRYPTO_rsa_key_get_public (hostkey, &pkey1);
+    GNUNET_CRYPTO_rsa_key_free (hostkey);
+    if (0 !=
+        memcmp (&pkey, &pkey1,
+                sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)))
+    {
+      GNUNET_break (0);
+      FPRINTF (stderr, "%s",  " ERROR\n");
+      return GNUNET_SYSERR;
+    }
+  }
+  FPRINTF (stderr, "%s",  " OK\n");
   return GNUNET_OK;
 }
 
@@ -94,42 +135,42 @@ testEncryptDecrypt (struct GNUNET_CRYPTO_RsaPrivateKey *hostkey)
   struct GNUNET_TIME_Absolute start;
   int ok;
 
-  fprintf (stderr, "W");
+  FPRINTF (stderr, "%s",  "W");
   GNUNET_CRYPTO_rsa_key_get_public (hostkey, &pkey);
 
   ok = 0;
   start = GNUNET_TIME_absolute_get ();
   for (i = 0; i < ITER; i++)
+  {
+    FPRINTF (stderr, "%s",  ".");
+    if (GNUNET_SYSERR ==
+        GNUNET_CRYPTO_rsa_encrypt (TESTSTRING, strlen (TESTSTRING) + 1, &pkey,
+                                   &target))
+    {
+      FPRINTF (stderr, "%s",  "GNUNET_CRYPTO_rsa_encrypt returned SYSERR\n");
+      ok++;
+      continue;
+    }
+    if (-1 ==
+        GNUNET_CRYPTO_rsa_decrypt (hostkey, &target, result,
+                                   strlen (TESTSTRING) + 1))
+    {
+      FPRINTF (stderr, "%s",  "GNUNET_CRYPTO_rsa_decrypt returned SYSERR\n");
+      ok++;
+      continue;
+    }
+    if (strncmp (TESTSTRING, result, strlen (TESTSTRING)) != 0)
     {
-      fprintf (stderr, ".");
-      if (GNUNET_SYSERR == GNUNET_CRYPTO_rsa_encrypt (TESTSTRING,
-                                                      strlen (TESTSTRING) + 1,
-                                                      &pkey, &target))
-        {
-          fprintf (stderr, "GNUNET_CRYPTO_rsa_encrypt returned SYSERR\n");
-          ok++;
-          continue;
-        }
-      if (-1 == GNUNET_CRYPTO_rsa_decrypt (hostkey,
-                                           &target, result,
-                                           strlen (TESTSTRING) + 1))
-        {
-          fprintf (stderr, "GNUNET_CRYPTO_rsa_decrypt returned SYSERR\n");
-          ok++;
-          continue;
-        }
-      if (strncmp (TESTSTRING, result, strlen (TESTSTRING)) != 0)
-        {
-          printf ("%s != %.*s - testEncryptDecrypt failed!\n",
-                  TESTSTRING, MAX_TESTVAL, result);
-          ok++;
-          continue;
-        }
+      printf ("%s != %.*s - testEncryptDecrypt failed!\n", TESTSTRING,
+              MAX_TESTVAL, result);
+      ok++;
+      continue;
     }
-  printf ("%d RSA encrypt/decrypt operations %llums (%d failures)\n",
-          ITER,
-          (unsigned long long) GNUNET_TIME_absolute_get_duration (start).
-          value, ok);
+  }
+  printf ("%d RSA encrypt/decrypt operations %s (%d failures)\n", 
+         ITER,
+         GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start), GNUNET_YES), 
+         ok);
   if (ok == 0)
     return GNUNET_OK;
   else
@@ -146,41 +187,40 @@ testSignVerify (struct GNUNET_CRYPTO_RsaPrivateKey *hostkey)
   struct GNUNET_TIME_Absolute start;
   int ok = GNUNET_OK;
 
-  fprintf (stderr, "W");
+  FPRINTF (stderr, "%s",  "W");
   GNUNET_CRYPTO_rsa_key_get_public (hostkey, &pkey);
   start = GNUNET_TIME_absolute_get ();
   purp.size = htonl (sizeof (struct GNUNET_CRYPTO_RsaSignaturePurpose));
   purp.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TEST);
   for (i = 0; i < ITER; i++)
+  {
+    FPRINTF (stderr, "%s",  ".");
+    if (GNUNET_SYSERR == GNUNET_CRYPTO_rsa_sign (hostkey, &purp, &sig))
+    {
+      FPRINTF (stderr, "%s",  "GNUNET_CRYPTO_rsa_sign returned SYSERR\n");
+      ok = GNUNET_SYSERR;
+      continue;
+    }
+    if (GNUNET_SYSERR ==
+        GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_TEST, &purp, &sig,
+                                  &pkey))
     {
-      fprintf (stderr, ".");
-      if (GNUNET_SYSERR == GNUNET_CRYPTO_rsa_sign (hostkey, &purp, &sig))
-        {
-          fprintf (stderr, "GNUNET_CRYPTO_rsa_sign returned SYSERR\n");
-          ok = GNUNET_SYSERR;
-          continue;
-        }
-      if (GNUNET_SYSERR ==
-          GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_TEST,
-                                    &purp, &sig, &pkey))
-        {
-          printf ("GNUNET_CRYPTO_rsa_verify failed!\n");
-          ok = GNUNET_SYSERR;
-          continue;
-        }
-      if (GNUNET_SYSERR !=
-          GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_HELLO,
-                                    &purp, &sig, &pkey))
-        {
-          printf ("GNUNET_CRYPTO_rsa_verify failed to fail!\n");
-          ok = GNUNET_SYSERR;
-          continue;
-        }
+      printf ("GNUNET_CRYPTO_rsa_verify failed!\n");
+      ok = GNUNET_SYSERR;
+      continue;
     }
-  printf ("%d RSA sign/verify operations %llums\n",
-          ITER,
-          (unsigned long long) GNUNET_TIME_absolute_get_duration (start).
-          value);
+    if (GNUNET_SYSERR !=
+        GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_PONG_OWN,
+                                  &purp, &sig, &pkey))
+    {
+      printf ("GNUNET_CRYPTO_rsa_verify failed to fail!\n");
+      ok = GNUNET_SYSERR;
+      continue;
+    }
+  }
+  printf ("%d RSA sign/verify operations %s\n", 
+         ITER,
+         GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start), GNUNET_YES));
   return ok;
 }
 
@@ -189,18 +229,19 @@ int
 main (int argc, char *argv[])
 {
   int failureCount = 0;
-  GNUNET_HashCode in;
+  struct GNUNET_HashCode in;
   struct GNUNET_CRYPTO_RsaPrivateKey *hostkey;
 
   GNUNET_log_setup ("test-crypto-ksk", "WARNING", NULL);
-  GNUNET_CRYPTO_hash_create_random (&in);
+  if (GNUNET_OK != testCorrectKey ())
+    failureCount++;
+  GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &in);
   hostkey = GNUNET_CRYPTO_rsa_key_create_from_hash (&in);
   if (hostkey == NULL)
-    {
-      printf ("\nGNUNET_CRYPTO_rsa_key_create_from_hash failed!\n");
-      return 1;
-    }
-
+  {
+    printf ("\nGNUNET_CRYPTO_rsa_key_create_from_hash failed!\n");
+    return 1;
+  }
   if (GNUNET_OK != testMultiKey ("foo"))
     failureCount++;
   if (GNUNET_OK != testMultiKey ("bar"))
@@ -212,9 +253,9 @@ main (int argc, char *argv[])
   GNUNET_CRYPTO_rsa_key_free (hostkey);
 
   if (failureCount != 0)
-    {
-      printf ("\n\n%d TESTS FAILED!\n\n", failureCount);
-      return -1;
-    }
+  {
+    printf ("\n\n%d TESTS FAILED!\n\n", failureCount);
+    return -1;
+  }
   return 0;
 }