move compute_file_csum to src/tools.rs

This commit is contained in:
Dietmar Maurer
2020-09-17 10:27:04 +02:00
parent dda72456d7
commit 1bc1d81a00
3 changed files with 42 additions and 33 deletions

View File

@ -5,7 +5,7 @@ use std::any::Any;
use std::collections::HashMap;
use std::hash::BuildHasher;
use std::fs::File;
use std::io::{self, BufRead, ErrorKind, Read};
use std::io::{self, BufRead, ErrorKind, Read, Seek, SeekFrom};
use std::os::unix::io::RawFd;
use std::path::Path;
@ -563,3 +563,32 @@ pub fn strip_ascii_whitespace(line: &[u8]) -> &[u8] {
None => &[],
}
}
/// Seeks to start of file and computes the SHA256 hash
pub fn compute_file_csum(file: &mut File) -> Result<([u8; 32], u64), Error> {
file.seek(SeekFrom::Start(0))?;
let mut hasher = openssl::sha::Sha256::new();
let mut buffer = proxmox::tools::vec::undefined(256*1024);
let mut size: u64 = 0;
loop {
let count = match file.read(&mut buffer) {
Ok(count) => count,
Err(ref err) if err.kind() == std::io::ErrorKind::Interrupted => {
continue;
}
Err(err) => return Err(err.into()),
};
if count == 0 {
break;
}
size += count as u64;
hasher.update(&buffer[..count]);
}
let csum = hasher.finish();
Ok((csum, size))
}