From 2fb47c1fc76bd7ef842002b8b284d9e3ac80f6d7 Mon Sep 17 00:00:00 2001 From: Ismail Khoffi Date: Tue, 1 Aug 2017 16:42:22 +0100 Subject: [PATCH 1/5] resolves #672 --- cmd/keytransparency-server/main.go | 4 +- core/crypto/vrf/p256/p256.go | 19 + core/crypto/vrf/vrf.go | 2 + core/keyserver/keyserver.go | 37 ++ .../keytransparency_v1_types.pb.go | 349 ++++++++++++++---- .../keytransparency_v1_types.proto | 25 +- .../keytransparency_v1_service.pb.go | 86 ++++- .../keytransparency_v1_service.pb.gw.go | 41 ++ .../keytransparency_v1_service.proto | 9 + 9 files changed, 483 insertions(+), 89 deletions(-) diff --git a/cmd/keytransparency-server/main.go b/cmd/keytransparency-server/main.go index ef0a619c5..81b7d24d4 100644 --- a/cmd/keytransparency-server/main.go +++ b/cmd/keytransparency-server/main.go @@ -193,12 +193,14 @@ func main() { // Connect to map server. var tmap trillian.TrillianMapClient + var tadmin trillian.TrillianAdminClient if *mapURL != "" { mconn, err := grpc.Dial(*mapURL, grpc.WithInsecure()) if err != nil { glog.Exitf("grpc.Dial(%v): %v", *mapURL, err) } tmap = trillian.NewTrillianMapClient(mconn) + tadmin = trillian.NewTrillianAdminClient(mconn) } else { // Create an in-process readonly mapserver. tmap, err = newReadonlyMapServer(context.Background(), *mapID, sqldb, factory) @@ -208,7 +210,7 @@ func main() { } // Create gRPC server. - svr := keyserver.New(*logID, tlog, *mapID, tmap, commitments, + svr := keyserver.New(*logID, tlog, *mapID, tmap, tadmin, commitments, vrfPriv, mutator, auth, authz, factory, mutations) grpcServer := grpc.NewServer( grpc.Creds(creds), diff --git a/core/crypto/vrf/p256/p256.go b/core/crypto/vrf/p256/p256.go index 358383c0f..e575b438e 100644 --- a/core/crypto/vrf/p256/p256.go +++ b/core/crypto/vrf/p256/p256.go @@ -33,6 +33,8 @@ import ( "encoding/pem" "errors" "math/big" + "github.com/golang/glog" + "reflect" ) var ( @@ -221,6 +223,23 @@ func NewVRFSigner(key *ecdsa.PrivateKey) (*PrivateKey, error) { return &PrivateKey{key}, nil } +// Public returns the corresponding public key as bytes. +func (k PrivateKey) Public() ([]byte, error) { + // Copied from: core/crypto/signatures/p256/ecdsa_p256.go + glog.Errorf("reflect.TypeOf(k.PublicKey)=%v", reflect.TypeOf(k.PublicKey)) + pkBytes, err := x509.MarshalPKIXPublicKey(&k.PublicKey) + if err != nil { + return nil, err + } + pkPEM := pem.EncodeToMemory( + &pem.Block{ + Type: "PUBLIC KEY", + Bytes: pkBytes, + }, + ) + return pkPEM, nil +} + // NewVRFVerifier creates a verifier object from a public key. func NewVRFVerifier(pubkey *ecdsa.PublicKey) (*PublicKey, error) { if *(pubkey.Params()) != *curve.Params() { diff --git a/core/crypto/vrf/vrf.go b/core/crypto/vrf/vrf.go index 1d64d7e69..6d706e243 100644 --- a/core/crypto/vrf/vrf.go +++ b/core/crypto/vrf/vrf.go @@ -30,6 +30,8 @@ import ( type PrivateKey interface { // Evaluate returns the output of H(f_k(m)) and its proof. Evaluate(m []byte) (index [32]byte, proof []byte) + // Public returns the corresponding public key as bytes. + Public() ([]byte, error) } // PublicKey supports verifying output from the VRF function. diff --git a/core/keyserver/keyserver.go b/core/keyserver/keyserver.go index 9e5a72b3e..ef2d333f0 100644 --- a/core/keyserver/keyserver.go +++ b/core/keyserver/keyserver.go @@ -32,6 +32,7 @@ import ( authzpb "github.com/google/keytransparency/core/proto/authorization" tpb "github.com/google/keytransparency/core/proto/keytransparency_v1_types" "github.com/google/trillian" + "github.com/google/trillian/crypto/keyspb" ) const ( @@ -51,6 +52,7 @@ type Server struct { tlog trillian.TrillianLogClient mapID int64 tmap trillian.TrillianMapClient + tadmin trillian.TrillianAdminClient committer commitments.Committer auth authentication.Authenticator authz authorization.Authorization @@ -65,6 +67,7 @@ func New(logID int64, tlog trillian.TrillianLogClient, mapID int64, tmap trillian.TrillianMapClient, + tadmin trillian.TrillianAdminClient, committer commitments.Committer, vrf vrf.PrivateKey, mutator mutator.Mutator, @@ -77,6 +80,7 @@ func New(logID int64, tlog: tlog, mapID: mapID, tmap: tmap, + tadmin: tadmin, committer: committer, vrf: vrf, mutator: mutator, @@ -319,6 +323,39 @@ func (s *Server) UpdateEntry(ctx context.Context, in *tpb.UpdateEntryRequest) (* return &tpb.UpdateEntryResponse{Proof: resp}, nil } +// GetDomainInfo returns all info tight to this specific domain. +// +// This API to get all necessary data needed to verify a particular +// key-server. Data contains for instance the tree-info, like for instance the +// log-/map-id and the corresponding public-keys. +func (s *Server) GetDomainInfo(ctx context.Context, in *tpb.GetDomainInfoRequest) (*tpb.GetDomainInfoResponse, error) { + logTree, err := s.tadmin.GetTree(ctx, &trillian.GetTreeRequest{ + TreeId: s.logID, + }) + if err != nil { + return nil, err + } + mapTree, err := s.tadmin.GetTree(ctx, &trillian.GetTreeRequest{ + TreeId: s.mapID, + }) + if err != nil { + return nil, err + } + + vrfPub, err := s.vrf.Public() + if err != nil { + return nil, err + } + + return &tpb.GetDomainInfoResponse{ + Log: logTree, + Map: mapTree, + Vrf: &keyspb.PublicKey{ + Der: vrfPub, + }, + }, nil +} + func (s *Server) saveCommitment(ctx context.Context, kv *tpb.KeyValue, committed *tpb.Committed) error { entry := new(tpb.Entry) if err := proto.Unmarshal(kv.Value, entry); err != nil { diff --git a/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go b/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go index 94839f807..808e3cbd6 100644 --- a/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go +++ b/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go @@ -29,12 +29,15 @@ It has these top-level messages: UpdateEntryResponse GetMutationsRequest GetMutationsResponse + GetDomainInfoRequest + GetDomainInfoResponse */ package keytransparency_v1_types import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" +import keyspb "github.com/google/trillian/crypto/keyspb" import sigpb "github.com/google/trillian/crypto/sigpb" import trillian "github.com/google/trillian" import trillian1 "github.com/google/trillian" @@ -756,6 +759,209 @@ func (m *GetMutationsResponse) GetNextPageToken() string { return "" } +// GetDomainInfoRequest contains an emtpy request to query the GetDomainInfo +// APIs. +type GetDomainInfoRequest struct { +} + +func (m *GetDomainInfoRequest) Reset() { *m = GetDomainInfoRequest{} } +func (m *GetDomainInfoRequest) String() string { return proto.CompactTextString(m) } +func (*GetDomainInfoRequest) ProtoMessage() {} +func (*GetDomainInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +// GetDomainInfoResponse contains the results of GetDomainInfo APIs. +type GetDomainInfoResponse struct { + // Log contains the Log-Tree's info. + Log *trillian.Tree `protobuf:"bytes,1,opt,name=log" json:"log,omitempty"` + // Map contains the Map-Tree's info. + Map *trillian.Tree `protobuf:"bytes,2,opt,name=map" json:"map,omitempty"` + // Vrf contains the VRF public key. + Vrf *keyspb.PublicKey `protobuf:"bytes,3,opt,name=vrf" json:"vrf,omitempty"` +} + +func (m *GetDomainInfoResponse) Reset() { *m = GetDomainInfoResponse{} } +func (m *GetDomainInfoResponse) String() string { return proto.CompactTextString(m) } +func (*GetDomainInfoResponse) ProtoMessage() {} +func (*GetDomainInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *GetDomainInfoResponse) GetLog() *trillian.Tree { + if m != nil { + return m.Log + } + return nil +} + +func (m *GetDomainInfoResponse) GetMap() *trillian.Tree { + if m != nil { + return m.Map + } + return nil +} + +func (m *GetDomainInfoResponse) GetVrf() *keyspb.PublicKey { + if m != nil { + return m.Vrf + } + return nil +} + +// GetMonitoringRequest contains the input parameters of the GetMonitoring APIs. +type GetMonitoringRequest struct { + // start specifies the start epoch number from which monitoring results will + // be returned (ranging from [start, latestObserved] and starting at 1). + Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` +} + +func (m *GetMonitoringRequest) Reset() { *m = GetMonitoringRequest{} } +func (m *GetMonitoringRequest) String() string { return proto.CompactTextString(m) } +func (*GetMonitoringRequest) ProtoMessage() {} +func (*GetMonitoringRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *GetMonitoringRequest) GetStart() int64 { + if m != nil { + return m.Start + } + return 0 +} + +// InvalidMutation includes all information to reproduce that there was an +// invalid mutation from epoch e to e+1. +type InvalidMutation struct { + // old_leaf is the inclusion proof to the leaf at epoch e. + OldLeaf *trillian1.MapLeafInclusion `protobuf:"bytes,1,opt,name=old_leaf,json=oldLeaf" json:"old_leaf,omitempty"` + // new_leaf is the inclusion proof to the leaf at epoch e+1. + NewLeaf *trillian1.MapLeafInclusion `protobuf:"bytes,2,opt,name=new_leaf,json=newLeaf" json:"new_leaf,omitempty"` +} + +func (m *InvalidMutation) Reset() { *m = InvalidMutation{} } +func (m *InvalidMutation) String() string { return proto.CompactTextString(m) } +func (*InvalidMutation) ProtoMessage() {} +func (*InvalidMutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *InvalidMutation) GetOldLeaf() *trillian1.MapLeafInclusion { + if m != nil { + return m.OldLeaf + } + return nil +} + +func (m *InvalidMutation) GetNewLeaf() *trillian1.MapLeafInclusion { + if m != nil { + return m.NewLeaf + } + return nil +} + +// NotMatchingMapRootProof contains all data necessary to reproduce that set of +// mutations does not produce new expected map root. +type NotMatchingMapRootProof struct { + // map_root contains the map root hash the monitor observed. + MapRoot *trillian.SignedMapRoot `protobuf:"bytes,1,opt,name=map_root,json=mapRoot" json:"map_root,omitempty"` + // old_leafs is a list of inclusion proofs for the leafs in epoch e. + OldLeafs []*trillian1.MapLeafInclusion `protobuf:"bytes,2,rep,name=old_leafs,json=oldLeafs" json:"old_leafs,omitempty"` + // new_leafs is a list of inclusion proofs for changed leafs (from epoch e + // to epoch e+1). Hashing these produces a different hash than root hash in + // above's map_root. + NewLeafs []*trillian1.MapLeafInclusion `protobuf:"bytes,3,rep,name=new_leafs,json=newLeafs" json:"new_leafs,omitempty"` +} + +func (m *NotMatchingMapRootProof) Reset() { *m = NotMatchingMapRootProof{} } +func (m *NotMatchingMapRootProof) String() string { return proto.CompactTextString(m) } +func (*NotMatchingMapRootProof) ProtoMessage() {} +func (*NotMatchingMapRootProof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *NotMatchingMapRootProof) GetMapRoot() *trillian.SignedMapRoot { + if m != nil { + return m.MapRoot + } + return nil +} + +func (m *NotMatchingMapRootProof) GetOldLeafs() []*trillian1.MapLeafInclusion { + if m != nil { + return m.OldLeafs + } + return nil +} + +func (m *NotMatchingMapRootProof) GetNewLeafs() []*trillian1.MapLeafInclusion { + if m != nil { + return m.NewLeafs + } + return nil +} + +type GetMonitoringResponse struct { + // smr contains the map root for the sparse Merkle Tree signed with the + // monitor's key on success. If the checks were not successful the + // smr will be empty. The epochs are encoded into the smr map_revision. + Smr *trillian.SignedMapRoot `protobuf:"bytes,1,opt,name=smr" json:"smr,omitempty"` + // seen_timestamp_nanos contains the time in nanoseconds where this particular + // signed map root was retrieved and processed. The actual timestamp of the + // smr returned by the server is contained in above smr field. + SeenTimestampNanos int64 `protobuf:"varint,2,opt,name=seen_timestamp_nanos,json=seenTimestampNanos" json:"seen_timestamp_nanos,omitempty"` + // isValid signals if all verification steps for the requested epoch passed + // or not. + IsValid bool `protobuf:"varint,3,opt,name=isValid" json:"isValid,omitempty"` + // invalidRootSigProof contains the signed map root received by the + // key-transparency server, if and only if the key-server's signature was + // invalid. + InvalidRootSigProof *trillian.SignedMapRoot `protobuf:"bytes,4,opt,name=invalidRootSigProof" json:"invalidRootSigProof,omitempty"` + // invalidMutation contains data to reproduce that there was an invalid + // mutation from epoch e to epoch e+1 + InvalidMutation *InvalidMutation `protobuf:"bytes,5,opt,name=invalidMutation" json:"invalidMutation,omitempty"` + // NotMatchingMapRoot contains all data to reproduce that the set of mutations + // does not produce observed new map root. + NotMatchingMapRoot *NotMatchingMapRootProof `protobuf:"bytes,6,opt,name=notMatchingMapRoot" json:"notMatchingMapRoot,omitempty"` +} + +func (m *GetMonitoringResponse) Reset() { *m = GetMonitoringResponse{} } +func (m *GetMonitoringResponse) String() string { return proto.CompactTextString(m) } +func (*GetMonitoringResponse) ProtoMessage() {} +func (*GetMonitoringResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *GetMonitoringResponse) GetSmr() *trillian.SignedMapRoot { + if m != nil { + return m.Smr + } + return nil +} + +func (m *GetMonitoringResponse) GetSeenTimestampNanos() int64 { + if m != nil { + return m.SeenTimestampNanos + } + return 0 +} + +func (m *GetMonitoringResponse) GetIsValid() bool { + if m != nil { + return m.IsValid + } + return false +} + +func (m *GetMonitoringResponse) GetInvalidRootSigProof() *trillian.SignedMapRoot { + if m != nil { + return m.InvalidRootSigProof + } + return nil +} + +func (m *GetMonitoringResponse) GetInvalidMutation() *InvalidMutation { + if m != nil { + return m.InvalidMutation + } + return nil +} + +func (m *GetMonitoringResponse) GetNotMatchingMapRoot() *NotMatchingMapRootProof { + if m != nil { + return m.NotMatchingMapRoot + } + return nil +} + func init() { proto.RegisterType((*Committed)(nil), "keytransparency.v1.types.Committed") proto.RegisterType((*EntryUpdate)(nil), "keytransparency.v1.types.EntryUpdate") @@ -772,72 +978,89 @@ func init() { proto.RegisterType((*UpdateEntryResponse)(nil), "keytransparency.v1.types.UpdateEntryResponse") proto.RegisterType((*GetMutationsRequest)(nil), "keytransparency.v1.types.GetMutationsRequest") proto.RegisterType((*GetMutationsResponse)(nil), "keytransparency.v1.types.GetMutationsResponse") + proto.RegisterType((*GetDomainInfoRequest)(nil), "keytransparency.v1.types.GetDomainInfoRequest") + proto.RegisterType((*GetDomainInfoResponse)(nil), "keytransparency.v1.types.GetDomainInfoResponse") } func init() { proto.RegisterFile("keytransparency_v1_types.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 985 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xdf, 0x6e, 0xdb, 0xb6, - 0x17, 0xae, 0xed, 0xd8, 0xb1, 0x4e, 0xfe, 0x15, 0x6c, 0x7e, 0x89, 0x7e, 0x1e, 0x5a, 0x04, 0x2a, - 0xb6, 0x75, 0xc3, 0xe0, 0x35, 0x2a, 0x92, 0xad, 0xdd, 0xc5, 0xba, 0x76, 0x43, 0x13, 0x24, 0x01, - 0x02, 0xa6, 0xcd, 0x2e, 0x05, 0xc6, 0xa2, 0x15, 0x22, 0xb2, 0xc8, 0x91, 0x94, 0x51, 0x05, 0xd8, - 0x1b, 0x0c, 0x18, 0xb0, 0x67, 0xd8, 0x33, 0xec, 0x05, 0xf6, 0x16, 0x7b, 0x9a, 0x81, 0xa4, 0x64, - 0xcb, 0xa9, 0xd3, 0x34, 0xbd, 0xd8, 0x4d, 0xc0, 0x73, 0x78, 0x3e, 0x9d, 0x73, 0xbe, 0xf3, 0x1d, - 0x3a, 0xf0, 0xe0, 0x82, 0x16, 0x5a, 0x92, 0x4c, 0x09, 0x22, 0x69, 0x36, 0x28, 0xa2, 0xf1, 0x76, - 0xa4, 0x0b, 0x41, 0x55, 0x5f, 0x48, 0xae, 0x39, 0xf2, 0xaf, 0xdc, 0xf7, 0xc7, 0xdb, 0x7d, 0x7b, - 0xdf, 0xf3, 0x07, 0xb2, 0x10, 0x9a, 0x7f, 0xad, 0x58, 0x22, 0xce, 0xdc, 0x5f, 0x87, 0xe9, 0xad, - 0x6a, 0xc9, 0xd2, 0x94, 0x91, 0xac, 0xb4, 0x37, 0x2a, 0x3b, 0x1a, 0x11, 0x11, 0x11, 0xc1, 0x9c, - 0x3f, 0xd8, 0x06, 0xef, 0x25, 0x1f, 0x8d, 0x98, 0xd6, 0x34, 0x46, 0x77, 0xa1, 0x75, 0x41, 0x0b, - 0xbf, 0xb1, 0xd5, 0x78, 0xb4, 0x8c, 0xcd, 0x11, 0x21, 0x58, 0x88, 0x89, 0x26, 0x7e, 0xd3, 0xba, - 0xec, 0x39, 0xf8, 0xad, 0x01, 0x4b, 0x3f, 0x65, 0x5a, 0x16, 0x6f, 0x44, 0x4c, 0x34, 0x45, 0xcf, - 0xa0, 0x93, 0xdb, 0x93, 0x8d, 0x5a, 0x0a, 0x83, 0xfe, 0x75, 0xf5, 0xf6, 0x4f, 0x58, 0x92, 0xd1, - 0xf8, 0xe0, 0x14, 0x97, 0x08, 0xf4, 0x03, 0x78, 0x83, 0x2a, 0xbd, 0xdf, 0xb2, 0xf0, 0x87, 0xd7, - 0xc3, 0x27, 0x95, 0xe2, 0x29, 0x2a, 0xc8, 0xa1, 0x6d, 0xab, 0x41, 0x0f, 0x00, 0x9c, 0x77, 0x44, - 0x33, 0x5d, 0x36, 0x51, 0xf3, 0xa0, 0x43, 0x58, 0x23, 0xb9, 0x3e, 0xe7, 0x92, 0x5d, 0xd2, 0x38, - 0xba, 0xa0, 0x85, 0xf2, 0x9b, 0x5b, 0xad, 0xf7, 0x67, 0x3c, 0xce, 0xcf, 0x52, 0x36, 0x38, 0xa0, - 0x05, 0x5e, 0x9d, 0x62, 0x0f, 0x68, 0xa1, 0x82, 0x3f, 0x1b, 0xe0, 0x4d, 0x6e, 0x51, 0x0f, 0x16, - 0x69, 0x1c, 0xee, 0xec, 0x6c, 0x3f, 0x75, 0x89, 0xf7, 0xee, 0xe0, 0xca, 0x81, 0xbe, 0x83, 0xff, - 0x4b, 0x45, 0xa2, 0x31, 0x95, 0x6c, 0x58, 0xb0, 0x2c, 0x89, 0xd4, 0x39, 0x09, 0x77, 0x76, 0xa3, - 0x27, 0x8f, 0xbf, 0x09, 0x1d, 0xb1, 0x7b, 0x77, 0xf0, 0x86, 0x54, 0xe4, 0xb4, 0x8a, 0x38, 0xb1, - 0x01, 0xe6, 0x1e, 0x85, 0xb0, 0x4e, 0x07, 0xf1, 0x0c, 0x5c, 0x84, 0x3b, 0xbb, 0x96, 0x2b, 0x83, - 0x43, 0xf6, 0x76, 0x82, 0x3c, 0x0e, 0x77, 0x76, 0x5f, 0x00, 0x74, 0x2f, 0x68, 0x61, 0x25, 0x14, - 0x84, 0xd0, 0x3d, 0xa0, 0xc5, 0x29, 0x49, 0x73, 0x3a, 0x67, 0xbc, 0xeb, 0xd0, 0x1e, 0x9b, 0xab, - 0x72, 0xbe, 0xce, 0x08, 0xfe, 0x68, 0x42, 0xb7, 0x9a, 0x14, 0xfa, 0x1e, 0x3c, 0xf3, 0x31, 0x17, - 0xd6, 0xb8, 0x69, 0xc0, 0x55, 0x2e, 0x6c, 0x2a, 0x70, 0x59, 0x31, 0x80, 0x62, 0x49, 0x46, 0x74, - 0x2e, 0x69, 0xc5, 0x78, 0x78, 0xb3, 0x44, 0xec, 0xc1, 0x81, 0xec, 0x78, 0x71, 0xed, 0x2b, 0xa8, - 0x07, 0x5d, 0x21, 0xe9, 0x98, 0xf1, 0x5c, 0x39, 0x26, 0xf0, 0xc4, 0xee, 0xbd, 0x81, 0xb5, 0x2b, - 0xd0, 0x7a, 0xe3, 0x9e, 0x6b, 0xfc, 0xab, 0x7a, 0xe3, 0x4b, 0xe1, 0x46, 0xdf, 0xed, 0xce, 0x8f, - 0x2c, 0x61, 0x9a, 0xa4, 0x69, 0xe1, 0xaa, 0x28, 0x09, 0x79, 0xd6, 0xfc, 0xb6, 0x11, 0xbc, 0x85, - 0xee, 0x51, 0xae, 0x89, 0x66, 0x3c, 0xab, 0x29, 0xbe, 0x71, 0x6b, 0xc5, 0x3f, 0x86, 0xb6, 0x90, - 0x9c, 0x0f, 0xcb, 0xcc, 0xbd, 0xfe, 0x64, 0x51, 0x8f, 0x88, 0x38, 0xa4, 0x64, 0xb8, 0x9f, 0x0d, - 0xd2, 0x5c, 0x31, 0x9e, 0x61, 0x17, 0x18, 0x30, 0x58, 0x7b, 0x45, 0xb5, 0x23, 0x81, 0xfe, 0x92, - 0x53, 0xa5, 0xd1, 0x26, 0x2c, 0xe6, 0x8a, 0xca, 0x88, 0xc5, 0x65, 0x53, 0x1d, 0x63, 0xee, 0xc7, - 0xe8, 0x7f, 0xd0, 0x21, 0x42, 0x18, 0x7f, 0xd3, 0xfa, 0xdb, 0x44, 0x88, 0xfd, 0x18, 0x7d, 0x06, - 0x6b, 0x43, 0x26, 0x95, 0x8e, 0xb4, 0xa4, 0x34, 0x52, 0xec, 0x92, 0x5a, 0xda, 0x5a, 0x78, 0xc5, - 0xba, 0x5f, 0x4b, 0x4a, 0x4f, 0xd8, 0x25, 0x0d, 0xfe, 0x69, 0xc2, 0xdd, 0x69, 0x2e, 0x25, 0x78, - 0xa6, 0x28, 0xfa, 0x04, 0xbc, 0xb1, 0x1c, 0x46, 0xae, 0x6a, 0x27, 0x9e, 0xee, 0x58, 0x0e, 0x8f, - 0x8d, 0x3d, 0xbb, 0xc0, 0xcd, 0x8f, 0x59, 0x60, 0xf4, 0x14, 0x20, 0xa5, 0xa4, 0x4a, 0xd0, 0xba, - 0x91, 0x16, 0xcf, 0x44, 0xbb, 0xec, 0x5f, 0x40, 0x4b, 0x8d, 0xa4, 0xbf, 0x60, 0x31, 0x9b, 0x53, - 0x8c, 0x63, 0xfd, 0x88, 0x08, 0xcc, 0xb9, 0xc6, 0x26, 0x06, 0x85, 0xd0, 0x4d, 0x79, 0x12, 0x49, - 0xce, 0xb5, 0xdf, 0x9e, 0x1f, 0x7f, 0xc8, 0x13, 0x1b, 0xbf, 0x98, 0xba, 0x03, 0xfa, 0x1c, 0xd6, - 0x0c, 0x66, 0xc0, 0x33, 0xc5, 0x94, 0x36, 0xad, 0xf8, 0x9d, 0xad, 0xd6, 0xa3, 0x65, 0xbc, 0x9a, - 0xf2, 0xe4, 0xe5, 0xd4, 0x8b, 0x1e, 0xc2, 0x8a, 0x09, 0x64, 0x55, 0x8d, 0xfe, 0xa2, 0x0d, 0x5b, - 0x4e, 0x79, 0x32, 0xa9, 0xdb, 0xbc, 0x18, 0x9b, 0x87, 0x4c, 0x39, 0x76, 0xf7, 0x98, 0xd2, 0xfc, - 0x03, 0x06, 0xba, 0x0e, 0x6d, 0xa5, 0x89, 0xd4, 0x96, 0xdb, 0x16, 0x76, 0x86, 0x19, 0x89, 0x20, - 0x49, 0x6d, 0x92, 0x6d, 0xdc, 0x35, 0x0e, 0x33, 0xc4, 0x9a, 0x06, 0x16, 0x6e, 0xd0, 0x40, 0x7b, - 0x9e, 0x06, 0x7e, 0x05, 0xff, 0xdd, 0x2a, 0x4b, 0x29, 0xbc, 0x80, 0x8e, 0xdd, 0x08, 0xe5, 0x37, - 0xec, 0x1e, 0x7f, 0x79, 0xfd, 0xa8, 0xaf, 0xca, 0x08, 0x97, 0x48, 0x74, 0x1f, 0x20, 0xa3, 0x6f, - 0x75, 0x54, 0x6f, 0xcb, 0x33, 0x9e, 0x13, 0xe3, 0x08, 0xfe, 0x6a, 0x00, 0x72, 0x3f, 0x2c, 0xff, - 0x85, 0xe2, 0xd1, 0x1e, 0x2c, 0x53, 0x93, 0x27, 0x2a, 0x17, 0xda, 0x49, 0xe9, 0xd3, 0xeb, 0xfb, - 0xaa, 0xfd, 0xf2, 0xe1, 0x25, 0x3a, 0x35, 0x82, 0x9f, 0xe1, 0xde, 0x4c, 0xdd, 0x25, 0x65, 0xcf, - 0xab, 0x7d, 0x77, 0x4f, 0xc5, 0x6d, 0x18, 0x2b, 0xf7, 0xff, 0xf7, 0x06, 0xdc, 0x7b, 0x45, 0x75, - 0xf5, 0xfa, 0xa8, 0x8a, 0x92, 0x75, 0x68, 0x53, 0xc1, 0x07, 0xe7, 0xf6, 0xcb, 0x2d, 0xec, 0x8c, - 0x79, 0x8d, 0x37, 0xe7, 0x35, 0x7e, 0x1f, 0xc0, 0x4a, 0x48, 0xf3, 0x0b, 0x9a, 0x59, 0x6e, 0x3c, - 0x6c, 0x45, 0xf5, 0xda, 0x38, 0x66, 0x15, 0xb6, 0x30, 0xab, 0xb0, 0xe0, 0xef, 0x26, 0xac, 0xcf, - 0x56, 0x54, 0x36, 0x3b, 0xbf, 0xa4, 0x72, 0x4b, 0x9b, 0xb7, 0xdc, 0xd2, 0xd6, 0xc7, 0x6f, 0xe9, - 0xc2, 0x87, 0x6d, 0x69, 0xfb, 0xdd, 0x2d, 0x45, 0xcf, 0xc1, 0x1b, 0x55, 0x7d, 0xd9, 0x6d, 0x7f, - 0xef, 0xf3, 0x5e, 0x51, 0x80, 0xa7, 0x20, 0x33, 0x01, 0x2b, 0xf0, 0x1a, 0xbd, 0x8b, 0x96, 0xde, - 0x15, 0xe3, 0x3e, 0xae, 0x28, 0x3e, 0xeb, 0xd8, 0xff, 0xc0, 0x9e, 0xfc, 0x1b, 0x00, 0x00, 0xff, - 0xff, 0xbd, 0x88, 0x8a, 0x70, 0xff, 0x09, 0x00, 0x00, + // 1230 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xdf, 0x6e, 0x14, 0xb7, + 0x17, 0x66, 0x76, 0xb3, 0xff, 0x4e, 0x02, 0x8b, 0x4c, 0x20, 0xf3, 0xcb, 0x4f, 0x20, 0x34, 0xa8, + 0x2d, 0x54, 0x68, 0x43, 0x06, 0x05, 0x0a, 0xbd, 0x28, 0x85, 0x56, 0x24, 0x4a, 0x82, 0x22, 0x07, + 0xd2, 0xcb, 0x91, 0xb3, 0xe3, 0x4c, 0xac, 0xcc, 0xda, 0xd3, 0xb1, 0x67, 0x61, 0x90, 0xaa, 0xbe, + 0x40, 0xa5, 0xaa, 0x7d, 0x86, 0x3e, 0x43, 0x6f, 0x7b, 0xd1, 0xb7, 0xe8, 0xd3, 0x54, 0xb6, 0x67, + 0x76, 0x67, 0xc3, 0xfe, 0x09, 0x5c, 0xf4, 0x66, 0x65, 0x1f, 0x9f, 0xcf, 0x3e, 0xe7, 0x3b, 0xdf, + 0xb1, 0x67, 0xe1, 0xd6, 0x19, 0xcd, 0x55, 0x4a, 0xb8, 0x4c, 0x48, 0x4a, 0x79, 0x3f, 0x0f, 0x86, + 0x9b, 0x81, 0xca, 0x13, 0x2a, 0x7b, 0x49, 0x2a, 0x94, 0x40, 0xee, 0xb9, 0xf5, 0xde, 0x70, 0xb3, + 0x67, 0xd6, 0xd7, 0x1f, 0x46, 0x4c, 0x9d, 0x66, 0xc7, 0xbd, 0xbe, 0x18, 0x6c, 0x44, 0x42, 0x44, + 0x31, 0xdd, 0x50, 0x29, 0x8b, 0x63, 0x46, 0xf8, 0x46, 0x3f, 0xcd, 0x13, 0x25, 0x36, 0x24, 0x8b, + 0x92, 0x63, 0xfb, 0x6b, 0xb7, 0x5b, 0xbf, 0x37, 0x07, 0x54, 0x0e, 0x0a, 0xd7, 0xcd, 0x0b, 0xb8, + 0x06, 0x03, 0x92, 0x04, 0x24, 0x61, 0x16, 0xe2, 0x6d, 0x42, 0xe7, 0x85, 0x18, 0x0c, 0x98, 0x52, + 0x34, 0x44, 0x57, 0xa1, 0x7e, 0x46, 0x73, 0xd7, 0xb9, 0xed, 0xdc, 0x5d, 0xc1, 0x7a, 0x88, 0x10, + 0x2c, 0x85, 0x44, 0x11, 0xb7, 0x66, 0x4c, 0x66, 0xec, 0xfd, 0xe2, 0xc0, 0xf2, 0xf7, 0x5c, 0xa5, + 0xf9, 0x9b, 0x24, 0x24, 0x8a, 0xa2, 0xa7, 0xd0, 0xcc, 0xcc, 0xc8, 0x78, 0x2d, 0xfb, 0x5e, 0x6f, + 0x16, 0x01, 0xbd, 0x43, 0x16, 0x71, 0x1a, 0xee, 0x1e, 0xe1, 0x02, 0x81, 0xbe, 0x85, 0x4e, 0xbf, + 0x3c, 0xde, 0xad, 0x1b, 0xf8, 0x9d, 0xd9, 0xf0, 0x51, 0xa4, 0x78, 0x8c, 0xf2, 0x32, 0x68, 0x98, + 0x68, 0xd0, 0x2d, 0x00, 0x6b, 0x1d, 0x50, 0xae, 0x8a, 0x24, 0x2a, 0x16, 0xb4, 0x07, 0x5d, 0x92, + 0xa9, 0x53, 0x91, 0xb2, 0xf7, 0x34, 0x0c, 0xce, 0x68, 0x2e, 0xdd, 0xda, 0xed, 0xfa, 0xfc, 0x13, + 0x0f, 0xb2, 0xe3, 0x98, 0xf5, 0x77, 0x69, 0x8e, 0xaf, 0x8c, 0xb1, 0xbb, 0x34, 0x97, 0xde, 0x1f, + 0x0e, 0x74, 0x46, 0xab, 0x68, 0x1d, 0x5a, 0x34, 0xf4, 0xb7, 0xb6, 0x36, 0x9f, 0xd8, 0x83, 0xb7, + 0x2f, 0xe1, 0xd2, 0x80, 0xbe, 0x86, 0xff, 0xa5, 0x92, 0x04, 0x43, 0x9a, 0xb2, 0x93, 0x9c, 0xf1, + 0x28, 0x90, 0xa7, 0xc4, 0xdf, 0x7a, 0x14, 0x3c, 0x7c, 0xf0, 0xd8, 0xb7, 0xc4, 0x6e, 0x5f, 0xc2, + 0x37, 0x52, 0x49, 0x8e, 0x4a, 0x8f, 0x43, 0xe3, 0xa0, 0xd7, 0x91, 0x0f, 0xab, 0xb4, 0x1f, 0x4e, + 0xc0, 0x13, 0x7f, 0xeb, 0x91, 0xe1, 0x4a, 0xe3, 0x90, 0x59, 0x1d, 0x21, 0x0f, 0xfc, 0xad, 0x47, + 0xcf, 0x01, 0xda, 0x67, 0x34, 0x37, 0x9a, 0xf4, 0x7c, 0x68, 0xef, 0xd2, 0xfc, 0x88, 0xc4, 0x19, + 0x9d, 0x52, 0xde, 0x55, 0x68, 0x0c, 0xf5, 0x52, 0x51, 0x5f, 0x3b, 0xf1, 0x7e, 0xaf, 0x41, 0xbb, + 0xac, 0x14, 0xfa, 0x06, 0x3a, 0x7a, 0x33, 0xeb, 0xe6, 0x2c, 0x2a, 0x70, 0x79, 0x16, 0xd6, 0x11, + 0xd8, 0x53, 0x31, 0x80, 0x64, 0x11, 0x27, 0x2a, 0x4b, 0x69, 0xc9, 0xb8, 0xbf, 0x58, 0x22, 0x66, + 0x60, 0x41, 0xa6, 0xbc, 0xb8, 0xb2, 0x0b, 0x5a, 0x87, 0x76, 0x92, 0xd2, 0x21, 0x13, 0x99, 0xb4, + 0x4c, 0xe0, 0xd1, 0x7c, 0xfd, 0x0d, 0x74, 0xcf, 0x41, 0xab, 0x89, 0x77, 0x6c, 0xe2, 0xf7, 0xab, + 0x89, 0x2f, 0xfb, 0x37, 0x7a, 0xb6, 0xe3, 0xbe, 0x63, 0x11, 0x53, 0x24, 0x8e, 0x73, 0x1b, 0x45, + 0x41, 0xc8, 0xd3, 0xda, 0x57, 0x8e, 0xf7, 0x0e, 0xda, 0xfb, 0x99, 0x22, 0x8a, 0x09, 0x5e, 0x51, + 0xbc, 0xf3, 0xd1, 0x8a, 0x7f, 0x00, 0x8d, 0x24, 0x15, 0xe2, 0xa4, 0x38, 0x79, 0xbd, 0x37, 0xea, + 0xe1, 0x7d, 0x92, 0xec, 0x51, 0x72, 0xb2, 0xc3, 0xfb, 0x71, 0x26, 0x99, 0xe0, 0xd8, 0x3a, 0x7a, + 0x0c, 0xba, 0x2f, 0xa9, 0xb2, 0x24, 0xd0, 0x1f, 0x33, 0x2a, 0x15, 0x5a, 0x83, 0x56, 0x26, 0x69, + 0x1a, 0xb0, 0xb0, 0x48, 0xaa, 0xa9, 0xa7, 0x3b, 0x21, 0xba, 0x0e, 0x4d, 0x92, 0x24, 0xda, 0x5e, + 0x33, 0xf6, 0x06, 0x49, 0x92, 0x9d, 0x10, 0x7d, 0x0e, 0xdd, 0x13, 0x96, 0x4a, 0x15, 0xa8, 0x94, + 0xd2, 0x40, 0xb2, 0xf7, 0xd4, 0xd0, 0x56, 0xc7, 0x97, 0x8d, 0xf9, 0x75, 0x4a, 0xe9, 0x21, 0x7b, + 0x4f, 0xbd, 0x7f, 0x6a, 0x70, 0x75, 0x7c, 0x96, 0x4c, 0x04, 0x97, 0x14, 0xfd, 0x1f, 0x3a, 0xc3, + 0xf4, 0x24, 0xb0, 0x51, 0x5b, 0xf1, 0xb4, 0x87, 0xe9, 0xc9, 0x81, 0x9e, 0x4f, 0x36, 0x70, 0xed, + 0x53, 0x1a, 0x18, 0x3d, 0x01, 0x88, 0x29, 0x29, 0x0f, 0xa8, 0x2f, 0xa4, 0xa5, 0xa3, 0xbd, 0xed, + 0xe9, 0xf7, 0xa0, 0x2e, 0x07, 0xa9, 0xbb, 0x64, 0x30, 0x6b, 0x63, 0x8c, 0x65, 0x7d, 0x9f, 0x24, + 0x58, 0x08, 0x85, 0xb5, 0x0f, 0xf2, 0xa1, 0x1d, 0x8b, 0x28, 0x48, 0x85, 0x50, 0x6e, 0x63, 0xba, + 0xff, 0x9e, 0x88, 0x8c, 0x7f, 0x2b, 0xb6, 0x03, 0xf4, 0x05, 0x74, 0x35, 0xa6, 0x2f, 0xb8, 0x64, + 0x52, 0xe9, 0x54, 0xdc, 0xe6, 0xed, 0xfa, 0xdd, 0x15, 0x7c, 0x25, 0x16, 0xd1, 0x8b, 0xb1, 0x15, + 0xdd, 0x81, 0xcb, 0xda, 0x91, 0x95, 0x31, 0xba, 0x2d, 0xe3, 0xb6, 0x12, 0x8b, 0x68, 0x14, 0xb7, + 0xbe, 0x31, 0xd6, 0xf6, 0x98, 0xb4, 0xec, 0x6e, 0x33, 0xa9, 0xc4, 0x05, 0x0a, 0xba, 0x0a, 0x0d, + 0xa9, 0x48, 0xaa, 0x0c, 0xb7, 0x75, 0x6c, 0x27, 0xba, 0x24, 0x09, 0x89, 0x2a, 0x95, 0x6c, 0xe0, + 0xb6, 0x36, 0xe8, 0x22, 0x56, 0x34, 0xb0, 0xb4, 0x40, 0x03, 0x8d, 0x69, 0x1a, 0xf8, 0x09, 0xdc, + 0x0f, 0xa3, 0x2c, 0xa4, 0xf0, 0x1c, 0x9a, 0xa6, 0x23, 0xa4, 0xeb, 0x98, 0x3e, 0xfe, 0x72, 0x76, + 0xa9, 0xcf, 0xcb, 0x08, 0x17, 0x48, 0x74, 0x13, 0x80, 0xd3, 0x77, 0x2a, 0xa8, 0xa6, 0xd5, 0xd1, + 0x96, 0x43, 0x6d, 0xf0, 0xfe, 0x74, 0x00, 0xd9, 0x87, 0xe5, 0xbf, 0x50, 0x3c, 0xda, 0x86, 0x15, + 0xaa, 0xcf, 0x09, 0x8a, 0x86, 0xb6, 0x52, 0xfa, 0x6c, 0x76, 0x5e, 0x95, 0x97, 0x0f, 0x2f, 0xd3, + 0xf1, 0xc4, 0xfb, 0x01, 0xae, 0x4d, 0xc4, 0x5d, 0x50, 0xf6, 0xac, 0xec, 0x77, 0x7b, 0x55, 0x7c, + 0x0c, 0x63, 0x45, 0xff, 0xff, 0xea, 0xc0, 0xb5, 0x97, 0x54, 0x95, 0xb7, 0x8f, 0x2c, 0x29, 0x59, + 0x85, 0x06, 0x4d, 0x44, 0xff, 0xd4, 0xec, 0x5c, 0xc7, 0x76, 0x32, 0x2d, 0xf1, 0xda, 0xb4, 0xc4, + 0x6f, 0x02, 0x18, 0x09, 0x29, 0x71, 0x46, 0xb9, 0xe1, 0xa6, 0x83, 0x8d, 0xa8, 0x5e, 0x6b, 0xc3, + 0xa4, 0xc2, 0x96, 0x26, 0x15, 0xe6, 0xfd, 0x5d, 0x83, 0xd5, 0xc9, 0x88, 0x8a, 0x64, 0xa7, 0x87, + 0x54, 0x74, 0x69, 0xed, 0x23, 0xbb, 0xb4, 0xfe, 0xe9, 0x5d, 0xba, 0x74, 0xb1, 0x2e, 0x6d, 0x7c, + 0xd8, 0xa5, 0xe8, 0x19, 0x74, 0x06, 0x65, 0x5e, 0xa6, 0xdb, 0xe7, 0x5e, 0xef, 0x25, 0x05, 0x78, + 0x0c, 0xd2, 0x15, 0x30, 0x02, 0xaf, 0xd0, 0xdb, 0x32, 0xf4, 0x5e, 0xd6, 0xe6, 0x83, 0x92, 0x62, + 0xef, 0xbe, 0x25, 0x51, 0x70, 0xa6, 0x44, 0xca, 0x78, 0x54, 0xa9, 0xab, 0xed, 0x0d, 0xa7, 0xd2, + 0xf2, 0xde, 0xcf, 0xd0, 0xdd, 0xe1, 0x43, 0x12, 0xb3, 0x70, 0xf4, 0x0c, 0x6d, 0x41, 0x5b, 0xc4, + 0x61, 0xa0, 0xaf, 0xc3, 0x42, 0x5d, 0xf3, 0xae, 0xcd, 0x96, 0x88, 0x43, 0x6d, 0xd1, 0x30, 0x4e, + 0xdf, 0x5a, 0xd8, 0xe2, 0x47, 0xa8, 0xc5, 0xe9, 0x5b, 0x6d, 0xf1, 0xfe, 0x72, 0x60, 0xed, 0x95, + 0x50, 0xfb, 0x44, 0xf5, 0x4f, 0x19, 0x8f, 0x8a, 0xb2, 0xd9, 0x7b, 0xd8, 0x87, 0xb6, 0xfe, 0xac, + 0x34, 0x65, 0x73, 0xe6, 0x97, 0xb9, 0x35, 0xb0, 0x03, 0xf4, 0x18, 0x3a, 0x65, 0xf4, 0xe5, 0x67, + 0xc1, 0xbc, 0x38, 0xda, 0x45, 0xf8, 0x52, 0x03, 0xcb, 0xf8, 0xf5, 0xeb, 0xbf, 0x10, 0x58, 0x24, + 0x20, 0xbd, 0xdf, 0xea, 0x70, 0xfd, 0x1c, 0xe3, 0x85, 0x6e, 0x0b, 0x85, 0x3a, 0x17, 0x50, 0xe8, + 0x03, 0x58, 0x95, 0x94, 0xf2, 0x40, 0xb1, 0x01, 0x95, 0x8a, 0x0c, 0x92, 0x80, 0x13, 0x2e, 0x64, + 0xd1, 0x64, 0x48, 0xaf, 0xbd, 0x2e, 0x97, 0x5e, 0xe9, 0x15, 0xe4, 0x42, 0x8b, 0xc9, 0x23, 0x5d, + 0x39, 0x23, 0xe9, 0x36, 0x2e, 0xa7, 0x68, 0x07, 0xae, 0x31, 0x5b, 0x53, 0xbd, 0xff, 0x21, 0x8b, + 0x0c, 0x9b, 0x8b, 0x9e, 0xb3, 0x69, 0x18, 0x74, 0x08, 0x5d, 0x36, 0x29, 0x8f, 0xe2, 0x95, 0xbb, + 0x37, 0x5b, 0xbc, 0xe7, 0xf4, 0x84, 0xcf, 0xef, 0x80, 0x08, 0x20, 0xfe, 0x41, 0xc5, 0xdd, 0xa6, + 0xd9, 0x77, 0x73, 0xf6, 0xbe, 0x33, 0x54, 0x82, 0xa7, 0x6c, 0x76, 0xdc, 0x34, 0x7f, 0x43, 0x1e, + 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x60, 0x2c, 0xd7, 0x73, 0x55, 0x0d, 0x00, 0x00, } diff --git a/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto b/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto index 1636eb61b..77e26b2f3 100644 --- a/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto +++ b/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto @@ -21,9 +21,10 @@ syntax = "proto3"; // associated with it. package keytransparency.v1.types; -import "crypto/sigpb/sigpb.proto"; -import "trillian.proto"; -import "trillian_map_api.proto"; +import "github.com/google/trillian/crypto/keyspb/keyspb.proto"; +import "github.com/google/trillian/crypto/sigpb/sigpb.proto"; +import "github.com/google/trillian/trillian.proto"; +import "github.com/google/trillian/trillian_map_api.proto"; // // Data types. @@ -100,8 +101,8 @@ message SignedKV { message Mutation { // update contains the actual mutation information. SignedKV update = 1; - // proof contains a leaf and an inclusion proof in the map. - // This is used by Storage-less monitors. + // proof contains a leaf and an inclusion proof in the map of the previous + // epoch. This is used by Storage-less monitors. trillian.MapLeafInclusion proof = 2; } @@ -236,3 +237,17 @@ message GetMutationsResponse { // results. string next_page_token = 7; } + +// GetDomainInfoRequest contains an emtpy request to query the GetDomainInfo +// APIs. +message GetDomainInfoRequest {} + +// GetDomainInfoResponse contains the results of GetDomainInfo APIs. +message GetDomainInfoResponse { + // Log contains the Log-Tree's info. + trillian.Tree log = 1; + // Map contains the Map-Tree's info. + trillian.Tree map = 2; + // Vrf contains the VRF public key. + keyspb.PublicKey vrf = 3; +} diff --git a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go index 671988f09..0c480000d 100644 --- a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go +++ b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go @@ -64,6 +64,12 @@ type KeyTransparencyServiceClient interface { // Returns the current user profile. // Clients must retry until this function returns a proof containing the desired value. UpdateEntry(ctx context.Context, in *keytransparency_v1_types.UpdateEntryRequest, opts ...grpc.CallOption) (*keytransparency_v1_types.UpdateEntryResponse, error) + // GetDomainInfo returns all info tight to this specific domain. + // + // This API to get all necessary data needed to verify a particular + // key-server. Data contains for instance the tree-info, like for instance the + // log-/map-id and the corresponding public-keys. + GetDomainInfo(ctx context.Context, in *keytransparency_v1_types.GetDomainInfoRequest, opts ...grpc.CallOption) (*keytransparency_v1_types.GetDomainInfoResponse, error) } type keyTransparencyServiceClient struct { @@ -101,6 +107,15 @@ func (c *keyTransparencyServiceClient) UpdateEntry(ctx context.Context, in *keyt return out, nil } +func (c *keyTransparencyServiceClient) GetDomainInfo(ctx context.Context, in *keytransparency_v1_types.GetDomainInfoRequest, opts ...grpc.CallOption) (*keytransparency_v1_types.GetDomainInfoResponse, error) { + out := new(keytransparency_v1_types.GetDomainInfoResponse) + err := grpc.Invoke(ctx, "/keytransparency.v1.service.KeyTransparencyService/GetDomainInfo", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // Server API for KeyTransparencyService service type KeyTransparencyServiceServer interface { @@ -118,6 +133,12 @@ type KeyTransparencyServiceServer interface { // Returns the current user profile. // Clients must retry until this function returns a proof containing the desired value. UpdateEntry(context.Context, *keytransparency_v1_types.UpdateEntryRequest) (*keytransparency_v1_types.UpdateEntryResponse, error) + // GetDomainInfo returns all info tight to this specific domain. + // + // This API to get all necessary data needed to verify a particular + // key-server. Data contains for instance the tree-info, like for instance the + // log-/map-id and the corresponding public-keys. + GetDomainInfo(context.Context, *keytransparency_v1_types.GetDomainInfoRequest) (*keytransparency_v1_types.GetDomainInfoResponse, error) } func RegisterKeyTransparencyServiceServer(s *grpc.Server, srv KeyTransparencyServiceServer) { @@ -178,6 +199,24 @@ func _KeyTransparencyService_UpdateEntry_Handler(srv interface{}, ctx context.Co return interceptor(ctx, in, info, handler) } +func _KeyTransparencyService_GetDomainInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(keytransparency_v1_types.GetDomainInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KeyTransparencyServiceServer).GetDomainInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/keytransparency.v1.service.KeyTransparencyService/GetDomainInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KeyTransparencyServiceServer).GetDomainInfo(ctx, req.(*keytransparency_v1_types.GetDomainInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _KeyTransparencyService_serviceDesc = grpc.ServiceDesc{ ServiceName: "keytransparency.v1.service.KeyTransparencyService", HandlerType: (*KeyTransparencyServiceServer)(nil), @@ -194,6 +233,10 @@ var _KeyTransparencyService_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateEntry", Handler: _KeyTransparencyService_UpdateEntry_Handler, }, + { + MethodName: "GetDomainInfo", + Handler: _KeyTransparencyService_GetDomainInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "keytransparency_v1_service.proto", @@ -202,24 +245,27 @@ var _KeyTransparencyService_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("keytransparency_v1_service.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 300 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xbf, 0x4a, 0xc4, 0x40, - 0x10, 0xc6, 0x39, 0x05, 0x91, 0x68, 0x21, 0x2b, 0x5a, 0xe4, 0x14, 0xc4, 0xab, 0x4e, 0x34, 0x4b, - 0xce, 0xce, 0x5e, 0x14, 0xb4, 0xf2, 0x4f, 0x1d, 0xf6, 0x92, 0x21, 0xb7, 0xa8, 0xbb, 0xeb, 0xce, - 0x24, 0xb0, 0x88, 0x16, 0xbe, 0x82, 0xd8, 0xfa, 0x4e, 0xe2, 0x2b, 0xf8, 0x20, 0x72, 0xc9, 0x06, - 0x8e, 0x90, 0xc0, 0x59, 0xa5, 0x98, 0xdf, 0x7c, 0xdf, 0x2f, 0xb3, 0xc1, 0xc1, 0x03, 0x38, 0xb2, - 0x42, 0xa1, 0x11, 0x16, 0x54, 0xea, 0x92, 0x32, 0x4e, 0x10, 0x6c, 0x29, 0x53, 0x88, 0x8c, 0xd5, - 0xa4, 0x59, 0xd8, 0x22, 0xa2, 0x32, 0x8e, 0x3c, 0x11, 0x66, 0xb9, 0xa4, 0x59, 0x31, 0x8d, 0x52, - 0xfd, 0xc4, 0x73, 0xad, 0xf3, 0x47, 0xe0, 0x2d, 0x9a, 0xa7, 0xda, 0x02, 0xaf, 0x92, 0x78, 0x47, - 0x15, 0x39, 0x03, 0xd8, 0x3b, 0xa8, 0x0d, 0xc2, 0x3d, 0x1f, 0x2d, 0x8c, 0xe4, 0x42, 0x29, 0x4d, - 0x82, 0xa4, 0x56, 0x7e, 0x3a, 0xf9, 0x5e, 0x0d, 0x76, 0xaf, 0xc0, 0xdd, 0x2d, 0x04, 0xdc, 0xd6, - 0x7a, 0xec, 0x2d, 0x58, 0xbf, 0x00, 0x3a, 0x57, 0x64, 0x1d, 0x1b, 0x47, 0x1d, 0xff, 0x51, 0xb7, - 0x34, 0xcc, 0x0d, 0x3c, 0x17, 0x80, 0x14, 0x1e, 0x2d, 0x83, 0xa2, 0xd1, 0x0a, 0xe1, 0x70, 0xf8, - 0xfe, 0xf3, 0xfb, 0xb1, 0xb2, 0xc3, 0xb6, 0x79, 0x19, 0xf3, 0x02, 0xc1, 0x22, 0x7f, 0x99, 0x7f, - 0x12, 0x99, 0xbd, 0xb2, 0xaf, 0x41, 0xb0, 0x75, 0x2d, 0xb1, 0x5e, 0xb9, 0x94, 0x48, 0xda, 0x3a, - 0x16, 0xf7, 0xa7, 0xb7, 0xd9, 0x46, 0x68, 0xf2, 0x9f, 0x15, 0x2f, 0x36, 0xaa, 0xc4, 0xf6, 0xd9, - 0xb0, 0x43, 0x8c, 0xcf, 0xbc, 0xcb, 0xe7, 0x20, 0xd8, 0xb8, 0x37, 0x99, 0x20, 0xa8, 0x8f, 0x74, - 0xdc, 0x5f, 0xb4, 0x80, 0x35, 0x5a, 0x27, 0x4b, 0xd2, 0xde, 0x68, 0x5c, 0x19, 0x8d, 0xc2, 0xae, - 0x53, 0x9d, 0x6d, 0xc2, 0x9c, 0x4d, 0x8a, 0x6a, 0x6f, 0xba, 0x56, 0x3d, 0xed, 0xe9, 0x5f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x47, 0xf4, 0xa4, 0xe3, 0x9e, 0x02, 0x00, 0x00, + // 343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x4f, 0x4b, 0x33, 0x31, + 0x10, 0x87, 0xe9, 0xcb, 0x8b, 0xc8, 0xaa, 0xa8, 0x11, 0x15, 0xb6, 0x0a, 0x62, 0x4f, 0x15, 0xdd, + 0xb0, 0xf5, 0xe6, 0x59, 0xa9, 0xa2, 0x27, 0xff, 0x9c, 0x97, 0x74, 0x77, 0xda, 0x06, 0x6d, 0x66, + 0x4d, 0xb2, 0x0b, 0x41, 0xf4, 0xe0, 0xcd, 0xb3, 0x78, 0xf5, 0x4b, 0x79, 0xf6, 0xe6, 0x07, 0x91, + 0x66, 0xb3, 0x58, 0xca, 0x56, 0xd6, 0x53, 0x0e, 0xf3, 0xcc, 0x6f, 0x9e, 0x4c, 0xe2, 0xed, 0xdc, + 0x82, 0xd1, 0x92, 0x09, 0x95, 0x32, 0x09, 0x22, 0x36, 0x51, 0x1e, 0x46, 0x0a, 0x64, 0xce, 0x63, + 0x08, 0x52, 0x89, 0x1a, 0x89, 0x3f, 0x45, 0x04, 0x79, 0x18, 0x38, 0xc2, 0x4f, 0x06, 0x5c, 0x0f, + 0xb3, 0x5e, 0x10, 0xe3, 0x88, 0x0e, 0x10, 0x07, 0x77, 0x40, 0xa7, 0x68, 0x1a, 0xa3, 0x04, 0x6a, + 0x93, 0x68, 0xc5, 0x28, 0x6d, 0x52, 0x50, 0x33, 0x0b, 0x85, 0x81, 0xbf, 0xe5, 0xa2, 0x59, 0xca, + 0x29, 0x13, 0x02, 0x35, 0xd3, 0x1c, 0x85, 0xab, 0x76, 0x3e, 0xff, 0x7b, 0x1b, 0xe7, 0x60, 0xae, + 0x27, 0x02, 0xae, 0x0a, 0x3d, 0xf2, 0xe4, 0xcd, 0x77, 0x41, 0x9f, 0x08, 0x2d, 0x0d, 0x69, 0x07, + 0x15, 0xf7, 0x28, 0xa6, 0x94, 0xcc, 0x25, 0xdc, 0x67, 0xa0, 0xb4, 0xbf, 0x57, 0x07, 0x55, 0x29, + 0x0a, 0x05, 0xbb, 0xcd, 0xe7, 0x8f, 0xaf, 0xd7, 0x7f, 0xeb, 0x64, 0x8d, 0xe6, 0x21, 0xcd, 0x14, + 0x48, 0x45, 0x1f, 0xc6, 0x47, 0xc4, 0x93, 0x47, 0xf2, 0xde, 0xf0, 0x56, 0x2e, 0xb8, 0x2a, 0x5a, + 0x4e, 0xb9, 0xd2, 0x28, 0x0d, 0x09, 0x67, 0xa7, 0x4f, 0xb3, 0xa5, 0x50, 0xe7, 0x2f, 0x2d, 0x4e, + 0xac, 0x65, 0xc5, 0xb6, 0x49, 0xb3, 0x42, 0x8c, 0x0e, 0x9d, 0xcb, 0x5b, 0xc3, 0x5b, 0xb8, 0x49, + 0x13, 0xa6, 0xa1, 0x58, 0xd2, 0xfe, 0xec, 0x41, 0x13, 0x58, 0xa9, 0x75, 0x50, 0x93, 0x76, 0x46, + 0x6d, 0x6b, 0xd4, 0xf2, 0xab, 0x56, 0x75, 0xb4, 0x08, 0x63, 0x36, 0xca, 0x6c, 0x1f, 0x79, 0x69, + 0x78, 0x4b, 0x5d, 0xd0, 0xc7, 0x38, 0x62, 0x5c, 0x9c, 0x89, 0x3e, 0x92, 0xe0, 0xd7, 0x37, 0xf9, + 0x01, 0x4b, 0x37, 0x5a, 0x9b, 0x77, 0x76, 0x9b, 0xd6, 0x6e, 0x95, 0x2c, 0x8f, 0xed, 0x12, 0x5b, + 0xa7, 0x5c, 0xf4, 0xb1, 0x37, 0x67, 0xbf, 0xd9, 0xe1, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa0, + 0xc2, 0x1d, 0xdb, 0x2a, 0x03, 0x00, 0x00, } diff --git a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.gw.go b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.gw.go index 6a7ab7eac..8739077e2 100644 --- a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.gw.go +++ b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.gw.go @@ -137,6 +137,15 @@ func request_KeyTransparencyService_UpdateEntry_0(ctx context.Context, marshaler } +func request_KeyTransparencyService_GetDomainInfo_0(ctx context.Context, marshaler runtime.Marshaler, client KeyTransparencyServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq keytransparency_v1_types.GetDomainInfoRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetDomainInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + // RegisterKeyTransparencyServiceHandlerFromEndpoint is same as RegisterKeyTransparencyServiceHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterKeyTransparencyServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { @@ -251,6 +260,34 @@ func RegisterKeyTransparencyServiceHandler(ctx context.Context, mux *runtime.Ser }) + mux.Handle("GET", pattern_KeyTransparencyService_GetDomainInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_KeyTransparencyService_GetDomainInfo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_KeyTransparencyService_GetDomainInfo_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -260,6 +297,8 @@ var ( pattern_KeyTransparencyService_ListEntryHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1", "users", "user_id", "history"}, "")) pattern_KeyTransparencyService_UpdateEntry_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "users", "user_id"}, "")) + + pattern_KeyTransparencyService_GetDomainInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "domain", "info"}, "")) ) var ( @@ -268,4 +307,6 @@ var ( forward_KeyTransparencyService_ListEntryHistory_0 = runtime.ForwardResponseMessage forward_KeyTransparencyService_UpdateEntry_0 = runtime.ForwardResponseMessage + + forward_KeyTransparencyService_GetDomainInfo_0 = runtime.ForwardResponseMessage ) diff --git a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto index 844230e72..c55ba2420 100644 --- a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto +++ b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto @@ -60,4 +60,13 @@ service KeyTransparencyService { body: "entry_update" }; } + + // GetDomainInfo returns all info tight to this specific domain. + // + // This API to get all necessary data needed to verify a particular + // key-server. Data contains for instance the tree-info, like for instance the + // log-/map-id and the corresponding public-keys. + rpc GetDomainInfo(keytransparency.v1.types.GetDomainInfoRequest) returns (keytransparency.v1.types.GetDomainInfoResponse) { + option (google.api.http) = { get: "/v1/domain/info" }; + } } From a90707be5baefb2064c337acdcff019bf3b86832 Mon Sep 17 00:00:00 2001 From: Ismail Khoffi Date: Tue, 1 Aug 2017 16:54:33 +0100 Subject: [PATCH 2/5] rebase on master --- core/crypto/vrf/p256/p256.go | 3 - core/keyserver/keyserver.go | 2 +- .../keytransparency_v1_types.pb.go | 308 ++++-------------- .../keytransparency_v1_types.proto | 8 +- .../keytransparency_v1_service.pb.go | 4 +- .../keytransparency_v1_service.proto | 2 +- 6 files changed, 79 insertions(+), 248 deletions(-) diff --git a/core/crypto/vrf/p256/p256.go b/core/crypto/vrf/p256/p256.go index e575b438e..b13b1ed76 100644 --- a/core/crypto/vrf/p256/p256.go +++ b/core/crypto/vrf/p256/p256.go @@ -33,8 +33,6 @@ import ( "encoding/pem" "errors" "math/big" - "github.com/golang/glog" - "reflect" ) var ( @@ -226,7 +224,6 @@ func NewVRFSigner(key *ecdsa.PrivateKey) (*PrivateKey, error) { // Public returns the corresponding public key as bytes. func (k PrivateKey) Public() ([]byte, error) { // Copied from: core/crypto/signatures/p256/ecdsa_p256.go - glog.Errorf("reflect.TypeOf(k.PublicKey)=%v", reflect.TypeOf(k.PublicKey)) pkBytes, err := x509.MarshalPKIXPublicKey(&k.PublicKey) if err != nil { return nil, err diff --git a/core/keyserver/keyserver.go b/core/keyserver/keyserver.go index ef2d333f0..f289a3b5c 100644 --- a/core/keyserver/keyserver.go +++ b/core/keyserver/keyserver.go @@ -323,7 +323,7 @@ func (s *Server) UpdateEntry(ctx context.Context, in *tpb.UpdateEntryRequest) (* return &tpb.UpdateEntryResponse{Proof: resp}, nil } -// GetDomainInfo returns all info tight to this specific domain. +// GetDomainInfo returns all info tied to the specified domain. // // This API to get all necessary data needed to verify a particular // key-server. Data contains for instance the tree-info, like for instance the diff --git a/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go b/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go index 808e3cbd6..f963cd874 100644 --- a/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go +++ b/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go @@ -351,8 +351,8 @@ func (m *SignedKV) GetPrevious() []byte { type Mutation struct { // update contains the actual mutation information. Update *SignedKV `protobuf:"bytes,1,opt,name=update" json:"update,omitempty"` - // proof contains a leaf and an inclusion proof in the map. - // This is used by Storage-less monitors. + // proof contains a leaf and an inclusion proof in the map of the previous + // epoch. This is used by Storage-less monitors. Proof *trillian1.MapLeafInclusion `protobuf:"bytes,2,opt,name=proof" json:"proof,omitempty"` } @@ -805,163 +805,6 @@ func (m *GetDomainInfoResponse) GetVrf() *keyspb.PublicKey { return nil } -// GetMonitoringRequest contains the input parameters of the GetMonitoring APIs. -type GetMonitoringRequest struct { - // start specifies the start epoch number from which monitoring results will - // be returned (ranging from [start, latestObserved] and starting at 1). - Start int64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` -} - -func (m *GetMonitoringRequest) Reset() { *m = GetMonitoringRequest{} } -func (m *GetMonitoringRequest) String() string { return proto.CompactTextString(m) } -func (*GetMonitoringRequest) ProtoMessage() {} -func (*GetMonitoringRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } - -func (m *GetMonitoringRequest) GetStart() int64 { - if m != nil { - return m.Start - } - return 0 -} - -// InvalidMutation includes all information to reproduce that there was an -// invalid mutation from epoch e to e+1. -type InvalidMutation struct { - // old_leaf is the inclusion proof to the leaf at epoch e. - OldLeaf *trillian1.MapLeafInclusion `protobuf:"bytes,1,opt,name=old_leaf,json=oldLeaf" json:"old_leaf,omitempty"` - // new_leaf is the inclusion proof to the leaf at epoch e+1. - NewLeaf *trillian1.MapLeafInclusion `protobuf:"bytes,2,opt,name=new_leaf,json=newLeaf" json:"new_leaf,omitempty"` -} - -func (m *InvalidMutation) Reset() { *m = InvalidMutation{} } -func (m *InvalidMutation) String() string { return proto.CompactTextString(m) } -func (*InvalidMutation) ProtoMessage() {} -func (*InvalidMutation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } - -func (m *InvalidMutation) GetOldLeaf() *trillian1.MapLeafInclusion { - if m != nil { - return m.OldLeaf - } - return nil -} - -func (m *InvalidMutation) GetNewLeaf() *trillian1.MapLeafInclusion { - if m != nil { - return m.NewLeaf - } - return nil -} - -// NotMatchingMapRootProof contains all data necessary to reproduce that set of -// mutations does not produce new expected map root. -type NotMatchingMapRootProof struct { - // map_root contains the map root hash the monitor observed. - MapRoot *trillian.SignedMapRoot `protobuf:"bytes,1,opt,name=map_root,json=mapRoot" json:"map_root,omitempty"` - // old_leafs is a list of inclusion proofs for the leafs in epoch e. - OldLeafs []*trillian1.MapLeafInclusion `protobuf:"bytes,2,rep,name=old_leafs,json=oldLeafs" json:"old_leafs,omitempty"` - // new_leafs is a list of inclusion proofs for changed leafs (from epoch e - // to epoch e+1). Hashing these produces a different hash than root hash in - // above's map_root. - NewLeafs []*trillian1.MapLeafInclusion `protobuf:"bytes,3,rep,name=new_leafs,json=newLeafs" json:"new_leafs,omitempty"` -} - -func (m *NotMatchingMapRootProof) Reset() { *m = NotMatchingMapRootProof{} } -func (m *NotMatchingMapRootProof) String() string { return proto.CompactTextString(m) } -func (*NotMatchingMapRootProof) ProtoMessage() {} -func (*NotMatchingMapRootProof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } - -func (m *NotMatchingMapRootProof) GetMapRoot() *trillian.SignedMapRoot { - if m != nil { - return m.MapRoot - } - return nil -} - -func (m *NotMatchingMapRootProof) GetOldLeafs() []*trillian1.MapLeafInclusion { - if m != nil { - return m.OldLeafs - } - return nil -} - -func (m *NotMatchingMapRootProof) GetNewLeafs() []*trillian1.MapLeafInclusion { - if m != nil { - return m.NewLeafs - } - return nil -} - -type GetMonitoringResponse struct { - // smr contains the map root for the sparse Merkle Tree signed with the - // monitor's key on success. If the checks were not successful the - // smr will be empty. The epochs are encoded into the smr map_revision. - Smr *trillian.SignedMapRoot `protobuf:"bytes,1,opt,name=smr" json:"smr,omitempty"` - // seen_timestamp_nanos contains the time in nanoseconds where this particular - // signed map root was retrieved and processed. The actual timestamp of the - // smr returned by the server is contained in above smr field. - SeenTimestampNanos int64 `protobuf:"varint,2,opt,name=seen_timestamp_nanos,json=seenTimestampNanos" json:"seen_timestamp_nanos,omitempty"` - // isValid signals if all verification steps for the requested epoch passed - // or not. - IsValid bool `protobuf:"varint,3,opt,name=isValid" json:"isValid,omitempty"` - // invalidRootSigProof contains the signed map root received by the - // key-transparency server, if and only if the key-server's signature was - // invalid. - InvalidRootSigProof *trillian.SignedMapRoot `protobuf:"bytes,4,opt,name=invalidRootSigProof" json:"invalidRootSigProof,omitempty"` - // invalidMutation contains data to reproduce that there was an invalid - // mutation from epoch e to epoch e+1 - InvalidMutation *InvalidMutation `protobuf:"bytes,5,opt,name=invalidMutation" json:"invalidMutation,omitempty"` - // NotMatchingMapRoot contains all data to reproduce that the set of mutations - // does not produce observed new map root. - NotMatchingMapRoot *NotMatchingMapRootProof `protobuf:"bytes,6,opt,name=notMatchingMapRoot" json:"notMatchingMapRoot,omitempty"` -} - -func (m *GetMonitoringResponse) Reset() { *m = GetMonitoringResponse{} } -func (m *GetMonitoringResponse) String() string { return proto.CompactTextString(m) } -func (*GetMonitoringResponse) ProtoMessage() {} -func (*GetMonitoringResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } - -func (m *GetMonitoringResponse) GetSmr() *trillian.SignedMapRoot { - if m != nil { - return m.Smr - } - return nil -} - -func (m *GetMonitoringResponse) GetSeenTimestampNanos() int64 { - if m != nil { - return m.SeenTimestampNanos - } - return 0 -} - -func (m *GetMonitoringResponse) GetIsValid() bool { - if m != nil { - return m.IsValid - } - return false -} - -func (m *GetMonitoringResponse) GetInvalidRootSigProof() *trillian.SignedMapRoot { - if m != nil { - return m.InvalidRootSigProof - } - return nil -} - -func (m *GetMonitoringResponse) GetInvalidMutation() *InvalidMutation { - if m != nil { - return m.InvalidMutation - } - return nil -} - -func (m *GetMonitoringResponse) GetNotMatchingMapRoot() *NotMatchingMapRootProof { - if m != nil { - return m.NotMatchingMapRoot - } - return nil -} - func init() { proto.RegisterType((*Committed)(nil), "keytransparency.v1.types.Committed") proto.RegisterType((*EntryUpdate)(nil), "keytransparency.v1.types.EntryUpdate") @@ -985,82 +828,73 @@ func init() { func init() { proto.RegisterFile("keytransparency_v1_types.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1230 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xdf, 0x6e, 0x14, 0xb7, - 0x17, 0x66, 0x76, 0xb3, 0xff, 0x4e, 0x02, 0x8b, 0x4c, 0x20, 0xf3, 0xcb, 0x4f, 0x20, 0x34, 0xa8, - 0x2d, 0x54, 0x68, 0x43, 0x06, 0x05, 0x0a, 0xbd, 0x28, 0x85, 0x56, 0x24, 0x4a, 0x82, 0x22, 0x07, - 0xd2, 0xcb, 0x91, 0xb3, 0xe3, 0x4c, 0xac, 0xcc, 0xda, 0xd3, 0xb1, 0x67, 0x61, 0x90, 0xaa, 0xbe, - 0x40, 0xa5, 0xaa, 0x7d, 0x86, 0x3e, 0x43, 0x6f, 0x7b, 0xd1, 0xb7, 0xe8, 0xd3, 0x54, 0xb6, 0x67, - 0x76, 0x67, 0xc3, 0xfe, 0x09, 0x5c, 0xf4, 0x66, 0x65, 0x1f, 0x9f, 0xcf, 0x3e, 0xe7, 0x3b, 0xdf, - 0xb1, 0x67, 0xe1, 0xd6, 0x19, 0xcd, 0x55, 0x4a, 0xb8, 0x4c, 0x48, 0x4a, 0x79, 0x3f, 0x0f, 0x86, - 0x9b, 0x81, 0xca, 0x13, 0x2a, 0x7b, 0x49, 0x2a, 0x94, 0x40, 0xee, 0xb9, 0xf5, 0xde, 0x70, 0xb3, - 0x67, 0xd6, 0xd7, 0x1f, 0x46, 0x4c, 0x9d, 0x66, 0xc7, 0xbd, 0xbe, 0x18, 0x6c, 0x44, 0x42, 0x44, - 0x31, 0xdd, 0x50, 0x29, 0x8b, 0x63, 0x46, 0xf8, 0x46, 0x3f, 0xcd, 0x13, 0x25, 0x36, 0x24, 0x8b, - 0x92, 0x63, 0xfb, 0x6b, 0xb7, 0x5b, 0xbf, 0x37, 0x07, 0x54, 0x0e, 0x0a, 0xd7, 0xcd, 0x0b, 0xb8, - 0x06, 0x03, 0x92, 0x04, 0x24, 0x61, 0x16, 0xe2, 0x6d, 0x42, 0xe7, 0x85, 0x18, 0x0c, 0x98, 0x52, - 0x34, 0x44, 0x57, 0xa1, 0x7e, 0x46, 0x73, 0xd7, 0xb9, 0xed, 0xdc, 0x5d, 0xc1, 0x7a, 0x88, 0x10, - 0x2c, 0x85, 0x44, 0x11, 0xb7, 0x66, 0x4c, 0x66, 0xec, 0xfd, 0xe2, 0xc0, 0xf2, 0xf7, 0x5c, 0xa5, - 0xf9, 0x9b, 0x24, 0x24, 0x8a, 0xa2, 0xa7, 0xd0, 0xcc, 0xcc, 0xc8, 0x78, 0x2d, 0xfb, 0x5e, 0x6f, - 0x16, 0x01, 0xbd, 0x43, 0x16, 0x71, 0x1a, 0xee, 0x1e, 0xe1, 0x02, 0x81, 0xbe, 0x85, 0x4e, 0xbf, - 0x3c, 0xde, 0xad, 0x1b, 0xf8, 0x9d, 0xd9, 0xf0, 0x51, 0xa4, 0x78, 0x8c, 0xf2, 0x32, 0x68, 0x98, - 0x68, 0xd0, 0x2d, 0x00, 0x6b, 0x1d, 0x50, 0xae, 0x8a, 0x24, 0x2a, 0x16, 0xb4, 0x07, 0x5d, 0x92, - 0xa9, 0x53, 0x91, 0xb2, 0xf7, 0x34, 0x0c, 0xce, 0x68, 0x2e, 0xdd, 0xda, 0xed, 0xfa, 0xfc, 0x13, - 0x0f, 0xb2, 0xe3, 0x98, 0xf5, 0x77, 0x69, 0x8e, 0xaf, 0x8c, 0xb1, 0xbb, 0x34, 0x97, 0xde, 0x1f, - 0x0e, 0x74, 0x46, 0xab, 0x68, 0x1d, 0x5a, 0x34, 0xf4, 0xb7, 0xb6, 0x36, 0x9f, 0xd8, 0x83, 0xb7, - 0x2f, 0xe1, 0xd2, 0x80, 0xbe, 0x86, 0xff, 0xa5, 0x92, 0x04, 0x43, 0x9a, 0xb2, 0x93, 0x9c, 0xf1, - 0x28, 0x90, 0xa7, 0xc4, 0xdf, 0x7a, 0x14, 0x3c, 0x7c, 0xf0, 0xd8, 0xb7, 0xc4, 0x6e, 0x5f, 0xc2, - 0x37, 0x52, 0x49, 0x8e, 0x4a, 0x8f, 0x43, 0xe3, 0xa0, 0xd7, 0x91, 0x0f, 0xab, 0xb4, 0x1f, 0x4e, - 0xc0, 0x13, 0x7f, 0xeb, 0x91, 0xe1, 0x4a, 0xe3, 0x90, 0x59, 0x1d, 0x21, 0x0f, 0xfc, 0xad, 0x47, - 0xcf, 0x01, 0xda, 0x67, 0x34, 0x37, 0x9a, 0xf4, 0x7c, 0x68, 0xef, 0xd2, 0xfc, 0x88, 0xc4, 0x19, - 0x9d, 0x52, 0xde, 0x55, 0x68, 0x0c, 0xf5, 0x52, 0x51, 0x5f, 0x3b, 0xf1, 0x7e, 0xaf, 0x41, 0xbb, - 0xac, 0x14, 0xfa, 0x06, 0x3a, 0x7a, 0x33, 0xeb, 0xe6, 0x2c, 0x2a, 0x70, 0x79, 0x16, 0xd6, 0x11, - 0xd8, 0x53, 0x31, 0x80, 0x64, 0x11, 0x27, 0x2a, 0x4b, 0x69, 0xc9, 0xb8, 0xbf, 0x58, 0x22, 0x66, - 0x60, 0x41, 0xa6, 0xbc, 0xb8, 0xb2, 0x0b, 0x5a, 0x87, 0x76, 0x92, 0xd2, 0x21, 0x13, 0x99, 0xb4, - 0x4c, 0xe0, 0xd1, 0x7c, 0xfd, 0x0d, 0x74, 0xcf, 0x41, 0xab, 0x89, 0x77, 0x6c, 0xe2, 0xf7, 0xab, - 0x89, 0x2f, 0xfb, 0x37, 0x7a, 0xb6, 0xe3, 0xbe, 0x63, 0x11, 0x53, 0x24, 0x8e, 0x73, 0x1b, 0x45, - 0x41, 0xc8, 0xd3, 0xda, 0x57, 0x8e, 0xf7, 0x0e, 0xda, 0xfb, 0x99, 0x22, 0x8a, 0x09, 0x5e, 0x51, - 0xbc, 0xf3, 0xd1, 0x8a, 0x7f, 0x00, 0x8d, 0x24, 0x15, 0xe2, 0xa4, 0x38, 0x79, 0xbd, 0x37, 0xea, - 0xe1, 0x7d, 0x92, 0xec, 0x51, 0x72, 0xb2, 0xc3, 0xfb, 0x71, 0x26, 0x99, 0xe0, 0xd8, 0x3a, 0x7a, - 0x0c, 0xba, 0x2f, 0xa9, 0xb2, 0x24, 0xd0, 0x1f, 0x33, 0x2a, 0x15, 0x5a, 0x83, 0x56, 0x26, 0x69, - 0x1a, 0xb0, 0xb0, 0x48, 0xaa, 0xa9, 0xa7, 0x3b, 0x21, 0xba, 0x0e, 0x4d, 0x92, 0x24, 0xda, 0x5e, - 0x33, 0xf6, 0x06, 0x49, 0x92, 0x9d, 0x10, 0x7d, 0x0e, 0xdd, 0x13, 0x96, 0x4a, 0x15, 0xa8, 0x94, - 0xd2, 0x40, 0xb2, 0xf7, 0xd4, 0xd0, 0x56, 0xc7, 0x97, 0x8d, 0xf9, 0x75, 0x4a, 0xe9, 0x21, 0x7b, - 0x4f, 0xbd, 0x7f, 0x6a, 0x70, 0x75, 0x7c, 0x96, 0x4c, 0x04, 0x97, 0x14, 0xfd, 0x1f, 0x3a, 0xc3, - 0xf4, 0x24, 0xb0, 0x51, 0x5b, 0xf1, 0xb4, 0x87, 0xe9, 0xc9, 0x81, 0x9e, 0x4f, 0x36, 0x70, 0xed, - 0x53, 0x1a, 0x18, 0x3d, 0x01, 0x88, 0x29, 0x29, 0x0f, 0xa8, 0x2f, 0xa4, 0xa5, 0xa3, 0xbd, 0xed, - 0xe9, 0xf7, 0xa0, 0x2e, 0x07, 0xa9, 0xbb, 0x64, 0x30, 0x6b, 0x63, 0x8c, 0x65, 0x7d, 0x9f, 0x24, - 0x58, 0x08, 0x85, 0xb5, 0x0f, 0xf2, 0xa1, 0x1d, 0x8b, 0x28, 0x48, 0x85, 0x50, 0x6e, 0x63, 0xba, - 0xff, 0x9e, 0x88, 0x8c, 0x7f, 0x2b, 0xb6, 0x03, 0xf4, 0x05, 0x74, 0x35, 0xa6, 0x2f, 0xb8, 0x64, - 0x52, 0xe9, 0x54, 0xdc, 0xe6, 0xed, 0xfa, 0xdd, 0x15, 0x7c, 0x25, 0x16, 0xd1, 0x8b, 0xb1, 0x15, - 0xdd, 0x81, 0xcb, 0xda, 0x91, 0x95, 0x31, 0xba, 0x2d, 0xe3, 0xb6, 0x12, 0x8b, 0x68, 0x14, 0xb7, - 0xbe, 0x31, 0xd6, 0xf6, 0x98, 0xb4, 0xec, 0x6e, 0x33, 0xa9, 0xc4, 0x05, 0x0a, 0xba, 0x0a, 0x0d, - 0xa9, 0x48, 0xaa, 0x0c, 0xb7, 0x75, 0x6c, 0x27, 0xba, 0x24, 0x09, 0x89, 0x2a, 0x95, 0x6c, 0xe0, - 0xb6, 0x36, 0xe8, 0x22, 0x56, 0x34, 0xb0, 0xb4, 0x40, 0x03, 0x8d, 0x69, 0x1a, 0xf8, 0x09, 0xdc, - 0x0f, 0xa3, 0x2c, 0xa4, 0xf0, 0x1c, 0x9a, 0xa6, 0x23, 0xa4, 0xeb, 0x98, 0x3e, 0xfe, 0x72, 0x76, - 0xa9, 0xcf, 0xcb, 0x08, 0x17, 0x48, 0x74, 0x13, 0x80, 0xd3, 0x77, 0x2a, 0xa8, 0xa6, 0xd5, 0xd1, - 0x96, 0x43, 0x6d, 0xf0, 0xfe, 0x74, 0x00, 0xd9, 0x87, 0xe5, 0xbf, 0x50, 0x3c, 0xda, 0x86, 0x15, - 0xaa, 0xcf, 0x09, 0x8a, 0x86, 0xb6, 0x52, 0xfa, 0x6c, 0x76, 0x5e, 0x95, 0x97, 0x0f, 0x2f, 0xd3, - 0xf1, 0xc4, 0xfb, 0x01, 0xae, 0x4d, 0xc4, 0x5d, 0x50, 0xf6, 0xac, 0xec, 0x77, 0x7b, 0x55, 0x7c, - 0x0c, 0x63, 0x45, 0xff, 0xff, 0xea, 0xc0, 0xb5, 0x97, 0x54, 0x95, 0xb7, 0x8f, 0x2c, 0x29, 0x59, - 0x85, 0x06, 0x4d, 0x44, 0xff, 0xd4, 0xec, 0x5c, 0xc7, 0x76, 0x32, 0x2d, 0xf1, 0xda, 0xb4, 0xc4, - 0x6f, 0x02, 0x18, 0x09, 0x29, 0x71, 0x46, 0xb9, 0xe1, 0xa6, 0x83, 0x8d, 0xa8, 0x5e, 0x6b, 0xc3, - 0xa4, 0xc2, 0x96, 0x26, 0x15, 0xe6, 0xfd, 0x5d, 0x83, 0xd5, 0xc9, 0x88, 0x8a, 0x64, 0xa7, 0x87, - 0x54, 0x74, 0x69, 0xed, 0x23, 0xbb, 0xb4, 0xfe, 0xe9, 0x5d, 0xba, 0x74, 0xb1, 0x2e, 0x6d, 0x7c, - 0xd8, 0xa5, 0xe8, 0x19, 0x74, 0x06, 0x65, 0x5e, 0xa6, 0xdb, 0xe7, 0x5e, 0xef, 0x25, 0x05, 0x78, - 0x0c, 0xd2, 0x15, 0x30, 0x02, 0xaf, 0xd0, 0xdb, 0x32, 0xf4, 0x5e, 0xd6, 0xe6, 0x83, 0x92, 0x62, - 0xef, 0xbe, 0x25, 0x51, 0x70, 0xa6, 0x44, 0xca, 0x78, 0x54, 0xa9, 0xab, 0xed, 0x0d, 0xa7, 0xd2, - 0xf2, 0xde, 0xcf, 0xd0, 0xdd, 0xe1, 0x43, 0x12, 0xb3, 0x70, 0xf4, 0x0c, 0x6d, 0x41, 0x5b, 0xc4, - 0x61, 0xa0, 0xaf, 0xc3, 0x42, 0x5d, 0xf3, 0xae, 0xcd, 0x96, 0x88, 0x43, 0x6d, 0xd1, 0x30, 0x4e, - 0xdf, 0x5a, 0xd8, 0xe2, 0x47, 0xa8, 0xc5, 0xe9, 0x5b, 0x6d, 0xf1, 0xfe, 0x72, 0x60, 0xed, 0x95, - 0x50, 0xfb, 0x44, 0xf5, 0x4f, 0x19, 0x8f, 0x8a, 0xb2, 0xd9, 0x7b, 0xd8, 0x87, 0xb6, 0xfe, 0xac, - 0x34, 0x65, 0x73, 0xe6, 0x97, 0xb9, 0x35, 0xb0, 0x03, 0xf4, 0x18, 0x3a, 0x65, 0xf4, 0xe5, 0x67, - 0xc1, 0xbc, 0x38, 0xda, 0x45, 0xf8, 0x52, 0x03, 0xcb, 0xf8, 0xf5, 0xeb, 0xbf, 0x10, 0x58, 0x24, - 0x20, 0xbd, 0xdf, 0xea, 0x70, 0xfd, 0x1c, 0xe3, 0x85, 0x6e, 0x0b, 0x85, 0x3a, 0x17, 0x50, 0xe8, - 0x03, 0x58, 0x95, 0x94, 0xf2, 0x40, 0xb1, 0x01, 0x95, 0x8a, 0x0c, 0x92, 0x80, 0x13, 0x2e, 0x64, - 0xd1, 0x64, 0x48, 0xaf, 0xbd, 0x2e, 0x97, 0x5e, 0xe9, 0x15, 0xe4, 0x42, 0x8b, 0xc9, 0x23, 0x5d, - 0x39, 0x23, 0xe9, 0x36, 0x2e, 0xa7, 0x68, 0x07, 0xae, 0x31, 0x5b, 0x53, 0xbd, 0xff, 0x21, 0x8b, - 0x0c, 0x9b, 0x8b, 0x9e, 0xb3, 0x69, 0x18, 0x74, 0x08, 0x5d, 0x36, 0x29, 0x8f, 0xe2, 0x95, 0xbb, - 0x37, 0x5b, 0xbc, 0xe7, 0xf4, 0x84, 0xcf, 0xef, 0x80, 0x08, 0x20, 0xfe, 0x41, 0xc5, 0xdd, 0xa6, - 0xd9, 0x77, 0x73, 0xf6, 0xbe, 0x33, 0x54, 0x82, 0xa7, 0x6c, 0x76, 0xdc, 0x34, 0x7f, 0x43, 0x1e, - 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x60, 0x2c, 0xd7, 0x73, 0x55, 0x0d, 0x00, 0x00, + // 1079 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x5d, 0x6e, 0x1b, 0x37, + 0x10, 0x8e, 0xb4, 0x96, 0x2c, 0x8d, 0xff, 0x52, 0xc6, 0xb1, 0x55, 0x15, 0x09, 0x8c, 0x35, 0xda, + 0x26, 0x45, 0x21, 0xc7, 0x6b, 0xc8, 0x6d, 0xd2, 0x87, 0xa6, 0x49, 0x8a, 0xd8, 0xb0, 0x0d, 0x18, + 0x74, 0xe2, 0x3e, 0x2e, 0x68, 0x89, 0x5a, 0x13, 0x5e, 0x2d, 0x59, 0x92, 0x2b, 0x64, 0x0d, 0x14, + 0xe8, 0x01, 0x0a, 0x14, 0xe8, 0x19, 0x7a, 0x86, 0x5e, 0xa0, 0xb7, 0xe8, 0x69, 0x0a, 0x92, 0xbb, + 0xfa, 0xb1, 0xe5, 0xbf, 0x3c, 0xe4, 0xc5, 0x26, 0x67, 0xe6, 0xdb, 0x99, 0xf9, 0xe6, 0x9b, 0xd5, + 0xc2, 0xe3, 0x33, 0x9a, 0x69, 0x49, 0x12, 0x25, 0x88, 0xa4, 0x49, 0x27, 0x0b, 0x07, 0x9b, 0xa1, + 0xce, 0x04, 0x55, 0x2d, 0x21, 0xb9, 0xe6, 0xa8, 0x71, 0xc1, 0xdf, 0x1a, 0x6c, 0xb6, 0xac, 0xbf, + 0xd9, 0x8e, 0x98, 0x3e, 0x4d, 0x4f, 0x5a, 0x1d, 0xde, 0xdf, 0x88, 0x38, 0x8f, 0x62, 0xba, 0xa1, + 0x25, 0x8b, 0x63, 0x46, 0x92, 0x8d, 0x8e, 0xcc, 0x84, 0xe6, 0x1b, 0x67, 0x34, 0x53, 0xe2, 0x24, + 0xff, 0xe7, 0x1e, 0xd8, 0xdc, 0xba, 0x19, 0xa6, 0x58, 0x24, 0x4e, 0xdc, 0xdf, 0x1c, 0xf4, 0xf4, + 0x1a, 0x50, 0x71, 0xc8, 0x43, 0x37, 0x6f, 0x11, 0x1a, 0xf6, 0x89, 0x08, 0x89, 0x60, 0x0e, 0xe2, + 0x6f, 0x42, 0xfd, 0x35, 0xef, 0xf7, 0x99, 0xd6, 0xb4, 0x8b, 0xee, 0x83, 0x77, 0x46, 0xb3, 0x46, + 0x69, 0xad, 0xf4, 0x64, 0x1e, 0x9b, 0x23, 0x42, 0x30, 0xd3, 0x25, 0x9a, 0x34, 0xca, 0xd6, 0x64, + 0xcf, 0xfe, 0x1f, 0x25, 0x98, 0xfb, 0x39, 0xd1, 0x32, 0x7b, 0x2f, 0xba, 0x44, 0x53, 0xf4, 0x02, + 0xaa, 0xa9, 0x3d, 0xd9, 0xa8, 0xb9, 0xc0, 0x6f, 0x5d, 0xc5, 0x5b, 0xeb, 0x88, 0x45, 0x09, 0xed, + 0xee, 0x1d, 0xe3, 0x1c, 0x81, 0x7e, 0x82, 0x7a, 0xa7, 0x48, 0xdf, 0xf0, 0x2c, 0x7c, 0xfd, 0x6a, + 0xf8, 0xb0, 0x52, 0x3c, 0x42, 0xf9, 0x29, 0x54, 0x6c, 0x35, 0xe8, 0x31, 0x80, 0xb3, 0xf6, 0x69, + 0xa2, 0xf3, 0x26, 0xc6, 0x2c, 0x68, 0x1f, 0x96, 0x48, 0xaa, 0x4f, 0xb9, 0x64, 0xe7, 0xb4, 0x1b, + 0x9a, 0xc1, 0x34, 0xca, 0x6b, 0xde, 0xf5, 0x19, 0x0f, 0xd3, 0x93, 0x98, 0x75, 0xf6, 0x68, 0x86, + 0x17, 0x47, 0xd8, 0x3d, 0x9a, 0x29, 0xff, 0xef, 0x12, 0xd4, 0x87, 0x5e, 0xd4, 0x84, 0x59, 0xda, + 0x0d, 0xda, 0xed, 0xcd, 0xe7, 0x2e, 0xf1, 0xce, 0x3d, 0x5c, 0x18, 0xd0, 0x0f, 0xf0, 0xb9, 0x54, + 0x24, 0x1c, 0x50, 0xc9, 0x7a, 0x19, 0x4b, 0xa2, 0x50, 0x9d, 0x92, 0xa0, 0xbd, 0x1d, 0x6e, 0x3d, + 0xfb, 0x2e, 0x70, 0xc4, 0xee, 0xdc, 0xc3, 0x2b, 0x52, 0x91, 0xe3, 0x22, 0xe2, 0xc8, 0x06, 0x18, + 0x3f, 0x0a, 0x60, 0x99, 0x76, 0xba, 0x13, 0x70, 0x11, 0xb4, 0xb7, 0x2d, 0x57, 0x06, 0x87, 0xac, + 0x77, 0x88, 0x3c, 0x0c, 0xda, 0xdb, 0xaf, 0x00, 0x6a, 0x67, 0x34, 0xb3, 0x52, 0xf6, 0x03, 0xa8, + 0xed, 0xd1, 0xec, 0x98, 0xc4, 0x29, 0x9d, 0x32, 0xde, 0x65, 0xa8, 0x0c, 0x8c, 0x2b, 0x9f, 0xaf, + 0xbb, 0xf8, 0x7f, 0x95, 0xa1, 0x56, 0x4c, 0x0a, 0xfd, 0x08, 0x75, 0xf3, 0x30, 0x17, 0x56, 0xba, + 0x69, 0xc0, 0x45, 0x2e, 0x6c, 0x2a, 0x70, 0x59, 0x31, 0x80, 0x62, 0x51, 0x42, 0x74, 0x2a, 0x69, + 0xc1, 0x78, 0x70, 0xb3, 0x44, 0xec, 0xc1, 0x81, 0xec, 0x78, 0xf1, 0xd8, 0x53, 0x50, 0x13, 0x6a, + 0x42, 0xd2, 0x01, 0xe3, 0xa9, 0x72, 0x4c, 0xe0, 0xe1, 0xbd, 0xf9, 0x1e, 0x96, 0x2e, 0x40, 0xc7, + 0x1b, 0xaf, 0xbb, 0xc6, 0xbf, 0x1d, 0x6f, 0x7c, 0x2e, 0x58, 0x69, 0xb9, 0x8d, 0x7b, 0xc3, 0x22, + 0xa6, 0x49, 0x1c, 0x67, 0xae, 0x8a, 0x9c, 0x90, 0x17, 0xe5, 0xef, 0x4b, 0xfe, 0x07, 0xa8, 0x1d, + 0xa4, 0x9a, 0x68, 0xc6, 0x93, 0x31, 0xc5, 0x97, 0xee, 0xac, 0xf8, 0x67, 0x50, 0x11, 0x92, 0xf3, + 0x5e, 0x9e, 0xb9, 0xd9, 0x1a, 0xee, 0xf0, 0x01, 0x11, 0xfb, 0x94, 0xf4, 0x76, 0x93, 0x4e, 0x9c, + 0x2a, 0xc6, 0x13, 0xec, 0x02, 0x7d, 0x06, 0x4b, 0x6f, 0xa9, 0x76, 0x24, 0xd0, 0x5f, 0x53, 0xaa, + 0x34, 0x5a, 0x85, 0xd9, 0x54, 0x51, 0x19, 0xb2, 0x6e, 0xde, 0x54, 0xd5, 0x5c, 0x77, 0xbb, 0xe8, + 0x21, 0x54, 0x89, 0x10, 0xc6, 0x5e, 0xb6, 0xf6, 0x0a, 0x11, 0x62, 0xb7, 0x8b, 0xbe, 0x82, 0xa5, + 0x1e, 0x93, 0x4a, 0x87, 0x5a, 0x52, 0x1a, 0x2a, 0x76, 0x4e, 0x2d, 0x6d, 0x1e, 0x5e, 0xb0, 0xe6, + 0x77, 0x92, 0xd2, 0x23, 0x76, 0x4e, 0xfd, 0xff, 0xca, 0x70, 0x7f, 0x94, 0x4b, 0x09, 0x9e, 0x28, + 0x8a, 0xbe, 0x80, 0xfa, 0x40, 0xf6, 0x42, 0x57, 0xb5, 0x13, 0x4f, 0x6d, 0x20, 0x7b, 0x87, 0xe6, + 0x3e, 0xb9, 0xc0, 0xe5, 0x8f, 0x59, 0x60, 0xf4, 0x1c, 0x20, 0xa6, 0xa4, 0x48, 0xe0, 0xdd, 0x48, + 0x4b, 0xdd, 0x44, 0xbb, 0xec, 0x4f, 0xc1, 0x53, 0x7d, 0xd9, 0x98, 0xb1, 0x98, 0xd5, 0x11, 0xc6, + 0xb1, 0x7e, 0x40, 0x04, 0xe6, 0x5c, 0x63, 0x13, 0x83, 0x02, 0xa8, 0xc5, 0x3c, 0x0a, 0x25, 0xe7, + 0xba, 0x51, 0x99, 0x1e, 0xbf, 0xcf, 0x23, 0x1b, 0x3f, 0x1b, 0xbb, 0x03, 0xfa, 0x1a, 0x96, 0x0c, + 0xa6, 0xc3, 0x13, 0xc5, 0x94, 0x36, 0xad, 0x34, 0xaa, 0x6b, 0xde, 0x93, 0x79, 0xbc, 0x18, 0xf3, + 0xe8, 0xf5, 0xc8, 0x8a, 0xd6, 0x61, 0xc1, 0x04, 0xb2, 0xa2, 0xc6, 0xc6, 0xac, 0x0d, 0x9b, 0x8f, + 0x79, 0x34, 0xac, 0xdb, 0xbc, 0x31, 0x56, 0xf7, 0x99, 0x72, 0xec, 0xee, 0x30, 0xa5, 0xf9, 0x2d, + 0x06, 0xba, 0x0c, 0x15, 0xa5, 0x89, 0xd4, 0x96, 0x5b, 0x0f, 0xbb, 0x8b, 0x19, 0x89, 0x20, 0xd1, + 0xd8, 0x24, 0x2b, 0xb8, 0x66, 0x0c, 0x66, 0x88, 0x63, 0x1a, 0x98, 0xb9, 0x41, 0x03, 0x95, 0x69, + 0x1a, 0xf8, 0x0d, 0x1a, 0x97, 0xab, 0xcc, 0xa5, 0xf0, 0x0a, 0xaa, 0x76, 0x23, 0x54, 0xa3, 0x64, + 0xf7, 0xf8, 0x9b, 0xab, 0x47, 0x7d, 0x51, 0x46, 0x38, 0x47, 0xa2, 0x47, 0x00, 0x09, 0xfd, 0xa0, + 0xc3, 0xf1, 0xb6, 0xea, 0xc6, 0x72, 0x64, 0x0c, 0xfe, 0x3f, 0x25, 0x40, 0xee, 0x87, 0xe5, 0x53, + 0x28, 0x1e, 0xed, 0xc0, 0x3c, 0x35, 0x79, 0xc2, 0x7c, 0xa1, 0x9d, 0x94, 0xbe, 0xbc, 0xba, 0xaf, + 0xb1, 0x5f, 0x3e, 0x3c, 0x47, 0x47, 0x17, 0xff, 0x17, 0x78, 0x30, 0x51, 0x77, 0x4e, 0xd9, 0xcb, + 0x62, 0xdf, 0xdd, 0xab, 0xe2, 0x2e, 0x8c, 0xe5, 0xfb, 0xff, 0x67, 0x09, 0x1e, 0xbc, 0xa5, 0xba, + 0x78, 0xfb, 0xa8, 0x82, 0x92, 0x65, 0xa8, 0x50, 0xc1, 0x3b, 0xa7, 0xf6, 0xc9, 0x1e, 0x76, 0x97, + 0x69, 0x8d, 0x97, 0xa7, 0x35, 0xfe, 0x08, 0xc0, 0x4a, 0x48, 0xf3, 0x33, 0x9a, 0x58, 0x6e, 0xea, + 0xd8, 0x8a, 0xea, 0x9d, 0x31, 0x4c, 0x2a, 0x6c, 0x66, 0x52, 0x61, 0xfe, 0xbf, 0x65, 0x58, 0x9e, + 0xac, 0x28, 0x6f, 0x76, 0x7a, 0x49, 0xf9, 0x96, 0x96, 0xef, 0xb8, 0xa5, 0xde, 0xc7, 0x6f, 0xe9, + 0xcc, 0xed, 0xb6, 0xb4, 0x72, 0x79, 0x4b, 0xd1, 0x4b, 0xa8, 0xf7, 0x8b, 0xbe, 0xec, 0xb6, 0x5f, + 0xfb, 0x7a, 0x2f, 0x28, 0xc0, 0x23, 0x90, 0x99, 0x80, 0x15, 0xf8, 0x18, 0xbd, 0xb3, 0x96, 0xde, + 0x05, 0x63, 0x3e, 0x2c, 0x28, 0xf6, 0x57, 0x2c, 0x89, 0x6f, 0x78, 0x9f, 0xb0, 0x64, 0x37, 0xe9, + 0xf1, 0x7c, 0xae, 0xfe, 0xef, 0x25, 0x78, 0x78, 0xc1, 0x91, 0xd3, 0xbb, 0x06, 0x5e, 0xcc, 0xa3, + 0x5c, 0x49, 0x8b, 0x23, 0x62, 0xcc, 0x50, 0xb1, 0x71, 0x99, 0x88, 0x3e, 0x11, 0x39, 0xd5, 0x97, + 0x22, 0xfa, 0x44, 0xa0, 0x75, 0xf0, 0x06, 0xb2, 0x78, 0xcd, 0x7e, 0xd6, 0xca, 0xbf, 0x4f, 0x47, + 0xdf, 0x39, 0xc6, 0x7b, 0x52, 0xb5, 0x1f, 0x87, 0x5b, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xea, + 0x22, 0xfb, 0x26, 0x22, 0x0b, 0x00, 0x00, } diff --git a/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto b/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto index 77e26b2f3..56821fe73 100644 --- a/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto +++ b/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto @@ -21,10 +21,10 @@ syntax = "proto3"; // associated with it. package keytransparency.v1.types; -import "github.com/google/trillian/crypto/keyspb/keyspb.proto"; -import "github.com/google/trillian/crypto/sigpb/sigpb.proto"; -import "github.com/google/trillian/trillian.proto"; -import "github.com/google/trillian/trillian_map_api.proto"; +import "crypto/keyspb/keyspb.proto"; +import "crypto/sigpb/sigpb.proto"; +import "trillian.proto"; +import "trillian_map_api.proto"; // // Data types. diff --git a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go index 0c480000d..8023aec19 100644 --- a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go +++ b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.pb.go @@ -64,7 +64,7 @@ type KeyTransparencyServiceClient interface { // Returns the current user profile. // Clients must retry until this function returns a proof containing the desired value. UpdateEntry(ctx context.Context, in *keytransparency_v1_types.UpdateEntryRequest, opts ...grpc.CallOption) (*keytransparency_v1_types.UpdateEntryResponse, error) - // GetDomainInfo returns all info tight to this specific domain. + // GetDomainInfo returns all info tied to the specified domain. // // This API to get all necessary data needed to verify a particular // key-server. Data contains for instance the tree-info, like for instance the @@ -133,7 +133,7 @@ type KeyTransparencyServiceServer interface { // Returns the current user profile. // Clients must retry until this function returns a proof containing the desired value. UpdateEntry(context.Context, *keytransparency_v1_types.UpdateEntryRequest) (*keytransparency_v1_types.UpdateEntryResponse, error) - // GetDomainInfo returns all info tight to this specific domain. + // GetDomainInfo returns all info tied to the specified domain. // // This API to get all necessary data needed to verify a particular // key-server. Data contains for instance the tree-info, like for instance the diff --git a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto index c55ba2420..dd9a538a4 100644 --- a/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto +++ b/impl/proto/keytransparency_v1_service/keytransparency_v1_service.proto @@ -61,7 +61,7 @@ service KeyTransparencyService { }; } - // GetDomainInfo returns all info tight to this specific domain. + // GetDomainInfo returns all info tied to the specified domain. // // This API to get all necessary data needed to verify a particular // key-server. Data contains for instance the tree-info, like for instance the From 4f62f2c1b299908d4a69a566a6fb3339a1ae89f2 Mon Sep 17 00:00:00 2001 From: Ismail Khoffi Date: Tue, 1 Aug 2017 18:06:37 +0100 Subject: [PATCH 3/5] fix integration test --- core/fake/admin_client.go | 60 +++++++++++++++++++++++++++++++++++++++ integration/testutil.go | 5 ++-- 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 core/fake/admin_client.go diff --git a/core/fake/admin_client.go b/core/fake/admin_client.go new file mode 100644 index 000000000..292305dc2 --- /dev/null +++ b/core/fake/admin_client.go @@ -0,0 +1,60 @@ +// Copyright 2017 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fake + +import ( + "github.com/google/trillian" + "google.golang.org/grpc" + "golang.org/x/net/context" + "github.com/golang/protobuf/ptypes/empty" +) + +type adminClient struct{} + +func NewTrillianAdminClient() trillian.TrillianAdminClient { + return adminClient{} +} + +// Lists all trees the requester has access to. +func (a *adminClient) ListTrees(ctx context.Context, in *trillian.ListTreesRequest, opts ...grpc.CallOption) (*trillian.ListTreesResponse, error) { + panic("not implemented") +} + +// Retrieves a tree by ID. +func (a *adminClient) GetTree(ctx context.Context, in *trillian.GetTreeRequest, opts ...grpc.CallOption) (*trillian.Tree, error) { + panic("not implemented") +} + +// Creates a new tree. +// System-generated fields are not required and will be ignored if present, +// e.g.: tree_id, create_time and update_time. +// Returns the created tree, with all system-generated fields assigned. +func (a *adminClient) CreateTree(ctx context.Context, in *trillian.CreateTreeRequest, opts ...grpc.CallOption) (*trillian.Tree, error) { + panic("not implemented") +} + +// Updates a tree. +// See Tree for details. Readonly fields cannot be updated. +func (a *adminClient) UpdateTree(ctx context.Context, in *trillian.UpdateTreeRequest, opts ...grpc.CallOption) (*trillian.Tree, error) { + panic("not implemented") +} + +// Soft-deletes a tree. +// A soft-deleted tree may be undeleted for a certain period, after which +// it'll be permanently deleted. +// TODO(codingllama): Provide an undelete RPC. +func (a *adminClient) DeleteTree(ctx context.Context, in *trillian.DeleteTreeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { + panic("not implemented") +} \ No newline at end of file diff --git a/integration/testutil.go b/integration/testutil.go index b045c690d..496680bb1 100644 --- a/integration/testutil.go +++ b/integration/testutil.go @@ -190,9 +190,10 @@ func NewEnv(t *testing.T) *Env { t.Fatalf("SetLeaves(): %v", err) } tlog := fake.NewFakeTrillianLogClient() + tadmin := fake.NewTrillianAdminClient() - server := keyserver.New(logID, tlog, mapID, mapsvr, commitments, vrfPriv, mutator, - auth, authz, factory, mutations) + server := keyserver.New(logID, tlog, mapID, tadmin, mapsvr, commitments, + vrfPriv, mutator, auth, authz, factory, mutations) s := grpc.NewServer() pb.RegisterKeyTransparencyServiceServer(s, server) From 65a3f1284282ee71711b6782d05b046c66f92f39 Mon Sep 17 00:00:00 2001 From: Ismail Khoffi Date: Tue, 1 Aug 2017 18:34:20 +0100 Subject: [PATCH 4/5] fix integration test using nil grpc instead using fake implementation --- core/fake/admin_client.go | 60 ------------------- core/keyserver/keyserver_test.go | 3 +- .../keytransparency_v1_types.proto | 2 +- integration/testutil.go | 4 +- 4 files changed, 5 insertions(+), 64 deletions(-) delete mode 100644 core/fake/admin_client.go diff --git a/core/fake/admin_client.go b/core/fake/admin_client.go deleted file mode 100644 index 292305dc2..000000000 --- a/core/fake/admin_client.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package fake - -import ( - "github.com/google/trillian" - "google.golang.org/grpc" - "golang.org/x/net/context" - "github.com/golang/protobuf/ptypes/empty" -) - -type adminClient struct{} - -func NewTrillianAdminClient() trillian.TrillianAdminClient { - return adminClient{} -} - -// Lists all trees the requester has access to. -func (a *adminClient) ListTrees(ctx context.Context, in *trillian.ListTreesRequest, opts ...grpc.CallOption) (*trillian.ListTreesResponse, error) { - panic("not implemented") -} - -// Retrieves a tree by ID. -func (a *adminClient) GetTree(ctx context.Context, in *trillian.GetTreeRequest, opts ...grpc.CallOption) (*trillian.Tree, error) { - panic("not implemented") -} - -// Creates a new tree. -// System-generated fields are not required and will be ignored if present, -// e.g.: tree_id, create_time and update_time. -// Returns the created tree, with all system-generated fields assigned. -func (a *adminClient) CreateTree(ctx context.Context, in *trillian.CreateTreeRequest, opts ...grpc.CallOption) (*trillian.Tree, error) { - panic("not implemented") -} - -// Updates a tree. -// See Tree for details. Readonly fields cannot be updated. -func (a *adminClient) UpdateTree(ctx context.Context, in *trillian.UpdateTreeRequest, opts ...grpc.CallOption) (*trillian.Tree, error) { - panic("not implemented") -} - -// Soft-deletes a tree. -// A soft-deleted tree may be undeleted for a certain period, after which -// it'll be permanently deleted. -// TODO(codingllama): Provide an undelete RPC. -func (a *adminClient) DeleteTree(ctx context.Context, in *trillian.DeleteTreeRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - panic("not implemented") -} \ No newline at end of file diff --git a/core/keyserver/keyserver_test.go b/core/keyserver/keyserver_test.go index 8c7ef303b..87fdae51f 100644 --- a/core/keyserver/keyserver_test.go +++ b/core/keyserver/keyserver_test.go @@ -70,8 +70,9 @@ func TestListEntryHistory(t *testing.T) { sths := &fakeSequenced{make([][]byte, 0)} mapsvr := mapserver.NewReadonly(mapID, tree, fakeFactory{}, sths) tlog := fake.NewFakeTrillianLogClient() + tadmin := trillian.NewTrillianAdminClient(nil) - srv := New(logID, tlog, mapID, mapsvr, c, fakePrivateKey{}, fakeMutator{}, + srv := New(logID, tlog, mapID, mapsvr, tadmin, c, fakePrivateKey{}, fakeMutator{}, authentication.NewFake(), fakeAuthz{}, fakeFactory{}, fakeMutation{}) if err := addProfiles(profileCount, c, tree, sths); err != nil { t.Fatalf("addProfile(%v, _, _, _)=%v", profileCount, err) diff --git a/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto b/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto index 56821fe73..f406f5c8e 100644 --- a/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto +++ b/core/proto/keytransparency_v1_types/keytransparency_v1_types.proto @@ -238,7 +238,7 @@ message GetMutationsResponse { string next_page_token = 7; } -// GetDomainInfoRequest contains an emtpy request to query the GetDomainInfo +// GetDomainInfoRequest contains an empty request to query the GetDomainInfo // APIs. message GetDomainInfoRequest {} diff --git a/integration/testutil.go b/integration/testutil.go index 496680bb1..ab7372048 100644 --- a/integration/testutil.go +++ b/integration/testutil.go @@ -190,9 +190,9 @@ func NewEnv(t *testing.T) *Env { t.Fatalf("SetLeaves(): %v", err) } tlog := fake.NewFakeTrillianLogClient() - tadmin := fake.NewTrillianAdminClient() + tadmin := trillian.NewTrillianAdminClient(nil) - server := keyserver.New(logID, tlog, mapID, tadmin, mapsvr, commitments, + server := keyserver.New(logID, tlog, mapID, mapsvr, tadmin, commitments, vrfPriv, mutator, auth, authz, factory, mutations) s := grpc.NewServer() pb.RegisterKeyTransparencyServiceServer(s, server) From e6a39f0a5df75b411eedbe51be1afddbbd8368f3 Mon Sep 17 00:00:00 2001 From: Ismail Khoffi Date: Tue, 1 Aug 2017 19:03:37 +0100 Subject: [PATCH 5/5] Add Public() "implementation" to fakePrivateKey --- core/keyserver/keyserver_test.go | 2 + .../keytransparency_v1_types.pb.go | 139 +++++++++--------- 2 files changed, 71 insertions(+), 70 deletions(-) diff --git a/core/keyserver/keyserver_test.go b/core/keyserver/keyserver_test.go index 87fdae51f..980fb1e43 100644 --- a/core/keyserver/keyserver_test.go +++ b/core/keyserver/keyserver_test.go @@ -197,6 +197,8 @@ type fakePrivateKey struct{} func (fakePrivateKey) Evaluate(m []byte) ([32]byte, []byte) { return [32]byte{}, nil } +func (fakePrivateKey) Public() ([]byte, error) { return []byte{}, nil } + // mutator.Mutator fake. type fakeMutator struct{} diff --git a/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go b/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go index f963cd874..4f6d61237 100644 --- a/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go +++ b/core/proto/keytransparency_v1_types/keytransparency_v1_types.pb.go @@ -759,7 +759,7 @@ func (m *GetMutationsResponse) GetNextPageToken() string { return "" } -// GetDomainInfoRequest contains an emtpy request to query the GetDomainInfo +// GetDomainInfoRequest contains an empty request to query the GetDomainInfo // APIs. type GetDomainInfoRequest struct { } @@ -828,73 +828,72 @@ func init() { func init() { proto.RegisterFile("keytransparency_v1_types.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 1079 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0x5d, 0x6e, 0x1b, 0x37, - 0x10, 0x8e, 0xb4, 0x96, 0x2c, 0x8d, 0xff, 0x52, 0xc6, 0xb1, 0x55, 0x15, 0x09, 0x8c, 0x35, 0xda, - 0x26, 0x45, 0x21, 0xc7, 0x6b, 0xc8, 0x6d, 0xd2, 0x87, 0xa6, 0x49, 0x8a, 0xd8, 0xb0, 0x0d, 0x18, - 0x74, 0xe2, 0x3e, 0x2e, 0x68, 0x89, 0x5a, 0x13, 0x5e, 0x2d, 0x59, 0x92, 0x2b, 0x64, 0x0d, 0x14, - 0xe8, 0x01, 0x0a, 0x14, 0xe8, 0x19, 0x7a, 0x86, 0x5e, 0xa0, 0xb7, 0xe8, 0x69, 0x0a, 0x92, 0xbb, - 0xfa, 0xb1, 0xe5, 0xbf, 0x3c, 0xe4, 0xc5, 0x26, 0x67, 0xe6, 0xdb, 0x99, 0xf9, 0xe6, 0x9b, 0xd5, - 0xc2, 0xe3, 0x33, 0x9a, 0x69, 0x49, 0x12, 0x25, 0x88, 0xa4, 0x49, 0x27, 0x0b, 0x07, 0x9b, 0xa1, - 0xce, 0x04, 0x55, 0x2d, 0x21, 0xb9, 0xe6, 0xa8, 0x71, 0xc1, 0xdf, 0x1a, 0x6c, 0xb6, 0xac, 0xbf, - 0xd9, 0x8e, 0x98, 0x3e, 0x4d, 0x4f, 0x5a, 0x1d, 0xde, 0xdf, 0x88, 0x38, 0x8f, 0x62, 0xba, 0xa1, - 0x25, 0x8b, 0x63, 0x46, 0x92, 0x8d, 0x8e, 0xcc, 0x84, 0xe6, 0x1b, 0x67, 0x34, 0x53, 0xe2, 0x24, - 0xff, 0xe7, 0x1e, 0xd8, 0xdc, 0xba, 0x19, 0xa6, 0x58, 0x24, 0x4e, 0xdc, 0xdf, 0x1c, 0xf4, 0xf4, - 0x1a, 0x50, 0x71, 0xc8, 0x43, 0x37, 0x6f, 0x11, 0x1a, 0xf6, 0x89, 0x08, 0x89, 0x60, 0x0e, 0xe2, - 0x6f, 0x42, 0xfd, 0x35, 0xef, 0xf7, 0x99, 0xd6, 0xb4, 0x8b, 0xee, 0x83, 0x77, 0x46, 0xb3, 0x46, - 0x69, 0xad, 0xf4, 0x64, 0x1e, 0x9b, 0x23, 0x42, 0x30, 0xd3, 0x25, 0x9a, 0x34, 0xca, 0xd6, 0x64, - 0xcf, 0xfe, 0x1f, 0x25, 0x98, 0xfb, 0x39, 0xd1, 0x32, 0x7b, 0x2f, 0xba, 0x44, 0x53, 0xf4, 0x02, - 0xaa, 0xa9, 0x3d, 0xd9, 0xa8, 0xb9, 0xc0, 0x6f, 0x5d, 0xc5, 0x5b, 0xeb, 0x88, 0x45, 0x09, 0xed, - 0xee, 0x1d, 0xe3, 0x1c, 0x81, 0x7e, 0x82, 0x7a, 0xa7, 0x48, 0xdf, 0xf0, 0x2c, 0x7c, 0xfd, 0x6a, - 0xf8, 0xb0, 0x52, 0x3c, 0x42, 0xf9, 0x29, 0x54, 0x6c, 0x35, 0xe8, 0x31, 0x80, 0xb3, 0xf6, 0x69, - 0xa2, 0xf3, 0x26, 0xc6, 0x2c, 0x68, 0x1f, 0x96, 0x48, 0xaa, 0x4f, 0xb9, 0x64, 0xe7, 0xb4, 0x1b, - 0x9a, 0xc1, 0x34, 0xca, 0x6b, 0xde, 0xf5, 0x19, 0x0f, 0xd3, 0x93, 0x98, 0x75, 0xf6, 0x68, 0x86, - 0x17, 0x47, 0xd8, 0x3d, 0x9a, 0x29, 0xff, 0xef, 0x12, 0xd4, 0x87, 0x5e, 0xd4, 0x84, 0x59, 0xda, - 0x0d, 0xda, 0xed, 0xcd, 0xe7, 0x2e, 0xf1, 0xce, 0x3d, 0x5c, 0x18, 0xd0, 0x0f, 0xf0, 0xb9, 0x54, - 0x24, 0x1c, 0x50, 0xc9, 0x7a, 0x19, 0x4b, 0xa2, 0x50, 0x9d, 0x92, 0xa0, 0xbd, 0x1d, 0x6e, 0x3d, - 0xfb, 0x2e, 0x70, 0xc4, 0xee, 0xdc, 0xc3, 0x2b, 0x52, 0x91, 0xe3, 0x22, 0xe2, 0xc8, 0x06, 0x18, - 0x3f, 0x0a, 0x60, 0x99, 0x76, 0xba, 0x13, 0x70, 0x11, 0xb4, 0xb7, 0x2d, 0x57, 0x06, 0x87, 0xac, - 0x77, 0x88, 0x3c, 0x0c, 0xda, 0xdb, 0xaf, 0x00, 0x6a, 0x67, 0x34, 0xb3, 0x52, 0xf6, 0x03, 0xa8, - 0xed, 0xd1, 0xec, 0x98, 0xc4, 0x29, 0x9d, 0x32, 0xde, 0x65, 0xa8, 0x0c, 0x8c, 0x2b, 0x9f, 0xaf, - 0xbb, 0xf8, 0x7f, 0x95, 0xa1, 0x56, 0x4c, 0x0a, 0xfd, 0x08, 0x75, 0xf3, 0x30, 0x17, 0x56, 0xba, - 0x69, 0xc0, 0x45, 0x2e, 0x6c, 0x2a, 0x70, 0x59, 0x31, 0x80, 0x62, 0x51, 0x42, 0x74, 0x2a, 0x69, - 0xc1, 0x78, 0x70, 0xb3, 0x44, 0xec, 0xc1, 0x81, 0xec, 0x78, 0xf1, 0xd8, 0x53, 0x50, 0x13, 0x6a, - 0x42, 0xd2, 0x01, 0xe3, 0xa9, 0x72, 0x4c, 0xe0, 0xe1, 0xbd, 0xf9, 0x1e, 0x96, 0x2e, 0x40, 0xc7, - 0x1b, 0xaf, 0xbb, 0xc6, 0xbf, 0x1d, 0x6f, 0x7c, 0x2e, 0x58, 0x69, 0xb9, 0x8d, 0x7b, 0xc3, 0x22, - 0xa6, 0x49, 0x1c, 0x67, 0xae, 0x8a, 0x9c, 0x90, 0x17, 0xe5, 0xef, 0x4b, 0xfe, 0x07, 0xa8, 0x1d, - 0xa4, 0x9a, 0x68, 0xc6, 0x93, 0x31, 0xc5, 0x97, 0xee, 0xac, 0xf8, 0x67, 0x50, 0x11, 0x92, 0xf3, - 0x5e, 0x9e, 0xb9, 0xd9, 0x1a, 0xee, 0xf0, 0x01, 0x11, 0xfb, 0x94, 0xf4, 0x76, 0x93, 0x4e, 0x9c, - 0x2a, 0xc6, 0x13, 0xec, 0x02, 0x7d, 0x06, 0x4b, 0x6f, 0xa9, 0x76, 0x24, 0xd0, 0x5f, 0x53, 0xaa, - 0x34, 0x5a, 0x85, 0xd9, 0x54, 0x51, 0x19, 0xb2, 0x6e, 0xde, 0x54, 0xd5, 0x5c, 0x77, 0xbb, 0xe8, - 0x21, 0x54, 0x89, 0x10, 0xc6, 0x5e, 0xb6, 0xf6, 0x0a, 0x11, 0x62, 0xb7, 0x8b, 0xbe, 0x82, 0xa5, - 0x1e, 0x93, 0x4a, 0x87, 0x5a, 0x52, 0x1a, 0x2a, 0x76, 0x4e, 0x2d, 0x6d, 0x1e, 0x5e, 0xb0, 0xe6, - 0x77, 0x92, 0xd2, 0x23, 0x76, 0x4e, 0xfd, 0xff, 0xca, 0x70, 0x7f, 0x94, 0x4b, 0x09, 0x9e, 0x28, - 0x8a, 0xbe, 0x80, 0xfa, 0x40, 0xf6, 0x42, 0x57, 0xb5, 0x13, 0x4f, 0x6d, 0x20, 0x7b, 0x87, 0xe6, - 0x3e, 0xb9, 0xc0, 0xe5, 0x8f, 0x59, 0x60, 0xf4, 0x1c, 0x20, 0xa6, 0xa4, 0x48, 0xe0, 0xdd, 0x48, - 0x4b, 0xdd, 0x44, 0xbb, 0xec, 0x4f, 0xc1, 0x53, 0x7d, 0xd9, 0x98, 0xb1, 0x98, 0xd5, 0x11, 0xc6, - 0xb1, 0x7e, 0x40, 0x04, 0xe6, 0x5c, 0x63, 0x13, 0x83, 0x02, 0xa8, 0xc5, 0x3c, 0x0a, 0x25, 0xe7, - 0xba, 0x51, 0x99, 0x1e, 0xbf, 0xcf, 0x23, 0x1b, 0x3f, 0x1b, 0xbb, 0x03, 0xfa, 0x1a, 0x96, 0x0c, - 0xa6, 0xc3, 0x13, 0xc5, 0x94, 0x36, 0xad, 0x34, 0xaa, 0x6b, 0xde, 0x93, 0x79, 0xbc, 0x18, 0xf3, - 0xe8, 0xf5, 0xc8, 0x8a, 0xd6, 0x61, 0xc1, 0x04, 0xb2, 0xa2, 0xc6, 0xc6, 0xac, 0x0d, 0x9b, 0x8f, - 0x79, 0x34, 0xac, 0xdb, 0xbc, 0x31, 0x56, 0xf7, 0x99, 0x72, 0xec, 0xee, 0x30, 0xa5, 0xf9, 0x2d, - 0x06, 0xba, 0x0c, 0x15, 0xa5, 0x89, 0xd4, 0x96, 0x5b, 0x0f, 0xbb, 0x8b, 0x19, 0x89, 0x20, 0xd1, - 0xd8, 0x24, 0x2b, 0xb8, 0x66, 0x0c, 0x66, 0x88, 0x63, 0x1a, 0x98, 0xb9, 0x41, 0x03, 0x95, 0x69, - 0x1a, 0xf8, 0x0d, 0x1a, 0x97, 0xab, 0xcc, 0xa5, 0xf0, 0x0a, 0xaa, 0x76, 0x23, 0x54, 0xa3, 0x64, - 0xf7, 0xf8, 0x9b, 0xab, 0x47, 0x7d, 0x51, 0x46, 0x38, 0x47, 0xa2, 0x47, 0x00, 0x09, 0xfd, 0xa0, - 0xc3, 0xf1, 0xb6, 0xea, 0xc6, 0x72, 0x64, 0x0c, 0xfe, 0x3f, 0x25, 0x40, 0xee, 0x87, 0xe5, 0x53, - 0x28, 0x1e, 0xed, 0xc0, 0x3c, 0x35, 0x79, 0xc2, 0x7c, 0xa1, 0x9d, 0x94, 0xbe, 0xbc, 0xba, 0xaf, - 0xb1, 0x5f, 0x3e, 0x3c, 0x47, 0x47, 0x17, 0xff, 0x17, 0x78, 0x30, 0x51, 0x77, 0x4e, 0xd9, 0xcb, - 0x62, 0xdf, 0xdd, 0xab, 0xe2, 0x2e, 0x8c, 0xe5, 0xfb, 0xff, 0x67, 0x09, 0x1e, 0xbc, 0xa5, 0xba, - 0x78, 0xfb, 0xa8, 0x82, 0x92, 0x65, 0xa8, 0x50, 0xc1, 0x3b, 0xa7, 0xf6, 0xc9, 0x1e, 0x76, 0x97, - 0x69, 0x8d, 0x97, 0xa7, 0x35, 0xfe, 0x08, 0xc0, 0x4a, 0x48, 0xf3, 0x33, 0x9a, 0x58, 0x6e, 0xea, - 0xd8, 0x8a, 0xea, 0x9d, 0x31, 0x4c, 0x2a, 0x6c, 0x66, 0x52, 0x61, 0xfe, 0xbf, 0x65, 0x58, 0x9e, - 0xac, 0x28, 0x6f, 0x76, 0x7a, 0x49, 0xf9, 0x96, 0x96, 0xef, 0xb8, 0xa5, 0xde, 0xc7, 0x6f, 0xe9, - 0xcc, 0xed, 0xb6, 0xb4, 0x72, 0x79, 0x4b, 0xd1, 0x4b, 0xa8, 0xf7, 0x8b, 0xbe, 0xec, 0xb6, 0x5f, - 0xfb, 0x7a, 0x2f, 0x28, 0xc0, 0x23, 0x90, 0x99, 0x80, 0x15, 0xf8, 0x18, 0xbd, 0xb3, 0x96, 0xde, - 0x05, 0x63, 0x3e, 0x2c, 0x28, 0xf6, 0x57, 0x2c, 0x89, 0x6f, 0x78, 0x9f, 0xb0, 0x64, 0x37, 0xe9, - 0xf1, 0x7c, 0xae, 0xfe, 0xef, 0x25, 0x78, 0x78, 0xc1, 0x91, 0xd3, 0xbb, 0x06, 0x5e, 0xcc, 0xa3, - 0x5c, 0x49, 0x8b, 0x23, 0x62, 0xcc, 0x50, 0xb1, 0x71, 0x99, 0x88, 0x3e, 0x11, 0x39, 0xd5, 0x97, - 0x22, 0xfa, 0x44, 0xa0, 0x75, 0xf0, 0x06, 0xb2, 0x78, 0xcd, 0x7e, 0xd6, 0xca, 0xbf, 0x4f, 0x47, - 0xdf, 0x39, 0xc6, 0x7b, 0x52, 0xb5, 0x1f, 0x87, 0x5b, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xea, - 0x22, 0xfb, 0x26, 0x22, 0x0b, 0x00, 0x00, + // 1057 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xdd, 0x4e, 0x1b, 0xc7, + 0x17, 0x8f, 0xbd, 0xd8, 0xd8, 0x87, 0xaf, 0xfc, 0x27, 0x04, 0xf6, 0xef, 0x2a, 0x11, 0x5a, 0xd4, + 0x36, 0xad, 0x2a, 0x37, 0x38, 0x82, 0x36, 0xe9, 0x45, 0xd3, 0x24, 0x55, 0x40, 0x80, 0x84, 0x86, + 0x84, 0x5e, 0xae, 0x06, 0x7b, 0xbc, 0x8c, 0x58, 0xef, 0x4c, 0x67, 0x66, 0xad, 0x2c, 0x52, 0xa5, + 0x3e, 0x40, 0xa5, 0x4a, 0x7d, 0x86, 0x3e, 0x43, 0x5f, 0xa0, 0x6f, 0xd1, 0xa7, 0xa9, 0xe6, 0x63, + 0xfd, 0x01, 0x26, 0x84, 0x5c, 0xf4, 0xc6, 0x9e, 0xf3, 0xb5, 0xe7, 0x9c, 0xdf, 0xf9, 0x9d, 0xd9, + 0x85, 0x87, 0xe7, 0xb4, 0xd0, 0x92, 0x64, 0x4a, 0x10, 0x49, 0xb3, 0x6e, 0x11, 0x0f, 0xb7, 0x62, + 0x5d, 0x08, 0xaa, 0xda, 0x42, 0x72, 0xcd, 0x51, 0x78, 0xc9, 0xde, 0x1e, 0x6e, 0xb5, 0xad, 0xbd, + 0xd5, 0xea, 0xca, 0x42, 0x68, 0xfe, 0xf5, 0x39, 0x2d, 0x94, 0x38, 0xf5, 0x7f, 0x2e, 0xaa, 0x15, + 0x7a, 0x9b, 0x62, 0x89, 0x38, 0x75, 0xbf, 0xde, 0xb2, 0xac, 0x25, 0x4b, 0x53, 0x46, 0x32, 0x2f, + 0xaf, 0x95, 0x72, 0x3c, 0x20, 0x22, 0x26, 0x82, 0x39, 0x7d, 0xb4, 0x05, 0xcd, 0x97, 0x7c, 0x30, + 0x60, 0x5a, 0xd3, 0x1e, 0xba, 0x0b, 0xc1, 0x39, 0x2d, 0xc2, 0xca, 0x46, 0xe5, 0xd1, 0x22, 0x36, + 0x47, 0x84, 0x60, 0xae, 0x47, 0x34, 0x09, 0xab, 0x56, 0x65, 0xcf, 0xd1, 0x6f, 0x15, 0x58, 0xf8, + 0x31, 0xd3, 0xb2, 0x78, 0x2b, 0x7a, 0x44, 0x53, 0xf4, 0x0c, 0xea, 0xb9, 0x3d, 0x59, 0xaf, 0x85, + 0x4e, 0xd4, 0xbe, 0xae, 0x97, 0xf6, 0x31, 0x4b, 0x32, 0xda, 0xdb, 0x3f, 0xc1, 0x3e, 0x02, 0xfd, + 0x00, 0xcd, 0x6e, 0x99, 0x3e, 0x0c, 0x6c, 0xf8, 0xe6, 0xf5, 0xe1, 0xa3, 0x4a, 0xf1, 0x38, 0x2a, + 0xca, 0xa1, 0x66, 0xab, 0x41, 0x0f, 0x01, 0x9c, 0x76, 0x40, 0x33, 0xed, 0x9b, 0x98, 0xd0, 0xa0, + 0x03, 0x58, 0x21, 0xb9, 0x3e, 0xe3, 0x92, 0x5d, 0xd0, 0x5e, 0x6c, 0x70, 0x0c, 0xab, 0x1b, 0xc1, + 0xfb, 0x33, 0x1e, 0xe5, 0xa7, 0x29, 0xeb, 0xee, 0xd3, 0x02, 0x2f, 0x8f, 0x63, 0xf7, 0x69, 0xa1, + 0xa2, 0x3f, 0x2b, 0xd0, 0x1c, 0x59, 0x51, 0x0b, 0xe6, 0x69, 0xaf, 0xb3, 0xbd, 0xbd, 0xf5, 0xd4, + 0x25, 0xde, 0xbd, 0x83, 0x4b, 0x05, 0xfa, 0x0e, 0xfe, 0x2f, 0x15, 0x89, 0x87, 0x54, 0xb2, 0x7e, + 0xc1, 0xb2, 0x24, 0x56, 0x67, 0xa4, 0xb3, 0xbd, 0x13, 0x3f, 0x79, 0xfc, 0x4d, 0xc7, 0x01, 0xbb, + 0x7b, 0x07, 0xaf, 0x49, 0x45, 0x4e, 0x4a, 0x8f, 0x63, 0xeb, 0x60, 0xec, 0xa8, 0x03, 0xab, 0xb4, + 0xdb, 0x9b, 0x0a, 0x17, 0x9d, 0xed, 0x1d, 0x8b, 0x95, 0x89, 0x43, 0xd6, 0x3a, 0x8a, 0x3c, 0xea, + 0x6c, 0xef, 0xbc, 0x00, 0x68, 0x9c, 0xd3, 0xc2, 0xd2, 0x2b, 0xea, 0x40, 0x63, 0x9f, 0x16, 0x27, + 0x24, 0xcd, 0xe9, 0x8c, 0xf1, 0xae, 0x42, 0x6d, 0x68, 0x4c, 0x7e, 0xbe, 0x4e, 0x88, 0xfe, 0xa8, + 0x42, 0xa3, 0x9c, 0x14, 0xfa, 0x1e, 0x9a, 0xe6, 0x61, 0xce, 0xad, 0x72, 0xd3, 0x80, 0xcb, 0x5c, + 0xd8, 0x54, 0xe0, 0xb2, 0x62, 0x00, 0xc5, 0x92, 0x8c, 0xe8, 0x5c, 0xd2, 0x12, 0xf1, 0xce, 0xcd, + 0x14, 0xb1, 0x07, 0x17, 0x64, 0xc7, 0x8b, 0x27, 0x9e, 0x82, 0x5a, 0xd0, 0x10, 0x92, 0x0e, 0x19, + 0xcf, 0x95, 0x43, 0x02, 0x8f, 0xe4, 0xd6, 0x5b, 0x58, 0xb9, 0x14, 0x3a, 0xd9, 0x78, 0xd3, 0x35, + 0xfe, 0xd5, 0x64, 0xe3, 0x0b, 0x9d, 0xb5, 0xb6, 0xdb, 0x9d, 0x57, 0x2c, 0x61, 0x9a, 0xa4, 0x69, + 0xe1, 0xaa, 0xf0, 0x80, 0x3c, 0xab, 0x7e, 0x5b, 0x89, 0xde, 0x41, 0xe3, 0x30, 0xd7, 0x44, 0x33, + 0x9e, 0x4d, 0x30, 0xbe, 0x72, 0x6b, 0xc6, 0x3f, 0x86, 0x9a, 0x90, 0x9c, 0xf7, 0x7d, 0xe6, 0x56, + 0x7b, 0xb4, 0xa8, 0x87, 0x44, 0x1c, 0x50, 0xd2, 0xdf, 0xcb, 0xba, 0x69, 0xae, 0x18, 0xcf, 0xb0, + 0x73, 0x8c, 0x18, 0xac, 0xbc, 0xa6, 0xda, 0x81, 0x40, 0x7f, 0xce, 0xa9, 0xd2, 0x68, 0x1d, 0xe6, + 0x73, 0x45, 0x65, 0xcc, 0x7a, 0xbe, 0xa9, 0xba, 0x11, 0xf7, 0x7a, 0xe8, 0x3e, 0xd4, 0x89, 0x10, + 0x46, 0x5f, 0xb5, 0xfa, 0x1a, 0x11, 0x62, 0xaf, 0x87, 0x3e, 0x83, 0x95, 0x3e, 0x93, 0x4a, 0xc7, + 0x5a, 0x52, 0x1a, 0x2b, 0x76, 0x41, 0x2d, 0x6c, 0x01, 0x5e, 0xb2, 0xea, 0x37, 0x92, 0xd2, 0x63, + 0x76, 0x41, 0xa3, 0x7f, 0xaa, 0x70, 0x77, 0x9c, 0x4b, 0x09, 0x9e, 0x29, 0x8a, 0x3e, 0x81, 0xe6, + 0x50, 0xf6, 0x63, 0x57, 0xb5, 0x23, 0x4f, 0x63, 0x28, 0xfb, 0x47, 0x46, 0x9e, 0x5e, 0xe0, 0xea, + 0xc7, 0x2c, 0x30, 0x7a, 0x0a, 0x90, 0x52, 0x52, 0x26, 0x08, 0x6e, 0x84, 0xa5, 0x69, 0xbc, 0x5d, + 0xf6, 0x2f, 0x20, 0x50, 0x03, 0x19, 0xce, 0xd9, 0x98, 0xf5, 0x71, 0x8c, 0x43, 0xfd, 0x90, 0x08, + 0xcc, 0xb9, 0xc6, 0xc6, 0x07, 0x75, 0xa0, 0x91, 0xf2, 0x24, 0x96, 0x9c, 0xeb, 0xb0, 0x36, 0xdb, + 0xff, 0x80, 0x27, 0xd6, 0x7f, 0x3e, 0x75, 0x07, 0xf4, 0x39, 0xac, 0x98, 0x98, 0x2e, 0xcf, 0x14, + 0x53, 0xda, 0xb4, 0x12, 0xd6, 0x37, 0x82, 0x47, 0x8b, 0x78, 0x39, 0xe5, 0xc9, 0xcb, 0xb1, 0x16, + 0x6d, 0xc2, 0x92, 0x71, 0x64, 0x65, 0x8d, 0xe1, 0xbc, 0x75, 0x5b, 0x4c, 0x79, 0x32, 0xaa, 0xdb, + 0xdc, 0x18, 0xeb, 0x07, 0x4c, 0x39, 0x74, 0x77, 0x99, 0xd2, 0xfc, 0x03, 0x06, 0xba, 0x0a, 0x35, + 0xa5, 0x89, 0xd4, 0x16, 0xdb, 0x00, 0x3b, 0xc1, 0x8c, 0x44, 0x90, 0x64, 0x62, 0x92, 0x35, 0xdc, + 0x30, 0x0a, 0x33, 0xc4, 0x09, 0x0e, 0xcc, 0xdd, 0xc0, 0x81, 0xda, 0x2c, 0x0e, 0xfc, 0x02, 0xe1, + 0xd5, 0x2a, 0x3d, 0x15, 0x5e, 0x40, 0xdd, 0x6e, 0x84, 0x0a, 0x2b, 0x76, 0x8f, 0xbf, 0xbc, 0x7e, + 0xd4, 0x97, 0x69, 0x84, 0x7d, 0x24, 0x7a, 0x00, 0x90, 0xd1, 0x77, 0x3a, 0x9e, 0x6c, 0xab, 0x69, + 0x34, 0xc7, 0x46, 0x11, 0xfd, 0x55, 0x01, 0xe4, 0x5e, 0x2c, 0xff, 0x05, 0xe3, 0xd1, 0x2e, 0x2c, + 0x52, 0x93, 0x27, 0xf6, 0x0b, 0xed, 0xa8, 0xf4, 0xe9, 0xf5, 0x7d, 0x4d, 0xbc, 0xf9, 0xf0, 0x02, + 0x1d, 0x0b, 0xd1, 0x4f, 0x70, 0x6f, 0xaa, 0x6e, 0x0f, 0xd9, 0xf3, 0x72, 0xdf, 0xdd, 0x55, 0x71, + 0x1b, 0xc4, 0xfc, 0xfe, 0xff, 0x5e, 0x81, 0x7b, 0xaf, 0xa9, 0x2e, 0x6f, 0x1f, 0x55, 0x42, 0xb2, + 0x0a, 0x35, 0x2a, 0x78, 0xf7, 0xcc, 0x3e, 0x39, 0xc0, 0x4e, 0x98, 0xd5, 0x78, 0x75, 0x56, 0xe3, + 0x0f, 0x00, 0x2c, 0x85, 0x34, 0x3f, 0xa7, 0x99, 0xc5, 0xa6, 0x89, 0x2d, 0xa9, 0xde, 0x18, 0xc5, + 0x34, 0xc3, 0xe6, 0xa6, 0x19, 0x16, 0xfd, 0x5d, 0x85, 0xd5, 0xe9, 0x8a, 0x7c, 0xb3, 0xb3, 0x4b, + 0xf2, 0x5b, 0x5a, 0xbd, 0xe5, 0x96, 0x06, 0x1f, 0xbf, 0xa5, 0x73, 0x1f, 0xb6, 0xa5, 0xb5, 0xab, + 0x5b, 0x8a, 0x9e, 0x43, 0x73, 0x50, 0xf6, 0x65, 0xb7, 0xfd, 0xbd, 0xd7, 0x7b, 0x09, 0x01, 0x1e, + 0x07, 0x99, 0x09, 0x58, 0x82, 0x4f, 0xc0, 0x3b, 0x6f, 0xe1, 0x5d, 0x32, 0xea, 0xa3, 0x12, 0xe2, + 0x68, 0xcd, 0x82, 0xf8, 0x8a, 0x0f, 0x08, 0xcb, 0xf6, 0xb2, 0x3e, 0xf7, 0x73, 0x8d, 0x7e, 0xad, + 0xc0, 0xfd, 0x4b, 0x06, 0x0f, 0xef, 0x06, 0x04, 0x29, 0x4f, 0x3c, 0x93, 0x96, 0xc7, 0xc0, 0x98, + 0xa1, 0x62, 0x63, 0x32, 0x1e, 0x03, 0x22, 0x3c, 0xd4, 0x57, 0x3c, 0x06, 0x44, 0xa0, 0x4d, 0x08, + 0x86, 0xb2, 0xbc, 0x66, 0xff, 0xd7, 0xf6, 0x9f, 0x93, 0xe3, 0xef, 0x1c, 0x63, 0x3d, 0xad, 0xdb, + 0x8f, 0xc3, 0x27, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x87, 0x52, 0x53, 0x62, 0xb6, 0x0a, 0x00, + 0x00, }