aboutsummaryrefslogtreecommitdiff
path: root/src/util/crypto_random.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2009-09-08 08:10:18 +0000
committerChristian Grothoff <christian@grothoff.org>2009-09-08 08:10:18 +0000
commitc2017c2ba13736ee1fe4dc9d811d49bee1641ca3 (patch)
tree93ae178521584311eeecdf1e5448a27925bfc681 /src/util/crypto_random.c
parent3da5c316b7b992fcc33328043151cf8cb25bf640 (diff)
downloadgnunet-c2017c2ba13736ee1fe4dc9d811d49bee1641ca3.tar.gz
gnunet-c2017c2ba13736ee1fe4dc9d811d49bee1641ca3.zip
fixes
Diffstat (limited to 'src/util/crypto_random.c')
-rw-r--r--src/util/crypto_random.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/util/crypto_random.c b/src/util/crypto_random.c
index 3f7ac4dd3..0ad1364cb 100644
--- a/src/util/crypto_random.c
+++ b/src/util/crypto_random.c
@@ -32,13 +32,14 @@
32/** 32/**
33 * @return a random value in the interval [0,i[. 33 * @return a random value in the interval [0,i[.
34 */ 34 */
35unsigned int 35uint32_t
36GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, unsigned int i) 36GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode,
37 uint32_t i)
37{ 38{
38#ifdef gcry_fast_random_poll 39#ifdef gcry_fast_random_poll
39 static unsigned int invokeCount; 40 static unsigned int invokeCount;
40#endif 41#endif
41 unsigned int ret; 42 uint32_t ret;
42 43
43 GNUNET_assert (i > 0); 44 GNUNET_assert (i > 0);
44 45
@@ -49,11 +50,9 @@ GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, unsigned int i)
49 if ((invokeCount++ % 256) == 0) 50 if ((invokeCount++ % 256) == 0)
50 gcry_fast_random_poll (); 51 gcry_fast_random_poll ();
51#endif 52#endif
52 ret = rand (); /* in case gcry_randomize fails,
53 we at least get a pseudo-
54 random number this way */
55 gcry_randomize ((unsigned char *) &ret, 53 gcry_randomize ((unsigned char *) &ret,
56 sizeof (unsigned int), GCRY_STRONG_RANDOM); 54 sizeof (uint32_t),
55 GCRY_STRONG_RANDOM);
57 return ret % i; 56 return ret % i;
58 } 57 }
59 else 58 else
@@ -80,10 +79,10 @@ GNUNET_CRYPTO_random_permute (enum GNUNET_CRYPTO_Quality mode, unsigned int n)
80 unsigned int *ret; 79 unsigned int *ret;
81 unsigned int i; 80 unsigned int i;
82 unsigned int tmp; 81 unsigned int tmp;
83 unsigned int x; 82 uint32_t x;
84 83
85 GNUNET_assert (n > 0); 84 GNUNET_assert (n > 0);
86 ret = GNUNET_malloc (n * sizeof (int)); 85 ret = GNUNET_malloc (n * sizeof (unsigned int));
87 for (i = 0; i < n; i++) 86 for (i = 0; i < n; i++)
88 ret[i] = i; 87 ret[i] = i;
89 for (i = 0; i < n; i++) 88 for (i = 0; i < n; i++)
@@ -99,17 +98,18 @@ GNUNET_CRYPTO_random_permute (enum GNUNET_CRYPTO_Quality mode, unsigned int n)
99/** 98/**
100 * Random on unsigned 64-bit values. 99 * Random on unsigned 64-bit values.
101 */ 100 */
102unsigned long long 101uint64_t
103GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode, 102GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode,
104 unsigned long long u) 103 uint64_t u)
105{ 104{
106 unsigned long long ret; 105 uint64_t ret;
107 106
108 GNUNET_assert (u > 0); 107 GNUNET_assert (u > 0);
109 if (mode == GNUNET_CRYPTO_QUALITY_STRONG) 108 if (mode == GNUNET_CRYPTO_QUALITY_STRONG)
110 { 109 {
111 gcry_randomize ((unsigned char *) &ret, 110 gcry_randomize ((unsigned char *) &ret,
112 sizeof (unsigned long long), GCRY_STRONG_RANDOM); 111 sizeof (uint64_t),
112 GCRY_STRONG_RANDOM);
113 return ret % u; 113 return ret % u;
114 } 114 }
115 else 115 else