public HATNode(T data, HATNode <T> left, HATNode <T> right) { base.Value = data; NodeList <T> children = new NodeList <T>(2); children[0] = left; children[1] = right; base.Neighbors = children; }
private void PreOrder(HATNode <T> node) { if (node == null) { return; } preOrderedNodes.Add(node); PreOrder(node.Left); PreOrder(node.Right); }
private int getLeafCount(HATNode <T> node) { if (node == null) { return(0); } if (node.Left == null && node.Right == null) { return(1); } else { return(getLeafCount(node.Left) + getLeafCount(node.Right)); } }
private void CreateTree(List <HATNode <T> > nodes) { if (nodes.Count <= 1) { Root = nodes[0]; return; } else { List <HATNode <T> > AllNodesTemp = new List <HATNode <T> >(); for (int i = 0; i < nodes.Count; i = i + 2) { HATNode <T> parent = new HATNode <T>(); parent.Left = nodes[i]; if (i + 1 < nodes.Count) { parent.Right = nodes[i + 1]; } parent.IsBlockNode = false; parent.FileBlockIndex = -1; parent.Version = 0; if (i + 1 < nodes.Count) { parent.Hash = Utility.ComputeHashAsString(nodes[i].Hash + nodes[i + 1].Hash); } else { parent.Hash = Utility.ComputeHashAsString(nodes[i].Hash); } AllNodes.Add(parent); AllNodesTemp.Add(parent); } CreateTree(AllNodesTemp); } }
public void CreateTree(List <FileBlock> fileBlocks) { AllNodes.Clear(); List <HATNode <T> > AllParentsNodeTemp = new List <HATNode <T> >(); ServerBob server = new ServerBob(); AliceUser user = new AliceUser(); server.User = user; user.Server = server; server.setKeysWithUser(); fileBlocks = fileBlocks.OrderBy(x => x.Index).ToList(); for (int i = 0; i < fileBlocks.Count; i = i + 2) { HATNode <T> left = new HATNode <T>(); left.Hash = fileBlocks[i].ContentHash; left.Tag = user.EncryptMessage(left.Hash); left.IsBlockNode = true; left.FileBlockIndex = i; left.Version = 1; AllNodes.Add(left); HATNode <T> right = new HATNode <T>(); if (i + 1 < fileBlocks.Count) { right.Hash = fileBlocks[i + 1].ContentHash; right.Tag = user.EncryptMessage(right.Hash); right.IsBlockNode = true; right.FileBlockIndex = i + 1; right.Version = 1; AllNodes.Add(right); } HATNode <T> parent = new HATNode <T>(); parent.Left = left; parent.Right = right; parent.IsBlockNode = false; parent.FileBlockIndex = -1; if (i + 1 < fileBlocks.Count) { parent.Hash = Utility.ComputeHashAsString(left.Hash + right.Hash); } else { parent.Hash = Utility.ComputeHashAsString(left.Hash); } AllNodes.Add(parent); AllParentsNodeTemp.Add(parent); } CreateTree(AllParentsNodeTemp); SetNodeIndexes(); SetLeafNodeCount(); }