From 11677d8fe08e2ffd215e4cb6852965409e2fab24 Mon Sep 17 00:00:00 2001 From: cscherr Date: Fri, 18 Jul 2025 12:08:49 +0200 Subject: [PATCH] refactor(alg): remove sha generics --- Cargo.lock | 16 ---------- crates/algorithms/Cargo.toml | 1 - crates/algorithms/src/hash/sha2.rs | 48 ++++++------------------------ 3 files changed, 9 insertions(+), 56 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6316c30..55dfba9 100755 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,7 +16,6 @@ name = "algorithms" version = "0.1.0" dependencies = [ "criterion", - "generic-array", "iai", ] @@ -308,15 +307,6 @@ dependencies = [ "num", ] -[[package]] -name = "generic-array" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c8444bc9d71b935156cc0ccab7f622180808af7867b1daae6547d773591703" -dependencies = [ - "typenum", -] - [[package]] name = "half" version = "1.8.3" @@ -798,12 +788,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - [[package]] name = "unicode-ident" version = "1.0.18" diff --git a/crates/algorithms/Cargo.toml b/crates/algorithms/Cargo.toml index 7e4c4b1..d677abe 100755 --- a/crates/algorithms/Cargo.toml +++ b/crates/algorithms/Cargo.toml @@ -4,7 +4,6 @@ version = "0.1.0" edition = "2024" [dependencies] -generic-array = "1.2.0" [dev-dependencies] criterion = "0.3" diff --git a/crates/algorithms/src/hash/sha2.rs b/crates/algorithms/src/hash/sha2.rs index 75c8cf7..63fa2bb 100644 --- a/crates/algorithms/src/hash/sha2.rs +++ b/crates/algorithms/src/hash/sha2.rs @@ -1,6 +1,4 @@ -use generic_array::GenericArray; - -use crate::hash::{ffi::SHA2Result, sha2::sealed::SHA2Mode}; +use crate::hash::ffi::SHA2Result; pub const SHA2_256_HASH_BITS: usize = 256; pub const SHA2_256_HASH_BYTES: usize = SHA2_256_HASH_BITS / 8; @@ -10,42 +8,18 @@ pub const SHA2_256_BLOCK_SIZE: usize = 2 * SHA2_256_HASH_BYTES; pub type Digest256 = [u32; SHA2_256_HASH_PARTS]; pub(crate) const DIGEST256_EMPTY: Digest256 = [0; SHA2_256_HASH_PARTS]; -pub struct Mode256; -mod sealed { - use generic_array::{ArrayLength, GenericArray}; - - use super::Mode256; - pub trait SHA2Mode { - type HashBits: ArrayLength; - type HashBytes: ArrayLength; - type HashParts: ArrayLength; - type BlockSize: ArrayLength; - type Digest: AsRef<[u32]> + AsMut<[u32]>; - type Block: AsRef<[u8]> + AsMut<[u8]>; - } - impl SHA2Mode for Mode256 { - type HashBits = generic_array::typenum::U256; - type HashBytes = generic_array::typenum::U32; - type HashParts = generic_array::typenum::U8; - type BlockSize = generic_array::typenum::U512; - type Digest = GenericArray; - type Block = GenericArray; - } - impl Mode256 {} -} - #[derive(Debug, PartialEq, Eq, Clone, Hash)] -pub struct SHA2Context { - intermediate_hash: GenericArray, - block: GenericArray, +pub struct SHA2_256Context { + intermediate_hash: Digest256, + block: [u8; SHA2_256_BLOCK_SIZE], block_idx: usize, } -impl SHA2Context { +impl SHA2_256Context { pub fn new() -> Self { Self { intermediate_hash: Default::default(), - block: Default::default(), + block: [0; SHA2_256_BLOCK_SIZE], block_idx: Default::default(), } } @@ -58,23 +32,19 @@ impl SHA2Context { todo!() } - pub fn finish(self) -> Result { + pub fn finish(self) -> Result { todo!() } } -impl Default for SHA2Context { +impl Default for SHA2_256Context { fn default() -> Self { Self::new() } } -pub fn sha2_oneshot(data: &[u8]) -> Result { - todo!() -} - pub fn sha2_256_oneshot(data: &[u8]) -> Result { - sha2_oneshot::(data).map(|dig| dig.into_array()) + todo!() } #[cfg(test)]