diff options
author | Rasmus Dahlberg <rasmus.dahlberg@kau.se> | 2020-11-17 15:34:33 +0100 |
---|---|---|
committer | Rasmus Dahlberg <rasmus.dahlberg@kau.se> | 2020-11-17 15:34:33 +0100 |
commit | c11006fb89bcac7fdfc2278990b2b1a3a3553ba9 (patch) | |
tree | 7dc1547912ba1a018b56e8e1dc4e3fe27d4cbff9 /type.go | |
parent | f02d9ad52b4b70fc1af8224201cf993faa82eaee (diff) |
added type tests
As a result these changes were made:
- Simplified a few New* functions
- Allowed empty inclusion and consistency proofs, which is in contrast
to not being able to marshal them due to `tls:"minlen:1"`. For example,
an inclusion proof will be empty for a Merkle tree of size 1.
- Disallowed empty signatures and chains in a leaf's Appendix
- Removed unnecessary examples
Diffstat (limited to 'type.go')
-rw-r--r-- | type.go | 27 |
1 files changed, 13 insertions, 14 deletions
@@ -8,7 +8,6 @@ import ( "encoding/base64" "github.com/google/certificate-transparency-go/tls" - "github.com/google/trillian" "github.com/google/trillian/types" ) @@ -54,7 +53,7 @@ type ConsistencyProofV1 struct { LogId []byte `tls:"minlen:32,maxlen:32"` TreeSize1 uint64 TreeSize2 uint64 - ConsistencyPath []NodeHash `tls:"minlen:1,maxlen:65535"` + ConsistencyPath []NodeHash `tls:"minlen:0,maxlen:65535"` } // InclusionProofV1 is an inclusion proof as defined by RFC 6962/bis, ยง4.12 @@ -62,7 +61,7 @@ type InclusionProofV1 struct { LogId []byte `tls:"minlen:32,maxlen:32"` TreeSize uint64 LeafIndex uint64 - InclusionPath []NodeHash `tls:"minlen:1,maxlen:65535"` + InclusionPath []NodeHash `tls:"minlen:0,maxlen:65535"` } // ChecksumV1 associates a leaf type as defined by markdown/api.md @@ -91,9 +90,9 @@ type RawCertificate struct { // Appendix is extra leaf data that is not stored in the log's Merkle tree type Appendix struct { - Signature []byte `tls:"minlen:0,maxlen:16383"` + Signature []byte `tls:"minlen:1,maxlen:16383"` SignatureScheme uint16 - Chain []RawCertificate `tls:"minlen:0,maxlen:65535"` + Chain []RawCertificate `tls:"minlen:1,maxlen:65535"` } func (f StFormat) String() string { @@ -249,21 +248,21 @@ func NewSignedDebugInfoV1(logId, message, signature []byte) *StItem { } // NewInclusionProofV1 creates a new StItem of type inclusion_proof_v1 -func NewInclusionProofV1(logID []byte, treeSize uint64, proof *trillian.Proof) *StItem { - inclusionPath := make([]NodeHash, 0, len(proof.Hashes)) - for _, hash := range proof.Hashes { - inclusionPath = append(inclusionPath, NodeHash{Data: hash}) +func NewInclusionProofV1(logID []byte, treeSize, index uint64, proof [][]byte) *StItem { + path := make([]NodeHash, 0, len(proof)) + for _, hash := range proof { + path = append(path, NodeHash{Data: hash}) } return &StItem{ Format: StFormatInclusionProofV1, - InclusionProofV1: &InclusionProofV1{logID, treeSize, uint64(proof.LeafIndex), inclusionPath}, + InclusionProofV1: &InclusionProofV1{logID, treeSize, index, path}, } } // NewConsistencyProofV1 creates a new StItem of type consistency_proof_v1 -func NewConsistencyProofV1(logId []byte, first, second int64, proof *trillian.Proof) *StItem { - path := make([]NodeHash, 0, len(proof.Hashes)) - for _, hash := range proof.Hashes { +func NewConsistencyProofV1(logId []byte, first, second uint64, proof [][]byte) *StItem { + path := make([]NodeHash, 0, len(proof)) + for _, hash := range proof { path = append(path, NodeHash{Data: hash}) } return &StItem{ @@ -282,7 +281,7 @@ func NewChecksumV1(identifier []byte, checksum []byte) *StItem { // NewTreeHead creates a new TreeHeadV1 from a Trillian-signed log root without // verifying any signature. In other words, Trillian <-> STFE must be trusted. -func NewTreeHeadV1(lp *LogParameters, lr *types.LogRootV1) *TreeHeadV1 { +func NewTreeHeadV1(lr *types.LogRootV1) *TreeHeadV1 { return &TreeHeadV1{ uint64(lr.TimestampNanos / 1000 / 1000), uint64(lr.TreeSize), |