diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/verification.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/core/verification.go b/core/verification.go new file mode 100644 index 0000000..5023d06 --- /dev/null +++ b/core/verification.go @@ -0,0 +1,41 @@ +package core + +import ( + "bufio" + "fmt" + "strings" +) + +func ReadBlock(node Node, part *bufio.Reader) ([]byte, error) { + block := make([]byte, node.BlockEnd-node.BlockStart) + blockSize := node.BlockEnd - node.BlockStart + _, err := part.Discard(node.BlockStart) + if err != nil { + return []byte{}, err + } + block, err = part.Peek(blockSize) + return block, err +} + +func VerifyBlock(block []byte, node Node) error { + calculatedBlockHash, err := CalculateBlockHash(block) + if err != nil { + return err + } + wantedBlockHash := node.BlockSum + if strings.Compare(calculatedBlockHash, strings.TrimSpace(wantedBlockHash)) == 0 { + return nil + } + return fmt.Errorf("Error: Node %s ranging from %d to %d does not match block", node.PrevNodeSum, node.BlockStart, node.BlockEnd) +} + +func VerifyNode(node Node, nextNode Node) error { + nodeHash, err := calculateStringHash(fmt.Sprintf("%d%d%s%s", node.BlockStart, node.BlockEnd, node.BlockSum, node.PrevNodeSum)) + if err != nil { + return err + } + if strings.Compare(nodeHash, nextNode.PrevNodeSum) != 0 { + return fmt.Errorf("Node %s is not valid!", node.PrevNodeSum) + } + return nil +} |