Open
Description
Feature gate: #![feature(random)]
This is a tracking issue for secure random data generation support in std
.
Central to this feature is the RandomSource
trait inside core::random
, which generates random bytes. std
also exposes the platform's secure random number generator via the DefaultRandomSource
type. There is a Distribution<T>
trait for distributions that can sample
random values of a specific type, and a random
function for convenience to allow things like random(1..=6)
.
Public API
// core::random
pub trait RandomSource {
fn fill_bytes(&mut self, bytes: &mut [u8]);
}
pub trait Distribution<T> {
fn sample(&self, source: &mut (impl RandomSource + ?Sized)) -> T;
}
impl Distribution<bool> for RangeFull { ... }
impl Distribution</* all integer types */> for /* all range types */ { ... }
// std::random (additionally)
pub struct DefaultRandomSource;
impl RandomSource for DefaultRandomSource { ... }
pub fn random<T>(dist: &(impl Distribution<T> + ?Sized)) -> T;
Steps / History
- ACP: Simple secure random number generation libs-team#393
- Implementation
- std: implement the
random
feature (alternative version) #129201 - API rework for
Distribution<T>
and newrandom
- std: implement the
- Final comment period (FCP)1
- Stabilization PR
Unresolved Questions
- Naming: the ACP used
gen_bytes
andDefaultRng
, the implementation PR usesfill_bytes
andDefaultRandomSource
(see arguments progen_bytes
and profill_bytes
) - Concerns listed at Simple secure random number generation libs-team#393 (comment) should be addressed