Skip to main content

provenant/utils/
hash.rs

1use md5::{Digest as Md5Digest, Md5};
2use sha1::Sha1;
3use sha2::Sha256;
4
5/// Calculate SHA1 hash of content and return it as a hex string
6pub fn calculate_sha1(content: &[u8]) -> String {
7    let digest = Sha1::digest(content);
8    hex::encode(digest)
9}
10
11/// Calculate MD5 hash of content and return it as a hex string
12pub fn calculate_md5(content: &[u8]) -> String {
13    let digest = Md5::digest(content);
14    hex::encode(digest)
15}
16
17/// Calculate SHA256 hash of content and return it as a hex string
18pub fn calculate_sha256(content: &[u8]) -> String {
19    let digest = Sha256::digest(content);
20    hex::encode(digest)
21}
22
23/// Calculate Git blob SHA1 hash of content and return it as a hex string.
24pub fn calculate_sha1_git(content: &[u8]) -> String {
25    let mut payload = Vec::with_capacity(content.len() + 32);
26    payload.extend_from_slice(format!("blob {}\0", content.len()).as_bytes());
27    payload.extend_from_slice(content);
28    calculate_sha1(&payload)
29}