diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2025-06-13 11:39:08 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2025-06-14 16:39:36 +0000 |
| commit | 247d7664612ce4c63796d4b9a28e31b7757e364b (patch) | |
| tree | 1aaaaa70804635db24f5d9180e737b7cf6f327f3 | |
| parent | 04891bbcaac75e887d57844548b61141cb6ebc07 (diff) | |
Hasher with SHA256 algorithm is no more the default
| -rw-r--r-- | Cargo.toml | 8 | ||||
| -rw-r--r-- | src/hasher.rs | 21 | ||||
| -rw-r--r-- | src/merkle/mod.rs | 8 |
3 files changed, 26 insertions, 11 deletions
@@ -5,5 +5,9 @@ version = "0.1.0" edition = "2024" [dependencies] -hex = "0.4.3" -sha2 = "0.10.9" +hex = { version = "0.4.3", optional = true } +sha2 = { version = "0.10.9", optional = true } + +[features] +default = [] +sha256 = ["sha2", "hex"] diff --git a/src/hasher.rs b/src/hasher.rs index 028e73a..898393f 100644 --- a/src/hasher.rs +++ b/src/hasher.rs @@ -1,3 +1,4 @@ +#[cfg(feature = "sha256")] use sha2::{Digest, Sha256}; pub trait Hasher { @@ -7,6 +8,16 @@ pub trait Hasher { pub struct DefaultHasher; impl Hasher for DefaultHasher { + fn hash(&self, _input: &str) -> String { + "0xc0ff3".to_string() + } +} + +#[cfg(feature = "sha256")] +pub struct SHA256Hasher; + +#[cfg(feature = "sha256")] +impl Hasher for SHA256Hasher { fn hash(&self, input: &str) -> String { let mut hasher = Sha256::new(); hasher.update(input.as_bytes()); @@ -14,13 +25,13 @@ impl Hasher for DefaultHasher { } } -#[cfg(test)] +#[cfg(all(test, feature = "sha256"))] mod tests { use super::*; #[test] - fn test_default_hasher_with_known_input() { - let hasher = DefaultHasher; + fn test_sha256_hasher_with_known_input() { + let hasher = SHA256Hasher; let input = "hello"; let expected_hash = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"; @@ -30,8 +41,8 @@ mod tests { } #[test] - fn test_default_hasher_empty_string() { - let hasher = DefaultHasher; + fn test_sha256_hasher_empty_string() { + let hasher = SHA256Hasher; let input = ""; let expected_hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; diff --git a/src/merkle/mod.rs b/src/merkle/mod.rs index b6da2f9..48f87bc 100644 --- a/src/merkle/mod.rs +++ b/src/merkle/mod.rs @@ -1,16 +1,16 @@ mod merkletree; mod node; -#[cfg(test)] +#[cfg(all(test, feature = "sha256"))] mod tests { - use crate::hasher::DefaultHasher; + use crate::hasher::SHA256Hasher; use super::*; #[test] fn test_merkle_tree_hashing() { let data = vec!["a", "b", "c", "d"]; - let tree = merkletree::MerkleTree::new(&DefaultHasher, data); + let tree = merkletree::MerkleTree::new(&SHA256Hasher, data); assert_eq!(tree.height(), 3); @@ -23,7 +23,7 @@ mod tests { #[test] fn test_merkle_tree_single_leaf() { let data = vec!["hello"]; - let tree = merkletree::MerkleTree::new(&DefaultHasher, data); + let tree = merkletree::MerkleTree::new(&SHA256Hasher, data); assert_eq!(tree.height(), 2); assert_eq!(tree.len(), 2); |
