def test(): """ No need to test otssign or orspublic as they are tested by the OTS test """ m = MerkleTree(progressbar=False) for _ in range(m.n_keys): msg = getrandom(32) sign = m.signature(msg) assert MerkleTree.verify(msg, sign, m.public_key) false_sign = modify_sign1(sign, m.n_keys) assert not MerkleTree.verify(msg, false_sign, m.public_key) false_sign = modify_sign4(sign) assert not MerkleTree.verify(msg, false_sign, m.public_key) assert MerkleTree.verify(msg, sign, m.public_key) with pytest.raises(AssertionError) as excinfo: msg = getrandom(32) sign = m.signature(msg) assert excinfo.value.args == ('All keys have been used', )
b'hello world', b'world hello', b'BTC', b'ETH', b'XLM', b'RawEncoder', b'encoder', b'sha256' ] # messages = messages[0:-1] # messages = messages[0:-4] # messages = messages[0:-randint(1, 5)] leaves = [ sha256(messages[i], encoder=RawEncoder) for i in range(len(messages)) ] print("Messages: ", messages) print() print("MerkleTree:") m = MerkleTree.from_leaves(leaves) # base=2 # m = MerkleTree.from_messages(messages) # base=2 # m = MerkleTree.from_leaves(leaves, 3) # base=3 # m = MerkleTree.from_messages(messages, 5) # base=5 m.print_hex() print() index = randint(0, len(messages) - 1) print("Proof that message ", messages[index], "(", str(hexlify(leaves[index])), ") is part of the tree:") proof = m.prove(messages[index]) MerkleTree.print_hex_proof(proof) print() print("Proof verified" if MerkleTree.verify(messages[index], proof ) else "Proof failed verification")