示例#1
0
 public void SetLeftNode(MerkleNode node)
 {
     MerkleTree.Contract(() => node.Hash != null, "Node hash must be initialized.");
     LeftNode        = node;
     LeftNode.Parent = this;
     ComputeHash();
 }
示例#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();
            }
        }
示例#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));
        }
示例#4
0
 public void SetHash(byte[] hash)
 {
     MerkleTree.Contract(() => hash.Length == Constants.HASH_LENGTH, "Unexpected hash length.");
     Value = hash;
 }
示例#5
0
 public override bool Equals(object obj)
 {
     MerkleTree.Contract(() => obj is MerkleHash, "rvalue is not a MerkleHash");
     return(Equals((MerkleHash)obj));
 }