Minor cleanup to improve encapsulation

This commit is contained in:
Andrew Ayer 2016-02-18 10:23:07 -08:00
parent b47d35a005
commit e91d7bacbd
3 changed files with 11 additions and 20 deletions

View File

@ -13,7 +13,7 @@ func reverseHashes (hashes []ct.MerkleTreeNode) {
}
}
func VerifyConsistencyProof (proof ct.ConsistencyProof, first *ct.SignedTreeHead, second *ct.SignedTreeHead) (bool, []ct.MerkleTreeNode) {
func VerifyConsistencyProof (proof ct.ConsistencyProof, first *ct.SignedTreeHead, second *ct.SignedTreeHead) (bool, *MerkleTreeBuilder) {
if second.TreeSize < first.TreeSize {
// Can't be consistent if tree got smaller
return false, nil
@ -97,7 +97,7 @@ func VerifyConsistencyProof (proof ct.ConsistencyProof, first *ct.SignedTreeHead
reverseHashes(leftHashes)
return true, leftHashes
return true, &MerkleTreeBuilder{stack: leftHashes, size: first.TreeSize}
}
func hashLeaf (leafBytes []byte) ct.MerkleTreeNode {
@ -120,13 +120,6 @@ type MerkleTreeBuilder struct {
size uint64 // number of hashes added so far
}
func ResumedMerkleTreeBuilder (hashes []ct.MerkleTreeNode, size uint64) *MerkleTreeBuilder {
return &MerkleTreeBuilder{
stack: hashes,
size: size,
}
}
func (builder *MerkleTreeBuilder) Add (hash ct.MerkleTreeNode) {
builder.stack = append(builder.stack, hash)
builder.size++

View File

@ -13,7 +13,6 @@ import (
"path/filepath"
"src.agwa.name/ctwatch"
"github.com/google/certificate-transparency/go/client"
)
var batchSize = flag.Int("batch_size", 1000, "Max number of entries to request at per call to get-entries")
@ -133,14 +132,13 @@ func Main (argStateDir string, processCallback ctwatch.ProcessCallback) {
os.Exit(3)
}
logClient := client.New(logUri)
opts := ctwatch.ScannerOptions{
BatchSize: *batchSize,
NumWorkers: *numWorkers,
ParallelFetch: *parallelFetch,
Quiet: !*verbose,
}
scanner := ctwatch.NewScanner(logUri, logKey, logClient, opts)
scanner := ctwatch.NewScanner(logUri, logKey, opts)
latestSTH, err := scanner.GetSTH()
if err != nil {
@ -161,7 +159,9 @@ func Main (argStateDir string, processCallback ctwatch.ProcessCallback) {
if latestSTH.TreeSize > startIndex {
var treeBuilder *ctwatch.MerkleTreeBuilder
if prevSTH != nil {
valid, nodes, err := scanner.CheckConsistency(prevSTH, latestSTH)
var valid bool
var err error
valid, treeBuilder, err = scanner.CheckConsistency(prevSTH, latestSTH)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: Error fetching consistency proof: %s: %s\n", os.Args[0], logUri, err)
exitCode = 1
@ -172,8 +172,6 @@ func Main (argStateDir string, processCallback ctwatch.ProcessCallback) {
exitCode = 1
continue
}
treeBuilder = ctwatch.ResumedMerkleTreeBuilder(nodes, prevSTH.TreeSize)
} else {
treeBuilder = &ctwatch.MerkleTreeBuilder{}
}

View File

@ -185,7 +185,7 @@ func (s *Scanner) GetSTH() (*ct.SignedTreeHead, error) {
return latestSth, nil
}
func (s *Scanner) CheckConsistency(first *ct.SignedTreeHead, second *ct.SignedTreeHead) (bool, []ct.MerkleTreeNode, error) {
func (s *Scanner) CheckConsistency(first *ct.SignedTreeHead, second *ct.SignedTreeHead) (bool, *MerkleTreeBuilder, error) {
var proof ct.ConsistencyProof
if first.TreeSize > second.TreeSize {
@ -203,8 +203,8 @@ func (s *Scanner) CheckConsistency(first *ct.SignedTreeHead, second *ct.SignedTr
}
}
valid, builderNodes := VerifyConsistencyProof(proof, first, second)
return valid, builderNodes, nil
valid, treeBuilder := VerifyConsistencyProof(proof, first, second)
return valid, treeBuilder, nil
}
func (s *Scanner) Scan(startIndex int64, endIndex int64, processCert ProcessCallback, treeBuilder *MerkleTreeBuilder) error {
@ -268,11 +268,11 @@ func (s *Scanner) Scan(startIndex int64, endIndex int64, processCert ProcessCall
// Creates a new Scanner instance using |client| to talk to the log, and taking
// configuration options from |opts|.
func NewScanner(logUri string, publicKey crypto.PublicKey, client *client.LogClient, opts ScannerOptions) *Scanner {
func NewScanner(logUri string, publicKey crypto.PublicKey, opts ScannerOptions) *Scanner {
var scanner Scanner
scanner.LogUri = logUri
scanner.publicKey = publicKey
scanner.logClient = client
scanner.logClient = client.New(logUri)
scanner.opts = opts
return &scanner
}