use vck_common::{VckResult, XtsVolumeCipher};
pub struct AesXtsCipher {
inner: XtsVolumeCipher,
}
impl AesXtsCipher {
pub fn new(key1: [u8; 32], key2: [u8; 32]) -> VckResult<Self> {
Ok(Self {
inner: XtsVolumeCipher::new(&key1, &key2)?,
})
}
pub fn decrypt_sector(&self, rel_sector: u64, buf: &mut [u8]) {
self.inner.decrypt_sector(rel_sector, buf);
}
pub fn encrypt_sector(&self, rel_sector: u64, buf: &mut [u8]) {
self.inner.encrypt_sector(rel_sector, buf);
}
pub fn encrypt_area(&self, buf: &mut [u8], sector_size: usize, first_rel_sector: u64) {
self.inner.encrypt_area(buf, sector_size, first_rel_sector);
}
pub fn decrypt_area(&self, buf: &mut [u8], sector_size: usize, first_rel_sector: u64) {
self.inner.decrypt_area(buf, sector_size, first_rel_sector);
}
}
impl vck_common::VolumeCipher for AesXtsCipher {
fn encrypt_sector(&self, rel_sector: u64, sector: &mut [u8]) {
self.inner.encrypt_sector(rel_sector, sector);
}
fn decrypt_sector(&self, rel_sector: u64, sector: &mut [u8]) {
self.inner.decrypt_sector(rel_sector, sector);
}
fn encrypt_area(&self, buf: &mut [u8], sector_size: usize, first_rel_sector: u64) {
self.inner.encrypt_area(buf, sector_size, first_rel_sector);
}
fn decrypt_area(&self, buf: &mut [u8], sector_size: usize, first_rel_sector: u64) {
self.inner.decrypt_area(buf, sector_size, first_rel_sector);
}
}