diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/libc/net/res_random.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/lib/libc/net/res_random.c b/src/lib/libc/net/res_random.c index c739e4a952..82d81e038a 100644 --- a/src/lib/libc/net/res_random.c +++ b/src/lib/libc/net/res_random.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: res_random.c,v 1.12 2002/06/27 10:14:02 itojun Exp $ */ | 1 | /* $OpenBSD: res_random.c,v 1.13 2003/12/10 07:21:01 itojun Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> | 4 | * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> |
| @@ -111,9 +111,9 @@ pmod(u_int16_t gen, u_int16_t exp, u_int16_t mod) | |||
| 111 | 111 | ||
| 112 | while (u) { | 112 | while (u) { |
| 113 | if (u & 1) | 113 | if (u & 1) |
| 114 | s = (s*t) % mod; | 114 | s = (s * t) % mod; |
| 115 | u >>= 1; | 115 | u >>= 1; |
| 116 | t = (t*t) % mod; | 116 | t = (t * t) % mod; |
| 117 | } | 117 | } |
| 118 | return (s); | 118 | return (s); |
| 119 | } | 119 | } |
| @@ -146,7 +146,7 @@ res_initid() | |||
| 146 | ru_b = (tmp & 0xfffe) | 1; | 146 | ru_b = (tmp & 0xfffe) | 1; |
| 147 | ru_a = pmod(RU_AGEN, (tmp >> 16) & 0xfffe, RU_M); | 147 | ru_a = pmod(RU_AGEN, (tmp >> 16) & 0xfffe, RU_M); |
| 148 | while (ru_b % 3 == 0) | 148 | while (ru_b % 3 == 0) |
| 149 | ru_b += 2; | 149 | ru_b += 2; |
| 150 | 150 | ||
| 151 | tmp = arc4random(); | 151 | tmp = arc4random(); |
| 152 | j = tmp % RU_N; | 152 | j = tmp % RU_N; |
| @@ -159,17 +159,17 @@ res_initid() | |||
| 159 | */ | 159 | */ |
| 160 | 160 | ||
| 161 | while (noprime) { | 161 | while (noprime) { |
| 162 | for (i=0; i<PFAC_N; i++) | 162 | for (i = 0; i < PFAC_N; i++) |
| 163 | if (j%pfacts[i] == 0) | 163 | if (j % pfacts[i] == 0) |
| 164 | break; | 164 | break; |
| 165 | 165 | ||
| 166 | if (i>=PFAC_N) | 166 | if (i >= PFAC_N) |
| 167 | noprime = 0; | 167 | noprime = 0; |
| 168 | else | 168 | else |
| 169 | j = (j+1) % RU_N; | 169 | j = (j + 1) % RU_N; |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | ru_g = pmod(RU_GEN,j,RU_N); | 172 | ru_g = pmod(RU_GEN, j, RU_N); |
| 173 | ru_counter = 0; | 173 | ru_counter = 0; |
| 174 | 174 | ||
| 175 | gettimeofday(&tv, NULL); | 175 | gettimeofday(&tv, NULL); |
| @@ -189,18 +189,22 @@ res_randomid() | |||
| 189 | if (!tmp) | 189 | if (!tmp) |
| 190 | tmp = arc4random(); | 190 | tmp = arc4random(); |
| 191 | 191 | ||
| 192 | #if 0 | ||
| 192 | /* Skip a random number of ids */ | 193 | /* Skip a random number of ids */ |
| 193 | n = tmp & 0x7; tmp = tmp >> 3; | 194 | n = tmp & 0x7; tmp = tmp >> 3; |
| 194 | if (ru_counter + n >= RU_MAX) | 195 | if (ru_counter + n >= RU_MAX) |
| 195 | res_initid(); | 196 | res_initid(); |
| 197 | #else | ||
| 198 | n = 0; | ||
| 199 | #endif | ||
| 196 | 200 | ||
| 197 | for (i=0; i<=n; i++) | 201 | for (i = 0; i <= n; i++) |
| 198 | /* Linear Congruential Generator */ | 202 | /* Linear Congruential Generator */ |
| 199 | ru_x = (ru_a*ru_x + ru_b) % RU_M; | 203 | ru_x = (ru_a * ru_x + ru_b) % RU_M; |
| 200 | 204 | ||
| 201 | ru_counter += i; | 205 | ru_counter += i; |
| 202 | 206 | ||
| 203 | return (ru_seed ^ pmod(ru_g,ru_seed2 ^ ru_x,RU_N)) | ru_msb; | 207 | return (ru_seed ^ pmod(ru_g, ru_seed2 + ru_x, RU_N)) | ru_msb; |
| 204 | } | 208 | } |
| 205 | 209 | ||
| 206 | #if 0 | 210 | #if 0 |
