use crate::utils::ReadUtils; use aes::cipher::generic_array::GenericArray; use aes::cipher::BlockEncrypt; use std::io::{Read, Result as IoResult}; #[allow(dead_code)] pub struct AesDecoder { io: Io, aes: Aes, counter: u128, block: [u8; 16], cursor: usize, } impl AesDecoder { pub fn new(mut io: Io, aes: Aes) -> IoResult { let block = io.read_arr::<16>()?; let mut decoder = Self { io, aes, counter: 1, block, cursor: 0, }; decoder.decrypt_block(); Ok(decoder) } #[inline] fn decrypt_block(&mut self) { let mut mask = self.counter.to_le_bytes(); self.aes .encrypt_block(GenericArray::from_mut_slice(&mut mask)); for (b, m) in self.block.iter_mut().zip(mask) { *b ^= m } self.counter += 1; } } impl Read for AesDecoder { fn read(&mut self, buf: &mut [u8]) -> IoResult { todo!() } }