implement last few algorithms

This commit is contained in:
Bryson Steck 2025-07-28 22:12:51 -06:00
parent 80f0ce9d61
commit d627771c56
Signed by: bryson
SSH key fingerprint: SHA256:XpKABw/nP4z8UVaH+weLaBnEOD86+cVwif+QjuYLGT4
2 changed files with 64 additions and 50 deletions

View file

@ -1,35 +1,25 @@
use ascon_hash::AsconHash256; use ascon_hash::{AsconHash256, ExtendableOutput};
use belt_hash::BeltHash; use belt_hash::BeltHash;
use blake2::{Blake2b512, Blake2s256}; use blake2::{Blake2b512, Blake2s256};
use blake3::Hasher as Blake3; use blake3::Hasher as Blake3;
use fsb::{Fsb160, Fsb224, Fsb256, Fsb384, Fsb512}; use fsb::{Fsb160, Fsb224, Fsb256, Fsb384, Fsb512};
use gost94::Gost94CryptoPro; use gost94::Gost94CryptoPro;
use groestl::{Groestl224, Groestl256, Groestl384, Groestl512}; use groestl::{Groestl224, Groestl256, Groestl384, Groestl512};
use jh::{ use jh::{Jh224, Jh256, Jh384, Jh512};
// digest::{core_api::CoreWrapper, KeyInit}, use k12::KangarooTwelve;
Jh224, // use kupyna::{Digest as _, Kupyna224, Kupyna256, Kupyna384, Kupyna512};
Jh256,
Jh384,
Jh512,
};
// use k12::KangarooTwelve;
// use kupyna::{Kupyna224, Kupyna256, Kupyna384, Kupyna512};
use md2::Md2; use md2::Md2;
use md4::Md4; use md4::Md4;
use md5::Md5; use md5::Md5;
use ripemd::{Ripemd128, Ripemd160, Ripemd256, Ripemd320}; use ripemd::{Ripemd128, Ripemd160, Ripemd256, Ripemd320};
use sha1::Sha1; use sha1::Sha1;
use sha2::{Digest, Sha224, Sha256, Sha384, Sha512}; use sha2::{Digest as _, 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, Shake128, Shake256};
use sha3::{Sha3_224, Sha3_256, Sha3_384, Sha3_512};
use shabal::{Shabal192, Shabal224, Shabal256, Shabal384, Shabal512}; use shabal::{Shabal192, Shabal224, Shabal256, Shabal384, Shabal512};
// use skein::{ use skein::{consts::U32, Skein1024, Skein256, Skein512};
// digest::{core_api::CoreWrapper, KeyInit},
// Skein1024, Skein256, Skein512,
// };
use sm3::Sm3; use sm3::Sm3;
use std::fs::File;
use std::io; use std::io;
use std::{fs::File, io::Read};
use streebog::{Streebog256, Streebog512}; use streebog::{Streebog256, Streebog512};
use tiger::Tiger; use tiger::Tiger;
use whirlpool::Whirlpool; use whirlpool::Whirlpool;
@ -104,19 +94,27 @@ pub fn hash_sha3_512(mut file: File) -> String {
return format!("{:x}", hasher.finalize()); return format!("{:x}", hasher.finalize());
} }
// pub fn hash_shake128(mut file: File) -> String { pub fn hash_shake128(mut file: File) -> String {
// let mut hasher: CoreWrapper<_> = Shake128::new(); let mut hasher = Shake128::default();
// _ = io::copy(&mut file, &mut hasher); _ = 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 { return format!("{}", result);
// let mut hasher = Shake256::new(); }
// _ = io::copy(&mut file, &mut hasher);
// 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 { pub fn hash_shabal192(mut file: File) -> String {
let mut hasher = Shabal192::new(); let mut hasher = Shabal192::new();
@ -153,26 +151,26 @@ pub fn hash_shabal512(mut file: File) -> String {
return format!("{:x}", hasher.finalize()); return format!("{:x}", hasher.finalize());
} }
// pub fn hash_skein256(mut file: File) -> String { pub fn hash_skein256(mut file: File) -> String {
// let mut hasher = Skein256::new(); let mut hasher = Skein256::<U32>::new();
// _ = io::copy(&mut file, &mut hasher); _ = io::copy(&mut file, &mut hasher);
// return format!("{:x}", hasher.finalize()); return format!("{:x}", hasher.finalize());
// } }
// pub fn hash_skein512(mut file: File) -> String { pub fn hash_skein512(mut file: File) -> String {
// let mut hasher = Skein512::new(); let mut hasher = Skein512::<U32>::new();
// _ = io::copy(&mut file, &mut hasher); _ = io::copy(&mut file, &mut hasher);
// return format!("{:x}", hasher.finalize()); return format!("{:x}", hasher.finalize());
// } }
// pub fn hash_skein1024(mut file: File) -> String { pub fn hash_skein1024(mut file: File) -> String {
// let mut hasher = Skein1024::new(); let mut hasher = Skein1024::<U32>::new();
// _ = io::copy(&mut file, &mut hasher); _ = io::copy(&mut file, &mut hasher);
// return format!("{:x}", hasher.finalize()); return format!("{:x}", hasher.finalize());
// } }
pub fn hash_gost94(mut file: File) -> String { pub fn hash_gost94(mut file: File) -> String {
let mut hasher = Gost94CryptoPro::new(); let mut hasher = Gost94CryptoPro::new();
@ -237,15 +235,19 @@ pub fn hash_jh512(mut file: File) -> String {
return format!("{:x}", hasher.finalize()); return format!("{:x}", hasher.finalize());
} }
// pub fn hash_k12(mut file: File) -> String { pub fn hash_k12(mut file: File) -> String {
// let mut hasher = KangarooTwelve::new(); let mut hasher = KangarooTwelve::default();
// _ = io::copy(&mut file, &mut hasher); _ = 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 { // pub fn hash_kupyna224(mut file: File) -> String {
// let mut hasher = Kupyna224::new(); // let mut hasher = Kupyna224::default();
// _ = io::copy(&mut file, &mut hasher); // _ = io::copy(&mut file, &mut hasher);
// return format!("{:x}", hasher.finalize()); // return format!("{:x}", hasher.finalize());

View file

@ -9,7 +9,7 @@ use std::thread::{self, available_parallelism, JoinHandle};
mod common; mod common;
mod hashers; mod hashers;
const ALGORITHMS: [&'static str; 38] = [ const ALGORITHMS: [&'static str; 44] = [
"ascon", "ascon",
"belt", "belt",
"blake3", "blake3",
@ -28,6 +28,7 @@ const ALGORITHMS: [&'static str; 38] = [
"jh256", "jh256",
"jh384", "jh384",
"jh512", "jh512",
"k12",
"ripemd128", "ripemd128",
"ripemd160", "ripemd160",
"ripemd256", "ripemd256",
@ -45,6 +46,11 @@ const ALGORITHMS: [&'static str; 38] = [
"shabal256", "shabal256",
"shabal384", "shabal384",
"shabal512", "shabal512",
"shake128",
"shake256",
"skein256",
"skein512",
"skein1024",
"sm3", "sm3",
"tiger", "tiger",
"whirlpool", "whirlpool",
@ -186,6 +192,7 @@ fn hash(info: ThreadInfo) -> Result<(), String> {
"jh256" => hashers::hash_jh256(file), "jh256" => hashers::hash_jh256(file),
"jh384" => hashers::hash_jh384(file), "jh384" => hashers::hash_jh384(file),
"jh512" => hashers::hash_jh512(file), "jh512" => hashers::hash_jh512(file),
"k12" => hashers::hash_k12(file),
"md2" => hashers::hash_md2(file), "md2" => hashers::hash_md2(file),
"md4" => hashers::hash_md4(file), "md4" => hashers::hash_md4(file),
"md5" => hashers::hash_md5(file), "md5" => hashers::hash_md5(file),
@ -207,6 +214,11 @@ fn hash(info: ThreadInfo) -> Result<(), String> {
"shabal256" => hashers::hash_shabal256(file), "shabal256" => hashers::hash_shabal256(file),
"shabal384" => hashers::hash_shabal384(file), "shabal384" => hashers::hash_shabal384(file),
"shabal512" => hashers::hash_shabal512(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), "sm3" => hashers::hash_sm3(file),
"streebog256" => hashers::hash_streebog256(file), "streebog256" => hashers::hash_streebog256(file),
"streebog512" => hashers::hash_streebog512(file), "streebog512" => hashers::hash_streebog512(file),