Lines Matching defs:range
224 /* random number r: 0 <= r < range */
226 bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
232 if (range->neg || BN_is_zero(range)) {
237 n = BN_num_bits(range); /* n > 0 */
239 /* BN_is_bit_set(range, n - 1) always holds */
243 else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3)) {
244 /* range = 100..._2,
245 * so 3*range (= 11..._2) is exactly one bit longer than range */
249 /* If r < 3*range, use r := r MOD range
250 * (which is either r, r - range, or r - 2*range).
252 * Since 3*range = 11..._2, each iteration succeeds with
254 if (BN_cmp(r, range) >= 0) {
255 if (!BN_sub(r, r, range))
257 if (BN_cmp(r, range) >= 0)
258 if (!BN_sub(r, r, range))
267 } while (BN_cmp(r, range) >= 0);
270 /* range = 11..._2 or range = 101..._2 */
278 } while (BN_cmp(r, range) >= 0);
285 BN_rand_range(BIGNUM *r, const BIGNUM *range)
287 return bn_rand_range(0, r, range);
336 BN_pseudo_rand_range(BIGNUM *r, const BIGNUM *range)
338 return bn_rand_range(1, r, range);