Home | History | Annotate | Download | only in bn

Lines Matching refs:range

229 /* random number r:  0 <= r < range */
230 static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range)
236 if (range->neg || BN_is_zero(range))
242 n = BN_num_bits(range); /* n > 0 */
244 /* BN_is_bit_set(range, n - 1) always holds */
248 else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3))
250 /* range = 100..._2,
251 * so 3*range (= 11..._2) is exactly one bit longer than range */
255 /* If r < 3*range, use r := r MOD range
256 * (which is either r, r - range, or r - 2*range).
258 * Since 3*range = 11..._2, each iteration succeeds with
260 if (BN_cmp(r ,range) >= 0)
262 if (!BN_sub(r, r, range)) return 0;
263 if (BN_cmp(r, range) >= 0)
264 if (!BN_sub(r, r, range)) return 0;
274 while (BN_cmp(r, range) >= 0);
280 /* range = 11..._2 or range = 101..._2 */
289 while (BN_cmp(r, range) >= 0);
297 int BN_rand_range(BIGNUM *r, const BIGNUM *range)
299 return bn_rand_range(0, r, range);
302 int BN_pseudo_rand_range(BIGNUM *r, const BIGNUM *range)
304 return bn_rand_range(1, r, range);