ring/aead/aes/
fallback.rs1use super::{Block, Counter, EncryptBlock, EncryptCtr32, Iv, KeyBytes, Overlapping, AES_KEY};
16use crate::error;
17
18#[derive(Clone)]
19pub struct Key {
20 inner: AES_KEY,
21}
22
23impl Key {
24 pub(in super::super) fn new(bytes: KeyBytes<'_>) -> Result<Self, error::Unspecified> {
25 let inner = unsafe { set_encrypt_key!(aes_nohw_set_encrypt_key, bytes) }?;
26 Ok(Self { inner })
27 }
28}
29
30impl EncryptBlock for Key {
31 fn encrypt_block(&self, block: Block) -> Block {
32 unsafe { encrypt_block!(aes_nohw_encrypt, block, &self.inner) }
33 }
34
35 fn encrypt_iv_xor_block(&self, iv: Iv, block: Block) -> Block {
36 super::encrypt_iv_xor_block_using_encrypt_block(self, iv, block)
37 }
38}
39
40impl EncryptCtr32 for Key {
41 fn ctr32_encrypt_within(&self, in_out: Overlapping<'_>, ctr: &mut Counter) {
42 unsafe { ctr32_encrypt_blocks!(aes_nohw_ctr32_encrypt_blocks, in_out, &self.inner, ctr) }
43 }
44}