mirror of
				https://github.com/SSLMate/certspotter.git
				synced 2025-07-03 10:47:17 +02:00 
			
		
		
		
	Add constructor functions for MerkleTreeBuilder
This commit is contained in:
		
							parent
							
								
									39737f33ec
								
							
						
					
					
						commit
						3673518b30
					
				
							
								
								
									
										19
									
								
								auditing.go
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								auditing.go
									
									
									
									
									
								
							@ -12,6 +12,7 @@ package certspotter
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"crypto/sha256"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"software.sslmate.com/src/certspotter/ct"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -141,6 +142,24 @@ type MerkleTreeBuilder struct {
 | 
			
		||||
	numLeaves  uint64 // number of hashes added so far
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func calculateStackSize (numLeaves uint64) int {
 | 
			
		||||
	stackSize := 0
 | 
			
		||||
	for numLeaves > 0 {
 | 
			
		||||
		stackSize += int(numLeaves & 1)
 | 
			
		||||
		numLeaves >>= 1
 | 
			
		||||
	}
 | 
			
		||||
	return stackSize
 | 
			
		||||
}
 | 
			
		||||
func EmptyMerkleTreeBuilder () *MerkleTreeBuilder {
 | 
			
		||||
	return &MerkleTreeBuilder{}
 | 
			
		||||
}
 | 
			
		||||
func NewMerkleTreeBuilder (stack []ct.MerkleTreeNode, numLeaves uint64) (*MerkleTreeBuilder, error) {
 | 
			
		||||
	if len(stack) != calculateStackSize(numLeaves) {
 | 
			
		||||
		return nil, errors.New("NewMerkleTreeBuilder: incorrect stack size")
 | 
			
		||||
	}
 | 
			
		||||
	return &MerkleTreeBuilder{stack: stack, numLeaves: numLeaves}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (builder *MerkleTreeBuilder) Add(hash ct.MerkleTreeNode) {
 | 
			
		||||
	builder.stack = append(builder.stack, hash)
 | 
			
		||||
	builder.numLeaves++
 | 
			
		||||
 | 
			
		||||
@ -254,9 +254,12 @@ func (s *Scanner) MakeMerkleTreeBuilder(sth *ct.SignedTreeHead) (*MerkleTreeBuil
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		reverseHashes(auditPath)
 | 
			
		||||
		builder = &MerkleTreeBuilder{numLeaves: sth.TreeSize - 1, stack: auditPath}
 | 
			
		||||
		builder, err = NewMerkleTreeBuilder(auditPath, sth.TreeSize - 1)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, fmt.Errorf("Error returned bad audit proof for %x to %d", leafHash, sth.TreeSize)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		builder = &MerkleTreeBuilder{numLeaves: 0}
 | 
			
		||||
		builder = EmptyMerkleTreeBuilder()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	builder.Add(leafHash)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user