Skip to main content

thin_fetch/
utils.rs

1use ring::digest::{Context, Digest};
2
3use crate::HashKind;
4
5#[must_use]
6pub fn get_hash(typ: &str, data: &[u8], hash_kind: HashKind) -> Digest {
7    let digest = match hash_kind {
8        HashKind::Sha1 => &ring::digest::SHA1_FOR_LEGACY_USE_ONLY,
9        HashKind::Sha256 => &ring::digest::SHA256,
10    };
11
12    let mut ctx = Context::new(digest);
13    let hdr = format!("{typ} {}", data.len());
14    ctx.update(hdr.as_bytes());
15    ctx.update(b"\x00");
16    ctx.update(data);
17    ctx.finish()
18}
19
20#[must_use]
21pub fn as_hex(data: &[u8]) -> String {
22    use std::fmt::Write as _;
23
24    data.iter().fold(String::new(), |mut acc, cur| {
25        write!(acc, "{cur:02x}").unwrap();
26        acc
27    })
28}