1use hmac::{Hmac, Mac};
2use sha1::Sha1;
3use sha2::Sha256;
4use sha1::Digest;
5
6type Hmac256 = Hmac<Sha256>;
7type Hmac1 = Hmac<Sha1>;
8use std::fmt::Write;
9pub fn sha256(key: &str, data: &str) -> String {
11 let mut mac = Hmac256::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
12 mac.update(data.as_bytes());
13 let result = mac.finalize();
14 let code = result.into_bytes();
15 let mut contents = String::with_capacity(code.len() * 2); for &byte in &code {
18 write!(&mut contents, "{byte:02x}").expect("Unable to write");
19 }
20 contents
21}
22pub fn sha256_u8(key: &str, data: &str) -> Vec<u8> {
24 let mut mac = Hmac256::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
25 mac.update(data.as_bytes());
26 let result = mac.finalize();
27 let code = result.into_bytes();
28 code.to_vec()
29}
30pub fn sha1(key: &str, data: &str) -> String {
32 let mut mac = Hmac1::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
33 mac.update(data.as_bytes());
34 let result = mac.finalize();
35 let code = result.into_bytes();
36 let mut contents = String::with_capacity(code.len() * 2); for &byte in &code {
38 write!(&mut contents, "{byte:02x}").expect("Unable to write");
39 }
40 contents
41}
42
43pub fn sha1_code(key: &str, data: &str) -> Vec<u8> {
45 let mut mac = Hmac1::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
46 mac.update(data.as_bytes());
47 let result = mac.finalize();
48 let code = result.into_bytes();
49 code.to_vec()
50}
51
52pub fn sha1_u8(key: &str, data: &str) -> Vec<u8> {
53 let mut mac = Hmac1::new_from_slice(key.as_bytes()).expect("HMAC can take key of any size");
54 mac.update(data.as_bytes());
55 let result = mac.finalize();
56 let code = result.into_bytes();
57 code.to_vec()
58}
59
60pub fn sha_1(data: &str) -> Vec<u8> {
61 let mut hasher = Sha1::new();
62 hasher.update(data);
63 let result = hasher.finalize();
64 result.as_slice().to_vec()
65}