1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use anyhow::Result;
use crypto::mac::Mac;
pub fn sha1(data: &str) -> Result<String> {
digest(data, crypto::sha1::Sha1::new())
}
pub fn sha256(data: &str) -> Result<String> {
digest(data, crypto::sha2::Sha256::new())
}
pub fn sha512(data: &str) -> Result<String> {
digest(data, crypto::sha2::Sha512::new())
}
pub fn md5(data: &str) -> Result<String> {
digest(data, crypto::md5::Md5::new())
}
pub fn hmac_sha1(data: &str, key: &str) -> Result<String> {
digest_hmac(data, key, crypto::sha1::Sha1::new())
}
pub fn hmac_sha256(data: &str, key: &str) -> Result<String> {
digest_hmac(data, key, crypto::sha2::Sha256::new())
}
pub fn hmac_sha512(data: &str, key: &str) -> Result<String> {
digest_hmac(data, key, crypto::sha2::Sha512::new())
}
pub fn sm3(data: &str) -> Result<String> {
use libsm::sm3::hash::Sm3Hash;
Ok(hex::encode(Sm3Hash::new(data.as_bytes()).get_hash()))
}
fn digest<A: crypto::digest::Digest>(data: &str, mut algorithm: A) -> Result<String> {
algorithm.input_str(data);
Ok(algorithm.result_str())
}
fn digest_hmac<A: crypto::digest::Digest>(data: &str, key: &str, algorithm: A) -> Result<String> {
let mut hmac = crypto::hmac::Hmac::new(algorithm, key.as_bytes());
hmac.input(data.as_bytes());
Ok(hex::encode(hmac.result().code()))
}