1 use crate::Result;
2 
3 /// A message authentication code.
4 ///
5 /// A MAC is a symmetric signature primitive.
6 pub trait Mac {
7     /// Size of the MAC tag i.e. the signature in bytes.
mac_size(&self) -> usize8     fn mac_size(&self) -> usize;
9 
10     /// Add data to be signed.
update(&mut self, data: &[u8])11     fn update(&mut self, data: &[u8]);
12 
13     /// Produce the MAC tag `digest` for all data fed via `update()`.
14     ///
15     /// Returns `InvalidArgument` if digest is not `Self::mac_size`.
digest(&mut self, digest: &mut [u8]) -> Result<()>16     fn digest(&mut self, digest: &mut [u8]) -> Result<()>;
17 }
18