diff options
author | axtloss <axtlos@getcryst.al> | 2024-02-04 15:14:49 +0100 |
---|---|---|
committer | axtloss <axtlos@getcryst.al> | 2024-02-04 15:14:49 +0100 |
commit | 5b3826f5de82eb3dcb43bcb85261cd56e298668a (patch) | |
tree | b5a10c89fbc2b3a1123aa19b770305e5e3de8854 | |
parent | 71cc54810fdb51e428b83a37ff89d54a6cc3d8c8 (diff) | |
download | fsverify-5b3826f5de82eb3dcb43bcb85261cd56e298668a.tar.gz fsverify-5b3826f5de82eb3dcb43bcb85261cd56e298668a.tar.bz2 |
Repeated block verification
Diffstat (limited to '')
-rw-r--r-- | cmd/verify.go | 94 | ||||
-rw-r--r-- | config/config.go | 4 | ||||
-rw-r--r-- | core/storage.go | 4 | ||||
-rw-r--r-- | core/verification.go | 3 | ||||
-rw-r--r-- | my.db | bin | 32768 -> 32768 bytes | |||
-rw-r--r-- | part.fsverify | bin | 32200 -> 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/part.fsverify b/part.fsverify Binary files differindex 202acd1..8187c44 100644 --- a/part.fsverify +++ b/part.fsverify |