diff options
author | Florian Dold <florian.dold@gmail.com> | 2014-01-21 10:01:07 +0000 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2014-01-21 10:01:07 +0000 |
commit | 2e09e80c283642d7d4cd943a9c3f39790f209210 (patch) | |
tree | 91ed42df4bcfd95d5a45c630d196b645aec0d3d0 /src/secretsharing/gnunet-service-secretsharing.c | |
parent | 029cb201f0aa6c23afc63fb1d80732d43d5c92a3 (diff) | |
download | gnunet-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.c | 50 |
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 | */ | ||
540 | static void | ||
541 | paillier_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 | |||
559 | static void | 531 | static void |
560 | decrypt_session_destroy (struct DecryptSession *ds) | 532 | decrypt_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) != |