diff options
| author | Matt Johnston <[email protected]> | 2025-08-12 17:09:52 +0800 |
|---|---|---|
| committer | Matt Johnston <[email protected]> | 2025-08-15 17:16:52 +0800 |
| commit | 410a18b536e73c005285b458eaeb8b6c3a71c1af (patch) | |
| tree | 02fa2c644c75513160bc34eef696c335bfd3a370 /tests | |
| parent | bfe4395b3b9792bb79363e2f32a9ab7bf69bb78d (diff) | |
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.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/stm32/src/bin/hash.rs | 17 |
1 files changed, 12 insertions, 5 deletions
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; | |||
| 7 | use common::*; | 7 | use common::*; |
| 8 | use embassy_executor::Spawner; | 8 | use embassy_executor::Spawner; |
| 9 | use embassy_stm32::hash::*; | 9 | use embassy_stm32::hash::*; |
| 10 | use embassy_stm32::mode::Blocking; | ||
| 10 | use embassy_stm32::{bind_interrupts, hash, peripherals}; | 11 | use embassy_stm32::{bind_interrupts, hash, peripherals}; |
| 11 | use hmac::{Hmac, Mac}; | 12 | use hmac::{Hmac, Mac}; |
| 12 | use sha2::{Digest, Sha224, Sha256}; | 13 | use 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] | 36 | fn test_interrupt(hw_hasher: &mut Hash<'_, peripherals::HASH, Blocking>) { |
| 36 | async 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] | ||
| 98 | async 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(); |
