diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-05-18 20:32:48 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2025-05-18 20:35:36 +0200 |
| commit | e4fc48764491f8981e4a145a72e9b6e72df8c546 (patch) | |
| tree | cac023f3457123f2fbc7686f2f90414987eae264 /embassy-nrf/src | |
| parent | e8b1ea14c7fb151aa5e296ca8f9724f175bdeaef (diff) | |
Add rand-core v0.9 support.
Co-Authored-By: Aurélien Jacobs <[email protected]>
Diffstat (limited to 'embassy-nrf/src')
| -rw-r--r-- | embassy-nrf/src/rng.rs | 47 |
1 files changed, 34 insertions, 13 deletions
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 | ||
| 172 | impl<'d, T: Instance> Drop for Rng<'d, T> { | 187 | impl<'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 | ||
| 183 | impl<'d, T: Instance> rand_core::RngCore for Rng<'d, T> { | 198 | impl<'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 | ||
| 207 | impl<'d, T: Instance> rand_core::CryptoRng for Rng<'d, T> {} | 214 | impl<'d, T: Instance> rand_core_06::CryptoRng for Rng<'d, T> {} |
| 215 | |||
| 216 | impl<'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 | |||
| 228 | impl<'d, T: Instance> rand_core_09::CryptoRng for Rng<'d, T> {} | ||
| 208 | 229 | ||
| 209 | /// Peripheral static state | 230 | /// Peripheral static state |
| 210 | pub(crate) struct State { | 231 | pub(crate) struct State { |
