#include "gnunet_crypto_lib.h"
#include <gcrypt.h>
+/**
+ * Create a cryptographically weak pseudo-random number in the interval of 0 to 1.
+ *
+ * @return number between 0 and 1.
+ */
+static double
+weak_random ()
+{
+ return ((double) RANDOM () / RAND_MAX);
+}
+
+
/**
* Produce a random value.
*
* @return a random value in the interval [0,i[.
*/
uint32_t
-GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode,
- uint32_t i)
+GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, uint32_t i)
{
#ifdef gcry_fast_random_poll
static unsigned int invokeCount;
gcry_fast_random_poll ();
#endif
gcry_randomize ((unsigned char *) &ret,
- sizeof (uint32_t),
- GCRY_STRONG_RANDOM);
+ sizeof (uint32_t), GCRY_STRONG_RANDOM);
return ret % i;
}
else
{
- ret = i * ((double) RANDOM () / RAND_MAX);
+ ret = i * weak_random ();
if (ret >= i)
ret = i - 1;
return ret;
* @return random 64-bit number
*/
uint64_t
-GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode,
- uint64_t max)
+GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode, uint64_t max)
{
uint64_t ret;
if (mode == GNUNET_CRYPTO_QUALITY_STRONG)
{
gcry_randomize ((unsigned char *) &ret,
- sizeof (uint64_t),
- GCRY_STRONG_RANDOM);
+ sizeof (uint64_t), GCRY_STRONG_RANDOM);
return ret % max;
}
else
{
- ret = max * ((double) RANDOM () / RAND_MAX);
+ ret = max * weak_random ();
if (ret >= max)
ret = max - 1;
return ret;
/**
* Initializer
*/
-void __attribute__ ((constructor))
-GNUNET_util_random_init()
+void __attribute__ ((constructor)) GNUNET_util_random_init ()
{
SRANDOM (time (NULL));
}