static int no_of_small_prime_numbers = DIM (small_prime_numbers) - 1;
- static unsigned int
- get_nbits (mpz_t a)
-{
- return mpz_sizeinbase (a, 2);
-}
-
-/**
- * Count the number of zerobits at the low end of A
- */
static unsigned int
-get_trailing_zeros (mpz_t a)
+get_nbits (mpz_t a)
{
- unsigned int count = 0;
- unsigned int nbits = get_nbits (a);
-
- while ((mpz_tstbit (a, count)) && (count < nbits))
- count++;
- return count;
+ return mpz_sizeinbase (a, 2);
}
-/**
- * Set bit N of A. and clear all bits above
- */
-static void
-set_highbit (mpz_t a, unsigned int n)
-{
- unsigned int nbits;
-
- nbits = get_nbits (a);
- while (nbits > n)
- mpz_clrbit (a, nbits--);
- mpz_setbit (a, n);
-}
static void
mpz_randomize (mpz_t n, unsigned int nbits, GNUNET_HashCode * rnd)
{
GNUNET_HashCode *tmp;
+ int bits_per_hc = sizeof (GNUNET_HashCode) * 8;
int cnt;
int i;
- cnt = (nbits / sizeof (GNUNET_HashCode) / 8) + 1;
+ GNUNET_assert (nbits > 0);
+ cnt = (nbits + bits_per_hc - 1) / bits_per_hc;
tmp = GNUNET_malloc (sizeof (GNUNET_HashCode) * cnt);
tmp[0] = *rnd;
{
GNUNET_CRYPTO_hash (&tmp[i], sizeof (GNUNET_HashCode), &tmp[i + 1]);
}
- *rnd = tmp[cnt - 1];
+ GNUNET_CRYPTO_hash (&tmp[i], sizeof (GNUNET_HashCode), rnd);
mpz_import (n, cnt * sizeof (GNUNET_HashCode) / sizeof (unsigned int),
1, sizeof (unsigned int), 1, 0, tmp);
GNUNET_free (tmp);
i = get_nbits (n);
while (i > nbits)
- mpz_clrbit (n, i--);
+ mpz_clrbit (n, --i);
}
/**
/* Find q and k, so that n = 1 + 2^k * q . */
mpz_init_set (q, nminus1);
- k = get_trailing_zeros (q);
+ k = mpz_scan1 (q, 0);
mpz_tdiv_q_2exp (q, q, k);
for (i = 0; i < steps; i++)
}
else
{
- mpz_randomize (x, nbits, hc);
-
- /* Make sure that the number is smaller than the prime and
- keep the randomness of the high bit. */
- if (mpz_tstbit (x, nbits - 2))
- {
- set_highbit (x, nbits - 2); /* Clear all higher bits. */
- }
- else
- {
- set_highbit (x, nbits - 2);
- mpz_clrbit (x, nbits - 2);
- }
+ mpz_randomize (x, nbits - 1, hc);
GNUNET_assert (mpz_cmp (x, nminus1) < 0 && mpz_cmp_ui (x, 1) > 0);
}
mpz_powm (y, x, q, n);
generating a secret prime we are most probably doing that
for RSA, to make sure that the modulus does have the
requested key size we set the 2 high order bits. */
- set_highbit (prime, nbits - 1);
+ mpz_setbit (prime, nbits - 1);
mpz_setbit (prime, nbits - 2);
mpz_setbit (prime, 0);
* blocked gathering entropy.
*/
static void
-entropy_generator (void *cls,
- const char *what,
- int printchar,
- int current,
- int total)
+entropy_generator (void *cls,
+ const char *what, int printchar, int current, int total)
{
unsigned long code;
enum GNUNET_OS_ProcessStatusType type;
if (current == total)
{
if (genproc != 0)
- {
- if (0 != PLIBC_KILL(genproc, SIGTERM))
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "kill");
- GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (genproc));
- genproc = 0;
- }
+ {
+ if (0 != PLIBC_KILL (genproc, SIGTERM))
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "kill");
+ GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (genproc));
+ genproc = 0;
+ }
return;
}
if (genproc != 0)
{
- ret = GNUNET_OS_process_status (genproc,
- &type,
- &code);
+ ret = GNUNET_OS_process_status (genproc, &type, &code);
if (ret == GNUNET_NO)
- return; /* still running */
+ return; /* still running */
if (ret == GNUNET_SYSERR)
- {
- GNUNET_break (0);
- return;
- }
- if (0 != PLIBC_KILL(genproc, SIGTERM))
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
- "kill");
+ {
+ GNUNET_break (0);
+ return;
+ }
+ if (0 != PLIBC_KILL (genproc, SIGTERM))
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "kill");
GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (genproc));
- genproc = 0;
+ genproc = 0;
}
- GNUNET_log(GNUNET_ERROR_TYPE_INFO,
- _("Starting `%s' process to generate entropy\n"),
- "find");
- genproc = GNUNET_OS_start_process ("sh",
- "sh",
- "-c",
- "exec find / -mount -type f -exec cp {} /dev/null \\; 2>/dev/null",
- NULL);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ _("Starting `%s' process to generate entropy\n"), "find");
+ genproc = GNUNET_OS_start_process (NULL, NULL, "sh",
+ "sh",
+ "-c",
+ "exec find / -mount -type f -exec cp {} /dev/null \\; 2>/dev/null",
+ NULL);
}
-static void
+static void
killfind ()
{
if (genproc != 0)
{
- PLIBC_KILL(genproc, SIGKILL);
+ PLIBC_KILL (genproc, SIGKILL);
genproc = 0;
}
}