tencentcloud_sdk_rs/
encryption.rs

1use hex;
2use hmac::{Hmac, Mac};
3use sha2::Sha256;
4use sha256::digest;
5use std::convert::TryInto;
6
7pub fn hmac_sha256_hex(message: &[u8], key: &[u8]) -> String {
8    type HmacSha256 = Hmac<Sha256>;
9    let mut mac = HmacSha256::new_from_slice(key).expect("HMAC can take key of any size");
10    mac.update(message);
11    let result = mac.finalize();
12    let code_bytes = result.into_bytes();
13    let code_slice = code_bytes.as_slice();
14    hex::encode(code_slice)
15}
16
17pub fn hmac_sha256(message: &[u8], key: &[u8]) -> [u8; 32] {
18    type HmacSha256 = Hmac<Sha256>;
19    let mut mac = HmacSha256::new_from_slice(key).expect("HMAC can take key of any size");
20    mac.update(message);
21    let result = mac.finalize();
22
23    let code_bytes = result.into_bytes();
24    let code_slice = code_bytes.as_slice();
25    code_slice.try_into().expect("slice with incorrect length")
26}
27
28pub fn sha256_hex(str: &str) -> String {
29    let val = digest(str);
30    hex::encode(&val).to_lowercase()
31}