From 06ce9370972508beede3b03d37dac740732ae70e Mon Sep 17 00:00:00 2001 From: Andrew Ayer Date: Fri, 24 May 2024 09:08:17 -0400 Subject: [PATCH 1/4] Improve some comments --- monitor/state.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/monitor/state.go b/monitor/state.go index 6595988..48097e4 100644 --- a/monitor/state.go +++ b/monitor/state.go @@ -61,7 +61,8 @@ type StateProvider interface { // feailure is not associated with a log. NotifyHealthCheckFailure(context.Context, *loglist.Log, HealthCheckFailure) error - // Called when an error occurs. The log is nil if the error is - // not associated with a log. Note that most errors are transient. + // Called when a non-fatal error occurs. The log is nil if the error is + // not associated with a log. Note that most errors are transient, and + // certspotter will retry the failed operation later. NotifyError(context.Context, *loglist.Log, error) error } From 7f17992c9cdc8c711fb733faf2315a24a993e5b2 Mon Sep 17 00:00:00 2001 From: Andrew Ayer Date: Sat, 25 May 2024 10:52:54 -0400 Subject: [PATCH 2/4] merkletree: factor out common initialization code --- merkletree/collapsed_tree.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/merkletree/collapsed_tree.go b/merkletree/collapsed_tree.go index f3dcd25..19a5a70 100644 --- a/merkletree/collapsed_tree.go +++ b/merkletree/collapsed_tree.go @@ -30,10 +30,11 @@ func EmptyCollapsedTree() *CollapsedTree { } func NewCollapsedTree(nodes []Hash, size uint64) (*CollapsedTree, error) { - if len(nodes) != calculateNumNodes(size) { - return nil, fmt.Errorf("nodes has wrong length (should be %d, not %d)", calculateNumNodes(size), len(nodes)) + tree := new(CollapsedTree) + if err := tree.Init(nodes, size); err != nil { + return nil, err } - return &CollapsedTree{nodes: nodes, size: size}, nil + return tree, nil } func CloneCollapsedTree(source *CollapsedTree) *CollapsedTree { @@ -105,10 +106,17 @@ func (tree *CollapsedTree) UnmarshalJSON(b []byte) error { if err := json.Unmarshal(b, &rawTree); err != nil { return fmt.Errorf("error unmarshalling Collapsed Merkle Tree: %w", err) } - if len(rawTree.Nodes) != calculateNumNodes(rawTree.Size) { - return fmt.Errorf("error unmarshalling Collapsed Merkle Tree: nodes has wrong length (should be %d, not %d)", calculateNumNodes(rawTree.Size), len(rawTree.Nodes)) + if err := tree.Init(rawTree.Nodes, rawTree.Size); err != nil { + return fmt.Errorf("error unmarshalling Collapsed Merkle Tree: %w", err) } - tree.size = rawTree.Size - tree.nodes = rawTree.Nodes + return nil +} + +func (tree *CollapsedTree) Init(nodes []Hash, size uint64) error { + if len(nodes) != calculateNumNodes(size) { + return fmt.Errorf("nodes has wrong length (should be %d, not %d)", calculateNumNodes(size), len(nodes)) + } + tree.size = size + tree.nodes = nodes return nil } From cc98a06bcb5daf2f0e0adfb131c09bcb6e2ba1c3 Mon Sep 17 00:00:00 2001 From: Andrew Ayer Date: Sat, 25 May 2024 11:19:55 -0400 Subject: [PATCH 3/4] merkletree: add method for getting collapsed tree nodes --- merkletree/collapsed_tree.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/merkletree/collapsed_tree.go b/merkletree/collapsed_tree.go index 19a5a70..7523481 100644 --- a/merkletree/collapsed_tree.go +++ b/merkletree/collapsed_tree.go @@ -87,6 +87,10 @@ func (tree *CollapsedTree) CalculateRoot() Hash { return hash } +func (tree *CollapsedTree) Nodes() []Hash { + return tree.nodes +} + func (tree *CollapsedTree) Size() uint64 { return tree.size } From 759631f7e6d73158aa0f6b5aa26ab871edc93234 Mon Sep 17 00:00:00 2001 From: Andrew Ayer Date: Sun, 9 Jun 2024 11:13:16 -0400 Subject: [PATCH 4/4] merkletree.Append: fix appending to empty trees --- merkletree/collapsed_tree.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/merkletree/collapsed_tree.go b/merkletree/collapsed_tree.go index 7523481..09eadb7 100644 --- a/merkletree/collapsed_tree.go +++ b/merkletree/collapsed_tree.go @@ -54,9 +54,11 @@ func (tree *CollapsedTree) Add(hash Hash) { } func (tree *CollapsedTree) Append(other *CollapsedTree) error { - maxSize := uint64(1) << bits.TrailingZeros64(tree.size) - if other.size > maxSize { - return fmt.Errorf("tree of size %d is too large to append to a tree of size %d (maximum size is %d)", other.size, tree.size, maxSize) + if tree.size > 0 { + maxSize := uint64(1) << bits.TrailingZeros64(tree.size) + if other.size > maxSize { + return fmt.Errorf("tree of size %d is too large to append to a tree of size %d (maximum size is %d)", other.size, tree.size, maxSize) + } } tree.nodes = append(tree.nodes, other.nodes...)