diff options
author | Christian Grothoff <christian@grothoff.org> | 2019-02-14 11:00:59 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2019-02-14 11:00:59 +0100 |
commit | 7ab593ff491129df2e4d438e39a182f3bd96ba47 (patch) | |
tree | 434ce6ecbf273bb792902bfe79faf4ac2b2daea0 /src/secretsharing/gnunet-service-secretsharing.c | |
parent | b7433c7e45b47dcff9a8c9d1dfc8966c85bb8f14 (diff) | |
download | gnunet-7ab593ff491129df2e4d438e39a182f3bd96ba47.tar.gz gnunet-7ab593ff491129df2e4d438e39a182f3bd96ba47.zip |
mystery solved?
Diffstat (limited to 'src/secretsharing/gnunet-service-secretsharing.c')
-rw-r--r-- | src/secretsharing/gnunet-service-secretsharing.c | 35 |
1 files changed, 23 insertions, 12 deletions
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, | |||
984 | 984 | ||
985 | 985 | ||
986 | static void | 986 | static void |
987 | get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption *fe, gcry_mpi_t e) | 987 | get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption *fe, |
988 | gcry_mpi_t *e) | ||
988 | { | 989 | { |
989 | struct { | 990 | struct { |
990 | struct GNUNET_CRYPTO_PaillierCiphertext c; | 991 | struct GNUNET_CRYPTO_PaillierCiphertext c; |
@@ -1004,13 +1005,17 @@ get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption | |||
1004 | GNUNET_CRYPTO_hash (&hash_data, | 1005 | GNUNET_CRYPTO_hash (&hash_data, |
1005 | sizeof (hash_data), | 1006 | sizeof (hash_data), |
1006 | &e_hash); | 1007 | &e_hash); |
1007 | GNUNET_CRYPTO_mpi_scan_unsigned (&e, &e_hash, sizeof (struct GNUNET_HashCode)); | 1008 | /* This allocates "e" */ |
1008 | gcry_mpi_mod (e, e, elgamal_q); | 1009 | GNUNET_CRYPTO_mpi_scan_unsigned (e, |
1010 | &e_hash, | ||
1011 | sizeof (struct GNUNET_HashCode)); | ||
1012 | gcry_mpi_mod (*e, *e, elgamal_q); | ||
1009 | } | 1013 | } |
1010 | 1014 | ||
1011 | 1015 | ||
1012 | static int | 1016 | static int |
1013 | verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, const struct GNUNET_SECRETSHARING_FairEncryption *fe) | 1017 | verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, |
1018 | const struct GNUNET_SECRETSHARING_FairEncryption *fe) | ||
1014 | { | 1019 | { |
1015 | gcry_mpi_t n; | 1020 | gcry_mpi_t n; |
1016 | gcry_mpi_t n_sq; | 1021 | gcry_mpi_t n_sq; |
@@ -1028,11 +1033,13 @@ verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, const struct GN | |||
1028 | GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0))); | 1033 | GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0))); |
1029 | GNUNET_assert (NULL != (tmp1 = gcry_mpi_new (0))); | 1034 | GNUNET_assert (NULL != (tmp1 = gcry_mpi_new (0))); |
1030 | GNUNET_assert (NULL != (tmp2 = gcry_mpi_new (0))); | 1035 | GNUNET_assert (NULL != (tmp2 = gcry_mpi_new (0))); |
1031 | GNUNET_assert (NULL != (e = gcry_mpi_new (0))); | ||
1032 | 1036 | ||
1033 | get_fair_encryption_challenge (fe, e); | 1037 | get_fair_encryption_challenge (fe, |
1038 | &e /* this allocates e */); | ||
1034 | 1039 | ||
1035 | GNUNET_CRYPTO_mpi_scan_unsigned (&n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); | 1040 | GNUNET_CRYPTO_mpi_scan_unsigned (&n, |
1041 | ppub, | ||
1042 | sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); | ||
1036 | GNUNET_CRYPTO_mpi_scan_unsigned (&t1, fe->t1, GNUNET_CRYPTO_PAILLIER_BITS / 8); | 1043 | GNUNET_CRYPTO_mpi_scan_unsigned (&t1, fe->t1, GNUNET_CRYPTO_PAILLIER_BITS / 8); |
1037 | GNUNET_CRYPTO_mpi_scan_unsigned (&z, fe->z, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); | 1044 | GNUNET_CRYPTO_mpi_scan_unsigned (&z, fe->z, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); |
1038 | GNUNET_CRYPTO_mpi_scan_unsigned (&y, fe->h, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); | 1045 | GNUNET_CRYPTO_mpi_scan_unsigned (&y, fe->h, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8); |
@@ -1101,7 +1108,9 @@ cleanup: | |||
1101 | * @param[out] fe the fair encryption | 1108 | * @param[out] fe the fair encryption |
1102 | */ | 1109 | */ |
1103 | static void | 1110 | static void |
1104 | encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, struct GNUNET_SECRETSHARING_FairEncryption *fe) | 1111 | encrypt_fair (gcry_mpi_t v, |
1112 | const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, | ||
1113 | struct GNUNET_SECRETSHARING_FairEncryption *fe) | ||
1105 | { | 1114 | { |
1106 | gcry_mpi_t r; | 1115 | gcry_mpi_t r; |
1107 | gcry_mpi_t s; | 1116 | gcry_mpi_t s; |
@@ -1116,6 +1125,7 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, | |||
1116 | gcry_mpi_t Y; | 1125 | gcry_mpi_t Y; |
1117 | gcry_mpi_t G; | 1126 | gcry_mpi_t G; |
1118 | gcry_mpi_t h; | 1127 | gcry_mpi_t h; |
1128 | |||
1119 | GNUNET_assert (NULL != (r = gcry_mpi_new (0))); | 1129 | GNUNET_assert (NULL != (r = gcry_mpi_new (0))); |
1120 | GNUNET_assert (NULL != (s = gcry_mpi_new (0))); | 1130 | GNUNET_assert (NULL != (s = gcry_mpi_new (0))); |
1121 | GNUNET_assert (NULL != (t1 = gcry_mpi_new (0))); | 1131 | GNUNET_assert (NULL != (t1 = gcry_mpi_new (0))); |
@@ -1123,13 +1133,14 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, | |||
1123 | GNUNET_assert (NULL != (z = gcry_mpi_new (0))); | 1133 | GNUNET_assert (NULL != (z = gcry_mpi_new (0))); |
1124 | GNUNET_assert (NULL != (w = gcry_mpi_new (0))); | 1134 | GNUNET_assert (NULL != (w = gcry_mpi_new (0))); |
1125 | GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0))); | 1135 | GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0))); |
1126 | GNUNET_assert (NULL != (e = gcry_mpi_new (0))); | ||
1127 | GNUNET_assert (NULL != (u = gcry_mpi_new (0))); | 1136 | GNUNET_assert (NULL != (u = gcry_mpi_new (0))); |
1128 | GNUNET_assert (NULL != (Y = gcry_mpi_new (0))); | 1137 | GNUNET_assert (NULL != (Y = gcry_mpi_new (0))); |
1129 | GNUNET_assert (NULL != (G = gcry_mpi_new (0))); | 1138 | GNUNET_assert (NULL != (G = gcry_mpi_new (0))); |
1130 | GNUNET_assert (NULL != (h = gcry_mpi_new (0))); | 1139 | GNUNET_assert (NULL != (h = gcry_mpi_new (0))); |
1131 | 1140 | ||
1132 | GNUNET_CRYPTO_mpi_scan_unsigned (&n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); | 1141 | GNUNET_CRYPTO_mpi_scan_unsigned (&n, |
1142 | ppub, | ||
1143 | sizeof (struct GNUNET_CRYPTO_PaillierPublicKey)); | ||
1133 | gcry_mpi_mul (n_sq, n, n); | 1144 | gcry_mpi_mul (n_sq, n, n); |
1134 | gcry_mpi_add_ui (G, n, 1); | 1145 | gcry_mpi_add_ui (G, n, 1); |
1135 | 1146 | ||
@@ -1175,8 +1186,8 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, | |||
1175 | GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8, | 1186 | GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8, |
1176 | t2); | 1187 | t2); |
1177 | 1188 | ||
1178 | 1189 | get_fair_encryption_challenge (fe, | |
1179 | get_fair_encryption_challenge (fe, e); | 1190 | &e /* This allocates "e" */); |
1180 | 1191 | ||
1181 | // compute z | 1192 | // compute z |
1182 | gcry_mpi_mul (z, e, v); | 1193 | gcry_mpi_mul (z, e, v); |