Home | History | Annotate | Download | only in bn

Lines Matching refs:range

230 /* random number r:  0 <= r < range */
231 static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
237 if (range->neg || BN_is_zero(range))
243 n = BN_num_bits(range); /* n > 0 */
245 /* BN_is_bit_set(range, n - 1) always holds */
249 else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3))
251 /* range = 100..._2,
252 * so 3*range (= 11..._2) is exactly one bit longer than range */
256 /* If r < 3*range, use r := r MOD range
257 * (which is either r, r - range, or r - 2*range).
259 * Since 3*range = 11..._2, each iteration succeeds with
261 if (BN_cmp(r ,range) >= 0)
263 if (!BN_sub(r, r, range)) return 0;
264 if (BN_cmp(r, range) >= 0)
265 if (!BN_sub(r, r, range)) return 0;
275 while (BN_cmp(r, range) >= 0);
281 /* range = 11..._2 or range = 101..._2 */
290 while (BN_cmp(r, range) >= 0);
298 int BN_rand_range(BIGNUM *r, const BIGNUM *range)
300 return bn_rand_range(0, r, range);
303 int BN_pseudo_rand_range(BIGNUM *r, const BIGNUM *range)
305 return bn_rand_range(1, r, range);
309 /* BN_generate_dsa_nonce generates a random number 0 <= out < range. Unlike
314 int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, const BIGNUM* priv,
320 * ensure that we have at least |range| bits of randomness. */
324 /* We generate |range|+8 bytes of random output. */
325 const unsigned num_k_bytes = BN_num_bytes(range) + 8;
366 if (BN_mod(out, out, range, ctx) != 1)