- re-added testcase for crypto-paillier
authorChristian Fuchs <christian.fuchs@cfuchs.net>
Wed, 29 Jan 2014 14:28:07 +0000 (14:28 +0000)
committerChristian Fuchs <christian.fuchs@cfuchs.net>
Wed, 29 Jan 2014 14:28:07 +0000 (14:28 +0000)
- fixed remaining pailier-test bug
- now: achieve world domination or off to new shores

src/util/Makefile.am
src/util/crypto_paillier.c
src/util/test_crypto_paillier.c

index 3c49c0b65777aab5ea7219d9b4486b966a195d27..acebb39dab99d0a3eb5625f9bc93486c2601b534 100644 (file)
@@ -245,6 +245,7 @@ check_PROGRAMS = \
  test_crypto_ecdhe \
  test_crypto_hash \
  test_crypto_hkdf \
+ test_crypto_paillier \
  test_crypto_random \
  test_disk \
  test_getopt \
index e83bcb4bb1311d621126c11ce496b734e891550b..8a9ea50408bdbc943c162c10da076b87ec5804d6 100644 (file)
@@ -45,8 +45,8 @@ GNUNET_CRYPTO_paillier_create (struct GNUNET_CRYPTO_PaillierPublicKey *public_ke
   gcry_mpi_t phi;
   gcry_mpi_t n;
 
-  GNUNET_assert (NULL != (phi = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS)));
-  GNUNET_assert (NULL != (n = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS)));
+  GNUNET_assert (NULL != (phi = gcry_mpi_new (0)));
+  GNUNET_assert (NULL != (n = gcry_mpi_new (0)));
 
   p = q = NULL;
 
@@ -113,15 +113,14 @@ GNUNET_CRYPTO_paillier_encrypt (const struct GNUNET_CRYPTO_PaillierPublicKey *pu
   GNUNET_assert (NULL != (tmp1 = gcry_mpi_set_ui(NULL, 1))); 
   GNUNET_assert (NULL != (tmp2 = gcry_mpi_set_ui(NULL, 2))); 
   gcry_mpi_mul_2exp(tmp1,tmp1,GNUNET_CRYPTO_PAILLIER_BITS);
-  for (possible_opts = 0; gcry_mpi_cmp(tmp1,m) > 0; possible_opts++){
-    gcry_mpi_div(tmp1, NULL, tmp1, tmp2 ,0);
+  
+  for (possible_opts = -1; gcry_mpi_cmp(tmp1, m) > 0; possible_opts++){
+    gcry_mpi_div(tmp1, NULL, tmp1, tmp2, 0);
   }
   gcry_mpi_release(tmp1);
   gcry_mpi_release(tmp2);
-  if (0 >= possible_opts)
-  {
+  if (possible_opts < 1)
     return -1;
-  }
   else
     // reduce by one to guarantee the final homomorphic operation
     ciphertext->remaining_ops = htonl(possible_opts);
index 47bd090029cb372a03b7c3c01ae01a1d4c9f4163..aaefd5ac0e59855b0a21a41d2a3076df5078d8d9 100644 (file)
@@ -42,15 +42,19 @@ main (int argc, char *argv[])
   struct GNUNET_CRYPTO_PaillierCiphertext c_result;
   struct GNUNET_CRYPTO_PaillierPublicKey public_key;
   struct GNUNET_CRYPTO_PaillierPrivateKey private_key;
-
+  
   GNUNET_CRYPTO_paillier_create (&public_key, &private_key);
 
-  GNUNET_assert (NULL != (m1 = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS-2)));
-  GNUNET_assert (NULL != (m2 = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS-2)));
-  GNUNET_assert (NULL != (result = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS)));
-  GNUNET_assert (NULL != (hom_result = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS)));
-  gcry_mpi_randomize (m1, GNUNET_CRYPTO_PAILLIER_BITS-2, GCRY_WEAK_RANDOM);
-  gcry_mpi_randomize (m2, GNUNET_CRYPTO_PAILLIER_BITS-2, GCRY_WEAK_RANDOM);
+  GNUNET_assert (NULL != (m1 = gcry_mpi_new (0)));
+  GNUNET_assert (NULL != (m2 = gcry_mpi_new (0)));
+  GNUNET_assert (NULL != (result = gcry_mpi_new (0)));
+  GNUNET_assert (NULL != (hom_result = gcry_mpi_new (0)));
+  //gcry_mpi_randomize (m1, GNUNET_CRYPTO_PAILLIER_BITS-2, GCRY_WEAK_RANDOM);
+  m1 = gcry_mpi_set_ui(m1,1);
+  gcry_mpi_mul_2exp(m1,m1,GNUNET_CRYPTO_PAILLIER_BITS-2);
+  //gcry_mpi_randomize (m2, GNUNET_CRYPTO_PAILLIER_BITS-2, GCRY_WEAK_RANDOM);
+  m2 = gcry_mpi_set_ui(m2,1);
+  gcry_mpi_mul_2exp(m2,m2,GNUNET_CRYPTO_PAILLIER_BITS-2);
   gcry_mpi_add(result,m1,m2);
 
   if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m1, &c1))){
@@ -71,10 +75,13 @@ main (int argc, char *argv[])
   
   GNUNET_CRYPTO_paillier_decrypt (&private_key, &public_key,
                                   &c_result, hom_result);
-
-  if (0 != gcry_mpi_cmp(result, hom_result))
+  
+  gcry_log_debugmpi("\n", hom_result);
+  gcry_log_debugmpi("\n", result);
+  if (0 != gcry_mpi_cmp(result, hom_result)){
     printf ("GNUNET_CRYPTO_paillier miscalculated!\n");
     return 1;
+  }
   
   return 0;
 }