WIP
parent
8e4b2f2597
commit
cf4fb0529c
73
src/main.rs
73
src/main.rs
|
@ -90,6 +90,42 @@ impl Args {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct FileToProcess<N> {
|
||||||
|
hash: [u8; N],
|
||||||
|
name: String,
|
||||||
|
realpath: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FileToProcess {
|
||||||
|
/// From https://github.com/RustCrypto/hashes/blob/master/sha2/examples/sha256sum.rs
|
||||||
|
/// Compute digest value for given `Reader` and print it
|
||||||
|
/// On any error simply return without doing anything
|
||||||
|
fn hash<D: Digest + Default, R: Read>(&self, reader: &mut R, name: &str) {
|
||||||
|
let mut sh = D::default();
|
||||||
|
let mut buffer = [0u8; BUFFER_SIZE];
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let n = match reader.read(&mut buffer) {
|
||||||
|
Ok(n) => n,
|
||||||
|
Err(_) => return,
|
||||||
|
};
|
||||||
|
sh.input(&buffer[..n]);
|
||||||
|
if n == 0 || n < BUFFER_SIZE {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.hash = sh.result();
|
||||||
|
self.print_result(&sh.result(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Print digest result as hex string and name pair
|
||||||
|
fn print_result(&self, sum: &[u8], name: &str) {
|
||||||
|
for byte in sum {
|
||||||
|
print!("{:02x}", byte);
|
||||||
|
}
|
||||||
|
println!("\t{}", name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut t = term::stdout().unwrap();
|
let mut t = term::stdout().unwrap();
|
||||||
|
@ -170,7 +206,12 @@ fn main() {
|
||||||
|
|
||||||
if ft.is_file() {
|
if ft.is_file() {
|
||||||
if let Ok(mut file) = fs::File::open(&entry.path()) {
|
if let Ok(mut file) = fs::File::open(&entry.path()) {
|
||||||
process::<Sha256, _>(&mut file,
|
let a = FileToProcess<32> {
|
||||||
|
name: format!("[{}] - {}",
|
||||||
|
i,
|
||||||
|
entry.path().display()),
|
||||||
|
};
|
||||||
|
a.hash::<Sha256, _>(&mut file,
|
||||||
&format!("[{}] - {}",
|
&format!("[{}] - {}",
|
||||||
i,
|
i,
|
||||||
entry.path().display()));
|
entry.path().display()));
|
||||||
|
@ -183,7 +224,6 @@ fn main() {
|
||||||
// for path in inputs {
|
// for path in inputs {
|
||||||
// let path_str = path.unwrap().path().into_os_string().into_string().unwrap();
|
// let path_str = path.unwrap().path().into_os_string().into_string().unwrap();
|
||||||
// println!("[I] Name: {}", path_str);
|
// println!("[I] Name: {}", path_str);
|
||||||
|
|
||||||
// if let Ok(mut file) = fs::File::open(&path_str) {
|
// if let Ok(mut file) = fs::File::open(&path_str) {
|
||||||
// process::<Sha256, _>(&mut file,
|
// process::<Sha256, _>(&mut file,
|
||||||
// &path_str);
|
// &path_str);
|
||||||
|
@ -194,32 +234,3 @@ fn main() {
|
||||||
t.fg(term::color::CYAN).unwrap();
|
t.fg(term::color::CYAN).unwrap();
|
||||||
println!("Cheers !");
|
println!("Cheers !");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// From https://github.com/RustCrypto/hashes/blob/master/sha2/examples/sha256sum.rs
|
|
||||||
/// Compute digest value for given `Reader` and print it
|
|
||||||
/// On any error simply return without doing anything
|
|
||||||
fn process<D: Digest + Default, R: Read>(reader: &mut R, name: &str) {
|
|
||||||
let mut sh = D::default();
|
|
||||||
let mut buffer = [0u8; BUFFER_SIZE];
|
|
||||||
|
|
||||||
loop {
|
|
||||||
let n = match reader.read(&mut buffer) {
|
|
||||||
Ok(n) => n,
|
|
||||||
Err(_) => return,
|
|
||||||
};
|
|
||||||
sh.input(&buffer[..n]);
|
|
||||||
if n == 0 || n < BUFFER_SIZE {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print_result(&sh.result(), name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Print digest result as hex string and name pair
|
|
||||||
fn print_result(sum: &[u8], name: &str) {
|
|
||||||
for byte in sum {
|
|
||||||
print!("{:02x}", byte);
|
|
||||||
}
|
|
||||||
println!("\t{}", name);
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue