package utils import ( "crypto/sha256" "fmt" "os" "git.cs.kau.se/rasmoste/ct-sans/internal/merkle" "gitlab.torproject.org/rgdd/ct/pkg/metadata" ) // Logs select logs that count towards CT-compliance checks. Logs that don't // have a description are skipped after printing a warning. func Logs(md metadata.Metadata) (logs []metadata.Log) { for _, operators := range md.Operators { for _, log := range operators.Logs { if log.Description == nil { fmt.Fprintf(os.Stderr, "WARNING: skipping log without description") continue } if log.State == nil { continue // skip logs with unknown states } if log.State.Name == metadata.LogStatePending { continue // pending logs do not count towards CT-compliance } if log.State.Name == metadata.LogStateRetired { continue // retired logs are not necessarily reachable } if log.State.Name == metadata.LogStateRejected { continue // rejected logs do not count towards CT-compliance } logs = append(logs, log) } } return } // Proof formats hashes so that they can be passed to the merkle package func Proof(hashes [][]byte) (p [][sha256.Size]byte) { for _, hash := range hashes { var h [sha256.Size]byte copy(h[:], hash) p = append(p, h) } return } // LeafHashes formats a list of data as leaf hashes func LeafHashes(data [][]byte) (lh [][sha256.Size]byte) { for _, d := range data { lh = append(lh, merkle.HashLeafNode(d)) } return }