miden_crypto/rand/mod.rs
1//! Pseudo-random element generation.
2
3use rand::RngCore;
4pub use winter_crypto::{DefaultRandomCoin as WinterRandomCoin, RandomCoin, RandomCoinError};
5pub use winter_utils::Randomizable;
6
7use crate::{Felt, FieldElement, Word, ZERO};
8
9mod rpo;
10mod rpx;
11pub use rpo::RpoRandomCoin;
12pub use rpx::RpxRandomCoin;
13
14#[cfg(any(test, feature = "std"))]
15pub mod test_utils;
16
17/// Pseudo-random element generator.
18///
19/// An instance can be used to draw, uniformly at random, base field elements as well as [Word]s.
20pub trait FeltRng: RngCore {
21 /// Draw, uniformly at random, a base field element.
22 fn draw_element(&mut self) -> Felt;
23
24 /// Draw, uniformly at random, a [Word].
25 fn draw_word(&mut self) -> Word;
26}