def test_make_tree_with_add_leaf_hex(self): tree = MerkleTree() tree.add_leaf( 'a292780cc748697cb499fdcc8cb89d835609f11e502281dfe3f6690b1cc23dcb') tree.add_leaf( 'cb4990b9a8936bbc137ddeb6dcab4620897b099a450ecdc5f3e86ef4b3a7135c') tree.make_tree() self.assertEqual(tree.get_merkle_root(), self.mRoot, 'merkle root value should be correct') hashes = [] hashes.append( 'a292780cc748697cb499fdcc8cb89d835609f11e502281dfe3f6690b1cc23dcb') hashes.append( 'cb4990b9a8936bbc137ddeb6dcab4620897b099a450ecdc5f3e86ef4b3a7135c') tree = MerkleTree() tree.add_leaves(hashes) tree.make_tree() targetProof0 = tree.get_proof(0) targetProof1 = tree.get_proof(1) self.assertEqual(tree.get_merkle_root(), self.mRoot, 'merkle root value should be correct') self.assertEqual(len(targetProof0), 1, 'merkle root value should be correct') self.assertEqual(len(targetProof1), 1, 'merkle root value should be correct')
def test_proof_one_node(self): tree = MerkleTree() tree.add_leaf(self.bLeft) tree.make_tree() proof = tree.get_proof(0) self.assertEqual(proof, [], 'proof array should be correct')
def test_proof_single_true(self): tree = MerkleTree() tree.add_leaf('test', True) tree.make_tree() proof = tree.get_proof(0) target = sha256('test') self.assertTrue( tree.validate_proof(proof, target, tree.get_merkle_root()))
def test_proof_single_false(self): tree = MerkleTree() tree.add_leaf('test', True) tree.make_tree() proof = tree.get_proof(1) self.assertFalse( tree.validate_proof(proof, sha256('test9'), tree.get_merkle_root()))
def test_proof_left_node(self): tree = MerkleTree() tree.add_leaf(self.bLeft) tree.add_leaf(self.bRight) tree.make_tree() proof = tree.get_proof(0) self.assertEqual( proof[0]['right'], 'cb4990b9a8936bbc137ddeb6dcab4620897b099a450ecdc5f3e86ef4b3a7135c', 'proof array should be correct')
def test_proof_true(self): tree = MerkleTree() tree.add_leaf('test', True) tree.add_leaf('test2', True) tree.add_leaf('test3', True) tree.make_tree() proof = tree.get_proof(0) self.assertTrue( tree.validate_proof(proof, sha256('test'), tree.get_merkle_root()))
def test_proof_right_node(self): tree = MerkleTree() tree.add_leaf(self.bLeft) tree.add_leaf(self.bRight) tree.make_tree() proof = tree.get_proof(1) self.assertEqual( proof[0]['left'], 'a292780cc748697cb499fdcc8cb89d835609f11e502281dfe3f6690b1cc23dcb', 'proof array should be correct')
def test_validate_bad_proof_2_leaves(self): tree = MerkleTree() tree.add_leaf(self.bLeft) tree.add_leaf(self.bRight) tree.make_tree() proof = tree.get_proof(1) isValid = tree.validate_proof( proof, self.bRight, 'a292780cc748697cb499fdcc8cb89d835609f11e502281dfe3f6690b1cc23dcb') self.assertFalse(isValid, 'proof should be invalid')
def test_proof_false(self): tree = MerkleTree() tree.add_leaf('test1', True) tree.add_leaf('test2', True) tree.add_leaf('test3', True) tree.make_tree() proof = tree.get_proof(4) result = tree.validate_proof(proof, sha256('test'), tree.get_merkle_root()) self.assertFalse(result)
def test_proof_get_json(self): tree = MerkleTree() tree.add_leaf('test', True) tree.add_leaf('test2', True) tree.add_leaf('test3', True) tree.make_tree() json_data = tree.get_proof(0) self.assertEqual( json_data[0]["right"], '60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752') self.assertEqual( json_data[1]["right"], 'fd61a03af4f77d870fc21e05e7e80678095c92d808cfb3b5c279ee04c74aca13')
def test_make_SHA3_256_tree_with_2_leaves(self): tree = MerkleTree({'hashType': 'SHA3-256'}) tree.add_leaves([ '1d7d4ea1cc029ca460e486642830c284657ea0921235c46298b51f0ed1bb7bf7', '89b9e14eae37e999b096a6f604adefe7feea4dc240ccecb5e4e92785cffc7070' ]) tree.make_tree() self.validate_merkle_root(tree.get_merkle_root(), '6edf674f5ce762e096c3081aee2a0a977732e07f4d704baf34f5e3804db03343') self.validate_proof_array(tree.get_proof(0)[0]['right'], '89b9e14eae37e999b096a6f604adefe7feea4dc240ccecb5e4e92785cffc7070') self.validate_proof(tree, 0, '1d7d4ea1cc029ca460e486642830c284657ea0921235c46298b51f0ed1bb7bf7', '6edf674f5ce762e096c3081aee2a0a977732e07f4d704baf34f5e3804db03343')
def test_make_SHA3_512_tree_with_2leaves(self): tree = MerkleTree({'hashType': 'SHA3-512'}) tree.add_leaves([ '004a237ea808cd9375ee9db9f85625948a890c54e2c30f736f54c969074eb56f0ff3d43dafb4b40d5d974acc1c2a68c046fa4d7c2c20cab6df956514040d0b8b', '0b43a85d08c05252d0e23c96bc6b1bda11dfa787049ff452b3c86f4c6135e870c058c05131f199ef8619cfac937a736bbc936a667e4d96a5bf68e4056ce5fdce' ]) tree.make_tree() self.validate_merkle_root(tree.get_merkle_root(), '3dff3f19b67628591d294cba2c07ed20d20d83e1624af8c1dca8fcf096127b9f86435e2d6a84ca4cee526525cacd1c628bf06ee938983413afafbb4598c5862a') self.validate_proof_array(tree.get_proof(0)[0]['right'], '0b43a85d08c05252d0e23c96bc6b1bda11dfa787049ff452b3c86f4c6135e870c058c05131f199ef8619cfac937a736bbc936a667e4d96a5bf68e4056ce5fdce') self.validate_proof(tree, 0, '004a237ea808cd9375ee9db9f85625948a890c54e2c30f736f54c969074eb56f0ff3d43dafb4b40d5d974acc1c2a68c046fa4d7c2c20cab6df956514040d0b8b', '3dff3f19b67628591d294cba2c07ed20d20d83e1624af8c1dca8fcf096127b9f86435e2d6a84ca4cee526525cacd1c628bf06ee938983413afafbb4598c5862a')
def test_validate_good_proof_5_leaves_B(self): tree = MerkleTree() tree.add_leaves([ 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', '3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d', '2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6', '18ac3e7343f016890c510e93f935261169d9e3f565436429830faf0934f4f8e4', '3f79bb7b435b05321651daefd374cdc681dc06faa65e374e38337b88ca046dea' ]) tree.make_tree() proof = tree.get_proof(1) isValid = tree.validate_proof( proof, '3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d', 'd71f8983ad4ee170f8129f1ebcdd7440be7798d8e1c80420bf11f1eced610dba') self.assertTrue(isValid, 'proof should be valid')
def test_make_SHA3_384_tree_with_2_leaves(self): tree = MerkleTree({'hashType': 'SHA3-384'}) tree.add_leaves([ 'e222605f939aa69b964a0a03d7075676bb3dbb40c3bd10b22f0adcb149434e7c1085c206f0e3371470a49817aa6d5b16', 'ae331b6f8643ed7e404471c81be9a74f73fc84ffd5140a0ec9aa8596fa0d0a2ded5f7b780bb2fbfc4e2226ee2a04a2fa' ]) tree.make_tree() self.validate_merkle_root(tree.get_merkle_root(), 'bd54df0015fa0d4fee713fbf5c8ae232c93239c75fb9d41c7dd7a9278711764a6ee83c81766b3945ed94030254537b57') self.validate_proof_array(tree.get_proof(0)[0]['right'], 'ae331b6f8643ed7e404471c81be9a74f73fc84ffd5140a0ec9aa8596fa0d0a2ded5f7b780bb2fbfc4e2226ee2a04a2fa') self.validate_proof(tree, 0, 'e222605f939aa69b964a0a03d7075676bb3dbb40c3bd10b22f0adcb149434e7c1085c206f0e3371470a49817aa6d5b16', 'bd54df0015fa0d4fee713fbf5c8ae232c93239c75fb9d41c7dd7a9278711764a6ee83c81766b3945ed94030254537b57')
def test_make_SHA224_tree_with_2_leaves(self): tree = MerkleTree(sha224) tree.add_leaves([ '90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809', '35f757ad7f998eb6dd3dd1cd3b5c6de97348b84a951f13de25355177' ]) tree.make_tree() self.validate_merkle_root( tree.get_merkle_root(), 'f48bc49bb77d3a3b1c8f8a70db693f41d879189cd1919f8326067ad7') self.validate_proof_array( tree.get_proof(0)[0]['right'], '35f757ad7f998eb6dd3dd1cd3b5c6de97348b84a951f13de25355177') self.validate_proof( tree, 0, '90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809', 'f48bc49bb77d3a3b1c8f8a70db693f41d879189cd1919f8326067ad7')
def test_make_SHA256_tree_with_2_leaves(self): tree = MerkleTree() tree.add_leaves([ '1516f000de6cff5c8c63eef081ebcec2ad2fdcf7034db16045d024a90341e07d', 'e20af19f85f265579ead2578859bf089c92b76a048606983ad83f27ba8f32f1a' ]) tree.make_tree() self.validate_merkle_root( tree.get_merkle_root(), '77c654b3d1605f78ed091cbd420c939c3feff7d57dc30c171fa45a5a3c81fd7d') self.validate_proof_array( tree.get_proof(0)[0]['right'], 'e20af19f85f265579ead2578859bf089c92b76a048606983ad83f27ba8f32f1a') self.validate_proof( tree, 0, '1516f000de6cff5c8c63eef081ebcec2ad2fdcf7034db16045d024a90341e07d', '77c654b3d1605f78ed091cbd420c939c3feff7d57dc30c171fa45a5a3c81fd7d' ),
def test_make_SHA512_tree_with_2_leaves(self): tree = MerkleTree(sha512) tree.add_leaves([ 'c0a8907588c1da716ce31cbef05da1a65986ec23afb75cd42327634dd53d754be6c00a22d6862a42be5f51187a8dff695c530a797f7704e4eb4b473a14ab416e', 'df1e07eccb2a2d4e1b30d11e646ba13ddc426c1aefbefcff3639405762f216fdcc40a684f3d1855e6d465f99fd9547e53fa8a485f18649fedec5448b45963976' ]) tree.make_tree() self.validate_merkle_root( tree.get_merkle_root(), 'd9d27704a3a785d204257bfa2b217a1890e55453b6686f091fa1be8aa2b265bc06c285a909459996e093546677c3f392458d7b1fc34a994a86689ed4100e8337' ) self.validate_proof_array( tree.get_proof(0)[0]['right'], 'df1e07eccb2a2d4e1b30d11e646ba13ddc426c1aefbefcff3639405762f216fdcc40a684f3d1855e6d465f99fd9547e53fa8a485f18649fedec5448b45963976' ) self.validate_proof( tree, 0, 'c0a8907588c1da716ce31cbef05da1a65986ec23afb75cd42327634dd53d754be6c00a22d6862a42be5f51187a8dff695c530a797f7704e4eb4b473a14ab416e', 'd9d27704a3a785d204257bfa2b217a1890e55453b6686f091fa1be8aa2b265bc06c285a909459996e093546677c3f392458d7b1fc34a994a86689ed4100e8337' )
def test_make_SHA384_tree_with_2_leaves(self): tree = MerkleTree(sha384) tree.add_leaves([ '84ae8c6367d64899aef44a951edfa4833378b9e213f916c5eb8492cc37cb951c726e334dace7dbe4bb1dc80c1efe33d0', '368c89a00446010def75ad7b179cea9a3d24f8cbb7e2755a28638d194809e7b614eb45453665032860b6c1a135fb6e8b' ]) tree.make_tree() self.validate_merkle_root( tree.get_merkle_root(), 'c363aa3b824e3f3b927034fab826eff61a9bfa2030ae9fc4598992edf9f3e42f8b497d6742946caf7a771429eb1745cf' ) self.validate_proof_array( tree.get_proof(0)[0]['right'], '368c89a00446010def75ad7b179cea9a3d24f8cbb7e2755a28638d194809e7b614eb45453665032860b6c1a135fb6e8b' ) self.validate_proof( tree, 0, '84ae8c6367d64899aef44a951edfa4833378b9e213f916c5eb8492cc37cb951c726e334dace7dbe4bb1dc80c1efe33d0', 'c363aa3b824e3f3b927034fab826eff61a9bfa2030ae9fc4598992edf9f3e42f8b497d6742946caf7a771429eb1745cf' )