]> git.proxmox.com Git - proxmox-backup.git/blob - pbs-tools/src/sha.rs
move lru cachers to pbs-tools
[proxmox-backup.git] / pbs-tools / src / sha.rs
1 //! SHA helpers.
2
3 use std::io::Read;
4
5 use anyhow::Error;
6
7 /// Calculate the sha256sum from a readable object.
8 pub fn sha256(file: &mut dyn Read) -> Result<([u8; 32], u64), Error> {
9 let mut hasher = openssl::sha::Sha256::new();
10 let mut buffer = proxmox::tools::vec::undefined(256 * 1024);
11 let mut size: u64 = 0;
12
13 loop {
14 let count = match file.read(&mut buffer) {
15 Ok(0) => break,
16 Ok(count) => count,
17 Err(ref err) if err.kind() == std::io::ErrorKind::Interrupted => {
18 continue;
19 }
20 Err(err) => return Err(err.into()),
21 };
22 size += count as u64;
23 hasher.update(&buffer[..count]);
24 }
25
26 let csum = hasher.finish();
27
28 Ok((csum, size))
29 }