Skip to content

Commit

Permalink
Merge pull request #163 from pbs-data-solutions/sha512
Browse files Browse the repository at this point in the history
Add SHA512 option
  • Loading branch information
sanders41 authored Feb 28, 2024
2 parents eeeff5d + 00ee499 commit 1a23b61
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ pub enum ChecksumType {
Md5,
Sha1,
Sha256,
Sha512,
}

impl fmt::Display for ChecksumType {
Expand All @@ -15,6 +16,7 @@ impl fmt::Display for ChecksumType {
ChecksumType::Md5 => write!(f, "md5"),
ChecksumType::Sha1 => write!(f, "sha1"),
ChecksumType::Sha256 => write!(f, "sha256"),
ChecksumType::Sha512 => write!(f, "sha512"),
}
}
}
Expand Down
120 changes: 119 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use clap::Parser;
use colored::*;
use hex::encode;
use sha1::Sha1;
use sha2::{Digest, Sha256};
use sha2::{Digest, Sha256, Sha512};

use crate::cli::{ChecksumType, Cli, Command};

Expand Down Expand Up @@ -75,6 +75,16 @@ fn process_checksum(
bail!("Error opening file");
}
}
ChecksumType::Sha512 => {
let bytes = fs::read(file_path);
if let Ok(b) = bytes {
let mut hasher = Sha512::new();
hasher.update(b);
encode(hasher.finalize())
} else {
bail!("Error opening file");
}
}
ChecksumType::Sha1 => {
let bytes = fs::read(file_path);
if let Ok(b) = bytes {
Expand Down Expand Up @@ -235,6 +245,12 @@ mod tests {
hasher.update(bytes);
encode(hasher.finalize())
}
ChecksumType::Sha512 => {
let bytes = fs::read(file).unwrap();
let mut hasher = Sha512::new();
hasher.update(bytes);
encode(hasher.finalize())
}
ChecksumType::Sha1 => {
let bytes = fs::read(file).unwrap();
let mut hasher = Sha1::new();
Expand Down Expand Up @@ -474,6 +490,108 @@ mod tests {
assert!(result.contains(&checksum_2));
}

#[test]
fn generate_sha512() {
let test_file = fake_file_path();
let base = tempdir().unwrap().path().to_path_buf();
fs::create_dir_all(&base).unwrap();
let output_file = base.join("output.txt");

process_checksum(
&test_file,
&Some(output_file.clone()),
&ChecksumType::Sha512,
false,
false,
)
.unwrap();

assert!(output_file.exists());

let checksum = get_checksum(&test_file, ChecksumType::Sha512);
let result = fs::read_to_string(&output_file).unwrap();

assert!(result.contains(&checksum));
}

#[test]
fn generate_sha512_file_directory_overwrite() {
let test_file_1 = fake_file_path();
let test_file_2 = fake_file_path_2();
let base = tempdir().unwrap().path().to_path_buf();
fs::create_dir_all(&base).unwrap();
let output_file = base.join("output.txt");

process_checksum(
&test_file_1,
&Some(output_file.clone()),
&ChecksumType::Sha512,
true,
false,
)
.unwrap();

assert!(output_file.exists());

let checksum_1 = get_checksum(&test_file_1, ChecksumType::Sha512);
let result_1 = fs::read_to_string(&output_file).unwrap();

assert!(result_1.contains(&checksum_1));

process_checksum(
&test_file_2,
&Some(output_file.clone()),
&ChecksumType::Sha512,
true,
false,
)
.unwrap();

assert!(output_file.exists());

let checksum_2 = get_checksum(&test_file_2, ChecksumType::Sha512);
let result_2 = fs::read_to_string(&output_file).unwrap();

assert!(!result_2.contains(&checksum_1));
assert!(result_2.contains(&checksum_2));
}

#[test]
fn generate_sha512_file_directory_no_overwrite() {
let test_file_1 = fake_file_path();
let test_file_2 = fake_file_path_2();
let base = tempdir().unwrap().path().to_path_buf();
fs::create_dir_all(&base).unwrap();
let output_file = base.join("output.txt");

process_checksum(
&test_file_1,
&Some(output_file.clone()),
&ChecksumType::Sha512,
false,
false,
)
.unwrap();

process_checksum(
&test_file_2,
&Some(output_file.clone()),
&ChecksumType::Sha512,
false,
false,
)
.unwrap();

assert!(output_file.exists());

let checksum_1 = get_checksum(&test_file_1, ChecksumType::Sha512);
let checksum_2 = get_checksum(&test_file_2, ChecksumType::Sha512);
let result = fs::read_to_string(&output_file).unwrap();

assert!(result.contains(&checksum_1));
assert!(result.contains(&checksum_2));
}

#[test]
fn generate_sha1_file() {
let test_file = fake_file_path();
Expand Down

0 comments on commit 1a23b61

Please sign in to comment.