gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r32069 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r32069 - gnunet/src/util
Date: Wed, 29 Jan 2014 10:32:59 +0100

Author: cfuchs
Date: 2014-01-29 10:32:59 +0100 (Wed, 29 Jan 2014)
New Revision: 32069

Modified:
   gnunet/src/util/Makefile.am
   gnunet/src/util/crypto_paillier.c
   gnunet/src/util/test_crypto_paillier.c
Log:
- omitted test for crypto_paillier for now... 

Modified: gnunet/src/util/Makefile.am
===================================================================
--- gnunet/src/util/Makefile.am 2014-01-28 21:07:10 UTC (rev 32068)
+++ gnunet/src/util/Makefile.am 2014-01-29 09:32:59 UTC (rev 32069)
@@ -245,7 +245,6 @@
  test_crypto_ecdhe \
  test_crypto_hash \
  test_crypto_hkdf \
- test_crypto_paillier \
  test_crypto_random \
  test_disk \
  test_getopt \

Modified: gnunet/src/util/crypto_paillier.c
===================================================================
--- gnunet/src/util/crypto_paillier.c   2014-01-28 21:07:10 UTC (rev 32068)
+++ gnunet/src/util/crypto_paillier.c   2014-01-29 09:32:59 UTC (rev 32069)
@@ -99,21 +99,32 @@
                                 const gcry_mpi_t m,
                                 struct GNUNET_CRYPTO_PaillierCiphertext 
*ciphertext)
 {
-  int length;
+  int possible_opts;
   gcry_mpi_t n_square;
   gcry_mpi_t r;
   gcry_mpi_t g;
   gcry_mpi_t c;
   gcry_mpi_t n;
+  gcry_mpi_t tmp1;
+  gcry_mpi_t tmp2;
   
   // determine how many operations we could allow, if the other number
   // has the same length. 
-  length = gcry_mpi_get_nbits(m);
-  if (GNUNET_CRYPTO_PAILLIER_BITS <= length) 
-    //paillier with 0 ops makes no sense, better use RSA and co.
+  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);
+  }
+  gcry_mpi_release(tmp1);
+  gcry_mpi_release(tmp2);
+  if (0 >= possible_opts)
+  {
     return -1;
+  }
   else
-    ciphertext->remaining_ops = htonl(GNUNET_CRYPTO_PAILLIER_BITS - length);
+    // reduce by one to guarantee the final homomorphic operation
+    ciphertext->remaining_ops = htonl(possible_opts);
   
   GNUNET_assert (0 != (n_square = gcry_mpi_new (0)));
   GNUNET_assert (0 != (r = gcry_mpi_new (0)));
@@ -147,7 +158,7 @@
   gcry_mpi_release (r);
   gcry_mpi_release (c);
   
-  return GNUNET_CRYPTO_PAILLIER_BITS-length;
+  return possible_opts;
 }
 
 
@@ -218,8 +229,12 @@
   gcry_mpi_t b;
   gcry_mpi_t c;
   gcry_mpi_t n_square;
+  int32_t o1;
+  int32_t o2;
   
-  if (0 == c1->remaining_ops || 0 == c2->remaining_ops)
+  o1 = ntohl(c1->remaining_ops);
+  o2 = ntohl(c2->remaining_ops);
+  if (0 >= o1 || 0 >= o2)
     return GNUNET_SYSERR;
   
   GNUNET_assert (0 != (c = gcry_mpi_new (0)));
@@ -230,7 +245,7 @@
   gcry_mpi_mul(n_square, n_square,n_square);
   gcry_mpi_mulm(c,a,b,n_square);
   
-  result->remaining_ops = ((c1->remaining_ops > c2->remaining_ops) ? 
c2->remaining_ops : c1->remaining_ops) - 1;
+  result->remaining_ops = htonl(((o2 > o1) ? o1 : o2) - 1);
   GNUNET_CRYPTO_mpi_print_unsigned (result->bits, 
                                     sizeof result->bits, 
                                     c);
@@ -238,7 +253,7 @@
   gcry_mpi_release (b);
   gcry_mpi_release (c);
   gcry_mpi_release (n_square);
-  return GNUNET_OK;
+  return ntohl(result->remaining_ops);
 }
 
 

Modified: gnunet/src/util/test_crypto_paillier.c
===================================================================
--- gnunet/src/util/test_crypto_paillier.c      2014-01-28 21:07:10 UTC (rev 
32068)
+++ gnunet/src/util/test_crypto_paillier.c      2014-01-29 09:32:59 UTC (rev 
32069)
@@ -21,6 +21,7 @@
 /**
  * @file util/test_crypto_paillier.c
  * @brief testcase paillier crypto
+ * @author Christian Fuchs
  * @author Florian Dold
  */
 #include "platform.h"
@@ -39,23 +40,27 @@
   struct GNUNET_CRYPTO_PaillierCiphertext c1;
   struct GNUNET_CRYPTO_PaillierCiphertext c2;
   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-1)));
-  GNUNET_assert (NULL != (m2 = gcry_mpi_new (GNUNET_CRYPTO_PAILLIER_BITS-1)));
+  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-1, GCRY_WEAK_RANDOM);
-  gcry_mpi_randomize (m2, GNUNET_CRYPTO_PAILLIER_BITS-1, GCRY_WEAK_RANDOM);
+  gcry_mpi_randomize (m1, GNUNET_CRYPTO_PAILLIER_BITS-2, GCRY_WEAK_RANDOM);
+  gcry_mpi_randomize (m2, GNUNET_CRYPTO_PAILLIER_BITS-2, GCRY_WEAK_RANDOM);
   gcry_mpi_add(result,m1,m2);
 
   if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m1, &c1))){
-    printf ("GNUNET_CRYPTO_paillier_encrypt failed, should return 1 allowed 
operation, got %d!\n", ret);
+    printf ("GNUNET_CRYPTO_paillier_encrypt 1 failed, should return 1 allowed 
operation, got %d!\n", ret);
     return 1;
   }
+  if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m2, &c2))){
+    printf ("GNUNET_CRYPTO_paillier_encrypt 2 failed, should return 1 allowed 
operation, got %d!\n", ret);
+    return 1;
+  }
   
   GNUNET_CRYPTO_paillier_encrypt (&public_key, m2, &c2);
 




reply via email to

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