Skip to content

Commit b0ea343

Browse files
committed
Update to BlockBuffer
1 parent 8353b21 commit b0ea343

File tree

6 files changed

+143
-117
lines changed

6 files changed

+143
-117
lines changed

rand_hc/src/hc128.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
//! The HC-128 random number generator.
1010
1111
use core::fmt;
12-
use rand_core::{CryptoRng, RngCore, SeedableRng, le};
12+
use rand_core::{
13+
CryptoRng, RngCore, SeedableRng,
14+
le::{self, BlockBuffer},
15+
};
1316

1417
/// Number of words required to initialize HC-128.
1518
///
@@ -68,26 +71,24 @@ const SEED_WORDS: usize = 8;
6871
#[derive(Clone, Debug)]
6972
pub struct Hc128Rng {
7073
core: Hc128Core,
71-
buffer: [u32; 16],
74+
buffer: BlockBuffer<u32, 16>,
7275
}
7376

7477
impl RngCore for Hc128Rng {
7578
#[inline]
7679
fn next_u32(&mut self) -> u32 {
77-
let Self { core, buffer } = self;
78-
le::next_word_via_gen_block(buffer, |block| core.next_block(block))
80+
self.buffer.next_word(|block| self.core.next_block(block))
7981
}
8082

8183
#[inline]
8284
fn next_u64(&mut self) -> u64 {
83-
let Self { core, buffer } = self;
84-
le::next_u64_via_gen_block(buffer, |block| core.next_block(block))
85+
self.buffer.next_u64(|block| self.core.next_block(block))
8586
}
8687

8788
#[inline]
8889
fn fill_bytes(&mut self, dst: &mut [u8]) {
89-
let Self { core, buffer } = self;
90-
le::fill_bytes_via_gen_block(dst, buffer, |block| core.next_block(block));
90+
self.buffer
91+
.fill_bytes(dst, |block| self.core.next_block(block));
9192
}
9293
}
9394

@@ -97,7 +98,7 @@ impl SeedableRng for Hc128Rng {
9798
#[inline]
9899
fn from_seed(seed: Self::Seed) -> Self {
99100
let core = Hc128Core::init(le::read_words(&seed));
100-
let buffer = le::new_buffer();
101+
let buffer = Default::default();
101102
Self { core, buffer }
102103
}
103104
}
@@ -106,7 +107,6 @@ impl CryptoRng for Hc128Rng {}
106107

107108
impl PartialEq for Hc128Rng {
108109
fn eq(&self, rhs: &Self) -> bool {
109-
// TODO: fix buffer equality check
110110
self.core == rhs.core && self.buffer == rhs.buffer
111111
}
112112
}

rand_isaac/src/array_serde.rs

Lines changed: 0 additions & 80 deletions
This file was deleted.

rand_isaac/src/isaac.rs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
use crate::{RAND_SIZE, RAND_SIZE_LOG2};
1313
use core::num::Wrapping as w;
1414
use core::{fmt, slice};
15-
use rand_core::{RngCore, SeedableRng, TryRngCore, le};
15+
use rand_core::{
16+
RngCore, SeedableRng, TryRngCore,
17+
le::{BlockBuffer, read_words},
18+
};
1619
#[cfg(feature = "serde")]
1720
use serde::{Deserialize, Serialize};
1821

@@ -89,27 +92,25 @@ type w32 = w<u32>;
8992
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9093
pub struct IsaacRng {
9194
core: IsaacCore,
92-
#[cfg_attr(feature = "serde", serde(with = "crate::array_serde"))]
93-
buffer: [u32; RAND_SIZE],
95+
#[cfg_attr(feature = "serde", serde(with = "crate::serde_impl::buffer"))]
96+
buffer: BlockBuffer<u32, RAND_SIZE>,
9497
}
9598

9699
impl RngCore for IsaacRng {
97100
#[inline]
98101
fn next_u32(&mut self) -> u32 {
99-
let Self { core, buffer } = self;
100-
le::next_word_via_gen_block(buffer, |block| core.next_block(block))
102+
self.buffer.next_word(|block| self.core.next_block(block))
101103
}
102104

103105
#[inline]
104106
fn next_u64(&mut self) -> u64 {
105-
let Self { core, buffer } = self;
106-
le::next_u64_via_gen_block(buffer, |block| core.next_block(block))
107+
self.buffer.next_u64(|block| self.core.next_block(block))
107108
}
108109

109110
#[inline]
110111
fn fill_bytes(&mut self, dst: &mut [u8]) {
111-
let Self { core, buffer } = self;
112-
le::fill_bytes_via_gen_block(dst, buffer, |block| core.next_block(block));
112+
self.buffer
113+
.fill_bytes(dst, |block| self.core.next_block(block));
113114
}
114115
}
115116

