use alloc::vec::Vec;
use crate::CryptoError;
pub trait Mac: Send + Sync {
#[must_use]
fn name(&self) -> &'static str;
#[must_use]
fn key_len(&self) -> usize;
#[must_use]
fn output_len(&self) -> usize;
#[must_use = "result must be checked"]
fn mac(&self, key: &[u8], msg: &[u8], out: &mut [u8]) -> Result<(), CryptoError>;
#[must_use = "result must be checked"]
fn verify(&self, key: &[u8], msg: &[u8], tag: &[u8]) -> Result<(), CryptoError>;
#[must_use = "result must be checked"]
fn mac_to_vec(&self, key: &[u8], msg: &[u8]) -> Result<Vec<u8>, CryptoError> {
let mut out = alloc::vec![0u8; self.output_len()];
self.mac(key, msg, &mut out)?;
Ok(out)
}
}
pub trait StreamingMac: Send {
fn update(&mut self, data: &[u8]);
#[must_use = "result must be checked"]
fn finalize(self, out: &mut [u8]) -> Result<(), CryptoError>;
#[must_use = "result must be checked"]
fn verify(self, expected: &[u8]) -> Result<(), CryptoError>;
}