redox/src/sha256.rs
2022-03-27 11:29:00 +02:00

46 lines
968 B
Rust

use std::{
fs,
io::{Read, Result},
path::Path,
time::Duration,
};
use sha2::{Digest, Sha256};
use crate::progress_bar::{ProgressBar, ProgressBarRead};
pub fn sha256<R: Read>(r: &mut R) -> Result<String> {
let mut hasher = Sha256::default();
let mut data = vec![0; 4 * 1024 * 1024];
loop {
let count = r.read(&mut data)?;
if count == 0 {
break;
}
hasher.update(&data[..count]);
}
Ok(format!("{:x}", hasher.finalize()))
}
pub fn sha256_progress<P: AsRef<Path>>(path: P) -> Result<String> {
let len = fs::metadata(&path)?.len();
let mut f = fs::File::open(&path)?;
let mut pb = ProgressBar::new(len);
pb.message("sha256: ");
pb.set_max_refresh_rate(Some(Duration::new(1, 0)));
pb.set_units(pbr::Units::Bytes);
let res = {
let mut pbr = ProgressBarRead::new(&mut pb, &mut f);
sha256(&mut pbr)
};
pb.finish_println("");
res
}