@@ -119,7 +120,7 @@ impl SeedableRng for IsaacRng {
119120
#[inline]
120121
fn from_seed(seed: Self::Seed) -> Self {
121122
let core = IsaacCore::from_seed(seed);
122-
let buffer = le::new_buffer();
123+
let buffer = Default::default();
123124
Self { core, buffer }
124125
}
125126

@@ -129,7 +130,7 @@ impl SeedableRng for IsaacRng {
129130
#[inline]
130131
fn seed_from_u64(seed: u64) -> Self {
131132
let core = IsaacCore::seed_from_u64(seed);
132-
let buffer = le::new_buffer();
133+
let buffer = Default::default();
133134
Self { core, buffer }
134135
}
135136

@@ -139,7 +140,7 @@ impl SeedableRng for IsaacRng {
139140
R: RngCore + ?Sized,
140141
{
141142
let core = IsaacCore::from_rng(rng);
142-
let buffer = le::new_buffer();
143+
let buffer = Default::default();
143144
Self { core, buffer }
144145
}
145146

@@ -149,7 +150,7 @@ impl SeedableRng for IsaacRng {
149150
S: TryRngCore + ?Sized,
150151
{
151152
let core = IsaacCore::try_from_rng(rng)?;
152-
let buffer = le::new_buffer();
153+
let buffer = Default::default();
153154
Ok(Self { core, buffer })
154155
}
155156
}
@@ -158,7 +159,7 @@ impl SeedableRng for IsaacRng {
158159
#[derive(Clone)]
159160
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
160161
pub struct IsaacCore {
161-
#[cfg_attr(feature = "serde", serde(with = "crate::array_serde"))]
162+
#[cfg_attr(feature = "serde", serde(with = "crate::serde_impl::array"))]
162163
mem: [w32; RAND_SIZE],
163164
a: w32,
164165
b: w32,
@@ -348,7 +349,7 @@ impl IsaacCore {
348349

349350
impl IsaacCore {
350351
fn from_seed(seed: [u8; 32]) -> Self {
351-
let seed: [u32; 8] = le::read_words(&seed);
352+
let seed: [u32; 8] = read_words(&seed);
352353
// Convert the seed to `Wrapping<u32>` and zero-extend to `RAND_SIZE`.
353354
let mut seed_extended = [w(0); RAND_SIZE];
354355
for (x, y) in seed_extended.iter_mut().zip(seed.iter()) {

rand_isaac/src/isaac64.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use super::{RAND_SIZE, RAND_SIZE_LOG2};
1313
use core::num::Wrapping as w;
1414
use core::{fmt, slice};
15+
use rand_core::le::BlockBuffer;
1516
use rand_core::{RngCore, SeedableRng, TryRngCore, le};
1617
#[cfg(feature = "serde")]
1718
use serde::{Deserialize, Serialize};
@@ -80,8 +81,8 @@ type w64 = w<u64>;
8081
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8182
pub struct Isaac64Rng {
8283
core: Isaac64Core,
83-
#[cfg_attr(feature = "serde", serde(with = "crate::array_serde"))]
84-
buffer: [u64; RAND_SIZE],
84+
#[cfg_attr(feature = "serde", serde(with = "crate::serde_impl::buffer"))]
85+
buffer: BlockBuffer<u64, RAND_SIZE>,
8586
}
8687

8788
impl RngCore for Isaac64Rng {
@@ -92,14 +93,13 @@ impl RngCore for Isaac64Rng {
9293

9394
#[inline]
9495
fn next_u64(&mut self) -> u64 {
95-
let Self { core, buffer } = self;
96-
le::next_word_via_gen_block(buffer, |block| core.next_block(block))
96+
self.buffer.next_word(|block| self.core.next_block(block))
9797
}
9898

9999
#[inline]
100100
fn fill_bytes(&mut self, dst: &mut [u8]) {
101-
let Self { core, buffer } = self;
102-
le::fill_bytes_via_gen_block(dst, buffer, |block| core.next_block(block));
101+
self.buffer
102+
.fill_bytes(dst, |block| self.core.next_block(block));
103103
}
104104
}
105105

@@ -109,7 +109,7 @@ impl SeedableRng for Isaac64Rng {
109109
#[inline]
110110
fn from_seed(seed: Self::Seed) -> Self {
111111
let core = Isaac64Core::from_seed(seed);
112-
let buffer = le::new_buffer();
112+
let buffer = Default::default();
113113
Self { core, buffer }
114114
}
115115

@@ -119,7 +119,7 @@ impl SeedableRng for Isaac64Rng {
119119
#[inline]
120120
fn seed_from_u64(seed: u64) -> Self {
121121
let core = Isaac64Core::seed_from_u64(seed);
122-
let buffer = le::new_buffer();
122+
let buffer = Default::default();
123123
Self { core, buffer }
124124
}
125125

@@ -129,7 +129,7 @@ impl SeedableRng for Isaac64Rng {
129129
R: RngCore + ?Sized,
130130
{
131131
let core = Isaac64Core::from_rng(rng);
132-
let buffer = le::new_buffer();
132+
let buffer = Default::default();
133133
Self { core, buffer }
134134
}
135135

@@ -139,7 +139,7 @@ impl SeedableRng for Isaac64Rng {
139139
S: TryRngCore + ?Sized,
140140
{
141141
let core = Isaac64Core::try_from_rng(rng)?;
142-
let buffer = le::new_buffer();
142+
let buffer = Default::default();
143143
Ok(Self { core, buffer })
144144
}
145145
}
@@ -148,7 +148,7 @@ impl SeedableRng for Isaac64Rng {
148148
#[derive(Clone)]
149149
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
150150
pub struct Isaac64Core {
151-
#[cfg_attr(feature = "serde", serde(with = "crate::array_serde"))]
151+
#[cfg_attr(feature = "serde", serde(with = "crate::serde_impl::array"))]
152152
mem: [w64; RAND_SIZE],
153153
a: w64,
154154
b: w64,

rand_isaac/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub mod isaac;
3131
pub mod isaac64;
3232

3333
#[cfg(feature = "serde")]
34-
mod array_serde;
34+
mod serde_impl;
3535

3636
pub use self::isaac::IsaacRng;
3737
pub use self::isaac64::Isaac64Rng;

0 commit comments

Comments
 (0)