aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/verify.go94
-rw-r--r--config/config.go4
-rw-r--r--core/storage.go4
-rw-r--r--core/verification.go3
-rw-r--r--my.dbbin32768 -> 32768 bytes
-rw-r--r--part.fsverifybin32200 -> 32968 bytes
6 files changed, 82 insertions, 23 deletions
diff --git a/cmd/verify.go b/cmd/verify.go
index 2afb354..260aaa1 100644
--- a/cmd/verify.go
+++ b/cmd/verify.go
@@ -21,17 +21,33 @@ func NewVerifyCommand() *cobra.Command {
func ValidateCommand(_ *cobra.Command, args []string) error {
- /* node := core.Node{
- BlockStart: 0,
- BlockEnd: 4000,
- BlockSum: "ba0064e29f79feddc3b7912c697a80c93ada98a916b19573ff41598c17177b92",
- PrevNodeSum: "Entrypoint",
- }
+ /*entrynode := core.Node{
+ BlockStart: 0,
+ BlockEnd: 4000,
+ BlockSum: "32fd1c42b66cbf1b2f0f1a65a3cb08f3d7845eac7f43e13b2b5b5f9f837e3346",
+ PrevNodeSum: "Entrypoint",
+ }
- err := core.AddNode(node, nil)
- if err != nil {
- return err
- }*/
+ err := core.AddNode(entrynode, nil)
+ if err != nil {
+ return err
+ }
+
+ entryHash, err := entrynode.GetHash()
+ if err != nil {
+ return err
+ }
+ nextNode := core.Node{
+ BlockStart: 4000,
+ BlockEnd: 8000,
+ BlockSum: "3d73ff8cb154dcfe8cdae426021f679e541b47dbe14e8426e6b1cd3f2c57017c",
+ PrevNodeSum: entryHash,
+ }
+
+ err = core.AddNode(nextNode, nil)
+ if err != nil {
+ return err
+ }*/
header, err := core.ReadHeader("/dev/sda")
fmt.Printf("Magic Number: %d\n", header.MagicNumber)
@@ -61,12 +77,32 @@ func ValidateCommand(_ *cobra.Command, args []string) error {
fmt.Println("----")
+ key, err := core.ReadKey()
+ if err != nil {
+ return err
+ }
+ fmt.Println("Key: " + key)
+
+ err = core.VerifySignature(key, header.Signature, dbfile)
+ if err != nil {
+ return err
+ } else {
+ fmt.Println("Signtaure success")
+ }
+
+ fmt.Println("----")
+
disk, err := os.Open("./partition.raw")
reader := bufio.NewReader(disk)
part, err := core.ReadBlock(getnode, reader)
if err != nil {
return err
}
+ diskInfo, err := disk.Stat()
+ node, err := core.GetNode("Entrypoint", db)
+ if err != nil {
+ return err
+ }
hash, err := core.CalculateBlockHash(part)
fmt.Println(hash)
if err != nil {
@@ -80,19 +116,35 @@ func ValidateCommand(_ *cobra.Command, args []string) error {
}
fmt.Printf("Block '%s' ranging from %d to %d matches!\n", getnode.PrevNodeSum, getnode.BlockStart, getnode.BlockEnd)
- fmt.Println("----")
+ fmt.Println(node)
+ for int64(core.TotalReadBlocks) < diskInfo.Size() {
+ nodeSum, err := node.GetHash()
+ if err != nil {
+ return err
+ }
+ node, err := core.GetNode(nodeSum, db)
+ if err != nil {
+ return err
+ }
+ fmt.Println("----")
+ fmt.Println(node)
+ part, err := core.ReadBlock(node, reader)
+ if err != nil {
+ return err
+ }
+ hash, err := core.CalculateBlockHash(part)
+ fmt.Println(hash)
+ if err != nil {
+ return err
+ }
+ err = core.VerifyBlock(part, node)
+ if err != nil {
+ fmt.Println("fail")
+ return err
+ }
+ fmt.Printf("Block '%s' ranging from %d to %d matches!\n", getnode.PrevNodeSum, getnode.BlockStart, getnode.BlockEnd)
- key, err := core.ReadKey()
- if err != nil {
- return err
}
- fmt.Println("Key: " + key)
- err = core.VerifySignature(key, header.Signature, dbfile)
- if err != nil {
- return err
- } else {
- fmt.Println("Signtaure success")
- }
return nil
}
diff --git a/config/config.go b/config/config.go
index ac732af..f8e61e4 100644
--- a/config/config.go
+++ b/config/config.go
@@ -2,7 +2,7 @@ package config
// How the public key is stored
// 0: external file, 1: external storage device, 2: tpm2, 3: usb serial
-var KeyStore = 0
+var KeyStore = 3
// Where the public key is stored, only applies for 0, 1 and 3
-var KeyLocation = "./publickey"
+var KeyLocation = "/dev/ttyACM1"
diff --git a/core/storage.go b/core/storage.go
index 8346c12..6e9245a 100644
--- a/core/storage.go
+++ b/core/storage.go
@@ -27,6 +27,10 @@ type Node struct {
PrevNodeSum string
}
+func (n *Node) GetHash() (string, error) {
+ return calculateStringHash(fmt.Sprintf("%d%d%s%s", n.BlockStart, n.BlockEnd, n.BlockSum, n.PrevNodeSum))
+}
+
func parseUnitSpec(size []byte) int {
switch size[0] {
case 0:
diff --git a/core/verification.go b/core/verification.go
index b48c0b7..7c427c0 100644
--- a/core/verification.go
+++ b/core/verification.go
@@ -11,6 +11,8 @@ import (
"github.com/tarm/serial"
)
+var TotalReadBlocks int = 0
+
func fileReadKey() (string, error) {
if _, err := os.Stat(config.KeyLocation); os.IsNotExist(err) {
return "", fmt.Errorf("Key location %s does not exist", config.KeyLocation)
@@ -98,6 +100,7 @@ func ReadBlock(node Node, part *bufio.Reader) ([]byte, error) {
return []byte{}, err
}
block, err = part.Peek(blockSize)
+ TotalReadBlocks = TotalReadBlocks + blockSize
return block, err
}
diff --git a/my.db b/my.db
index 169b8b5..eadec1c 100644
--- a/my.db
+++ b/my.db
Binary files differ
diff --git a/part.fsverify b/part.fsverify
index 202acd1..8187c44 100644
--- a/part.fsverify
+++ b/part.fsverify
Binary files differ