diff --git a/CHANGELOG.md b/CHANGELOG.md index 01a1bc323e..be1f504f17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ You may also find the [Upgrade Guide](https://rust-random.github.io/book/update. - Fix `OsError::raw_os_error` on UEFI targets by returning `Option` (#1665) - Replace fn `TryRngCore::read_adapter(..) -> RngReadAdapter` with simpler struct `RngReader` (#1669) - Remove fns `SeedableRng::from_os_rng`, `try_from_os_rng` (#1674) +- Remove `Clone` support for `StdRng`, `ReseedingRng` (#1677) ### Additions - Add fns `IndexedRandom::choose_iter`, `choose_weighted_iter` (#1632) diff --git a/src/rngs/reseeding.rs b/src/rngs/reseeding.rs index b1c9687afe..4a9f107edb 100644 --- a/src/rngs/reseeding.rs +++ b/src/rngs/reseeding.rs @@ -21,7 +21,6 @@ use rand_core::{CryptoRng, RngCore, SeedableRng, TryCryptoRng, TryRngCore}; /// `ReseedingRng` reseeds the underlying PRNG in the following cases: /// /// - On a manual call to [`reseed()`]. -/// - After `clone()`, the clone will be reseeded on first use. /// - After the PRNG has generated a configurable number of random bytes. /// /// # When should reseeding after a fixed number of generated bytes be used? @@ -62,9 +61,6 @@ use rand_core::{CryptoRng, RngCore, SeedableRng, TryCryptoRng, TryRngCore}; /// let mut reseeding_rng = ReseedingRng::::new(0, OsRng).unwrap(); /// /// println!("{}", reseeding_rng.random::()); -/// -/// let mut cloned_rng = reseeding_rng.clone(); -/// assert!(reseeding_rng.random::() != cloned_rng.random::()); /// ``` /// /// [`BlockRngCore`]: rand_core::block::BlockRngCore @@ -124,18 +120,6 @@ where } } -impl Clone for ReseedingRng -where - R: BlockRngCore + SeedableRng + Clone, - Rsdr: TryRngCore + Clone, -{ - fn clone(&self) -> ReseedingRng { - // Recreating `BlockRng` seems easier than cloning it and resetting - // the index. - ReseedingRng(BlockRng::new(self.0.core.clone())) - } -} - impl CryptoRng for ReseedingRng where R: BlockRngCore + SeedableRng + CryptoBlockRng, @@ -228,21 +212,6 @@ where } } -impl Clone for ReseedingCore -where - R: BlockRngCore + SeedableRng + Clone, - Rsdr: TryRngCore + Clone, -{ - fn clone(&self) -> ReseedingCore { - ReseedingCore { - inner: self.inner.clone(), - reseeder: self.reseeder.clone(), - threshold: self.threshold, - bytes_until_reseed: 0, // reseed clone on first use - } - } -} - impl CryptoBlockRng for ReseedingCore where R: BlockRngCore + SeedableRng + CryptoBlockRng, @@ -277,19 +246,4 @@ mod test { assert_eq!(buf, seq); } } - - #[test] - #[allow(clippy::redundant_clone)] - fn test_clone_reseeding() { - let zero = const_rng(0); - let mut rng1 = ReseedingRng::::new(32 * 4, zero).unwrap(); - - let first: u32 = rng1.random(); - for _ in 0..10 { - let _ = rng1.random::(); - } - - let mut rng2 = rng1.clone(); - assert_eq!(first, rng2.random::()); - } } diff --git a/src/rngs/std.rs b/src/rngs/std.rs index c84e60e937..3fc3e491e1 100644 --- a/src/rngs/std.rs +++ b/src/rngs/std.rs @@ -66,7 +66,7 @@ use chacha20::ChaCha12Rng as Rng; /// [CSPRNG]: https://rust-random.github.io/book/guide-gen.html#cryptographically-secure-pseudo-random-number-generator /// [rand_chacha]: https://crates.io/crates/rand_chacha /// [rand issue]: https://github.com/rust-random/rand/issues/932 -#[derive(Clone, Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq)] pub struct StdRng(Rng); impl RngCore for StdRng {