Esempio n. 1
0
        public void AuditTest2(int leafCount)
        {
            MerkleHash hash = null;
            var        tree = new MerkleAppendTree.MerkleTree();

            for (int i = 0; i < leafCount; i++)
            {
                hash = MerkleHash.Create(i.ToString());
                tree.AppendLeaf(hash);
            }

            MerkleHash rootHash = tree.RootNode.Hash;

            foreach (var leaf in tree.RootNode.Leaves())
            {
                Output.WriteLine(leaf.ToString());
            }

            List <MerkleProofHash> auditTrail = tree.AuditProof(hash);

            Output.WriteLine("Audit Trail:");
            foreach (var h in auditTrail)
            {
                Output.WriteLine(h.ToString());
            }
            Assert.True(MerkleTree.VerifyAudit(rootHash, hash, auditTrail));
        }
Esempio n. 2
0
        public void SetRightNode(MerkleNode node)
        {
            MerkleTree.Contract(() => node.Hash != null, "Node hash must be initialized.");
            RightNode        = node;
            RightNode.Parent = this;

            // Can't compute hash if the left node isn't set yet.
            if (LeftNode != null)
            {
                ComputeHash();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Verifies the hash for this node against the computed hash for our child nodes.
        /// If we don't have any children, the return is always true because we have nothing to verify against.
        /// </summary>
        public bool VerifyHash()
        {
            if (LeftNode == null && RightNode == null)
            {
                return(true);
            }

            if (RightNode == null)
            {
                return(Hash.Equals(LeftNode.Hash));
            }

            MerkleTree.Contract(() => LeftNode != null, "Left branch must be a node if right branch is a node.");
            MerkleHash leftRightHash = MerkleHash.Create(LeftNode.Hash, RightNode.Hash);

            return(Hash.Equals(leftRightHash));
        }
        public void CompareCliftonMerkleToAppendMerkle_Test(int leafCount)
        {
            var cliftonTree = new Clifton.Blockchain.MerkleTree();

            for (int i = 0; i < leafCount; i++)
            {
                var newLeafNode = new Clifton.Blockchain.MerkleNode(Clifton.Blockchain.MerkleHash.Create(i.ToString()));
                cliftonTree.AppendLeaf(newLeafNode);
            }
            cliftonTree.BuildTree();

            var appendTree = new MerkleAppendTree.MerkleTree();

            for (int i = 0; i < leafCount; i++)
            {
                var newLeafNode = new MerkleAppendTree.MerkleNode(MerkleAppendTree.MerkleHash.Create(i.ToString()));
                appendTree.AppendLeaf(newLeafNode);
            }

            Assert.Equal(cliftonTree.RootNode.Hash.ToString(), appendTree.RootNode.Hash.ToString());
        }
Esempio n. 5
0
 public void SetHash(byte[] hash)
 {
     MerkleTree.Contract(() => hash.Length == Constants.HASH_LENGTH, "Unexpected hash length.");
     Value = hash;
 }
Esempio n. 6
0
 public override bool Equals(object obj)
 {
     MerkleTree.Contract(() => obj is MerkleHash, "rvalue is not a MerkleHash");
     return(Equals((MerkleHash)obj));
 }