pub trait Decrypt {
// Required methods
fn name(&self) -> &str;
fn has_tag(&self) -> bool;
fn has_aad(&self) -> bool;
fn block_size(&self) -> usize;
fn enable_increase_iv(&mut self, enable: bool);
fn iv_len(&self) -> usize;
fn key_len(&self) -> usize;
fn tag_len(&self) -> usize;
fn initialize(&mut self, iv: &[u8], key: &[u8]) -> Result<()>;
fn update(
&mut self,
data: &[u8],
buf: Option<&mut Vec<u8>>
) -> Result<usize>;
fn finalize(&mut self, buf: &mut Vec<u8>) -> Result<usize>;
fn set_authentication_tag(&mut self, data: &[u8]) -> Result<()>;
}