use crate::rng::SecKeyGen;
use std::{ error::Error, ops::Range };
#[derive(Debug, Eq, PartialEq, Clone)]
pub struct MacInfo {
pub name: &'static str,
pub is_otm: bool,
pub mac_len: usize,
pub mac_len_r: Range<usize>,
pub key_len_r: Range<usize>
}
pub trait Mac: SecKeyGen {
fn info(&self) -> MacInfo;
fn auth(&self, buf: &mut[u8], data: &[u8], key: &[u8])
-> Result<usize, Box<dyn Error + 'static>>;
}
pub trait VarlenMac: Mac {
fn varlen_auth(&self, buf: &mut[u8], data: &[u8], key: &[u8])
-> Result<usize, Box<dyn Error + 'static>>;
}
pub trait StreamingMac: SecKeyGen {
fn info(&self) -> MacInfo;
fn init(&mut self, key: &[u8]) -> Result<(), Box<dyn Error + 'static>>;
fn update(&mut self, data: &[u8]) -> Result<(), Box<dyn Error + 'static>>;
fn finish(&mut self, buf: &mut[u8]) -> Result<usize, Box<dyn Error + 'static>>;
}
pub trait StreamingVarlenMac: StreamingMac {
fn varlen_init(&mut self, mac_len: usize, key: &[u8]) -> Result<(), Box<dyn Error + 'static>>;
}