diff options
| author | Caleb Garrett <[email protected]> | 2024-02-13 10:17:19 -0500 |
|---|---|---|
| committer | Caleb Garrett <[email protected]> | 2024-02-13 10:17:19 -0500 |
| commit | f0045b92173a46e45be1724d28e1a59045c9c3f6 (patch) | |
| tree | 77bbd4683a59e2749b00ffa229937f4c57871fd6 /tests | |
| parent | 14a678fe4542d7c400d0d68b2859c54f2246abe4 (diff) | |
Added HMAC to STM32 hash test.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/stm32/Cargo.toml | 1 | ||||
| -rw-r--r-- | tests/stm32/src/bin/hash.rs | 22 |
2 files changed, 23 insertions, 0 deletions
diff --git a/tests/stm32/Cargo.toml b/tests/stm32/Cargo.toml index fc4420687..d94045737 100644 --- a/tests/stm32/Cargo.toml +++ b/tests/stm32/Cargo.toml | |||
| @@ -76,6 +76,7 @@ portable-atomic = { version = "1.5", features = [] } | |||
| 76 | 76 | ||
| 77 | chrono = { version = "^0.4", default-features = false, optional = true} | 77 | chrono = { version = "^0.4", default-features = false, optional = true} |
| 78 | sha2 = { version = "0.10.8", default-features = false } | 78 | sha2 = { version = "0.10.8", default-features = false } |
| 79 | hmac = "0.12.1" | ||
| 79 | 80 | ||
| 80 | # BEGIN TESTS | 81 | # BEGIN TESTS |
| 81 | # Generated by gen_test.py. DO NOT EDIT. | 82 | # Generated by gen_test.py. DO NOT EDIT. |
diff --git a/tests/stm32/src/bin/hash.rs b/tests/stm32/src/bin/hash.rs index 1b89f46e8..d1cfac5ce 100644 --- a/tests/stm32/src/bin/hash.rs +++ b/tests/stm32/src/bin/hash.rs | |||
| @@ -9,9 +9,12 @@ use embassy_executor::Spawner; | |||
| 9 | use embassy_stm32::dma::NoDma; | 9 | use embassy_stm32::dma::NoDma; |
| 10 | use embassy_stm32::hash::*; | 10 | use embassy_stm32::hash::*; |
| 11 | use embassy_stm32::{bind_interrupts, hash, peripherals}; | 11 | use embassy_stm32::{bind_interrupts, hash, peripherals}; |
| 12 | use hmac::{Hmac, Mac}; | ||
| 12 | use sha2::{Digest, Sha224, Sha256}; | 13 | use sha2::{Digest, Sha224, Sha256}; |
| 13 | use {defmt_rtt as _, panic_probe as _}; | 14 | use {defmt_rtt as _, panic_probe as _}; |
| 14 | 15 | ||
| 16 | type HmacSha256 = Hmac<Sha256>; | ||
| 17 | |||
| 15 | #[cfg(any(feature = "stm32l4a6zg", feature = "stm32h755zi", feature = "stm32h753zi"))] | 18 | #[cfg(any(feature = "stm32l4a6zg", feature = "stm32h755zi", feature = "stm32h753zi"))] |
| 16 | bind_interrupts!(struct Irqs { | 19 | bind_interrupts!(struct Irqs { |
| 17 | HASH_RNG => hash::InterruptHandler<peripherals::HASH>; | 20 | HASH_RNG => hash::InterruptHandler<peripherals::HASH>; |
| @@ -73,6 +76,25 @@ async fn main(_spawner: Spawner) { | |||
| 73 | info!("Software SHA-256 Digest: {:?}", sw_sha224_digest[..]); | 76 | info!("Software SHA-256 Digest: {:?}", sw_sha224_digest[..]); |
| 74 | defmt::assert!(sha224_digest_buffer == sw_sha224_digest[..]); | 77 | defmt::assert!(sha224_digest_buffer == sw_sha224_digest[..]); |
| 75 | 78 | ||
| 79 | let hmac_key: [u8; 64] = [0x55; 64]; | ||
| 80 | |||
| 81 | // Compute HMAC in hardware. | ||
| 82 | let mut sha256hmac_context = hw_hasher.start(Algorithm::SHA256, DataType::Width8, Some(&hmac_key)); | ||
| 83 | hw_hasher.update_blocking(&mut sha256hmac_context, test_1); | ||
| 84 | hw_hasher.update_blocking(&mut sha256hmac_context, test_2); | ||
| 85 | let mut hw_hmac: [u8; 32] = [0; 32]; | ||
| 86 | hw_hasher.finish_blocking(sha256hmac_context, &mut hw_hmac); | ||
| 87 | |||
| 88 | // Compute HMAC in software. | ||
| 89 | let mut sw_mac = HmacSha256::new_from_slice(&hmac_key).unwrap(); | ||
| 90 | sw_mac.update(test_1); | ||
| 91 | sw_mac.update(test_2); | ||
| 92 | let sw_hmac = sw_mac.finalize().into_bytes(); | ||
| 93 | |||
| 94 | info!("Hardware HMAC: {:?}", hw_hmac); | ||
| 95 | info!("Software HMAC: {:?}", sw_hmac[..]); | ||
| 96 | defmt::assert!(hw_hmac == sw_hmac[..]); | ||
| 97 | |||
| 76 | info!("Test OK"); | 98 | info!("Test OK"); |
| 77 | cortex_m::asm::bkpt(); | 99 | cortex_m::asm::bkpt(); |
| 78 | } | 100 | } |
