aboutsummaryrefslogtreecommitdiff
path: root/types
diff options
context:
space:
mode:
Diffstat (limited to 'types')
-rw-r--r--types/http.go45
-rw-r--r--types/http_test.go9
2 files changed, 42 insertions, 12 deletions
diff --git a/types/http.go b/types/http.go
index cc61d26..8bbe26d 100644
--- a/types/http.go
+++ b/types/http.go
@@ -54,27 +54,39 @@ func (sth *SignedTreeHead) ToHTTP() ([]byte, error) {
hdr.Add(HeaderSignature, hex.EncodeToString(sigident.Signature[:]))
hdr.Add(HeaderKeyHash, hex.EncodeToString(sigident.KeyHash[:]))
}
-
- buf := bytes.NewBuffer(nil)
- if err := hdr.Write(buf); err != nil {
- return nil, fmt.Errorf("hdr.Write(): %v", err) // should not happen
- }
- return buf.Bytes(), nil
+ return headerToBytes(hdr)
}
// ToHTTP returns a consistency proof as HTTP key-value pairs
-func (p *ConsistencyProof) ToHTTP() []byte {
- return nil // TODO
+func (p *ConsistencyProof) ToHTTP() ([]byte, error) {
+ hdr := http.Header{}
+ hdr.Add(HeaderNewSize, strconv.FormatUint(p.NewSize, 10))
+ hdr.Add(HeaderOldSize, strconv.FormatUint(p.OldSize, 10))
+ for _, hash := range p.Path {
+ hdr.Add(HeaderConsistencyPath, hex.EncodeToString(hash[:]))
+ }
+ return headerToBytes(hdr)
}
// ToHTTP returns an inclusion proof as HTTP key-value pairs
-func (p *InclusionProof) ToHTTP() []byte {
- return nil // TODO
+func (p *InclusionProof) ToHTTP() ([]byte, error) {
+ hdr := http.Header{}
+ hdr.Add(HeaderTreeSize, strconv.FormatUint(p.TreeSize, 10))
+ hdr.Add(HeaderLeafIndex, strconv.FormatUint(p.LeafIndex, 10))
+ for _, hash := range p.Path {
+ hdr.Add(HeaderInclusionPath, hex.EncodeToString(hash[:]))
+ }
+ return headerToBytes(hdr)
}
// ToHTTP returns a leaf as HTTP key-value pairs
-func (l *Leaf) ToHTTP() []byte {
- return nil // TODO
+func (l *Leaf) ToHTTP() ([]byte, error) {
+ hdr := http.Header{}
+ hdr.Add(HeaderShardHint, strconv.FormatUint(l.ShardHint, 10))
+ hdr.Add(HeaderChecksum, hex.EncodeToString(l.Checksum[:]))
+ hdr.Add(HeaderSignature, hex.EncodeToString(l.Signature[:]))
+ hdr.Add(HeaderKeyHash, hex.EncodeToString(l.KeyHash[:]))
+ return headerToBytes(hdr)
}
// SignedTreeHeadFromHTTP parses a signed tree head from HTTP key-value pairs
@@ -165,3 +177,12 @@ func decodeHex(str string, out []byte) error {
copy(out, buf)
return nil
}
+
+// headerToBytes encodes a header as HTTP key-value pairs
+func headerToBytes(hdr http.Header) ([]byte, error) {
+ buf := bytes.NewBuffer(nil)
+ if err := hdr.Write(buf); err != nil {
+ return nil, fmt.Errorf("hdr.Write(): %v", err) // should not happen
+ }
+ return buf.Bytes(), nil
+}
diff --git a/types/http_test.go b/types/http_test.go
index 8165edf..527bcdf 100644
--- a/types/http_test.go
+++ b/types/http_test.go
@@ -57,6 +57,15 @@ func TestSignedTreeHeadToHTTP(t *testing.T) {
compareHeaderWithMap(t, description, hdr, want)
}
+func TestConsistencyProofToHTTP(t *testing.T) { // TODO
+}
+
+func TestInclusionProofToHTTP(t *testing.T) { // TODO
+}
+
+func TestLeafToHTTP(t *testing.T) { // TODO
+}
+
func TestSignedTreeHeadFromHTTP(t *testing.T) {
for _, table := range []struct {
description string