From 410a18b536e73c005285b458eaeb8b6c3a71c1af Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Tue, 12 Aug 2025 17:09:52 +0800 Subject: stm32/hash: Clear HMAC mode bit when hashing Running a hash after a hmac would hang, the CR.MODE bit isn't cleared by INIT. Test it by running the test twice. --- embassy-stm32/CHANGELOG.md | 1 + embassy-stm32/src/hash/mod.rs | 2 ++ 2 files changed, 3 insertions(+) (limited to 'embassy-stm32') diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 0c2d23246..9ad117312 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased - ReleaseDate - fix: Fix vrefbuf building with log feature +- fix: Fix performing a hash after performing a hmac ## 0.3.0 - 2025-08-12 diff --git a/embassy-stm32/src/hash/mod.rs b/embassy-stm32/src/hash/mod.rs index e62151bb5..a4c275242 100644 --- a/embassy-stm32/src/hash/mod.rs +++ b/embassy-stm32/src/hash/mod.rs @@ -198,6 +198,8 @@ impl<'d, T: Instance, M: Mode> Hash<'d, T, M> { if key.len() > 64 { T::regs().cr().modify(|w| w.set_lkey(true)); } + } else { + T::regs().cr().modify(|w| w.set_mode(false)); } T::regs().cr().modify(|w| w.set_init(true)); -- cgit From 37707a7c7c34100e00d803717bcf11836b708380 Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Fri, 15 Aug 2025 08:49:41 +0800 Subject: stm32: Update stm32-metapac For hash algorithm register update. --- embassy-stm32/CHANGELOG.md | 1 + embassy-stm32/Cargo.toml | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'embassy-stm32') diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 9ad117312..0f044419e 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix: Fix vrefbuf building with log feature - fix: Fix performing a hash after performing a hmac +- chore: Updated stm32-metapac and stm32-data dependencies ## 0.3.0 - 2025-08-12 diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index 691ce3b90..45b351acf 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml @@ -80,8 +80,8 @@ cortex-m = "0.7.6" futures-util = { version = "0.3.30", default-features = false } sdio-host = "0.9.0" critical-section = "1.1" -stm32-metapac = { version = "17" } -# stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-9941f338734a2e6c1652267f64b13f7b35d8c9db" } +# stm32-metapac = { version = "17" } +stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-ecb93d42a6cbcd9e09cab74873908a2ca22327f7" } vcell = "0.1.3" nb = "1.0.0" @@ -109,8 +109,8 @@ proptest-state-machine = "0.3.0" proc-macro2 = "1.0.36" quote = "1.0.15" -stm32-metapac = { version = "17", default-features = false, features = ["metadata"]} -#stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-9941f338734a2e6c1652267f64b13f7b35d8c9db", default-features = false, features = ["metadata"] } +# stm32-metapac = { version = "17", default-features = false, features = ["metadata"]} +stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-ecb93d42a6cbcd9e09cab74873908a2ca22327f7", default-features = false, features = ["metadata"] } [features] default = ["rt"] -- cgit From 86e257bc8df5e76c3857644f78650e65447523ad Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Tue, 12 Aug 2025 15:28:52 +0800 Subject: stm32/hash: Improve performance when hashing chunks_exact produces better code --- embassy-stm32/CHANGELOG.md | 1 + embassy-stm32/src/hash/mod.rs | 14 +++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'embassy-stm32') 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 ## Unreleased - ReleaseDate +- feat: Improve blocking hash speed - fix: Fix vrefbuf building with log feature - fix: Fix performing a hash after performing a hmac - 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> { let num_valid_bits: u8 = (8 * (input.len() % 4)) as u8; T::regs().str().modify(|w| w.set_nblw(num_valid_bits)); - let mut i = 0; - while i < input.len() { + let mut chunks = input.chunks_exact(4); + for chunk in &mut chunks { + T::regs() + .din() + .write_value(u32::from_ne_bytes(chunk.try_into().unwrap())); + } + let rem = chunks.remainder(); + if !rem.is_empty() { let mut word: [u8; 4] = [0; 4]; - let copy_idx = min(i + 4, input.len()); - word[0..copy_idx - i].copy_from_slice(&input[i..copy_idx]); + word[0..rem.len()].copy_from_slice(rem); T::regs().din().write_value(u32::from_ne_bytes(word)); - i += 4; } } -- cgit