Skip to main content

crypto_bigint/int/
rand.rs

1//! Random number generator support
2
3use rand_core::TryRng;
4
5use crate::{Int, Random, RandomBits, RandomBitsError};
6
7use super::Uint;
8
9impl<const LIMBS: usize> Random for Int<LIMBS> {
10    /// Generate a cryptographically secure random [`Int`].
11    fn try_random_from_rng<R: TryRng + ?Sized>(rng: &mut R) -> Result<Self, R::Error> {
12        Ok(Self(Uint::try_random_from_rng(rng)?))
13    }
14}
15
16impl<const LIMBS: usize> RandomBits for Int<LIMBS> {
17    fn try_random_bits<R: TryRng + ?Sized>(
18        rng: &mut R,
19        bit_length: u32,
20    ) -> Result<Self, RandomBitsError<R::Error>> {
21        Self::try_random_bits_with_precision(rng, bit_length, Self::BITS)
22    }
23
24    fn try_random_bits_with_precision<R: TryRng + ?Sized>(
25        rng: &mut R,
26        bit_length: u32,
27        bits_precision: u32,
28    ) -> Result<Self, RandomBitsError<R::Error>> {
29        Uint::try_random_bits_with_precision(rng, bit_length, bits_precision).map(Self)
30    }
31}