Skip to main content

wae_crypto/
hash.rs

1//! 哈希算法模块
2
3use crate::error::CryptoResult;
4use sha1::Sha1;
5use sha2::{Digest, Sha256, Sha384, Sha512};
6
7/// 哈希算法
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum HashAlgorithm {
10    /// SHA-1
11    SHA1,
12    /// SHA-256
13    SHA256,
14    /// SHA-384
15    SHA384,
16    /// SHA-512
17    SHA512,
18}
19
20/// 计算哈希值
21pub fn hash(algorithm: HashAlgorithm, data: &[u8]) -> CryptoResult<Vec<u8>> {
22    match algorithm {
23        HashAlgorithm::SHA1 => {
24            let mut hasher = Sha1::new();
25            hasher.update(data);
26            Ok(hasher.finalize().to_vec())
27        }
28        HashAlgorithm::SHA256 => {
29            let mut hasher = Sha256::new();
30            hasher.update(data);
31            Ok(hasher.finalize().to_vec())
32        }
33        HashAlgorithm::SHA384 => {
34            let mut hasher = Sha384::new();
35            hasher.update(data);
36            Ok(hasher.finalize().to_vec())
37        }
38        HashAlgorithm::SHA512 => {
39            let mut hasher = Sha512::new();
40            hasher.update(data);
41            Ok(hasher.finalize().to_vec())
42        }
43    }
44}