From 7e4d74b9150b58dc2eea0a0fd1bfb2e4b65465fb Mon Sep 17 00:00:00 2001 From: Rasmus Dahlberg Date: Fri, 17 Mar 2023 10:09:38 +0100 Subject: Add utils --- internal/utils/utils.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 internal/utils/utils.go diff --git a/internal/utils/utils.go b/internal/utils/utils.go new file mode 100644 index 0000000..7f5b1bc --- /dev/null +++ b/internal/utils/utils.go @@ -0,0 +1,56 @@ +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 +} -- cgit v1.2.3