lpc55_hal/peripherals/
hashcrypt.rs1use crate::traits::digest::generic_array::GenericArray;
2
3use crate::{
4 drivers::{aes, Aes, AesKey, Sha1, Sha256},
5 peripherals::syscon,
6 raw,
7 typestates::init_state,
8};
9
10crate::wrap_stateful_peripheral!(Hashcrypt, HASHCRYPT);
11
12impl<State> core::ops::Deref for Hashcrypt<State> {
13 type Target = raw::hashcrypt::RegisterBlock;
14 fn deref(&self) -> &Self::Target {
15 &self.raw
16 }
17}
18
19impl<State> Hashcrypt<State> {
20 pub fn enabled(mut self, syscon: &mut syscon::Syscon) -> Hashcrypt<init_state::Enabled> {
21 syscon.enable_clock(&mut self.raw);
22 syscon.reset(&mut self.raw);
23
24 Hashcrypt {
25 raw: self.raw,
26 _state: init_state::Enabled(()),
27 }
28 }
29
30 pub fn disabled(mut self, syscon: &mut syscon::Syscon) -> Hashcrypt<init_state::Disabled> {
31 syscon.disable_clock(&mut self.raw);
32
33 Hashcrypt {
34 raw: self.raw,
35 _state: init_state::Disabled,
36 }
37 }
38}
39
40impl Hashcrypt<init_state::Enabled> {
41 pub fn sha1(&mut self) -> Sha1<'_> {
43 Sha1::from(self)
44 }
45
46 pub fn sha256(&mut self) -> Sha256<'_> {
48 Sha256::from(self)
49 }
50
51 pub fn aes128<'a>(&'a mut self, key: &[u8; 16]) -> aes::Aes128<'a> {
53 let key = AesKey::User(GenericArray::clone_from_slice(key));
54 Aes::new(self, key, aes::Mode::Encrypt)
55 }
56
57 pub fn aes192<'a>(&'a mut self, key: &[u8; 24]) -> aes::Aes192<'a> {
59 let key = AesKey::User(GenericArray::clone_from_slice(key));
60 Aes::new(self, key, aes::Mode::Encrypt)
61 }
62
63 pub fn aes256<'a>(&'a mut self, key: &[u8; 32]) -> aes::Aes256<'a> {
65 let key = AesKey::User(GenericArray::clone_from_slice(key));
66 Aes::new(self, key, aes::Mode::Encrypt)
67 }
68
69 pub fn puf_aes(&mut self) -> aes::Aes256<'_> {
74 Aes::new(self, AesKey::Puf, aes::Mode::Encrypt)
75 }
76}