ssh/algorithm/mac/
mod.rs

1use ring::hmac::Tag;
2
3mod hmac_sha1;
4mod hmac_sha2;
5use hmac_sha1::HMacSha1;
6use hmac_sha2::{HmacSha2_256, HmacSha2_512};
7
8pub(crate) trait Mac: Send + Sync {
9    fn sign(&self, ik: &[u8], sequence_num: u32, buf: &[u8]) -> Tag;
10    fn new() -> Self
11    where
12        Self: Sized;
13    fn bsize(&self) -> usize;
14}
15
16pub(crate) fn from(s: &super::Mac) -> Box<dyn Mac> {
17    match s {
18        super::Mac::HmacSha1 => Box::new(HMacSha1::new()),
19        super::Mac::HmacSha2_256 => Box::new(HmacSha2_256::new()),
20        super::Mac::HmacSha2_512 => Box::new(HmacSha2_512::new()),
21    }
22}
23
24pub(crate) struct MacNone {}
25
26impl Mac for MacNone {
27    fn sign(&self, _ik: &[u8], _sequence_num: u32, _buf: &[u8]) -> Tag {
28        unreachable!()
29    }
30    fn new() -> Self
31    where
32        Self: Sized,
33    {
34        Self {}
35    }
36    fn bsize(&self) -> usize {
37        unreachable!()
38    }
39}