diff options
author | Christian Fuchs <christian.fuchs@cfuchs.net> | 2014-02-04 10:15:29 +0000 |
---|---|---|
committer | Christian Fuchs <christian.fuchs@cfuchs.net> | 2014-02-04 10:15:29 +0000 |
commit | 9728378c983196c86c2fc6b7902964955e41e379 (patch) | |
tree | 1ecd82f008f053fc7bccf7dc0b331dc6a5db2a0e /src | |
parent | 3a831d404fdb12a6b8aa4c34f04d9c96ac032a03 (diff) |
- extended paillier-api to also include caller-suggested maximum supported homs
Diffstat (limited to 'src')
-rw-r--r-- | src/include/gnunet_crypto_lib.h | 5 | ||||
-rw-r--r-- | src/scalarproduct/gnunet-service-scalarproduct.c | 11 | ||||
-rw-r--r-- | src/secretsharing/gnunet-service-secretsharing.c | 2 | ||||
-rw-r--r-- | src/util/crypto_paillier.c | 6 | ||||
-rw-r--r-- | src/util/test_crypto_paillier.c | 8 |
5 files changed, 21 insertions, 11 deletions
diff --git a/src/include/gnunet_crypto_lib.h b/src/include/gnunet_crypto_lib.h index 54923ec563..2e333bd17f 100644 --- a/src/include/gnunet_crypto_lib.h +++ b/src/include/gnunet_crypto_lib.h @@ -1330,13 +1330,16 @@ GNUNET_CRYPTO_paillier_create (struct GNUNET_CRYPTO_PaillierPublicKey *public_ke * * @param public_key Public key to use. * @param m Plaintext to encrypt. + * @param desired_ops How many homomorphic ops the caller intends to use * @param[out] ciphertext Encrytion of @a plaintext with @a public_key. * @return guaranteed number of supported homomorphic operations >= 1, - * -1 if less than one homomorphic operation is possible + * or desired_ops, in case that is lower, + * or -1 if less than one homomorphic operation is possible */ int GNUNET_CRYPTO_paillier_encrypt (const struct GNUNET_CRYPTO_PaillierPublicKey *public_key, const gcry_mpi_t m, + int desired_ops, struct GNUNET_CRYPTO_PaillierCiphertext *ciphertext); diff --git a/src/scalarproduct/gnunet-service-scalarproduct.c b/src/scalarproduct/gnunet-service-scalarproduct.c index 0633656110..67ddbc06a7 100644 --- a/src/scalarproduct/gnunet-service-scalarproduct.c +++ b/src/scalarproduct/gnunet-service-scalarproduct.c @@ -1280,7 +1280,8 @@ compute_service_response (struct ServiceSession * request, gcry_mpi_sub (r[i], my_offset, rand_pi[i]); gcry_mpi_sub (r[i], r[i], b_pi[i]); GNUNET_CRYPTO_paillier_encrypt (&request->remote_pubkey, - r[i], + r[i], + 2, &R[i]); // E(S - r_pi - b_pi) * E(S + a_pi) == E(2*S + a - r - b) @@ -1300,12 +1301,14 @@ compute_service_response (struct ServiceSession * request, gcry_mpi_sub (r_prime[i], my_offset, rand_pi_prime[i]); GNUNET_CRYPTO_paillier_encrypt (&request->remote_pubkey, r_prime[i], + 2, &R_prime[i]); // E(S - r_qi) * E(S + a_qi) == E(2*S + a_qi - r_qi) GNUNET_CRYPTO_paillier_hom_add (&request->remote_pubkey, &R_prime[i], - &A_pi_prime[i], + &A_pi_prime[i], + 2, &R_prime[i]); } GNUNET_free (a_pi_prime); @@ -1319,6 +1322,7 @@ compute_service_response (struct ServiceSession * request, s_prime = compute_square_sum (rand, count); GNUNET_CRYPTO_paillier_encrypt (&request->remote_pubkey, s_prime, + 1, &S_prime); // Calculate S = E(SUM( (r_i + b_i)^2 )) @@ -1327,7 +1331,8 @@ compute_service_response (struct ServiceSession * request, } s = compute_square_sum (rand, count); GNUNET_CRYPTO_paillier_encrypt (&request->remote_pubkey, - s[i], + s[i], + 1, &S); // release r and tmp diff --git a/src/secretsharing/gnunet-service-secretsharing.c b/src/secretsharing/gnunet-service-secretsharing.c index 9c8c442643..b294338246 100644 --- a/src/secretsharing/gnunet-service-secretsharing.c +++ b/src/secretsharing/gnunet-service-secretsharing.c @@ -866,7 +866,7 @@ insert_round2_element (struct KeygenSession *ks) // evaluate the polynomial horner_eval (v, ks->presecret_polynomial, ks->threshold, idx, elgamal_q); // encrypt the result - GNUNET_CRYPTO_paillier_encrypt (&ks->info[i].paillier_public_key, v, ciphertext); + GNUNET_CRYPTO_paillier_encrypt (&ks->info[i].paillier_public_key, v, 0, ciphertext); } pos += sizeof *ciphertext; } diff --git a/src/util/crypto_paillier.c b/src/util/crypto_paillier.c index d478239053..6873d159f4 100644 --- a/src/util/crypto_paillier.c +++ b/src/util/crypto_paillier.c @@ -92,12 +92,16 @@ GNUNET_CRYPTO_paillier_create (struct GNUNET_CRYPTO_PaillierPublicKey *public_ke * * @param public_key Public key to use. * @param m Plaintext to encrypt. + * @param desired_ops How many homomorphic ops the caller intends to use * @param[out] ciphertext Encrytion of @a plaintext with @a public_key. - * @return guaranteed number of supported homomorphic operations, can be zero + * @return guaranteed number of supported homomorphic operations >= 1, + * or desired_ops, in case that is lower, + * or -1 if less than one homomorphic operation is possible */ int GNUNET_CRYPTO_paillier_encrypt (const struct GNUNET_CRYPTO_PaillierPublicKey *public_key, const gcry_mpi_t m, + int desired_ops, struct GNUNET_CRYPTO_PaillierCiphertext *ciphertext) { int possible_opts; diff --git a/src/util/test_crypto_paillier.c b/src/util/test_crypto_paillier.c index b771006422..0dad500ba1 100644 --- a/src/util/test_crypto_paillier.c +++ b/src/util/test_crypto_paillier.c @@ -45,7 +45,7 @@ test_crypto () gcry_mpi_randomize (plaintext, GNUNET_CRYPTO_PAILLIER_BITS / 2, GCRY_WEAK_RANDOM); - GNUNET_CRYPTO_paillier_encrypt (&public_key, plaintext, &ciphertext); + GNUNET_CRYPTO_paillier_encrypt (&public_key, plaintext, 0, &ciphertext); GNUNET_CRYPTO_paillier_decrypt (&private_key, &public_key, &ciphertext, plaintext_result); @@ -88,16 +88,14 @@ test_hom() gcry_mpi_mul_2exp(m2,m2,GNUNET_CRYPTO_PAILLIER_BITS-3); gcry_mpi_add(result,m1,m2); - if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m1, &c1))){ + if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m1, 0, &c1))){ 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))){ + if (1 != (ret = GNUNET_CRYPTO_paillier_encrypt (&public_key, m2, 0, &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); if (0 != (ret = GNUNET_CRYPTO_paillier_hom_add (&public_key, &c1,&c2, &c_result))){ printf ("GNUNET_CRYPTO_paillier_hom_add failed, expected 0 remaining operations, got %d!\n", ret); |