From 3f84548607ad3edfb4d7fdf0503f3ebcc359dd59 Mon Sep 17 00:00:00 2001 From: mugdhabhagwat9 Date: Sat, 18 Jul 2020 12:34:34 +0530 Subject: [PATCH] Added function to generate merkle root from proof and leaf --- merkletools/__init__.py | 8 ++++++-- tests/test_merkle_tools.py | 13 ------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/merkletools/__init__.py b/merkletools/__init__.py index a1b338b..e76f215 100644 --- a/merkletools/__init__.py +++ b/merkletools/__init__.py @@ -107,9 +107,13 @@ def get_proof(self, index): def validate_proof(self, proof, target_hash, merkle_root): merkle_root = bytearray.fromhex(merkle_root) + proof_hash = self.generate_merkle_root_with_merkle_proof(proof, target_hash) + return proof_hash == merkle_root + + def generate_merkle_root_with_merkle_proof(self, proof, target_hash): target_hash = bytearray.fromhex(target_hash) if len(proof) == 0: - return target_hash == merkle_root + return target_hash else: proof_hash = target_hash for p in proof: @@ -121,4 +125,4 @@ def validate_proof(self, proof, target_hash, merkle_root): # the sibling is a right node sibling = bytearray.fromhex(p['right']) proof_hash = self.hash_function(proof_hash + sibling).digest() - return proof_hash == merkle_root + return proof_hash diff --git a/tests/test_merkle_tools.py b/tests/test_merkle_tools.py index 89089ca..c1de936 100644 --- a/tests/test_merkle_tools.py +++ b/tests/test_merkle_tools.py @@ -233,19 +233,6 @@ def test_sha3_224(): assert is_valid == True -def test_sha3_224(): - mt = MerkleTools(hash_type='sha3_224') - mt.add_leaf([ - '6ed712b9472b671fd70bb950dc4ccfce197c92a7969f6bc2aa6b6d9f', - '08db5633d406804d044a3e67683e179b5ee51249ed2139c239d1e65a' - ]) - mt.make_tree() - assert mt.get_merkle_root() == '674bc9f53d5c666174cdd3ccb9df04768dfb7759655e7d937aef0c3a' - assert mt.get_proof(0)[0]['right'] == '08db5633d406804d044a3e67683e179b5ee51249ed2139c239d1e65a' - is_valid = mt.validate_proof(mt.get_proof(0), '6ed712b9472b671fd70bb950dc4ccfce197c92a7969f6bc2aa6b6d9f', '674bc9f53d5c666174cdd3ccb9df04768dfb7759655e7d937aef0c3a') - assert is_valid == True - - def test_sha3_256(): mt = MerkleTools(hash_type='sha3_256') mt.add_leaf([