summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml8
-rw-r--r--src/hasher.rs21
-rw-r--r--src/merkle/mod.rs8
3 files changed, 26 insertions, 11 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 95acfdf..e28f8ce 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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);