aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util/crypto_ksk.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/util/crypto_ksk.c b/src/util/crypto_ksk.c
index 8fe75f372..687aece16 100644
--- a/src/util/crypto_ksk.c
+++ b/src/util/crypto_ksk.c
@@ -292,13 +292,12 @@ gen_prime (gcry_mpi_t *ptest, unsigned int nbits, GNUNET_HashCode * hc)
292 gcry_mpi_t prime, pminus1, val_2, val_3, result; 292 gcry_mpi_t prime, pminus1, val_2, val_3, result;
293 unsigned int i; 293 unsigned int i;
294 unsigned int step; 294 unsigned int step;
295 unsigned int *mods; 295 unsigned int mods[no_of_small_prime_numbers];
296 gcry_mpi_t tmp; 296 gcry_mpi_t tmp;
297 gcry_mpi_t sp; 297 gcry_mpi_t sp;
298 298
299 GNUNET_assert (nbits >= 16); 299 GNUNET_assert (nbits >= 16);
300 300
301 mods = GNUNET_malloc (no_of_small_prime_numbers * sizeof (*mods));
302 /* Make nbits fit into mpz_t implementation. */ 301 /* Make nbits fit into mpz_t implementation. */
303 val_2 = gcry_mpi_set_ui (NULL, 2); 302 val_2 = gcry_mpi_set_ui (NULL, 2);
304 val_3 = gcry_mpi_set_ui (NULL, 3); 303 val_3 = gcry_mpi_set_ui (NULL, 3);
@@ -306,6 +305,8 @@ gen_prime (gcry_mpi_t *ptest, unsigned int nbits, GNUNET_HashCode * hc)
306 result = gcry_mpi_new(0); 305 result = gcry_mpi_new(0);
307 pminus1 = gcry_mpi_new(0); 306 pminus1 = gcry_mpi_new(0);
308 *ptest = gcry_mpi_new(0); 307 *ptest = gcry_mpi_new(0);
308 tmp = gcry_mpi_new (0);
309 sp = gcry_mpi_new (0);
309 while (1) 310 while (1)
310 { 311 {
311 /* generate a random number */ 312 /* generate a random number */
@@ -319,8 +320,6 @@ gen_prime (gcry_mpi_t *ptest, unsigned int nbits, GNUNET_HashCode * hc)
319 gcry_mpi_set_bit (prime, 0); 320 gcry_mpi_set_bit (prime, 0);
320 321
321 /* Calculate all remainders. */ 322 /* Calculate all remainders. */
322 tmp = gcry_mpi_new (0);
323 sp = gcry_mpi_new (0);
324 for (i = 0; i < no_of_small_prime_numbers; i++) 323 for (i = 0; i < no_of_small_prime_numbers; i++)
325 { 324 {
326 size_t written; 325 size_t written;
@@ -328,11 +327,12 @@ gen_prime (gcry_mpi_t *ptest, unsigned int nbits, GNUNET_HashCode * hc)
328 gcry_mpi_set_ui(sp, small_prime_numbers[i]); 327 gcry_mpi_set_ui(sp, small_prime_numbers[i]);
329 gcry_mpi_div (NULL, tmp, prime, sp, -1); 328 gcry_mpi_div (NULL, tmp, prime, sp, -1);
330 mods[i] = 0; 329 mods[i] = 0;
331 written = sizeof (*mods); 330 written = sizeof (unsigned int);
332 gcry_mpi_print (GCRYMPI_FMT_USG, (unsigned char *) &mods[i], sizeof(*mods), &written, tmp); 331 GNUNET_assert (0 ==
333 } 332 gcry_mpi_print (GCRYMPI_FMT_USG,
334 gcry_mpi_release (sp); 333 (unsigned char*) &mods[i], written, &written,
335 gcry_mpi_release (tmp); 334 tmp));
335 }
336 /* Now try some primes starting with prime. */ 336 /* Now try some primes starting with prime. */
337 for (step = 0; step < 20000; step += 2) 337 for (step = 0; step < 20000; step += 2)
338 { 338 {
@@ -358,12 +358,13 @@ gen_prime (gcry_mpi_t *ptest, unsigned int nbits, GNUNET_HashCode * hc)
358 if ((!gcry_mpi_cmp_ui (result, 1)) && (is_prime (*ptest, 5, hc))) 358 if ((!gcry_mpi_cmp_ui (result, 1)) && (is_prime (*ptest, 5, hc)))
359 { 359 {
360 /* Got it. */ 360 /* Got it. */
361 gcry_mpi_release (sp);
362 gcry_mpi_release (tmp);
361 gcry_mpi_release (val_2); 363 gcry_mpi_release (val_2);
362 gcry_mpi_release (val_3); 364 gcry_mpi_release (val_3);
363 gcry_mpi_release (result); 365 gcry_mpi_release (result);
364 gcry_mpi_release (pminus1); 366 gcry_mpi_release (pminus1);
365 gcry_mpi_release (prime); 367 gcry_mpi_release (prime);
366 GNUNET_free (mods);
367 return; 368 return;
368 } 369 }
369 } 370 }