diff options
author | Christian Grothoff <christian@grothoff.org> | 2009-09-08 08:10:18 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2009-09-08 08:10:18 +0000 |
commit | c2017c2ba13736ee1fe4dc9d811d49bee1641ca3 (patch) | |
tree | 93ae178521584311eeecdf1e5448a27925bfc681 /src/util/crypto_random.c | |
parent | 3da5c316b7b992fcc33328043151cf8cb25bf640 (diff) | |
download | gnunet-c2017c2ba13736ee1fe4dc9d811d49bee1641ca3.tar.gz gnunet-c2017c2ba13736ee1fe4dc9d811d49bee1641ca3.zip |
fixes
Diffstat (limited to 'src/util/crypto_random.c')
-rw-r--r-- | src/util/crypto_random.c | 26 |
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 | */ |
35 | unsigned int | 35 | uint32_t |
36 | GNUNET_CRYPTO_random_u32 (enum GNUNET_CRYPTO_Quality mode, unsigned int i) | 36 | GNUNET_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 | */ |
102 | unsigned long long | 101 | uint64_t |
103 | GNUNET_CRYPTO_random_u64 (enum GNUNET_CRYPTO_Quality mode, | 102 | GNUNET_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 |