diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-02-13 20:47:42 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-02-13 20:47:42 +0100 |
| commit | 4c7ed5e0556e7edbf7020b4cac9f301ad6152905 (patch) | |
| tree | 0137498a23b9ae116460c0e9c4b467e8d0e82ed3 /tests | |
| parent | ee4afa42808109efa45a472fd29e4c772550a0fd (diff) | |
| parent | f0045b92173a46e45be1724d28e1a59045c9c3f6 (diff) | |
Merge pull request #2565 from caleb-garrett/hmac
STM32 HMAC
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/stm32/Cargo.toml | 1 | ||||
| -rw-r--r-- | tests/stm32/src/bin/hash.rs | 26 |
2 files changed, 25 insertions, 2 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 cfcf3d976..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>; |
| @@ -38,11 +41,11 @@ async fn main(_spawner: Spawner) { | |||
| 38 | 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"; | 41 | 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 | 42 | ||
| 40 | // Start an SHA-256 digest. | 43 | // Start an SHA-256 digest. |
| 41 | let mut sha256context = hw_hasher.start(Algorithm::SHA256, DataType::Width8); | 44 | let mut sha256context = hw_hasher.start(Algorithm::SHA256, DataType::Width8, None); |
| 42 | hw_hasher.update_blocking(&mut sha256context, test_1); | 45 | hw_hasher.update_blocking(&mut sha256context, test_1); |
| 43 | 46 | ||
| 44 | // Interrupt the SHA-256 digest to compute an SHA-224 digest. | 47 | // Interrupt the SHA-256 digest to compute an SHA-224 digest. |
| 45 | let mut sha224context = hw_hasher.start(Algorithm::SHA224, DataType::Width8); | 48 | let mut sha224context = hw_hasher.start(Algorithm::SHA224, DataType::Width8, None); |
| 46 | hw_hasher.update_blocking(&mut sha224context, test_3); | 49 | hw_hasher.update_blocking(&mut sha224context, test_3); |
| 47 | let mut sha224_digest_buffer: [u8; 28] = [0; 28]; | 50 | let mut sha224_digest_buffer: [u8; 28] = [0; 28]; |
| 48 | let _ = hw_hasher.finish_blocking(sha224context, &mut sha224_digest_buffer); | 51 | let _ = hw_hasher.finish_blocking(sha224context, &mut sha224_digest_buffer); |
| @@ -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 | } |
