tolerate additional IPv4 address now available for gnunet.org
[oweals/gnunet.git] / src / util / crypto_paillier.c
index d2fd44800b49a700a5772e488ebce8fb90b9805e..622ce81fac0e4b7cb9473a8f50d31e51079d16e7 100644 (file)
@@ -1,21 +1,21 @@
 /*
      This file is part of GNUnet.
-     (C) 2014 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2014 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
  */
 
 /**
@@ -127,16 +127,16 @@ GNUNET_CRYPTO_paillier_encrypt1 (const struct GNUNET_CRYPTO_PaillierPublicKey *p
   gcry_mpi_t tmp2;
   unsigned int highbit;
 
-  // determine how many operations we could allow, if the other number
-  // has the same length.
+  /* determine how many operations we could allow, if the other number
+     has the same length. */
   GNUNET_assert (NULL != (tmp1 = gcry_mpi_set_ui (NULL, 1)));
   GNUNET_assert (NULL != (tmp2 = gcry_mpi_set_ui (NULL, 2)));
   gcry_mpi_mul_2exp (tmp1, tmp1, GNUNET_CRYPTO_PAILLIER_BITS);
 
-  // count number of possible operations
-  // this would be nicer with gcry_mpi_get_nbits, however it does not return
-  // the BITLENGTH of the given MPI's value, but the bits required
-  // to represent the number as MPI.
+  /* count number of possible operations
+     this would be nicer with gcry_mpi_get_nbits, however it does not return
+     the BITLENGTH of the given MPI's value, but the bits required
+     to represent the number as MPI. */
   for (possible_opts = -2; gcry_mpi_cmp (tmp1, m) > 0; possible_opts++)
     gcry_mpi_div (tmp1, NULL, tmp1, tmp2, 0);
   gcry_mpi_release (tmp1);
@@ -144,7 +144,7 @@ GNUNET_CRYPTO_paillier_encrypt1 (const struct GNUNET_CRYPTO_PaillierPublicKey *p
 
   if (possible_opts < 1)
     possible_opts = 0;
-  //soft-cap by caller
+  /* soft-cap by caller */
   possible_opts = (desired_ops < possible_opts)? desired_ops : possible_opts;
 
   ciphertext->remaining_ops = htonl (possible_opts);
@@ -168,19 +168,21 @@ GNUNET_CRYPTO_paillier_encrypt1 (const struct GNUNET_CRYPTO_PaillierPublicKey *p
   GNUNET_assert (0 != (c = gcry_mpi_new (0)));
   gcry_mpi_mul (n_square, n, n);
 
-  // generate r < n (without bias)
+  /* generate r < n (without bias) */
   do {
     gcry_mpi_randomize (r, highbit + 1, GCRY_STRONG_RANDOM);
   }
   while (gcry_mpi_cmp (r, n) >= 0);
 
-  // c = (n+1)^m mod n^2
-  gcry_mpi_add_ui (c, n, 1); // c = n + 1
-  gcry_mpi_powm (c, c, m, n_square); // c = (n+1)^m mod n^2
-  // r <- r^n mod n^2
-  gcry_mpi_powm (r, r, n, n_square); // r = r^n mod n^2
-  // c <- r*c mod n^2
-  gcry_mpi_mulm (c, r, c, n_square); // c = r*c mod n^2
+  /* c = (n+1)^m mod n^2 */
+  /* c = n + 1 */
+  gcry_mpi_add_ui (c, n, 1);
+  /* c = (n+1)^m mod n^2 */
+  gcry_mpi_powm (c, c, m, n_square);
+  /* r <- r^n mod n^2 */
+  gcry_mpi_powm (r, r, n, n_square);
+  /* c <- r*c mod n^2 */
+  gcry_mpi_mulm (c, r, c, n_square);
 
   GNUNET_CRYPTO_mpi_print_unsigned (ciphertext->bits,
                                     sizeof ciphertext->bits,
@@ -267,7 +269,7 @@ GNUNET_CRYPTO_paillier_encrypt (const struct GNUNET_CRYPTO_PaillierPublicKey *pu
   }
 
   /* generate r < n (without bias) */
-  GNUNET_assert (0 != (r = gcry_mpi_new (0)));
+  GNUNET_assert (NULL != (r = gcry_mpi_new (0)));
   do {
     gcry_mpi_randomize (r, highbit + 1, GCRY_STRONG_RANDOM);
   }
@@ -368,9 +370,11 @@ GNUNET_CRYPTO_paillier_decrypt (const struct GNUNET_CRYPTO_PaillierPrivateKey *p
   /* mod = cmum1 / n (mod n) */
   GNUNET_assert (0 != (mod = gcry_mpi_new (0)));
   gcry_mpi_div (mod, NULL, cmum1, n, 0);
+  gcry_mpi_release (cmum1);
 
   /* m = mod * mu mod n */
   gcry_mpi_mulm (m, mod, mu, n);
+  gcry_mpi_release (mod);
   gcry_mpi_release (mu);
   gcry_mpi_release (n);
 }