Skip to content

Commit 226ff16

Browse files
continued work on saes
1 parent 6b3adae commit 226ff16

4 files changed

Lines changed: 24 additions & 8 deletions

File tree

capsules/extra/src/test/aes256.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ impl<'a, A: AES<'a, AES256> + AESCBC> TestAES256Cbc<'a, A> {
207207

208208
let (start, stop) = chunk_range(step);
209209
run_crypt(self.aes, in_place, &self.source, &self.data, start, stop);
210+
debug!("ran");
210211
}
211212
}
212213

chips/stm32u5xx/src/chip.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,10 @@ impl<'a> Stm32u5xxDefaultPeripherals<'a> {
7777
self.rcc.enable_gpioc();
7878
self.rcc.enable_usart1();
7979
self.rcc.enable_aes();
80+
self.rcc.enable_trng();
81+
self.trng.init();
8082
self.rcc.enable_saes();
8183
self.rcc.enable_syscfg();
82-
self.rcc.enable_trng();
8384
self.rcc.set_usart1_source_pclk();
8485
// Link DMA to USART1
8586
let usart1_channel_tx = self.dma1.request_channel();
@@ -99,7 +100,6 @@ impl<'a> Stm32u5xxDefaultPeripherals<'a> {
99100
if let (Some(tx), Some(rx)) = (usart1_channel_tx, usart1_channel_rx) {
100101
usart::Usart::set_dma(self.usart1, self.dma1, tx, rx);
101102
}
102-
self.trng.init();
103103
}
104104
}
105105

chips/stm32u5xx/src/entropy.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,9 @@ impl<'a> Trng<'a> {
138138
.nscr
139139
.modify(NSCR::NSCFG.val(NOISE_SOURCE_CONTROL_CONFIG));
140140
self.registers.cr.modify(CR::CONFIGLOCK::SET);
141-
self.registers.cr.modify(CR::CONDRST::CLEAR);
141+
self.registers
142+
.cr
143+
.modify(CR::CONDRST::CLEAR + CR::RNGEN::SET);
142144
self.register();
143145
}
144146

@@ -148,9 +150,7 @@ impl<'a> Trng<'a> {
148150
.client
149151
.map(|client| client.entropy_available(&mut TrngIter(self), Ok(())));
150152
match response {
151-
Some(Continue::Done) | None => {
152-
self.registers.cr.modify(CR::RNGEN::CLEAR);
153-
}
153+
Some(Continue::Done) | None => {}
154154
_ => {
155155
self.entropy_needed.set(true);
156156
self.deferred_call.set();
@@ -162,7 +162,6 @@ impl<'a> Trng<'a> {
162162
impl<'a> Entropy32<'a> for Trng<'a> {
163163
fn get(&self) -> Result<(), kernel::ErrorCode> {
164164
let regs = self.registers;
165-
regs.cr.modify(CR::RNGEN::SET);
166165
if regs.sr.any_matching_bits_set(SR::CECS::SET + SR::SECS::SET) {
167166
return Err(kernel::ErrorCode::FAIL);
168167
}

chips/stm32u5xx/src/saes.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ impl<'a, K: AESKeySize> Saes<'a, K> {
327327
buf[..slice.len()].copy_from_slice(slice);
328328

329329
for chunk in buf.chunks_exact(4) {
330-
let word = u32::from_le_bytes(chunk.try_into().unwrap());
330+
let word = u32::from_be_bytes(chunk.try_into().unwrap());
331331
self.registers.dinr.set(word);
332332
}
333333
}
@@ -365,6 +365,9 @@ impl<'a, K: AESKeySize> Saes<'a, K> {
365365
self.registers.cr.modify(CR::EN::SET);
366366
}
367367
self.write_input(ctx);
368+
debug!("wrote input");
369+
debug!("CR: {:02x?}", self.registers.cr.get());
370+
debug!("SR: {:02x?}", self.registers.sr.get());
368371
}
369372

370373
fn start_key_wrapping(&self, ctx: CryptoContext, key_id: KeyID) {
@@ -441,6 +444,9 @@ impl<'a, K: AESKeySize> Saes<'a, K> {
441444
}
442445

443446
pub fn handle_interrupt(&self) {
447+
debug!("INTERRUPT");
448+
debug!("CR: {:02x?}", self.registers.cr.get());
449+
debug!("SR: {:02x?}", self.registers.sr.get());
444450
if self.registers.isr.is_set(ISR::CCF) {
445451
debug!("CCF");
446452
self.registers.icr.write(ICR::CCF::SET);
@@ -471,6 +477,7 @@ impl<'a, K: AESKeySize> kernel::hil::symmetric_encryption::AES<'a, K> for Saes<'
471477
self.registers.cr.modify(CR::DATATYPE::Byte);
472478
self.state.set(State::Idle);
473479
self.enable_interrupts();
480+
debug!("ENABLE");
474481
debug!("CR: {:02x?}", self.registers.cr.get());
475482
debug!("SR: {:02x?}", self.registers.sr.get());
476483
}
@@ -487,6 +494,9 @@ impl<'a, K: AESKeySize> kernel::hil::symmetric_encryption::AES<'a, K> for Saes<'
487494
}
488495

489496
fn set_key(&self, key: AESKey) -> Result<(), ErrorCode> {
497+
debug!("KEY");
498+
debug!("CR: {:02x?}", self.registers.cr.get());
499+
debug!("SR: {:02x?}", self.registers.sr.get());
490500
if self.registers.cr.any_matching_bits_set(CR::EN::SET)
491501
|| self.registers.sr.any_matching_bits_set(SR::BUSY::SET)
492502
{
@@ -532,6 +542,9 @@ impl<'a, K: AESKeySize> kernel::hil::symmetric_encryption::AES<'a, K> for Saes<'
532542
}
533543

534544
fn set_iv(&self, iv: &[u8]) -> Result<(), ErrorCode> {
545+
debug!("IV");
546+
debug!("CR: {:02x?}", self.registers.cr.get());
547+
debug!("SR: {:02x?}", self.registers.sr.get());
535548
if iv.len() != AES_IV_SIZE {
536549
return Err(ErrorCode::INVAL);
537550
}
@@ -565,6 +578,9 @@ impl<'a, K: AESKeySize> kernel::hil::symmetric_encryption::AES<'a, K> for Saes<'
565578
Option<&'static mut [u8]>,
566579
&'static mut [u8],
567580
)> {
581+
debug!("CRYPT");
582+
debug!("CR: {:02x?}", self.registers.cr.get());
583+
debug!("SR: {:02x?}", self.registers.sr.get());
568584
let state = self.state.get();
569585

570586
// Hardware busy check

0 commit comments

Comments
 (0)