#[derive(Debug, Clone, Copy)]
pub struct AesKeys {
pub keys: [u8; 128], pub sizes: AesKeySize, pub count: u8, pub start_area: u8, }
#[derive(Debug, Clone, Copy)]
pub enum AesKeySize {
Key128 = 0b01,
Key192 = 0b10,
Key256 = 0b11,
}
#[derive(Debug, Clone, Copy)]
pub enum AesKey {
Key128([u8; 16]),
Key192([u8; 24]),
Key256([u8; 32]),
}
impl AesKeys {
pub fn create(keys: &[AesKey], sizes: AesKeySize, start_area: u8) -> Self {
let mut aligned = AesKeys {
keys: [0; 128],
sizes,
count: 0,
start_area,
};
let mut offset = 0;
for k in keys.iter() {
match k {
AesKey::Key128(k) => {
aligned.keys[offset..offset + k.len()].copy_from_slice(k);
offset += 128 / 8;
aligned.count += 1;
}
AesKey::Key192(k) => {
aligned.keys[offset..offset + k.len()].copy_from_slice(k);
offset += 128 / 8 * 2;
aligned.count += 2;
}
AesKey::Key256(k) => {
aligned.keys[offset..offset + k.len()].copy_from_slice(k);
offset += 128 / 8 * 2;
aligned.count += 2;
}
}
}
aligned
}
}