1use md5::{Digest as Md5Digest, Md5};
2use sha1::Sha1;
3use sha2::Sha256;
4
5use crate::models::{GitSha1, Md5Digest as Md5DigestType, Sha1Digest, Sha256Digest};
6
7pub fn calculate_sha1(content: &[u8]) -> Sha1Digest {
8 let digest = Sha1::digest(content);
9 Sha1Digest::from_bytes(digest.into())
10}
11
12pub fn calculate_md5(content: &[u8]) -> Md5DigestType {
13 let digest = Md5::digest(content);
14 Md5DigestType::from_bytes(digest.into())
15}
16
17pub fn calculate_sha256(content: &[u8]) -> Sha256Digest {
18 let digest = Sha256::digest(content);
19 Sha256Digest::from_bytes(digest.into())
20}
21
22pub fn calculate_sha1_git(content: &[u8]) -> GitSha1 {
23 let mut payload = Vec::with_capacity(content.len() + 32);
24 payload.extend_from_slice(format!("blob {}\0", content.len()).as_bytes());
25 payload.extend_from_slice(content);
26 let digest = Sha1::digest(&payload);
27 GitSha1::from_bytes(digest.into())
28}