[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r32069 - gnunet/src/util,
gnunet <=