aboutsummaryrefslogtreecommitdiff
path: root/cmd_collect.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd_collect.go')
-rw-r--r--cmd_collect.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/cmd_collect.go b/cmd_collect.go
index 4d93271..742884a 100644
--- a/cmd_collect.go
+++ b/cmd_collect.go
@@ -3,7 +3,6 @@ package main
import (
"container/heap"
"context"
- "crypto/sha256"
"encoding/json"
"fmt"
logger "log"
@@ -121,15 +120,18 @@ func collect(opts options) error {
// chunk that a single sequencer can verify and persist
//
callback := func(eb scanner.EntryBatch) {
- leafHashes := [][sha256.Size]byte{}
+ c := &chunk.Chunk{Start: eb.Start}
for i := 0; i < len(eb.Entries); i++ {
- leafHashes = append(leafHashes, merkle.HashLeafNode(eb.Entries[i].LeafInput))
+ c.LeafHashes = append(c.LeafHashes, merkle.HashLeafNode(eb.Entries[i].LeafInput))
}
- sans, errs := x509.SANsFromLeafEntries(eb.Start, eb.Entries)
+
+ var errs []error
+ c.SANs, errs = x509.SANsFromLeafEntries(eb.Start, eb.Entries)
for _, err := range errs {
- logger.Printf("NOTICE: %s: %v", *log.Description, err)
+ c.Notes = append(c.Notes, fmt.Sprintf("NOTICE: %s: %v", *log.Description, err))
}
- chunksCh <- &chunk.Chunk{eb.Start, leafHashes, sans}
+
+ chunksCh <- c
}
if err := fetcher.Run(ctx, callback); err != nil {
@@ -275,6 +277,21 @@ func persist(c *chunk.Chunk,
return false, err
}
+ // Persist notes to disk
+ if len(c.Notes) > 0 {
+ fpn, err := os.OpenFile(fmt.Sprintf("%s/%x/%s", opts.logDirectory, logID, opts.noticeFile), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
+ if err != nil {
+ return false, err
+ }
+ defer fpn.Close()
+ if _, err := fpn.WriteString(strings.Join(c.Notes, "\n") + "\n"); err != nil {
+ return false, err
+ }
+ if err := fpn.Sync(); err != nil {
+ return false, err
+ }
+ }
+
// Persist new tree state to disk
b, err := json.Marshal(&newTH)
if err != nil {