aboutsummaryrefslogtreecommitdiff
path: root/embassy-nrf
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-05-18 20:32:48 +0200
committerDario Nieuwenhuis <[email protected]>2025-05-18 20:35:36 +0200
commite4fc48764491f8981e4a145a72e9b6e72df8c546 (patch)
treecac023f3457123f2fbc7686f2f90414987eae264 /embassy-nrf
parente8b1ea14c7fb151aa5e296ca8f9724f175bdeaef (diff)
Add rand-core v0.9 support.
Co-Authored-By: AurĂ©lien Jacobs <[email protected]>
Diffstat (limited to 'embassy-nrf')
-rw-r--r--embassy-nrf/Cargo.toml4
-rw-r--r--embassy-nrf/src/rng.rs47
2 files changed, 37 insertions, 14 deletions
diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml
index 6ca099599..e4e143c65 100644
--- a/embassy-nrf/Cargo.toml
+++ b/embassy-nrf/Cargo.toml
@@ -154,6 +154,9 @@ embedded-hal-async = { version = "1.0" }
154embedded-io = { version = "0.6.0" } 154embedded-io = { version = "0.6.0" }
155embedded-io-async = { version = "0.6.1" } 155embedded-io-async = { version = "0.6.1" }
156 156
157rand-core-06 = { package = "rand_core", version = "0.6" }
158rand-core-09 = { package = "rand_core", version = "0.9" }
159
157nrf-pac = "0.1.0" 160nrf-pac = "0.1.0"
158 161
159defmt = { version = "0.3", optional = true } 162defmt = { version = "0.3", optional = true }
@@ -162,7 +165,6 @@ log = { version = "0.4.14", optional = true }
162cortex-m-rt = ">=0.6.15,<0.8" 165cortex-m-rt = ">=0.6.15,<0.8"
163cortex-m = "0.7.6" 166cortex-m = "0.7.6"
164critical-section = "1.1" 167critical-section = "1.1"
165rand_core = "0.6.3"
166fixed = "1.10.0" 168fixed = "1.10.0"
167embedded-storage = "0.3.1" 169embedded-storage = "0.3.1"
168embedded-storage-async = "0.4.1" 170embedded-storage-async = "0.4.1"
diff --git a/embassy-nrf/src/rng.rs b/embassy-nrf/src/rng.rs
index e75ffda00..7e42dc938 100644
--- a/embassy-nrf/src/rng.rs
+++ b/embassy-nrf/src/rng.rs
@@ -167,6 +167,21 @@ impl<'d, T: Instance> Rng<'d, T> {
167 167
168 self.stop(); 168 self.stop();
169 } 169 }
170
171 /// Generate a random u32
172 pub fn blocking_next_u32(&mut self) -> u32 {
173 let mut bytes = [0; 4];
174 self.blocking_fill_bytes(&mut bytes);
175 // We don't care about the endianness, so just use the native one.
176 u32::from_ne_bytes(bytes)
177 }
178
179 /// Generate a random u64
180 pub fn blocking_next_u64(&mut self) -> u64 {
181 let mut bytes = [0; 8];
182 self.blocking_fill_bytes(&mut bytes);
183 u64::from_ne_bytes(bytes)
184 }
170} 185}
171 186
172impl<'d, T: Instance> Drop for Rng<'d, T> { 187impl<'d, T: Instance> Drop for Rng<'d, T> {
@@ -180,31 +195,37 @@ impl<'d, T: Instance> Drop for Rng<'d, T> {
180 } 195 }
181} 196}
182 197
183impl<'d, T: Instance> rand_core::RngCore for Rng<'d, T> { 198impl<'d, T: Instance> rand_core_06::RngCore for Rng<'d, T> {
184 fn fill_bytes(&mut self, dest: &mut [u8]) { 199 fn fill_bytes(&mut self, dest: &mut [u8]) {
185 self.blocking_fill_bytes(dest); 200 self.blocking_fill_bytes(dest);
186 } 201 }
187
188 fn next_u32(&mut self) -> u32 { 202 fn next_u32(&mut self) -> u32 {
189 let mut bytes = [0; 4]; 203 self.blocking_next_u32()
190 self.blocking_fill_bytes(&mut bytes);
191 // We don't care about the endianness, so just use the native one.
192 u32::from_ne_bytes(bytes)
193 } 204 }
194
195 fn next_u64(&mut self) -> u64 { 205 fn next_u64(&mut self) -> u64 {
196 let mut bytes = [0; 8]; 206 self.blocking_next_u64()
197 self.blocking_fill_bytes(&mut bytes);
198 u64::from_ne_bytes(bytes)
199 } 207 }
200 208 fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core_06::Error> {
201 fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> {
202 self.blocking_fill_bytes(dest); 209 self.blocking_fill_bytes(dest);
203 Ok(()) 210 Ok(())
204 } 211 }
205} 212}
206 213
207impl<'d, T: Instance> rand_core::CryptoRng for Rng<'d, T> {} 214impl<'d, T: Instance> rand_core_06::CryptoRng for Rng<'d, T> {}
215
216impl<'d, T: Instance> rand_core_09::RngCore for Rng<'d, T> {
217 fn fill_bytes(&mut self, dest: &mut [u8]) {
218 self.blocking_fill_bytes(dest);
219 }
220 fn next_u32(&mut self) -> u32 {
221 self.blocking_next_u32()
222 }
223 fn next_u64(&mut self) -> u64 {
224 self.blocking_next_u64()
225 }
226}
227
228impl<'d, T: Instance> rand_core_09::CryptoRng for Rng<'d, T> {}
208 229
209/// Peripheral static state 230/// Peripheral static state
210pub(crate) struct State { 231pub(crate) struct State {