esp_hal/aes/
esp32cX.rs
1use crate::aes::{Aes, Aes128, Aes256, AesFlavour, Mode, ALIGN_SIZE};
2
3impl Aes<'_> {
4 pub(super) fn init(&mut self) {
5 self.write_dma(false);
6 }
7
8 fn write_dma(&mut self, enable_dma: bool) {
9 self.regs()
10 .dma_enable()
11 .write(|w| w.dma_enable().bit(enable_dma));
12 }
13
14 pub(super) fn write_key(&mut self, key: &[u8]) {
15 debug_assert!(key.len() <= 8 * ALIGN_SIZE);
16 debug_assert_eq!(key.len() % ALIGN_SIZE, 0);
17 self.alignment_helper
18 .volatile_write_regset(self.regs().key(0).as_ptr(), key, 8);
19 }
20
21 pub(super) fn write_block(&mut self, block: &[u8]) {
22 debug_assert_eq!(block.len(), 4 * ALIGN_SIZE);
23 self.alignment_helper
24 .volatile_write_regset(self.regs().text_in(0).as_ptr(), block, 4);
25 }
26
27 pub(super) fn write_mode(&self, mode: Mode) {
28 self.regs().mode().write(|w| unsafe { w.bits(mode as _) });
29 }
30
31 pub(super) fn write_start(&self) {
32 self.regs().trigger().write(|w| w.trigger().set_bit());
33 }
34
35 pub(super) fn read_idle(&mut self) -> bool {
36 self.regs().state().read().state().bits() == 0
37 }
38
39 pub(super) fn read_block(&self, block: &mut [u8]) {
40 debug_assert_eq!(block.len(), 4 * ALIGN_SIZE);
41 self.alignment_helper
42 .volatile_read_regset(self.regs().text_out(0).as_ptr(), block, 4);
43 }
44}
45
46impl AesFlavour for Aes128 {
47 type KeyType<'b> = &'b [u8; 16];
48}
49
50impl AesFlavour for Aes256 {
51 type KeyType<'b> = &'b [u8; 32];
52}