use crate::Aes256;
use crate::KeyInit;
use crate::BlockDecrypt;
use crate::get_generic_array;
use crate::OMFE;
pub struct Decryptor {
raw_bytes: Vec<u8>
}
impl From<Vec<u8>> for Decryptor {
fn from(value: Vec<u8>) -> Self {
Self { raw_bytes: value }
}
}
impl<'a, T> From<&'a [T]> for Decryptor
where Vec<u8>: From<&'a [T]> {
fn from(value: &'a [T]) -> Self {
Self { raw_bytes: value.into() }
}
}
impl Decryptor {
pub fn decrypt_with(&mut self, key: &String) -> Vec<u8> {
let (key, mut deref_generic_block) = *get_generic_array(self, key);
let aes_object = Aes256::new(&key);
aes_object.decrypt_blocks(deref_generic_block.as_mut_slice());
let decrypted_bytes = deref_generic_block.concat().into_iter().collect::<Vec<u8>>();
let stich_bytes = decrypted_bytes.into_iter().filter(|x| *x != 0).collect::<Vec<u8>>();
stich_bytes
}
}
impl OMFE for Decryptor {
fn get_raw_bytes(&self) -> Vec<u8> {
self.raw_bytes.to_owned()
}
}