Skip to content

Commit 86a4d01

Browse files
authored
rand_core: 0.6 -> 0.9 (#387)
1 parent 83b92a1 commit 86a4d01

File tree

7 files changed

+57
-56
lines changed

7 files changed

+57
-56
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
### Changed
1212
- Updated minimum `chrono` version to `0.4.23` to satisfy `cargo-audit`.
1313
- Updated defmt from `0.3` to `1`.
14+
- Updated `rand_core` `0.6` to `0.9`.
15+
- `stm32wlxx_hal::rng::Rng` now implements `rand_core::TryRngCore` instead of `rand_core::RngCore`.
16+
- `stm32wlxx_hal::rng::Rng` now implements `rand_core::TryCryptoRng` instead of `rand_core::CryptoRng`.
1417
- Changed the edition from 2021 to 2024.
1518
- Changed minimum supported rust version from 1.60 to 1.85.
1619

Cargo.lock

Lines changed: 18 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

hal/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ nb = "1"
3030
num-traits = { version = "0.2", default-features = false }
3131
num-integer = { version = "0.1", default-features = false }
3232
paste = "1"
33-
rand_core = "0.6"
33+
rand_core = "0.9"
3434
stm32wl = { version = "0.15.1", default-features = false }
3535
void = { version = "1", default-features = false }
3636

hal/src/rng.rs

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
1616
use crate::pac;
1717

18-
use core::num::NonZeroU32;
19-
2018
/// RNG trait abstractions
2119
pub use rand_core;
2220

@@ -35,13 +33,13 @@ pub enum Error {
3533
Clock,
3634
}
3735

38-
impl From<Error> for rand_core::Error {
39-
fn from(e: Error) -> Self {
40-
match e {
41-
// safety: 1 is non-zero
42-
Error::Seed => unsafe { NonZeroU32::new_unchecked(1) }.into(),
43-
// safety: 2 is non-zero
44-
Error::Clock => unsafe { NonZeroU32::new_unchecked(2) }.into(),
36+
impl core::error::Error for Error {}
37+
38+
impl core::fmt::Display for Error {
39+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
40+
match self {
41+
Error::Seed => f.write_str("seed"),
42+
Error::Clock => f.write_str("clock"),
4543
}
4644
}
4745
}
@@ -456,31 +454,20 @@ impl Rng {
456454
}
457455
}
458456

459-
impl rand_core::RngCore for Rng {
460-
/// Not recommended for use, panics upon errors.
461-
fn next_u32(&mut self) -> u32 {
462-
let mut dws: [u32; 1] = [0; 1];
463-
unwrap!(self.try_fill_u32(&mut dws));
464-
dws[0]
465-
}
457+
impl rand_core::TryRngCore for Rng {
458+
type Error = Error;
466459

467-
/// Not recommended for use, panics upon errors.
468-
fn next_u64(&mut self) -> u64 {
469-
let mut dws: [u32; 2] = [0; 2];
470-
unwrap!(self.try_fill_u32(&mut dws));
471-
u64::from(dws[0]) << 32 | u64::from(dws[1])
460+
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
461+
self.try_fill_u8(dest)
472462
}
473463

474-
/// Not recommended for use, panics upon errors.
475-
fn fill_bytes(&mut self, dest: &mut [u8]) {
476-
unwrap!(self.try_fill_u8(dest))
464+
fn try_next_u32(&mut self) -> Result<u32, Self::Error> {
465+
self.try_u32()
477466
}
478467

479-
/// Use this method if using the `RngCore` for `CryptoRng` traits.
480-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> {
481-
self.try_fill_u8(dest)?;
482-
Ok(())
468+
fn try_next_u64(&mut self) -> Result<u64, Self::Error> {
469+
self.try_u64()
483470
}
484471
}
485472

486-
impl rand_core::CryptoRng for Rng {}
473+
impl rand_core::TryCryptoRng for Rng {}

testsuite/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ itertools = { version = "0.14", default-features = false }
9393
nb = "1"
9494
p256 = { version = "0.13", default-features = false, features = ["arithmetic", "ecdsa"] }
9595
panic-probe = { version = "1", features = ["print-defmt" ] }
96-
rand = { version = "0.8", default-features = false }
97-
rand_chacha = { version = "0.3", default-features = false }
96+
rand = { version = "0.9", default-features = false }
97+
rand_chacha = { version = "0.9", default-features = false }
9898
static_assertions = "1"
9999

100100
[dependencies.nucleo-wl55jc-bsp]

testsuite/src/flash.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ use nucleo_wl55jc_bsp::hal::{
99
flash::{self, AlignedAddr, Error, Flash, Page, flash_range},
1010
pac::{self, DWT},
1111
rcc,
12-
rng::{self, Rng, rand_core::RngCore},
12+
rng::{self, Rng, rand_core::SeedableRng as _, rand_core::TryRngCore as _},
1313
};
1414
use panic_probe as _;
15-
use rand::Rng as RngTrait;
15+
use rand::Rng as _;
16+
use rand_chacha::ChaCha20Rng;
1617
use static_assertions as sa;
1718

1819
const FREQ: u32 = 48_000_000;
@@ -53,7 +54,7 @@ mod tests {
5354
// address to use for testing
5455
// incremented by the test after the address is programmed
5556
addr: usize,
56-
rng: Rng,
57+
rng: ChaCha20Rng,
5758
}
5859

5960
#[init]
@@ -71,9 +72,13 @@ mod tests {
7172

7273
let mut rng: Rng = Rng::new(dp.RNG, rng::Clk::Msi, &mut dp.RCC);
7374

75+
let mut seed: [u8; 32] = [0; 32];
76+
unwrap!(rng.try_fill_u8(&mut seed));
77+
let mut cha20: ChaCha20Rng = ChaCha20Rng::from_seed(seed);
78+
7479
// flash only gets 20k program cycles
7580
// change the location each time to prevent wearout of CI boards
76-
let page: u8 = rng.gen_range(64..127);
81+
let page: u8 = cha20.random_range(64..127);
7782
let page: Page = unwrap!(Page::from_index(page));
7883

7984
defmt::info!(
@@ -86,7 +91,7 @@ mod tests {
8691
flash: dp.FLASH,
8792
page,
8893
addr: page.addr(),
89-
rng,
94+
rng: cha20,
9095
}
9196
}
9297

@@ -134,7 +139,7 @@ mod tests {
134139
#[allow(static_mut_refs)]
135140
unsafe {
136141
BUF.iter_mut()
137-
.for_each(|word| *word = ta.rng.gen_range(1..u64::MAX - 1))
142+
.for_each(|word| *word = ta.rng.random_range(1..u64::MAX - 1))
138143
};
139144

140145
let mut flash: Flash = Flash::unlock(&mut ta.flash);
@@ -160,7 +165,7 @@ mod tests {
160165

161166
#[test]
162167
fn standard_program(ta: &mut TestArgs) {
163-
let data: u64 = ta.rng.gen_range(1..u64::MAX - 1);
168+
let data: u64 = ta.rng.random_range(1..u64::MAX - 1);
164169
defmt::assert_ne!(data, u64::MAX);
165170
defmt::assert_ne!(data, 0);
166171

@@ -208,7 +213,7 @@ mod tests {
208213
#[test]
209214
fn program_bytes(ta: &mut TestArgs) {
210215
let mut data: [u8; 17] = [0; 17];
211-
ta.rng.fill_bytes(&mut data);
216+
unwrap!(ta.rng.try_fill_bytes(&mut data));
212217

213218
defmt::trace!("data={}", data);
214219

testsuite/src/rng.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use defmt::unwrap;
55
use defmt_rtt as _; // global logger
66
use nucleo_wl55jc_bsp::hal::{
77
cortex_m, pac, rcc,
8-
rng::{Clk, Rng, rand_core::RngCore},
8+
rng::{Clk, Rng, rand_core::TryRngCore as _},
99
};
1010
use panic_probe as _;
1111

@@ -52,11 +52,11 @@ mod tests {
5252
let mut seed: [u8; 32] = [0; 32];
5353

5454
unwrap!(rng.try_fill_u8(&mut seed));
55-
let mut cha20: ChaCha20Rng = ChaCha20Rng::from_seed([0u8; 32]);
55+
let mut cha20: ChaCha20Rng = ChaCha20Rng::from_seed(seed);
5656
unwrap!(rng.try_fill_u8(&mut seed));
57-
let mut cha12: ChaCha12Rng = ChaCha12Rng::from_seed([0u8; 32]);
57+
let mut cha12: ChaCha12Rng = ChaCha12Rng::from_seed(seed);
5858
unwrap!(rng.try_fill_u8(&mut seed));
59-
let mut cha8: ChaCha8Rng = ChaCha8Rng::from_seed([0u8; 32]);
59+
let mut cha8: ChaCha8Rng = ChaCha8Rng::from_seed(seed);
6060

6161
let mut cp = unwrap!(pac::CorePeripherals::take());
6262
cp.DCB.enable_trace();

0 commit comments

Comments
 (0)