1use sha2::{Sha256, Sha512, Digest};
2use blake3;
3use crc32fast::Hasher as Crc32Hasher;
4
5pub struct HashTool;
6
7impl HashTool {
8 pub fn new() -> Self {
9 Self
10 }
11
12 pub fn sha256(&self, data: &[u8]) -> String {
13 let mut hasher = Sha256::new();
14 hasher.update(data);
15 hex::encode(hasher.finalize())
16 }
17
18 pub fn sha512(&self, data: &[u8]) -> String {
19 let mut hasher = Sha512::new();
20 hasher.update(data);
21 hex::encode(hasher.finalize())
22 }
23
24 pub fn blake3(&self, data: &[u8]) -> String {
25 let hash = blake3::hash(data);
26 hash.to_hex().to_string()
27 }
28
29 pub fn crc32(&self, data: &[u8]) -> u32 {
30 let mut hasher = Crc32Hasher::new();
31 hasher.update(data);
32 hasher.finalize()
33 }
34}
35
36impl Default for HashTool {
37 fn default() -> Self {
38 Self::new()
39 }
40}