oxicrypto_core/traits/
mac.rs1use alloc::vec::Vec;
2
3use crate::CryptoError;
4
5pub trait Mac: Send + Sync {
7 #[must_use]
9 fn name(&self) -> &'static str;
10 #[must_use]
12 fn key_len(&self) -> usize;
13 #[must_use]
15 fn output_len(&self) -> usize;
16 #[must_use = "result must be checked"]
18 fn mac(&self, key: &[u8], msg: &[u8], out: &mut [u8]) -> Result<(), CryptoError>;
19 #[must_use = "result must be checked"]
23 fn verify(&self, key: &[u8], msg: &[u8], tag: &[u8]) -> Result<(), CryptoError>;
24
25 #[must_use = "result must be checked"]
27 fn mac_to_vec(&self, key: &[u8], msg: &[u8]) -> Result<Vec<u8>, CryptoError> {
28 let mut out = alloc::vec![0u8; self.output_len()];
29 self.mac(key, msg, &mut out)?;
30 Ok(out)
31 }
32}
33
34pub trait StreamingMac: Send {
36 fn update(&mut self, data: &[u8]);
38 #[must_use = "result must be checked"]
40 fn finalize(self, out: &mut [u8]) -> Result<(), CryptoError>;
41 #[must_use = "result must be checked"]
44 fn verify(self, expected: &[u8]) -> Result<(), CryptoError>;
45}