aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/CHANGELOG.md1
-rw-r--r--embassy-stm32/src/hash/mod.rs2
-rw-r--r--tests/stm32/src/bin/hash.rs17
3 files changed, 15 insertions, 5 deletions
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
9## Unreleased - ReleaseDate 9## Unreleased - ReleaseDate
10 10
11- fix: Fix vrefbuf building with log feature 11- fix: Fix vrefbuf building with log feature
12- fix: Fix performing a hash after performing a hmac
12 13
13## 0.3.0 - 2025-08-12 14## 0.3.0 - 2025-08-12
14 15
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> {
198 if key.len() > 64 { 198 if key.len() > 64 {
199 T::regs().cr().modify(|w| w.set_lkey(true)); 199 T::regs().cr().modify(|w| w.set_lkey(true));
200 } 200 }
201 } else {
202 T::regs().cr().modify(|w| w.set_mode(false));
201 } 203 }
202 204
203 T::regs().cr().modify(|w| w.set_init(true)); 205 T::regs().cr().modify(|w| w.set_init(true));
diff --git a/tests/stm32/src/bin/hash.rs b/tests/stm32/src/bin/hash.rs
index 52b84a499..2499f42ed 100644
--- a/tests/stm32/src/bin/hash.rs
+++ b/tests/stm32/src/bin/hash.rs
@@ -7,6 +7,7 @@ mod common;
7use common::*; 7use common::*;
8use embassy_executor::Spawner; 8use embassy_executor::Spawner;
9use embassy_stm32::hash::*; 9use embassy_stm32::hash::*;
10use embassy_stm32::mode::Blocking;
10use embassy_stm32::{bind_interrupts, hash, peripherals}; 11use embassy_stm32::{bind_interrupts, hash, peripherals};
11use hmac::{Hmac, Mac}; 12use hmac::{Hmac, Mac};
12use sha2::{Digest, Sha224, Sha256}; 13use sha2::{Digest, Sha224, Sha256};
@@ -32,11 +33,7 @@ bind_interrupts!(struct Irqs {
32 HASH => hash::InterruptHandler<peripherals::HASH>; 33 HASH => hash::InterruptHandler<peripherals::HASH>;
33}); 34});
34 35
35#[embassy_executor::main] 36fn test_interrupt(hw_hasher: &mut Hash<'_, peripherals::HASH, Blocking>) {
36async fn main(_spawner: Spawner) {
37 let p: embassy_stm32::Peripherals = init();
38 let mut hw_hasher = Hash::new_blocking(p.HASH, Irqs);
39
40 let test_1: &[u8] = b"as;dfhaslfhas;oifvnasd;nifvnhasd;nifvhndlkfghsd;nvfnahssdfgsdafgsasdfasdfasdfasdfasdfghjklmnbvcalskdjghalskdjgfbaslkdjfgbalskdjgbalskdjbdfhsdfhsfghsfghfgh"; 37 let test_1: &[u8] = b"as;dfhaslfhas;oifvnasd;nifvnhasd;nifvhndlkfghsd;nvfnahssdfgsdafgsasdfasdfasdfasdfasdfghjklmnbvcalskdjghalskdjgfbaslkdjfgbalskdjgbalskdjbdfhsdfhsfghsfghfgh";
41 let test_2: &[u8] = b"fdhalksdjfhlasdjkfhalskdjfhgal;skdjfgalskdhfjgalskdjfglafgadfgdfgdafgaadsfgfgdfgadrgsyfthxfgjfhklhjkfgukhulkvhlvhukgfhfsrghzdhxyfufynufyuszeradrtydyytserr"; 38 let test_2: &[u8] = b"fdhalksdjfhlasdjkfhalskdjfhgal;skdjfgalskdhfjgalskdjfglafgadfgdfgdafgaadsfgfgdfgadrgsyfthxfgjfhklhjkfgukhulkvhlvhukgfhfsrghzdhxyfufynufyuszeradrtydyytserr";
42 let test_3: &[u8] = b"a.ewtkluGWEBR.KAJRBTA,RMNRBG,FDMGB.kger.tkasjrbt.akrjtba.krjtba.ktmyna,nmbvtyliasd;gdrtba,sfvs.kgjzshd.gkbsr.tksejb.SDkfBSE.gkfgb>ESkfbSE>gkJSBESE>kbSE>fk"; 39 let test_3: &[u8] = b"a.ewtkluGWEBR.KAJRBTA,RMNRBG,FDMGB.kger.tkasjrbt.akrjtba.krjtba.ktmyna,nmbvtyliasd;gdrtba,sfvs.kgjzshd.gkbsr.tksejb.SDkfBSE.gkfgb>ESkfbSE>gkJSBESE>kbSE>fk";
@@ -95,6 +92,16 @@ async fn main(_spawner: Spawner) {
95 info!("Hardware HMAC: {:?}", hw_hmac); 92 info!("Hardware HMAC: {:?}", hw_hmac);
96 info!("Software HMAC: {:?}", sw_hmac[..]); 93 info!("Software HMAC: {:?}", sw_hmac[..]);
97 defmt::assert!(hw_hmac == sw_hmac[..]); 94 defmt::assert!(hw_hmac == sw_hmac[..]);
95}
96
97#[embassy_executor::main]
98async fn main(_spawner: Spawner) {
99 let p: embassy_stm32::Peripherals = init();
100 let mut hw_hasher = Hash::new_blocking(p.HASH, Irqs);
101
102 test_interrupt(&mut hw_hasher);
103 // Run it a second time to check hash-after-hmac
104 test_interrupt(&mut hw_hasher);
98 105
99 info!("Test OK"); 106 info!("Test OK");
100 cortex_m::asm::bkpt(); 107 cortex_m::asm::bkpt();