From 7ab593ff491129df2e4d438e39a182f3bd96ba47 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 14 Feb 2019 11:00:59 +0100 Subject: mystery solved? --- src/secretsharing/gnunet-service-secretsharing.c | 35 ++++++++++++++++-------- 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/secretsharing/gnunet-service-secretsharing.c b/src/secretsharing/gnunet-service-secretsharing.c index e423217f2..011e79b27 100644 --- a/src/secretsharing/gnunet-service-secretsharing.c +++ b/src/secretsharing/gnunet-service-secretsharing.c @@ -984,7 +984,8 @@ restore_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, static void -get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption *fe, gcry_mpi_t e) +get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption *fe, + gcry_mpi_t *e) { struct { struct GNUNET_CRYPTO_PaillierCiphertext c; @@ -1004,13 +1005,17 @@ get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption GNUNET_CRYPTO_hash (&hash_data, sizeof (hash_data), &e_hash); - GNUNET_CRYPTO_mpi_scan_unsigned (&e, &e_hash, sizeof (struct GNUNET_HashCode)); - gcry_mpi_mod (e, e, elgamal_q); + /* This allocates "e" */ + GNUNET_CRYPTO_mpi_scan_unsigned (e, + &e_hash, + sizeof (struct GNUNET_HashCode)); + gcry_mpi_mod (*e, *e, elgamal_q); } static int -verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, const struct GNUNET_SECRETSHARING_FairEncryption *fe) +verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, + const struct GNUNET_SECRETSHARING_FairEncryption *fe) { gcry_mpi_t n; gcry_mpi_t n_sq; @@ -1028,11 +1033,13 @@ verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, const struct GN GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0))); GNUNET_assert (NULL != (tmp1 = gcry_mpi_new (0))); GNUNET_assert (NULL != (tmp2 = gcry_mpi_new (0))); - GNUNET_assert (NULL != (e = gcry_mpi_new (0))); - get_fair_encryption_challenge (fe, e); + get_fair_encryption_challenge (fe, + &e /* this allocates e */); - GNUNET_CRYPTO_mpi_scan_unsigned (&n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); + GNUNET_CRYPTO_mpi_scan_unsigned (&n, + ppub, + sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); GNUNET_CRYPTO_mpi_scan_unsigned (&t1, fe->t1, GNUNET_CRYPTO_PAILLIER_BITS / 8); GNUNET_CRYPTO_mpi_scan_unsigned (&z, fe->z, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); GNUNET_CRYPTO_mpi_scan_unsigned (&y, fe->h, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); @@ -1101,7 +1108,9 @@ cleanup: * @param[out] fe the fair encryption */ static void -encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, struct GNUNET_SECRETSHARING_FairEncryption *fe) +encrypt_fair (gcry_mpi_t v, + const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, + struct GNUNET_SECRETSHARING_FairEncryption *fe) { gcry_mpi_t r; gcry_mpi_t s; @@ -1116,6 +1125,7 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, gcry_mpi_t Y; gcry_mpi_t G; gcry_mpi_t h; + GNUNET_assert (NULL != (r = gcry_mpi_new (0))); GNUNET_assert (NULL != (s = gcry_mpi_new (0))); GNUNET_assert (NULL != (t1 = gcry_mpi_new (0))); @@ -1123,13 +1133,14 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, GNUNET_assert (NULL != (z = gcry_mpi_new (0))); GNUNET_assert (NULL != (w = gcry_mpi_new (0))); GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0))); - GNUNET_assert (NULL != (e = gcry_mpi_new (0))); GNUNET_assert (NULL != (u = gcry_mpi_new (0))); GNUNET_assert (NULL != (Y = gcry_mpi_new (0))); GNUNET_assert (NULL != (G = gcry_mpi_new (0))); GNUNET_assert (NULL != (h = gcry_mpi_new (0))); - GNUNET_CRYPTO_mpi_scan_unsigned (&n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); + GNUNET_CRYPTO_mpi_scan_unsigned (&n, + ppub, + sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); gcry_mpi_mul (n_sq, n, n); gcry_mpi_add_ui (G, n, 1); @@ -1175,8 +1186,8 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8, t2); - - get_fair_encryption_challenge (fe, e); + get_fair_encryption_challenge (fe, + &e /* This allocates "e" */); // compute z gcry_mpi_mul (z, e, v); -- cgit v1.2.3