diff options
| -rw-r--r-- | embassy-stm32/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/hash/mod.rs | 14 |
2 files changed, 10 insertions, 5 deletions
diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 0f044419e..d2dccaea5 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md | |||
| @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 8 | <!-- next-header --> | 8 | <!-- next-header --> |
| 9 | ## Unreleased - ReleaseDate | 9 | ## Unreleased - ReleaseDate |
| 10 | 10 | ||
| 11 | - feat: Improve blocking hash speed | ||
| 11 | - fix: Fix vrefbuf building with log feature | 12 | - fix: Fix vrefbuf building with log feature |
| 12 | - fix: Fix performing a hash after performing a hmac | 13 | - fix: Fix performing a hash after performing a hmac |
| 13 | - chore: Updated stm32-metapac and stm32-data dependencies | 14 | - chore: Updated stm32-metapac and stm32-data dependencies |
diff --git a/embassy-stm32/src/hash/mod.rs b/embassy-stm32/src/hash/mod.rs index a4c275242..90c06c0d8 100644 --- a/embassy-stm32/src/hash/mod.rs +++ b/embassy-stm32/src/hash/mod.rs | |||
| @@ -353,13 +353,17 @@ impl<'d, T: Instance, M: Mode> Hash<'d, T, M> { | |||
| 353 | let num_valid_bits: u8 = (8 * (input.len() % 4)) as u8; | 353 | let num_valid_bits: u8 = (8 * (input.len() % 4)) as u8; |
| 354 | T::regs().str().modify(|w| w.set_nblw(num_valid_bits)); | 354 | T::regs().str().modify(|w| w.set_nblw(num_valid_bits)); |
| 355 | 355 | ||
| 356 | let mut i = 0; | 356 | let mut chunks = input.chunks_exact(4); |
| 357 | while i < input.len() { | 357 | for chunk in &mut chunks { |
| 358 | T::regs() | ||
| 359 | .din() | ||
| 360 | .write_value(u32::from_ne_bytes(chunk.try_into().unwrap())); | ||
| 361 | } | ||
| 362 | let rem = chunks.remainder(); | ||
| 363 | if !rem.is_empty() { | ||
| 358 | let mut word: [u8; 4] = [0; 4]; | 364 | let mut word: [u8; 4] = [0; 4]; |
| 359 | let copy_idx = min(i + 4, input.len()); | 365 | word[0..rem.len()].copy_from_slice(rem); |
| 360 | word[0..copy_idx - i].copy_from_slice(&input[i..copy_idx]); | ||
| 361 | T::regs().din().write_value(u32::from_ne_bytes(word)); | 366 | T::regs().din().write_value(u32::from_ne_bytes(word)); |
| 362 | i += 4; | ||
| 363 | } | 367 | } |
| 364 | } | 368 | } |
| 365 | 369 | ||
