diff --git a/src/hashers.rs b/src/hashers.rs index cfc3e1c..58dde13 100644 --- a/src/hashers.rs +++ b/src/hashers.rs @@ -1,35 +1,25 @@ -use ascon_hash::AsconHash256; +use ascon_hash::{AsconHash256, ExtendableOutput}; use belt_hash::BeltHash; use blake2::{Blake2b512, Blake2s256}; use blake3::Hasher as Blake3; use fsb::{Fsb160, Fsb224, Fsb256, Fsb384, Fsb512}; use gost94::Gost94CryptoPro; use groestl::{Groestl224, Groestl256, Groestl384, Groestl512}; -use jh::{ - // digest::{core_api::CoreWrapper, KeyInit}, - Jh224, - Jh256, - Jh384, - Jh512, -}; -// use k12::KangarooTwelve; -// use kupyna::{Kupyna224, Kupyna256, Kupyna384, Kupyna512}; +use jh::{Jh224, Jh256, Jh384, Jh512}; +use k12::KangarooTwelve; +// use kupyna::{Digest as _, Kupyna224, Kupyna256, Kupyna384, Kupyna512}; use md2::Md2; use md4::Md4; use md5::Md5; use ripemd::{Ripemd128, Ripemd160, Ripemd256, Ripemd320}; use sha1::Sha1; -use sha2::{Digest, Sha224, Sha256, Sha384, Sha512}; -// use sha3::{Sha3_224, Sha3_256, Sha3_384, Sha3_512, Shake128, Shake256}; -use sha3::{Sha3_224, Sha3_256, Sha3_384, Sha3_512}; +use sha2::{Digest as _, Sha224, Sha256, Sha384, Sha512}; +use sha3::{Sha3_224, Sha3_256, Sha3_384, Sha3_512, Shake128, Shake256}; use shabal::{Shabal192, Shabal224, Shabal256, Shabal384, Shabal512}; -// use skein::{ -// digest::{core_api::CoreWrapper, KeyInit}, -// Skein1024, Skein256, Skein512, -// }; +use skein::{consts::U32, Skein1024, Skein256, Skein512}; use sm3::Sm3; -use std::fs::File; use std::io; +use std::{fs::File, io::Read}; use streebog::{Streebog256, Streebog512}; use tiger::Tiger; use whirlpool::Whirlpool; @@ -104,19 +94,27 @@ pub fn hash_sha3_512(mut file: File) -> String { return format!("{:x}", hasher.finalize()); } -// pub fn hash_shake128(mut file: File) -> String { -// let mut hasher: CoreWrapper<_> = Shake128::new(); -// _ = io::copy(&mut file, &mut hasher); +pub fn hash_shake128(mut file: File) -> String { + let mut hasher = Shake128::default(); + _ = io::copy(&mut file, &mut hasher); -// return format!("{:x}", hasher.finalize()); -// } + let mut result = String::new(); + let mut finalized = hasher.finalize_xof(); + _ = finalized.read_to_string(&mut result); -// pub fn hash_shake256(mut file: File) -> String { -// let mut hasher = Shake256::new(); -// _ = io::copy(&mut file, &mut hasher); + return format!("{}", result); +} -// return format!("{:x}", hasher.finalize()); -// } +pub fn hash_shake256(mut file: File) -> String { + let mut hasher = Shake256::default(); + _ = io::copy(&mut file, &mut hasher); + + let mut result = String::new(); + let mut finalized = hasher.finalize_xof(); + _ = finalized.read_to_string(&mut result); + + return format!("{}", result); +} pub fn hash_shabal192(mut file: File) -> String { let mut hasher = Shabal192::new(); @@ -153,26 +151,26 @@ pub fn hash_shabal512(mut file: File) -> String { return format!("{:x}", hasher.finalize()); } -// pub fn hash_skein256(mut file: File) -> String { -// let mut hasher = Skein256::new(); -// _ = io::copy(&mut file, &mut hasher); +pub fn hash_skein256(mut file: File) -> String { + let mut hasher = Skein256::::new(); + _ = io::copy(&mut file, &mut hasher); -// return format!("{:x}", hasher.finalize()); -// } + return format!("{:x}", hasher.finalize()); +} -// pub fn hash_skein512(mut file: File) -> String { -// let mut hasher = Skein512::new(); -// _ = io::copy(&mut file, &mut hasher); +pub fn hash_skein512(mut file: File) -> String { + let mut hasher = Skein512::::new(); + _ = io::copy(&mut file, &mut hasher); -// return format!("{:x}", hasher.finalize()); -// } + return format!("{:x}", hasher.finalize()); +} -// pub fn hash_skein1024(mut file: File) -> String { -// let mut hasher = Skein1024::new(); -// _ = io::copy(&mut file, &mut hasher); +pub fn hash_skein1024(mut file: File) -> String { + let mut hasher = Skein1024::::new(); + _ = io::copy(&mut file, &mut hasher); -// return format!("{:x}", hasher.finalize()); -// } + return format!("{:x}", hasher.finalize()); +} pub fn hash_gost94(mut file: File) -> String { let mut hasher = Gost94CryptoPro::new(); @@ -237,15 +235,19 @@ pub fn hash_jh512(mut file: File) -> String { return format!("{:x}", hasher.finalize()); } -// pub fn hash_k12(mut file: File) -> String { -// let mut hasher = KangarooTwelve::new(); -// _ = io::copy(&mut file, &mut hasher); +pub fn hash_k12(mut file: File) -> String { + let mut hasher = KangarooTwelve::default(); + _ = io::copy(&mut file, &mut hasher); -// return format!("{:x}", hasher.finalize()); -// } + let mut result = String::new(); + let mut finalized = hasher.finalize_xof(); + _ = finalized.read_to_string(&mut result); + + return format!("{}", result); +} // pub fn hash_kupyna224(mut file: File) -> String { -// let mut hasher = Kupyna224::new(); +// let mut hasher = Kupyna224::default(); // _ = io::copy(&mut file, &mut hasher); // return format!("{:x}", hasher.finalize()); diff --git a/src/main.rs b/src/main.rs index 1e4cc23..60048f1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ use std::thread::{self, available_parallelism, JoinHandle}; mod common; mod hashers; -const ALGORITHMS: [&'static str; 38] = [ +const ALGORITHMS: [&'static str; 44] = [ "ascon", "belt", "blake3", @@ -28,6 +28,7 @@ const ALGORITHMS: [&'static str; 38] = [ "jh256", "jh384", "jh512", + "k12", "ripemd128", "ripemd160", "ripemd256", @@ -45,6 +46,11 @@ const ALGORITHMS: [&'static str; 38] = [ "shabal256", "shabal384", "shabal512", + "shake128", + "shake256", + "skein256", + "skein512", + "skein1024", "sm3", "tiger", "whirlpool", @@ -186,6 +192,7 @@ fn hash(info: ThreadInfo) -> Result<(), String> { "jh256" => hashers::hash_jh256(file), "jh384" => hashers::hash_jh384(file), "jh512" => hashers::hash_jh512(file), + "k12" => hashers::hash_k12(file), "md2" => hashers::hash_md2(file), "md4" => hashers::hash_md4(file), "md5" => hashers::hash_md5(file), @@ -207,6 +214,11 @@ fn hash(info: ThreadInfo) -> Result<(), String> { "shabal256" => hashers::hash_shabal256(file), "shabal384" => hashers::hash_shabal384(file), "shabal512" => hashers::hash_shabal512(file), + "shake128" => hashers::hash_shake128(file), + "shake256" => hashers::hash_shake256(file), + "skein256" => hashers::hash_skein256(file), + "skein512" => hashers::hash_skein512(file), + "skein1024" => hashers::hash_skein1024(file), "sm3" => hashers::hash_sm3(file), "streebog256" => hashers::hash_streebog256(file), "streebog512" => hashers::hash_streebog512(file),