1#[inline(always)]
13pub fn sha1_digest(data: &[u8]) -> Vec<u8> {
14 #[cfg(feature = "aws-lc-rs")]
15 return aws_lc_rs::digest::digest(&aws_lc_rs::digest::SHA1_FOR_LEGACY_USE_ONLY, data)
16 .as_ref()
17 .to_vec();
18
19 #[cfg(all(feature = "ring", not(feature = "aws-lc-rs")))]
20 return ring::digest::digest(&ring::digest::SHA1_FOR_LEGACY_USE_ONLY, data)
21 .as_ref()
22 .to_vec();
23
24 #[cfg(not(any(feature = "aws-lc-rs", feature = "ring")))]
25 unimplemented!();
26}
27
28#[inline(always)]
29pub fn sha256_digest(data: &[u8]) -> Vec<u8> {
30 #[cfg(feature = "aws-lc-rs")]
31 return aws_lc_rs::digest::digest(&aws_lc_rs::digest::SHA256, data)
32 .as_ref()
33 .to_vec();
34
35 #[cfg(all(feature = "ring", not(feature = "aws-lc-rs")))]
36 return ring::digest::digest(&ring::digest::SHA256, data)
37 .as_ref()
38 .to_vec();
39
40 #[cfg(not(any(feature = "aws-lc-rs", feature = "ring")))]
41 unimplemented!();
42}
43
44pub fn hmac_sha256(key: &[u8], data: &[u8]) -> Vec<u8> {
45 #[cfg(feature = "aws-lc-rs")]
46 {
47 let key = aws_lc_rs::hmac::Key::new(aws_lc_rs::hmac::HMAC_SHA256, key);
48 let tag = aws_lc_rs::hmac::sign(&key, data);
49 tag.as_ref().to_vec()
50 }
51
52 #[cfg(all(feature = "ring", not(feature = "aws-lc-rs")))]
53 {
54 let key = ring::hmac::Key::new(ring::hmac::HMAC_SHA256, key);
55 let tag = ring::hmac::sign(&key, data);
56 tag.as_ref().to_vec()
57 }
58
59 #[cfg(not(any(feature = "aws-lc-rs", feature = "ring")))]
60 unimplemented!();
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn test_sha1_digest() {
69 let data = b"hello world";
70 let digest = sha1_digest(data);
71 let hex_digest = digest
72 .iter()
73 .map(|b| format!("{:02x}", b))
74 .collect::<String>();
75
76 assert_eq!(hex_digest, "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed");
77 }
78}