aboutsummaryrefslogtreecommitdiff
path: root/verifysetup/core/storage.go
diff options
context:
space:
mode:
Diffstat (limited to 'verifysetup/core/storage.go')
-rw-r--r--verifysetup/core/storage.go48
1 files changed, 19 insertions, 29 deletions
diff --git a/verifysetup/core/storage.go b/verifysetup/core/storage.go
index 831d637..56d32af 100644
--- a/verifysetup/core/storage.go
+++ b/verifysetup/core/storage.go
@@ -11,6 +11,11 @@ import (
var TotalReadBlocks = 0
func ReadBlock(start int, end int, device *bytes.Reader) ([]byte, error) {
+ if end-start < 0 {
+ return []byte{}, fmt.Errorf("ERROR: tried creating byte slice with negative length. %d to %d total %d\n", start, end, end-start)
+ } else if end-start > 2000 {
+ return []byte{}, fmt.Errorf("ERROR: tried creating byte slice with length over 2000. %d to %d total %d\n", start, end, end-start)
+ }
block := make([]byte, end-start)
_, err := device.Seek(int64(start), 0)
if err != nil {
@@ -21,7 +26,7 @@ func ReadBlock(start int, end int, device *bytes.Reader) ([]byte, error) {
return block, err
}
-func CreateNode(blockStart int, blockEnd int, block []byte, prevNode *verify.Node) (verify.Node, error) {
+func CreateNode(blockStart int, blockEnd int, block []byte, prevNode *verify.Node, n string) (verify.Node, error) {
node := verify.Node{}
node.BlockStart = blockStart
node.BlockEnd = blockEnd
@@ -37,39 +42,24 @@ func CreateNode(blockStart int, blockEnd int, block []byte, prevNode *verify.Nod
return verify.Node{}, err
}
} else {
- prevNodeHash = "Entrypoint"
+ prevNodeHash = "Entrypoint" + n
}
node.PrevNodeSum = prevNodeHash
return node, nil
}
-func AddNode(node verify.Node, db *bolt.DB, dbPath string) error {
- var err error
- var deferDB bool
- if db == nil {
- db, err = bolt.Open(dbPath, 0777, nil)
- if err != nil {
- return err
- }
- deferDB = true
- } else if db.IsReadOnly() {
- return fmt.Errorf("Error: database is opened read only, unable to add nodes")
- }
- err = db.Update(func(tx *bolt.Tx) error {
- nodes, err := tx.CreateBucketIfNotExists([]byte("Nodes"))
- if err != nil {
- return err
- }
- if buf, err := json.Marshal(node); err != nil {
- return err
- } else if err := nodes.Put([]byte(node.PrevNodeSum), buf); err != nil {
- return err
- }
+func AddNode(node verify.Node, tx *bolt.Tx) error {
+ if node.BlockStart == node.BlockEnd {
return nil
-
- })
- if deferDB {
- defer db.Close()
}
- return err
+ nodes, err := tx.CreateBucketIfNotExists([]byte("Nodes"))
+ if err != nil {
+ return err
+ }
+ if buf, err := json.Marshal(node); err != nil {
+ return err
+ } else if err := nodes.Put([]byte(node.PrevNodeSum), buf); err != nil {
+ return err
+ }
+ return nil
}