1use crate::error::CryptoResult;
4use sha1::Sha1;
5use sha2::{Digest, Sha256, Sha384, Sha512};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum HashAlgorithm {
10 SHA1,
12 SHA256,
14 SHA384,
16 SHA512,
18}
19
20pub 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}