diff options
| -rw-r--r-- | handler.go | 17 | ||||
| -rw-r--r-- | reqres.go | 87 | ||||
| -rw-r--r-- | type.go | 8 | 
3 files changed, 23 insertions, 89 deletions
| @@ -73,9 +73,9 @@ func addEntry(ctx context.Context, i *Instance, w http.ResponseWriter, r *http.R  		return http.StatusInternalServerError, fmt.Errorf("failed creating signed debug info: %v", err)  	} -	response, err := NewAddEntryResponse(sdi) +	response, err := StItemToB64(sdi)  	if err != nil { -		return http.StatusInternalServerError, fmt.Errorf("failed creating AddEntryResponse: %v", err) +		return http.StatusInternalServerError, err  	}  	if err := WriteJsonResponse(response, w); err != nil {  		return http.StatusInternalServerError, err @@ -160,9 +160,9 @@ func getProofByHash(ctx context.Context, i *Instance, w http.ResponseWriter, r *  	}  	// TODO: verify that proof is valid? -	response, err := NewGetProofByHashResponse(i.LogParameters.LogId, uint64(request.TreeSize), trillianResponse.Proof[0]) +	response, err := StItemToB64(NewInclusionProofV1(i.LogParameters.LogId, uint64(request.TreeSize), trillianResponse.Proof[0]))  	if err != nil { -		return http.StatusInternalServerError, fmt.Errorf("failed creating get-proof-by-hash response: %v", err) +		return http.StatusInternalServerError, err  	}  	if err := WriteJsonResponse(response, w); err != nil {  		return http.StatusInternalServerError, err @@ -189,15 +189,14 @@ func getConsistencyProof(ctx context.Context, i *Instance, w http.ResponseWriter  	}  	// TODO: santity-checks? -	response, err := NewGetConsistencyProofResponse(i.LogParameters.LogId, request.First, request.Second, trillianResponse.Proof) +	response, err := StItemToB64(NewConsistencyProofV1(i.LogParameters.LogId, request.First, request.Second, trillianResponse.Proof))  	if err != nil { -		return http.StatusInternalServerError, fmt.Errorf("failed creating get-consistency-proof response: %v", err) +		return http.StatusInternalServerError, err  	}  	if err := WriteJsonResponse(response, w); err != nil {  		return http.StatusInternalServerError, err  	}  	return http.StatusOK, nil -	return http.StatusOK, nil // TODO  }  // getSth provides the most recent STH @@ -221,9 +220,9 @@ func getSth(ctx context.Context, i *Instance, w http.ResponseWriter, _ *http.Req  	}  	glog.Infof("%v", sth) -	response, err := NewGetSthResponse(sth) +	response, err := StItemToB64(sth)  	if err != nil { -		return http.StatusInternalServerError, fmt.Errorf("failed creating GetSthResponse: %v", err) +		return http.StatusInternalServerError, err  	}  	if err := WriteJsonResponse(response, w); err != nil {  		return http.StatusInternalServerError, err @@ -36,13 +36,8 @@ type GetProofByHashRequest struct {  // GetConsistencyProofRequest is a collection of get-consistency-proof input  // parameters  type GetConsistencyProofRequest struct { -	First  int64 `json:"first"` -	Second int64 `json:"second"` -} - -// AddEntryResponse is an assembled add-entry response -type AddEntryResponse struct { -	SignedDebugInfo string `json:"sdi"` +	First  int64 `json:"first"`  // size of the older Merkle tree +	Second int64 `json:"second"` // size of the newer Merkle tree  }  // GetEntryResponse is an assembled log entry and its associated appendix @@ -52,30 +47,6 @@ type GetEntryResponse struct {  	Chain     []string `json:"chain"`     // base64-encoded X.509 certificates  } -// GetEntriesResponse is an assembled get-entries responses -type GetEntriesResponse struct { -	Entries []GetEntryResponse `json:"entries"` -} - -// GetProofByHashResponse is an assembled inclusion proof response -type GetProofByHashResponse struct { -	InclusionProof string `json:"inclusion_proof"` // base64-encoded StItem -} - -type GetConsistencyProofResponse struct { -	ConsistencyProof string `json:"consistency_proof"` // base64-encoded StItem -} - -// GetAnchorsResponse is an assembled get-anchor response -type GetAnchorsResponse struct { -	Certificates []string `json:"certificates"` -} - -// GetSthResponse is an assembled get-sth response -type GetSthResponse struct { -	SignedTreeHead string `json:"sth"` // base64-encoded StItem -} -  // NewAddEntryRequest parses and sanitizes the JSON-encoded add-entry  // parameters from an incoming HTTP post.  The resulting AddEntryRequest is  // well-formed, but not necessarily trusted (further sanitization is needed). @@ -159,17 +130,6 @@ func NewGetConsistencyProofRequest(httpRequest *http.Request) (GetConsistencyPro  	return GetConsistencyProofRequest{First: first, Second: second}, nil  } -// NewAddEntryResponse assembles an add-entry response from an SDI -func NewAddEntryResponse(sdi StItem) (AddEntryResponse, error) { -	b, err := tls.Marshal(sdi) -	if err != nil { -		return AddEntryResponse{}, fmt.Errorf("tls marshal failed: %v", err) -	} -	return AddEntryResponse{ -		SignedDebugInfo: base64.StdEncoding.EncodeToString(b), -	}, nil -} -  // NewGetEntryResponse assembles a log entry and its appendix  func NewGetEntryResponse(leaf, appendix []byte) (GetEntryResponse, error) {  	var app Appendix @@ -193,57 +153,24 @@ func NewGetEntryResponse(leaf, appendix []byte) (GetEntryResponse, error) {  }  // NewGetEntriesResponse assembles a get-entries response -func NewGetEntriesResponse(leaves []*trillian.LogLeaf) (GetEntriesResponse, error) { +func NewGetEntriesResponse(leaves []*trillian.LogLeaf) ([]GetEntryResponse, error) {  	entries := make([]GetEntryResponse, 0, len(leaves))  	for _, leaf := range leaves {  		entry, err := NewGetEntryResponse(leaf.GetLeafValue(), leaf.GetExtraData())  		if err != nil { -			return GetEntriesResponse{}, err +			return nil, err  		}  		entries = append(entries, entry)  	} -	return GetEntriesResponse{entries}, nil -} - -// NewGetProofByHashResponse assembles a get-proof-by-hash response -func NewGetProofByHashResponse(logId []byte, treeSize uint64, inclusionProof *trillian.Proof) (*GetProofByHashResponse, error) { -	item := NewInclusionProofV1(logId, treeSize, inclusionProof) -	b, err := tls.Marshal(item) -	if err != nil { -		return nil, fmt.Errorf("tls marshal failed: %v", err) -	} -	return &GetProofByHashResponse{ -		InclusionProof: base64.StdEncoding.EncodeToString(b), -	}, nil -} - -func NewGetConsistencyProofResponse(logId []byte, first, second int64, consistencyProof *trillian.Proof) (*GetConsistencyProofResponse, error) { -	item := NewConsistencyProofV1(logId, first, second, consistencyProof) -	b, err := tls.Marshal(item) -	if err != nil { -		return nil, fmt.Errorf("tls marshal failed: %v", err) -	} -	return &GetConsistencyProofResponse{ -		ConsistencyProof: base64.StdEncoding.EncodeToString(b), -	}, nil +	return entries, nil  } -func NewGetAnchorsResponse(anchors []*x509.Certificate) GetAnchorsResponse { +func NewGetAnchorsResponse(anchors []*x509.Certificate) []string {  	certificates := make([]string, 0, len(anchors))  	for _, certificate := range anchors {  		certificates = append(certificates, base64.StdEncoding.EncodeToString(certificate.Raw))  	} -	return GetAnchorsResponse{Certificates: certificates} -} - -func NewGetSthResponse(sth StItem) (GetSthResponse, error) { -	b, err := tls.Marshal(sth) -	if err != nil { -		return GetSthResponse{}, fmt.Errorf("tls marshal failed: %v", err) -	} -	return GetSthResponse{ -		SignedTreeHead: base64.StdEncoding.EncodeToString(b), -	}, nil +	return certificates  }  // VerifyAddEntryRequest determines whether a well-formed AddEntryRequest should @@ -262,6 +262,14 @@ func StItemFromB64(s string) (StItem, error) {  	return item, nil  } +func StItemToB64(i StItem) (string, error) { +	b, err := tls.Marshal(i) +	if err != nil { +		return "", fmt.Errorf("StItem(%v) tls marshal failed: %v", i.Format, err) +	} +	return base64.StdEncoding.EncodeToString(b), nil +} +  // Appendix is extra data that Trillian can store about a leaf  type Appendix struct {  	Signature []byte           `tls:"minlen:0,maxlen:16383"` | 
