diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2025-06-16 11:56:22 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2025-06-16 11:58:09 +0000 |
| commit | 7f9838562cd9ec46c3400292b72840c3aa3c7f47 (patch) | |
| tree | ea3966caabb38272add183036f4c6d6aa2ed3ab7 /src/hasher.rs | |
| parent | c4eeb0db2219e63801ce566b7724e849c74e0fed (diff) | |
Add proofer
Also, avoid to request hasher on node creation
Diffstat (limited to 'src/hasher.rs')
| -rw-r--r-- | src/hasher.rs | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/src/hasher.rs b/src/hasher.rs index 38d6567..77a8450 100644 --- a/src/hasher.rs +++ b/src/hasher.rs @@ -1,8 +1,5 @@ //! Provides hashing abstractions and implementations including SHA256 and a default dummy hasher. -#[cfg(feature = "sha256")] -use sha2::{Digest, Sha256}; - /// A trait representing a generic hash function. /// /// This allows the Merkle tree to use any hash function that conforms to this interface. @@ -14,6 +11,7 @@ pub trait Hasher { /// A dummy hasher used for testing or demonstration purposes. /// /// Always returns a static hash value. +#[derive(Clone)] pub struct DummyHasher; impl Hasher for DummyHasher { @@ -23,37 +21,51 @@ impl Hasher for DummyHasher { } #[cfg(feature = "sha256")] -/// A hasher implementation using the SHA-256 cryptographic hash function. -pub struct SHA256Hasher; +mod hasher_sha256 { + use super::*; + use sha2::{Digest, Sha256}; -#[cfg(feature = "sha256")] -impl Hasher for SHA256Hasher { - fn hash(&self, input: &[u8]) -> String { - let mut hasher = Sha256::new(); - hasher.update(input); - hex::encode(hasher.finalize()) - } -} + #[derive(Clone)] + /// A hasher implementation using the SHA-256 cryptographic hash function. + pub struct SHA256Hasher; -#[cfg(all(test, feature = "sha256"))] -mod tests { - use super::*; + impl SHA256Hasher { + pub fn new() -> Self { + Self {} + } + } - #[test] - fn test_sha256_hasher_with_known_input() { - let hasher = SHA256Hasher; - let input = "hello".as_bytes(); - let expected_hash = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"; - let actual_hash = hasher.hash(input); - assert_eq!(actual_hash, expected_hash); + impl Hasher for SHA256Hasher { + fn hash(&self, input: &[u8]) -> String { + let mut hasher = Sha256::new(); + hasher.update(input); + hex::encode(hasher.finalize()) + } } - #[test] - fn test_sha256_hasher_empty_string() { - let hasher = SHA256Hasher; - let input = &[]; - let expected_hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; - let actual_hash = hasher.hash(input); - assert_eq!(actual_hash, expected_hash); + #[cfg(test)] + mod tests { + use super::*; + + #[test] + fn test_sha256_hasher_with_known_input() { + let hasher = SHA256Hasher; + let input = "hello".as_bytes(); + let expected_hash = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"; + let actual_hash = hasher.hash(input); + assert_eq!(actual_hash, expected_hash); + } + + #[test] + fn test_sha256_hasher_empty_string() { + let hasher = SHA256Hasher; + let input = &[]; + let expected_hash = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; + let actual_hash = hasher.hash(input); + assert_eq!(actual_hash, expected_hash); + } } } + +#[cfg(feature = "sha256")] +pub use hasher_sha256::*; |
