aboutsummaryrefslogtreecommitdiff
path: root/src/secretsharing/gnunet-service-secretsharing.c
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2014-01-21 10:01:07 +0000
committerFlorian Dold <florian.dold@gmail.com>2014-01-21 10:01:07 +0000
commit2e09e80c283642d7d4cd943a9c3f39790f209210 (patch)
tree91ed42df4bcfd95d5a45c630d196b645aec0d3d0 /src/secretsharing/gnunet-service-secretsharing.c
parent029cb201f0aa6c23afc63fb1d80732d43d5c92a3 (diff)
downloadgnunet-2e09e80c283642d7d4cd943a9c3f39790f209210.tar.gz
gnunet-2e09e80c283642d7d4cd943a9c3f39790f209210.zip
remove paillier_decrypt in secretsharing
Diffstat (limited to 'src/secretsharing/gnunet-service-secretsharing.c')
-rw-r--r--src/secretsharing/gnunet-service-secretsharing.c50
1 files changed, 18 insertions, 32 deletions
diff --git a/src/secretsharing/gnunet-service-secretsharing.c b/src/secretsharing/gnunet-service-secretsharing.c
index 07426a13b..ce61246d2 100644
--- a/src/secretsharing/gnunet-service-secretsharing.c
+++ b/src/secretsharing/gnunet-service-secretsharing.c
@@ -528,34 +528,6 @@ compute_lagrange_coefficient (gcry_mpi_t coeff, unsigned int j,
528} 528}
529 529
530 530
531/**
532 * Decrypt a ciphertext using Paillier's scheme.
533 *
534 * @param[out] m resulting plaintext
535 * @param c ciphertext to decrypt
536 * @param lambda lambda-component of private key
537 * @param mu mu-component of private key
538 * @param n n-component of public key
539 */
540static void
541paillier_decrypt (gcry_mpi_t m, gcry_mpi_t c, gcry_mpi_t mu, gcry_mpi_t lambda, gcry_mpi_t n)
542{
543 gcry_mpi_t n_square;
544
545 GNUNET_assert (0 != (n_square = gcry_mpi_new (0)));
546
547 gcry_mpi_mul (n_square, n, n);
548 // m = c^lambda mod n^2
549 gcry_mpi_powm (m, c, lambda, n_square);
550 // m = m - 1
551 gcry_mpi_sub_ui (m, m, 1);
552 // m <- m/n
553 gcry_mpi_div (m, NULL, m, n, 0);
554 gcry_mpi_mulm (m, m, mu, n);
555 gcry_mpi_release (n_square);
556}
557
558
559static void 531static void
560decrypt_session_destroy (struct DecryptSession *ds) 532decrypt_session_destroy (struct DecryptSession *ds)
561{ 533{
@@ -990,7 +962,6 @@ keygen_round2_new_element (void *cls,
990 962
991 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got round2 element\n"); 963 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got round2 element\n");
992 964
993
994 pos = (void *) &d[1]; 965 pos = (void *) &d[1];
995 // skip exponentiated pre-shares 966 // skip exponentiated pre-shares
996 pos += GNUNET_SECRETSHARING_ELGAMAL_BITS / 8 * ks->num_peers; 967 pos += GNUNET_SECRETSHARING_ELGAMAL_BITS / 8 * ks->num_peers;
@@ -1007,10 +978,25 @@ keygen_round2_new_element (void *cls,
1007 978
1008 GNUNET_CRYPTO_mpi_scan_unsigned (&c, pos, GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8); 979 GNUNET_CRYPTO_mpi_scan_unsigned (&c, pos, GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8);
1009 980
1010 GNUNET_assert (0 != (info->decrypted_preshare = mpi_new (0))); 981 // FIXME: remove this ugly block once we changed all MPIs to containers
982 {
983 struct GNUNET_CRYPTO_PaillierPublicKey public_key;
984 struct GNUNET_CRYPTO_PaillierPrivateKey private_key;
985 struct GNUNET_CRYPTO_PaillierPlaintext plaintext;
986 struct GNUNET_CRYPTO_PaillierCiphertext ciphertext;
987
988 GNUNET_CRYPTO_mpi_print_unsigned (&public_key, sizeof public_key, ks->info[ks->local_peer_idx].paillier_n);
989 GNUNET_CRYPTO_mpi_print_unsigned (&private_key.lambda, sizeof private_key.lambda, ks->paillier_lambda);
990 GNUNET_CRYPTO_mpi_print_unsigned (&private_key.mu, sizeof private_key.mu, ks->paillier_mu);
991 GNUNET_CRYPTO_mpi_print_unsigned (&ciphertext, sizeof ciphertext, c);
992
993
994 GNUNET_CRYPTO_paillier_decrypt (&private_key, &public_key,
995 &ciphertext, &plaintext);
996 GNUNET_CRYPTO_mpi_scan_unsigned (&info->decrypted_preshare, &plaintext,
997 sizeof plaintext);
998 }
1011 999
1012 paillier_decrypt (info->decrypted_preshare, c, ks->paillier_mu, ks->paillier_lambda,
1013 ks->info[ks->local_peer_idx].paillier_n);
1014 // TODO: validate zero knowledge proofs 1000 // TODO: validate zero knowledge proofs
1015 1001
1016 if (ntohl (d->purpose.size) != 1002 if (ntohl (d->purpose.size) !=