From dc0b317295a24e9e091b84e3f9c94bc2f9f18018 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Dec 2024 10:33:52 -0800 Subject: [PATCH] Add API to retrieve the TCG Reference Integrity Manifest data. (#209) * Add API to retrieve the TCG Reference Integrity Manifest data. Can be used as a prerequisite for certificate provisioning. See https://trustedcomputinggroup.org/resource/tcg-reference-integrity-manifest-rim-information-model/. * Regenerate pb.go files after certz additions. * Add documentation for the expected MBM-Boot workflow. Also fix up the API, which was incorrect. * Be more explicit about formats in field comments. Also add the ak signature, which was missing. * Add docstring for GetIntegrityManifest endpoint response. * Amend docstring for GetIntegrityManifest endpoint. * Lint fixes. * Hopefully the last lint fix. --- certz/README.md | 21 + certz/certz.pb.go | 848 ++++++++++++++++++++++++++++------ certz/certz.proto | 109 +++++ certz/certz_grpc.pb.go | 36 ++ credentialz/credentialz.pb.go | 809 ++++++++++++++++++++------------ 5 files changed, 1378 insertions(+), 445 deletions(-) diff --git a/certz/README.md b/certz/README.md index 13c802b..a643f87 100644 --- a/certz/README.md +++ b/certz/README.md @@ -187,6 +187,27 @@ The connection to the network system is broken, there is no The gNSI service rolls back the candidate and re-installs the original authentication policy. +#### MBM-Boot workflow + +See the [TCG Reference Integrity Manifest (RIM) Information +Model](https://trustedcomputinggroup.org/resource/tcg-reference-integrity-manifest-rim-information-model/) +for more details on the following workflow. + +Call `Certz.GetIntegrityManifest`. The `Certz.GetIntegrityManifestResponse`'s +`manifest` field will contain the reference integrity manifest. Determine the +PCRs to be included and all allowable digest values. + +Send a `Certz.GenerateCSRRequest` to the `Certz.Rotate` endpoint, containing a +`Certz.ReferenceIntegritySpec`. Using the returned `Certz.GenerateCSRResponse`, +do the following. Verify the EK certificate chain, and verify the +AK by nonce and certification by EK. Validate PCR digest as signed by the +validated AK. Verify the digest matches with one of the allowed ones. Lastly, +validate the CSR by its AK signature, and then process and extract the public +key. + +Get a new certificate issued by a trusted CA using the public key. Then +`Certz.Rotate` as normal. + ### Open Questions/Considerations None to date. diff --git a/certz/certz.pb.go b/certz/certz.pb.go index 72aad1f..aa76091 100644 --- a/certz/certz.pb.go +++ b/certz/certz.pb.go @@ -1964,7 +1964,8 @@ type GenerateCSRRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Params *CSRParams `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + Params *CSRParams `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + Integrities []*ReferenceIntegritySpec `protobuf:"bytes,2,rep,name=integrities,proto3" json:"integrities,omitempty"` } func (x *GenerateCSRRequest) Reset() { @@ -2006,12 +2007,20 @@ func (x *GenerateCSRRequest) GetParams() *CSRParams { return nil } +func (x *GenerateCSRRequest) GetIntegrities() []*ReferenceIntegritySpec { + if x != nil { + return x.Integrities + } + return nil +} + type GenerateCSRResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields CertificateSigningRequest *CertificateSigningRequest `protobuf:"bytes,1,opt,name=certificate_signing_request,json=certificateSigningRequest,proto3" json:"certificate_signing_request,omitempty"` + Integrities []*ReferenceIntegrityData `protobuf:"bytes,2,rep,name=integrities,proto3" json:"integrities,omitempty"` } func (x *GenerateCSRResponse) Reset() { @@ -2053,6 +2062,414 @@ func (x *GenerateCSRResponse) GetCertificateSigningRequest() *CertificateSigning return nil } +func (x *GenerateCSRResponse) GetIntegrities() []*ReferenceIntegrityData { + if x != nil { + return x.Integrities + } + return nil +} + +type GetIntegrityManifestRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetIntegrityManifestRequest) Reset() { + *x = GetIntegrityManifestRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIntegrityManifestRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIntegrityManifestRequest) ProtoMessage() {} + +func (x *GetIntegrityManifestRequest) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetIntegrityManifestRequest.ProtoReflect.Descriptor instead. +func (*GetIntegrityManifestRequest) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP(), []int{26} +} + +type GetIntegrityManifestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Manifest []byte `protobuf:"bytes,1,opt,name=manifest,proto3" json:"manifest,omitempty"` +} + +func (x *GetIntegrityManifestResponse) Reset() { + *x = GetIntegrityManifestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIntegrityManifestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIntegrityManifestResponse) ProtoMessage() {} + +func (x *GetIntegrityManifestResponse) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetIntegrityManifestResponse.ProtoReflect.Descriptor instead. +func (*GetIntegrityManifestResponse) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP(), []int{27} +} + +func (x *GetIntegrityManifestResponse) GetManifest() []byte { + if x != nil { + return x.Manifest + } + return nil +} + +type ReferenceIntegritySpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RotId string `protobuf:"bytes,1,opt,name=rot_id,json=rotId,proto3" json:"rot_id,omitempty"` + // Types that are assignable to Type: + // + // *ReferenceIntegritySpec_Mbm + Type isReferenceIntegritySpec_Type `protobuf_oneof:"type"` +} + +func (x *ReferenceIntegritySpec) Reset() { + *x = ReferenceIntegritySpec{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReferenceIntegritySpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReferenceIntegritySpec) ProtoMessage() {} + +func (x *ReferenceIntegritySpec) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReferenceIntegritySpec.ProtoReflect.Descriptor instead. +func (*ReferenceIntegritySpec) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP(), []int{28} +} + +func (x *ReferenceIntegritySpec) GetRotId() string { + if x != nil { + return x.RotId + } + return "" +} + +func (m *ReferenceIntegritySpec) GetType() isReferenceIntegritySpec_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *ReferenceIntegritySpec) GetMbm() *MBMSpec { + if x, ok := x.GetType().(*ReferenceIntegritySpec_Mbm); ok { + return x.Mbm + } + return nil +} + +type isReferenceIntegritySpec_Type interface { + isReferenceIntegritySpec_Type() +} + +type ReferenceIntegritySpec_Mbm struct { + Mbm *MBMSpec `protobuf:"bytes,3,opt,name=mbm,proto3,oneof"` +} + +func (*ReferenceIntegritySpec_Mbm) isReferenceIntegritySpec_Type() {} + +type ReferenceIntegrityData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RotId string `protobuf:"bytes,1,opt,name=rot_id,json=rotId,proto3" json:"rot_id,omitempty"` + // Types that are assignable to Type: + // + // *ReferenceIntegrityData_Mbm + Type isReferenceIntegrityData_Type `protobuf_oneof:"type"` +} + +func (x *ReferenceIntegrityData) Reset() { + *x = ReferenceIntegrityData{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReferenceIntegrityData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReferenceIntegrityData) ProtoMessage() {} + +func (x *ReferenceIntegrityData) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReferenceIntegrityData.ProtoReflect.Descriptor instead. +func (*ReferenceIntegrityData) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP(), []int{29} +} + +func (x *ReferenceIntegrityData) GetRotId() string { + if x != nil { + return x.RotId + } + return "" +} + +func (m *ReferenceIntegrityData) GetType() isReferenceIntegrityData_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *ReferenceIntegrityData) GetMbm() *MBMData { + if x, ok := x.GetType().(*ReferenceIntegrityData_Mbm); ok { + return x.Mbm + } + return nil +} + +type isReferenceIntegrityData_Type interface { + isReferenceIntegrityData_Type() +} + +type ReferenceIntegrityData_Mbm struct { + Mbm *MBMData `protobuf:"bytes,2,opt,name=mbm,proto3,oneof"` +} + +func (*ReferenceIntegrityData_Mbm) isReferenceIntegrityData_Type() {} + +type MBMSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AkTemplate []byte `protobuf:"bytes,1,opt,name=ak_template,json=akTemplate,proto3" json:"ak_template,omitempty"` + AkNonce []byte `protobuf:"bytes,2,opt,name=ak_nonce,json=akNonce,proto3" json:"ak_nonce,omitempty"` + Selection []byte `protobuf:"bytes,3,opt,name=selection,proto3" json:"selection,omitempty"` + Nonce []byte `protobuf:"bytes,4,opt,name=nonce,proto3" json:"nonce,omitempty"` +} + +func (x *MBMSpec) Reset() { + *x = MBMSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MBMSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MBMSpec) ProtoMessage() {} + +func (x *MBMSpec) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MBMSpec.ProtoReflect.Descriptor instead. +func (*MBMSpec) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP(), []int{30} +} + +func (x *MBMSpec) GetAkTemplate() []byte { + if x != nil { + return x.AkTemplate + } + return nil +} + +func (x *MBMSpec) GetAkNonce() []byte { + if x != nil { + return x.AkNonce + } + return nil +} + +func (x *MBMSpec) GetSelection() []byte { + if x != nil { + return x.Selection + } + return nil +} + +func (x *MBMSpec) GetNonce() []byte { + if x != nil { + return x.Nonce + } + return nil +} + +type MBMData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Quoted []byte `protobuf:"bytes,1,opt,name=quoted,proto3" json:"quoted,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + EkLeafCert string `protobuf:"bytes,3,opt,name=ek_leaf_cert,json=ekLeafCert,proto3" json:"ek_leaf_cert,omitempty"` + EkCertChain string `protobuf:"bytes,4,opt,name=ek_cert_chain,json=ekCertChain,proto3" json:"ek_cert_chain,omitempty"` + AkPubKey string `protobuf:"bytes,5,opt,name=ak_pub_key,json=akPubKey,proto3" json:"ak_pub_key,omitempty"` + AkAttestation []byte `protobuf:"bytes,6,opt,name=ak_attestation,json=akAttestation,proto3" json:"ak_attestation,omitempty"` + AkSignature []byte `protobuf:"bytes,7,opt,name=ak_signature,json=akSignature,proto3" json:"ak_signature,omitempty"` +} + +func (x *MBMData) Reset() { + *x = MBMData{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MBMData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MBMData) ProtoMessage() {} + +func (x *MBMData) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MBMData.ProtoReflect.Descriptor instead. +func (*MBMData) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP(), []int{31} +} + +func (x *MBMData) GetQuoted() []byte { + if x != nil { + return x.Quoted + } + return nil +} + +func (x *MBMData) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *MBMData) GetEkLeafCert() string { + if x != nil { + return x.EkLeafCert + } + return "" +} + +func (x *MBMData) GetEkCertChain() string { + if x != nil { + return x.EkCertChain + } + return "" +} + +func (x *MBMData) GetAkPubKey() string { + if x != nil { + return x.AkPubKey + } + return "" +} + +func (x *MBMData) GetAkAttestation() []byte { + if x != nil { + return x.AkAttestation + } + return nil +} + +func (x *MBMData) GetAkSignature() []byte { + if x != nil { + return x.AkSignature + } + return nil +} + var File_github_com_openconfig_gnsi_certz_certz_proto protoreflect.FileDescriptor var file_github_com_openconfig_gnsi_certz_certz_proto_rawDesc = []byte{ @@ -2313,151 +2730,208 @@ var file_github_com_openconfig_gnsi_certz_certz_proto_rawDesc = []byte{ 0x74, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x19, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, - 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6e, 0x73, 0x69, - 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x53, 0x52, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x7f, 0x0a, 0x13, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x68, 0x0a, 0x1b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, - 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x52, 0x19, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x69, - 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2a, 0xcd, 0x0a, 0x0a, - 0x08, 0x43, 0x53, 0x52, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x53, 0x52, - 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, + 0x65, 0x73, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6e, 0x73, + 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x53, 0x52, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x47, 0x0a, 0x0b, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, + 0x1b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x69, + 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x19, 0x63, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, + 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x3a, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x4d, + 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x22, 0x63, 0x0a, 0x16, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x03, + 0x6d, 0x62, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6e, 0x73, 0x69, + 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x42, 0x4d, 0x53, 0x70, 0x65, + 0x63, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x62, 0x6d, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x63, 0x0a, 0x16, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x6f, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x74, 0x49, + 0x64, 0x12, 0x2a, 0x0a, 0x03, 0x6d, 0x62, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x42, 0x4d, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x62, 0x6d, 0x42, 0x06, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x79, 0x0a, 0x07, 0x4d, 0x42, 0x4d, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6b, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6b, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x6b, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x22, 0xed, 0x01, 0x0a, 0x07, 0x4d, 0x42, 0x4d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, + 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x71, 0x75, + 0x6f, 0x74, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6b, 0x5f, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x63, 0x65, + 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6b, 0x4c, 0x65, 0x61, 0x66, + 0x43, 0x65, 0x72, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x6b, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6b, 0x43, + 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x0a, 0x61, 0x6b, 0x5f, 0x70, + 0x75, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x6b, + 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6b, 0x5f, 0x61, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, + 0x61, 0x6b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, + 0x0c, 0x61, 0x6b, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x6b, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2a, 0xcd, 0x0a, 0x0a, 0x08, 0x43, 0x53, 0x52, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x1f, 0x0a, + 0x1b, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x41, + 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, + 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, + 0x38, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, + 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, + 0x01, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, + 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, + 0x32, 0x30, 0x34, 0x38, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, + 0x38, 0x34, 0x10, 0x02, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, + 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, + 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, + 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, + 0x32, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x03, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, + 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, + 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x04, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x5f, 0x53, 0x49, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, - 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x41, 0x0a, + 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, + 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, - 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x02, + 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x06, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, - 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, - 0x30, 0x34, 0x38, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, - 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x35, 0x31, - 0x32, 0x10, 0x03, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, + 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, + 0x30, 0x39, 0x36, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, + 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, + 0x36, 0x10, 0x07, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, - 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, - 0x5f, 0x32, 0x35, 0x36, 0x10, 0x04, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, + 0x5f, 0x33, 0x38, 0x34, 0x10, 0x08, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, + 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, - 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x05, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, + 0x41, 0x5f, 0x32, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x09, 0x12, 0x49, 0x0a, 0x45, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x49, 0x47, - 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, - 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x06, 0x12, 0x41, 0x0a, 0x3d, - 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, - 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x5f, + 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x45, 0x32, + 0x35, 0x36, 0x56, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, + 0x35, 0x36, 0x10, 0x0a, 0x12, 0x49, 0x0a, 0x45, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, + 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, + 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x45, 0x32, 0x35, 0x36, 0x56, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, - 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x07, 0x12, - 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, - 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, - 0x39, 0x36, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, - 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, - 0x10, 0x08, 0x12, 0x41, 0x0a, 0x3d, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, - 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, - 0x5f, 0x34, 0x30, 0x39, 0x36, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, - 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, - 0x35, 0x31, 0x32, 0x10, 0x09, 0x12, 0x49, 0x0a, 0x45, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, - 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x45, 0x32, 0x35, 0x36, 0x56, 0x31, - 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, - 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x0a, - 0x12, 0x49, 0x0a, 0x45, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, - 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, - 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x45, 0x32, 0x35, 0x36, 0x56, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, - 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, - 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x0b, 0x12, 0x49, 0x0a, 0x45, 0x43, - 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x52, 0x49, 0x4d, - 0x45, 0x32, 0x35, 0x36, 0x56, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, - 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, - 0x5f, 0x35, 0x31, 0x32, 0x10, 0x0c, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, - 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, - 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, - 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x0d, - 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, - 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, - 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, + 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x0b, 0x12, + 0x49, 0x0a, 0x45, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, + 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, + 0x50, 0x52, 0x49, 0x4d, 0x45, 0x32, 0x35, 0x36, 0x56, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, - 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x0e, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, + 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x0c, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, - 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x35, - 0x31, 0x32, 0x10, 0x0f, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, + 0x35, 0x36, 0x10, 0x0d, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, - 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x5f, 0x53, + 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, - 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x10, 0x12, 0x48, + 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x0e, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, - 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, + 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, - 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x11, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, + 0x5f, 0x32, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x0f, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, - 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x35, 0x31, 0x32, - 0x10, 0x12, 0x12, 0x28, 0x0a, 0x24, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, - 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x44, - 0x53, 0x41, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x13, 0x2a, 0x4e, 0x0a, 0x0f, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x20, 0x0a, 0x1c, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x10, 0x01, 0x2a, 0x95, 0x01, 0x0a, - 0x13, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, - 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x45, - 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x50, 0x45, 0x4d, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x45, 0x52, 0x54, + 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x32, 0x35, 0x36, + 0x10, 0x10, 0x12, 0x48, 0x0a, 0x44, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, + 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, + 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, + 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, + 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x11, 0x12, 0x48, 0x0a, 0x44, + 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, + 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, + 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x53, 0x48, 0x41, 0x5f, 0x32, + 0x5f, 0x35, 0x31, 0x32, 0x10, 0x12, 0x12, 0x28, 0x0a, 0x24, 0x43, 0x53, 0x52, 0x53, 0x55, 0x49, + 0x54, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x45, 0x44, 0x44, 0x53, 0x41, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x13, + 0x2a, 0x4e, 0x0a, 0x0f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, + 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, + 0x43, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x58, 0x35, 0x30, 0x39, 0x10, 0x01, + 0x2a, 0x95, 0x01, 0x0a, 0x13, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, 0x47, - 0x5f, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, - 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x43, - 0x52, 0x54, 0x10, 0x03, 0x32, 0xd5, 0x03, 0x0a, 0x05, 0x43, 0x65, 0x72, 0x74, 0x7a, 0x12, 0x5f, - 0x0a, 0x06, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, - 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, - 0x51, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x20, 0x2e, - 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, - 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, - 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x24, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, - 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, - 0x0e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x12, - 0x24, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, - 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x21, 0x5a, 0x1f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x73, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, + 0x0a, 0x18, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, + 0x43, 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x45, 0x4d, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, + 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, + 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x45, + 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, + 0x4e, 0x47, 0x5f, 0x43, 0x52, 0x54, 0x10, 0x03, 0x32, 0xc6, 0x04, 0x0a, 0x05, 0x43, 0x65, 0x72, + 0x74, 0x7a, 0x12, 0x5f, 0x0a, 0x06, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x67, + 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, + 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, + 0x01, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x12, 0x20, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, + 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, + 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, + 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6e, 0x73, + 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5d, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x43, 0x53, 0x52, 0x12, 0x24, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x6e, 0x73, 0x69, + 0x2e, 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6f, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, + 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, + 0x63, 0x65, 0x72, 0x74, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x65, 0x72, 0x74, + 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, + 0x79, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x21, 0x5a, 0x1f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x73, 0x69, 0x2f, + 0x63, 0x65, 0x72, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2473,7 +2947,7 @@ func file_github_com_openconfig_gnsi_certz_certz_proto_rawDescGZIP() []byte { } var file_github_com_openconfig_gnsi_certz_certz_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_github_com_openconfig_gnsi_certz_certz_proto_goTypes = []interface{}{ (CSRSuite)(0), // 0: gnsi.certz.v1.CSRSuite (CertificateType)(0), // 1: gnsi.certz.v1.CertificateType @@ -2507,7 +2981,13 @@ var file_github_com_openconfig_gnsi_certz_certz_proto_goTypes = []interface{}{ (*CertificateSigningRequest)(nil), // 29: gnsi.certz.v1.CertificateSigningRequest (*GenerateCSRRequest)(nil), // 30: gnsi.certz.v1.GenerateCSRRequest (*GenerateCSRResponse)(nil), // 31: gnsi.certz.v1.GenerateCSRResponse - (*anypb.Any)(nil), // 32: google.protobuf.Any + (*GetIntegrityManifestRequest)(nil), // 32: gnsi.certz.v1.GetIntegrityManifestRequest + (*GetIntegrityManifestResponse)(nil), // 33: gnsi.certz.v1.GetIntegrityManifestResponse + (*ReferenceIntegritySpec)(nil), // 34: gnsi.certz.v1.ReferenceIntegritySpec + (*ReferenceIntegrityData)(nil), // 35: gnsi.certz.v1.ReferenceIntegrityData + (*MBMSpec)(nil), // 36: gnsi.certz.v1.MBMSpec + (*MBMData)(nil), // 37: gnsi.certz.v1.MBMData + (*anypb.Any)(nil), // 38: google.protobuf.Any } var file_github_com_openconfig_gnsi_certz_certz_proto_depIdxs = []int32{ 30, // 0: gnsi.certz.v1.RotateCertificateRequest.generate_csr:type_name -> gnsi.certz.v1.GenerateCSRRequest @@ -2527,7 +3007,7 @@ var file_github_com_openconfig_gnsi_certz_certz_proto_depIdxs = []int32{ 1, // 14: gnsi.certz.v1.CertificateRevocationList.type:type_name -> gnsi.certz.v1.CertificateType 2, // 15: gnsi.certz.v1.CertificateRevocationList.encoding:type_name -> gnsi.certz.v1.CertificateEncoding 22, // 16: gnsi.certz.v1.CertificateRevocationListBundle.certificate_revocation_lists:type_name -> gnsi.certz.v1.CertificateRevocationList - 32, // 17: gnsi.certz.v1.AuthenticationPolicy.serialized:type_name -> google.protobuf.Any + 38, // 17: gnsi.certz.v1.AuthenticationPolicy.serialized:type_name -> google.protobuf.Any 19, // 18: gnsi.certz.v1.Entity.certificate_chain:type_name -> gnsi.certz.v1.CertificateChain 19, // 19: gnsi.certz.v1.Entity.trust_bundle:type_name -> gnsi.certz.v1.CertificateChain 23, // 20: gnsi.certz.v1.Entity.certificate_revocation_list_bundle:type_name -> gnsi.certz.v1.CertificateRevocationListBundle @@ -2540,22 +3020,28 @@ var file_github_com_openconfig_gnsi_certz_certz_proto_depIdxs = []int32{ 1, // 27: gnsi.certz.v1.CertificateSigningRequest.type:type_name -> gnsi.certz.v1.CertificateType 2, // 28: gnsi.certz.v1.CertificateSigningRequest.encoding:type_name -> gnsi.certz.v1.CertificateEncoding 16, // 29: gnsi.certz.v1.GenerateCSRRequest.params:type_name -> gnsi.certz.v1.CSRParams - 29, // 30: gnsi.certz.v1.GenerateCSRResponse.certificate_signing_request:type_name -> gnsi.certz.v1.CertificateSigningRequest - 6, // 31: gnsi.certz.v1.Certz.Rotate:input_type -> gnsi.certz.v1.RotateCertificateRequest - 9, // 32: gnsi.certz.v1.Certz.AddProfile:input_type -> gnsi.certz.v1.AddProfileRequest - 11, // 33: gnsi.certz.v1.Certz.DeleteProfile:input_type -> gnsi.certz.v1.DeleteProfileRequest - 13, // 34: gnsi.certz.v1.Certz.GetProfileList:input_type -> gnsi.certz.v1.GetProfileListRequest - 17, // 35: gnsi.certz.v1.Certz.CanGenerateCSR:input_type -> gnsi.certz.v1.CanGenerateCSRRequest - 7, // 36: gnsi.certz.v1.Certz.Rotate:output_type -> gnsi.certz.v1.RotateCertificateResponse - 10, // 37: gnsi.certz.v1.Certz.AddProfile:output_type -> gnsi.certz.v1.AddProfileResponse - 12, // 38: gnsi.certz.v1.Certz.DeleteProfile:output_type -> gnsi.certz.v1.DeleteProfileResponse - 14, // 39: gnsi.certz.v1.Certz.GetProfileList:output_type -> gnsi.certz.v1.GetProfileListResponse - 18, // 40: gnsi.certz.v1.Certz.CanGenerateCSR:output_type -> gnsi.certz.v1.CanGenerateCSRResponse - 36, // [36:41] is the sub-list for method output_type - 31, // [31:36] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 34, // 30: gnsi.certz.v1.GenerateCSRRequest.integrities:type_name -> gnsi.certz.v1.ReferenceIntegritySpec + 29, // 31: gnsi.certz.v1.GenerateCSRResponse.certificate_signing_request:type_name -> gnsi.certz.v1.CertificateSigningRequest + 35, // 32: gnsi.certz.v1.GenerateCSRResponse.integrities:type_name -> gnsi.certz.v1.ReferenceIntegrityData + 36, // 33: gnsi.certz.v1.ReferenceIntegritySpec.mbm:type_name -> gnsi.certz.v1.MBMSpec + 37, // 34: gnsi.certz.v1.ReferenceIntegrityData.mbm:type_name -> gnsi.certz.v1.MBMData + 6, // 35: gnsi.certz.v1.Certz.Rotate:input_type -> gnsi.certz.v1.RotateCertificateRequest + 9, // 36: gnsi.certz.v1.Certz.AddProfile:input_type -> gnsi.certz.v1.AddProfileRequest + 11, // 37: gnsi.certz.v1.Certz.DeleteProfile:input_type -> gnsi.certz.v1.DeleteProfileRequest + 13, // 38: gnsi.certz.v1.Certz.GetProfileList:input_type -> gnsi.certz.v1.GetProfileListRequest + 17, // 39: gnsi.certz.v1.Certz.CanGenerateCSR:input_type -> gnsi.certz.v1.CanGenerateCSRRequest + 32, // 40: gnsi.certz.v1.Certz.GetIntegrityManifest:input_type -> gnsi.certz.v1.GetIntegrityManifestRequest + 7, // 41: gnsi.certz.v1.Certz.Rotate:output_type -> gnsi.certz.v1.RotateCertificateResponse + 10, // 42: gnsi.certz.v1.Certz.AddProfile:output_type -> gnsi.certz.v1.AddProfileResponse + 12, // 43: gnsi.certz.v1.Certz.DeleteProfile:output_type -> gnsi.certz.v1.DeleteProfileResponse + 14, // 44: gnsi.certz.v1.Certz.GetProfileList:output_type -> gnsi.certz.v1.GetProfileListResponse + 18, // 45: gnsi.certz.v1.Certz.CanGenerateCSR:output_type -> gnsi.certz.v1.CanGenerateCSRResponse + 33, // 46: gnsi.certz.v1.Certz.GetIntegrityManifest:output_type -> gnsi.certz.v1.GetIntegrityManifestResponse + 41, // [41:47] is the sub-list for method output_type + 35, // [35:41] is the sub-list for method input_type + 35, // [35:35] is the sub-list for extension type_name + 35, // [35:35] is the sub-list for extension extendee + 0, // [0:35] is the sub-list for field type_name } func init() { file_github_com_openconfig_gnsi_certz_certz_proto_init() } @@ -2876,6 +3362,78 @@ func file_github_com_openconfig_gnsi_certz_certz_proto_init() { return nil } } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetIntegrityManifestRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetIntegrityManifestResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReferenceIntegritySpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReferenceIntegrityData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MBMSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MBMData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[0].OneofWrappers = []interface{}{ (*RotateCertificateRequest_GenerateCsr)(nil), @@ -2904,13 +3462,19 @@ func file_github_com_openconfig_gnsi_certz_certz_proto_init() { (*Entity_TrustBundlePcks7)(nil), (*Entity_TrustBundlePkcs7)(nil), } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[28].OneofWrappers = []interface{}{ + (*ReferenceIntegritySpec_Mbm)(nil), + } + file_github_com_openconfig_gnsi_certz_certz_proto_msgTypes[29].OneofWrappers = []interface{}{ + (*ReferenceIntegrityData_Mbm)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_github_com_openconfig_gnsi_certz_certz_proto_rawDesc, NumEnums: 6, - NumMessages: 26, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/certz/certz.proto b/certz/certz.proto index 1bafeff..c6f9602 100644 --- a/certz/certz.proto +++ b/certz/certz.proto @@ -278,6 +278,11 @@ service Certz { // An RPC to ask a target if it can generate a Certificate Signing Request. rpc CanGenerateCSR(CanGenerateCSRRequest) returns (CanGenerateCSRResponse); + + // An RPC to retrieve a RIM manifest from the device. + // See the TCG Reference Integrity Manifest (RIM) Information Model. + rpc GetIntegrityManifest(GetIntegrityManifestRequest) + returns (GetIntegrityManifestResponse); } // Request messages to rotate existing certificates on the target. @@ -636,8 +641,112 @@ message CertificateSigningRequest { // the specified parameters. message GenerateCSRRequest { CSRParams params = 1; + + // Indicates measurements that are prerequisites for certificate + // provisioning. + repeated ReferenceIntegritySpec integrities = 2; } + // A message sent by the target as response to the GenerateCSRRequest. message GenerateCSRResponse { CertificateSigningRequest certificate_signing_request = 1; + + // Reference integrity measurements as specified in the request. + repeated ReferenceIntegrityData integrities = 2; +} + +message GetIntegrityManifestRequest { +} + +message GetIntegrityManifestResponse { + // The manifest is a generic byte stream for passing protocol dependent + // (unsecured) data required prior to returning attestation data. + // This field will be migrated to structured data once a reference is + // defined. + bytes manifest = 1; +} + +// See the TCG Reference Integrity Manifest (RIM) Information Model. +message ReferenceIntegritySpec { + // Identifies the Root of Trust component (e.g. line card, etc). + string rot_id = 1; + + // Contains measurement selections for the RoT component. + oneof type { + MBMSpec mbm = 3; + } +} + +// See the TCG Reference Integrity Manifest (RIM) Information Model. +message ReferenceIntegrityData { + // Identifies the Root of Trust component (e.g. line card, etc). + string rot_id = 1; + + // Contains reference measurements for the RoT component. + oneof type { + MBMData mbm = 2; + } +} + +// Measured Boot Manifest specification. +// Fields of type bytes are byte representations of a struct; not text, not +// base64 encoded. +message MBMSpec { + // Template for an ephemeral signing key, as a `TPM2B_PUBLIC` structure. See + // section 24.1 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf#page=293 protolint:disable:this MAX_LINE_LENGTH + // and section 12.2.5 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part2_Structures_pub.pdf#page=160. protolint:disable:this MAX_LINE_LENGTH + bytes ak_template = 1; + + // Random nonce used to prevent replay attacks. + bytes ak_nonce = 2; + + // Measurement selection `TPML_PCR_SELECTION` structure. See section 24.1 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf#page=293 protolint:disable:this MAX_LINE_LENGTH + // and section 10.9.7 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part2_Structures_pub.pdf#page=125. protolint:disable:this MAX_LINE_LENGTH + bytes selection = 3; + + // Random nonce used to prevent replay attacks. + bytes nonce = 4; +} + +// Measured Boot Manifest measurements. +// Fields of type bytes are byte representations of a struct; not text, not +// base64 encoded. +message MBMData { + // The PCR quoted `TPM2B_ATTEST` structure. See section 18.4 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf#page=167 protolint:disable:this MAX_LINE_LENGTH + // and section 10.12.13 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part2_Structures_pub.pdf#page=135. protolint:disable:this MAX_LINE_LENGTH + bytes quoted = 1; + + // The digest signature `TPMT_SIGNATURE` structure. See section 18.4 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf#page=167 protolint:disable:this MAX_LINE_LENGTH + // and section 11.3.4 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part2_Structures_pub.pdf#page=153. protolint:disable:this MAX_LINE_LENGTH + bytes signature = 2; + + // The EK leaf certificate in PEM format. + string ek_leaf_cert = 3; + + // The intermediate and signing certificate chain in PEM format. + string ek_cert_chain = 4; + + // The AK public key in PEM format. + string ak_pub_key = 5; + + // The AK attestation `TPM2B_ATTEST` structure. See section 18.3 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf#page=163 protolint:disable:this MAX_LINE_LENGTH + // and section 10.12.13 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part2_Structures_pub.pdf#page=135. protolint:disable:this MAX_LINE_LENGTH + bytes ak_attestation = 6; + + // The AK attestation signature `TPMT_SIGNATURE` structure. See section 18.3 + // of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part3_Commands_pub.pdf#page=163 protolint:disable:this MAX_LINE_LENGTH + // and section 11.3.4 of + // https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part2_Structures_pub.pdf#page=153. protolint:disable:this MAX_LINE_LENGTH + bytes ak_signature = 7; } diff --git a/certz/certz_grpc.pb.go b/certz/certz_grpc.pb.go index a1b44ac..b95979a 100644 --- a/certz/certz_grpc.pb.go +++ b/certz/certz_grpc.pb.go @@ -27,6 +27,7 @@ type CertzClient interface { DeleteProfile(ctx context.Context, in *DeleteProfileRequest, opts ...grpc.CallOption) (*DeleteProfileResponse, error) GetProfileList(ctx context.Context, in *GetProfileListRequest, opts ...grpc.CallOption) (*GetProfileListResponse, error) CanGenerateCSR(ctx context.Context, in *CanGenerateCSRRequest, opts ...grpc.CallOption) (*CanGenerateCSRResponse, error) + GetIntegrityManifest(ctx context.Context, in *GetIntegrityManifestRequest, opts ...grpc.CallOption) (*GetIntegrityManifestResponse, error) } type certzClient struct { @@ -104,6 +105,15 @@ func (c *certzClient) CanGenerateCSR(ctx context.Context, in *CanGenerateCSRRequ return out, nil } +func (c *certzClient) GetIntegrityManifest(ctx context.Context, in *GetIntegrityManifestRequest, opts ...grpc.CallOption) (*GetIntegrityManifestResponse, error) { + out := new(GetIntegrityManifestResponse) + err := c.cc.Invoke(ctx, "/gnsi.certz.v1.Certz/GetIntegrityManifest", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // CertzServer is the server API for Certz service. // All implementations must embed UnimplementedCertzServer // for forward compatibility @@ -113,6 +123,7 @@ type CertzServer interface { DeleteProfile(context.Context, *DeleteProfileRequest) (*DeleteProfileResponse, error) GetProfileList(context.Context, *GetProfileListRequest) (*GetProfileListResponse, error) CanGenerateCSR(context.Context, *CanGenerateCSRRequest) (*CanGenerateCSRResponse, error) + GetIntegrityManifest(context.Context, *GetIntegrityManifestRequest) (*GetIntegrityManifestResponse, error) mustEmbedUnimplementedCertzServer() } @@ -135,6 +146,9 @@ func (UnimplementedCertzServer) GetProfileList(context.Context, *GetProfileListR func (UnimplementedCertzServer) CanGenerateCSR(context.Context, *CanGenerateCSRRequest) (*CanGenerateCSRResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CanGenerateCSR not implemented") } +func (UnimplementedCertzServer) GetIntegrityManifest(context.Context, *GetIntegrityManifestRequest) (*GetIntegrityManifestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetIntegrityManifest not implemented") +} func (UnimplementedCertzServer) mustEmbedUnimplementedCertzServer() {} // UnsafeCertzServer may be embedded to opt out of forward compatibility for this service. @@ -246,6 +260,24 @@ func _Certz_CanGenerateCSR_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _Certz_GetIntegrityManifest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetIntegrityManifestRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CertzServer).GetIntegrityManifest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gnsi.certz.v1.Certz/GetIntegrityManifest", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CertzServer).GetIntegrityManifest(ctx, req.(*GetIntegrityManifestRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Certz_ServiceDesc is the grpc.ServiceDesc for Certz service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -269,6 +301,10 @@ var Certz_ServiceDesc = grpc.ServiceDesc{ MethodName: "CanGenerateCSR", Handler: _Certz_CanGenerateCSR_Handler, }, + { + MethodName: "GetIntegrityManifest", + Handler: _Certz_GetIntegrityManifest_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/credentialz/credentialz.pb.go b/credentialz/credentialz.pb.go index 2aa8052..2b3146f 100644 --- a/credentialz/credentialz.pb.go +++ b/credentialz/credentialz.pb.go @@ -29,6 +29,8 @@ const ( KeyType_KEY_TYPE_ED25519 KeyType = 3 KeyType_KEY_TYPE_RSA_2048 KeyType = 4 KeyType_KEY_TYPE_RSA_4096 KeyType = 5 + KeyType_KEY_TYPE_RSA_3072 KeyType = 6 + KeyType_KEY_TYPE_ECDSA_P_384 KeyType = 7 ) // Enum value maps for KeyType. @@ -40,6 +42,8 @@ var ( 3: "KEY_TYPE_ED25519", 4: "KEY_TYPE_RSA_2048", 5: "KEY_TYPE_RSA_4096", + 6: "KEY_TYPE_RSA_3072", + 7: "KEY_TYPE_ECDSA_P_384", } KeyType_value = map[string]int32{ "KEY_TYPE_UNSPECIFIED": 0, @@ -48,6 +52,8 @@ var ( "KEY_TYPE_ED25519": 3, "KEY_TYPE_RSA_2048": 4, "KEY_TYPE_RSA_4096": 5, + "KEY_TYPE_RSA_3072": 6, + "KEY_TYPE_ECDSA_P_384": 7, } ) @@ -87,6 +93,8 @@ const ( KeyGen_KEY_GEN_SSH_KEY_TYPE_ECDSA_P_521 KeyGen = 3 KeyGen_KEY_GEN_SSH_KEY_TYPE_EDDSA_ED25519 KeyGen = 4 KeyGen_KEY_GEN_SSH_KEY_TYPE_RSA_4096 KeyGen = 5 + KeyGen_KEY_GEN_SSH_KEY_TYPE_RSA_3072 KeyGen = 6 + KeyGen_KEY_GEN_SSH_KEY_TYPE_ECDSA_P_384 KeyGen = 7 ) // Enum value maps for KeyGen. @@ -98,6 +106,8 @@ var ( 3: "KEY_GEN_SSH_KEY_TYPE_ECDSA_P_521", 4: "KEY_GEN_SSH_KEY_TYPE_EDDSA_ED25519", 5: "KEY_GEN_SSH_KEY_TYPE_RSA_4096", + 6: "KEY_GEN_SSH_KEY_TYPE_RSA_3072", + 7: "KEY_GEN_SSH_KEY_TYPE_ECDSA_P_384", } KeyGen_value = map[string]int32{ "KEY_GEN_SSH_KEY_UNSPECIFIED": 0, @@ -106,6 +116,8 @@ var ( "KEY_GEN_SSH_KEY_TYPE_ECDSA_P_521": 3, "KEY_GEN_SSH_KEY_TYPE_EDDSA_ED25519": 4, "KEY_GEN_SSH_KEY_TYPE_RSA_4096": 5, + "KEY_GEN_SSH_KEY_TYPE_RSA_3072": 6, + "KEY_GEN_SSH_KEY_TYPE_ECDSA_P_384": 7, } ) @@ -1095,6 +1107,7 @@ type RotateHostParametersRequest struct { // *RotateHostParametersRequest_GenerateKeys // *RotateHostParametersRequest_AuthenticationAllowed // *RotateHostParametersRequest_AuthorizedPrincipalCheck + // *RotateHostParametersRequest_Glome Request isRotateHostParametersRequest_Request `protobuf_oneof:"request"` } @@ -1179,6 +1192,13 @@ func (x *RotateHostParametersRequest) GetAuthorizedPrincipalCheck() *AuthorizedP return nil } +func (x *RotateHostParametersRequest) GetGlome() *GlomeRequest { + if x, ok := x.GetRequest().(*RotateHostParametersRequest_Glome); ok { + return x.Glome + } + return nil +} + type isRotateHostParametersRequest_Request interface { isRotateHostParametersRequest_Request() } @@ -1207,6 +1227,10 @@ type RotateHostParametersRequest_AuthorizedPrincipalCheck struct { AuthorizedPrincipalCheck *AuthorizedPrincipalCheckRequest `protobuf:"bytes,6,opt,name=authorized_principal_check,json=authorizedPrincipalCheck,proto3,oneof"` } +type RotateHostParametersRequest_Glome struct { + Glome *GlomeRequest `protobuf:"bytes,7,opt,name=glome,proto3,oneof"` +} + func (*RotateHostParametersRequest_SshCaPublicKey) isRotateHostParametersRequest_Request() {} func (*RotateHostParametersRequest_ServerKeys) isRotateHostParametersRequest_Request() {} @@ -1220,6 +1244,8 @@ func (*RotateHostParametersRequest_AuthenticationAllowed) isRotateHostParameters func (*RotateHostParametersRequest_AuthorizedPrincipalCheck) isRotateHostParametersRequest_Request() { } +func (*RotateHostParametersRequest_Glome) isRotateHostParametersRequest_Request() {} + type RotateHostParametersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1232,6 +1258,7 @@ type RotateHostParametersResponse struct { // *RotateHostParametersResponse_GenerateKeys // *RotateHostParametersResponse_AuthenticationAllowed // *RotateHostParametersResponse_AuthorizedPrincipalCheck + // *RotateHostParametersResponse_Glome Response isRotateHostParametersResponse_Response `protobuf_oneof:"response"` } @@ -1309,6 +1336,13 @@ func (x *RotateHostParametersResponse) GetAuthorizedPrincipalCheck() *Authorized return nil } +func (x *RotateHostParametersResponse) GetGlome() *GlomeResponse { + if x, ok := x.GetResponse().(*RotateHostParametersResponse_Glome); ok { + return x.Glome + } + return nil +} + type isRotateHostParametersResponse_Response interface { isRotateHostParametersResponse_Response() } @@ -1333,6 +1367,10 @@ type RotateHostParametersResponse_AuthorizedPrincipalCheck struct { AuthorizedPrincipalCheck *AuthorizedPrincipalCheckResponse `protobuf:"bytes,5,opt,name=authorized_principal_check,json=authorizedPrincipalCheck,proto3,oneof"` } +type RotateHostParametersResponse_Glome struct { + Glome *GlomeResponse `protobuf:"bytes,6,opt,name=glome,proto3,oneof"` +} + func (*RotateHostParametersResponse_SshCaPublicKey) isRotateHostParametersResponse_Response() {} func (*RotateHostParametersResponse_ServerKeys) isRotateHostParametersResponse_Response() {} @@ -1345,6 +1383,8 @@ func (*RotateHostParametersResponse_AuthenticationAllowed) isRotateHostParameter func (*RotateHostParametersResponse_AuthorizedPrincipalCheck) isRotateHostParametersResponse_Response() { } +func (*RotateHostParametersResponse_Glome) isRotateHostParametersResponse_Response() {} + type CanGenerateKeyRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1688,6 +1728,115 @@ func (*AuthorizedPrincipalCheckResponse) Descriptor() ([]byte, []int) { return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{19} } +type GlomeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + KeyVersion int32 `protobuf:"varint,3,opt,name=key_version,json=keyVersion,proto3" json:"key_version,omitempty"` + UrlPrefix string `protobuf:"bytes,4,opt,name=url_prefix,json=urlPrefix,proto3" json:"url_prefix,omitempty"` +} + +func (x *GlomeRequest) Reset() { + *x = GlomeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GlomeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GlomeRequest) ProtoMessage() {} + +func (x *GlomeRequest) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GlomeRequest.ProtoReflect.Descriptor instead. +func (*GlomeRequest) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{20} +} + +func (x *GlomeRequest) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + +func (x *GlomeRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *GlomeRequest) GetKeyVersion() int32 { + if x != nil { + return x.KeyVersion + } + return 0 +} + +func (x *GlomeRequest) GetUrlPrefix() string { + if x != nil { + return x.UrlPrefix + } + return "" +} + +type GlomeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GlomeResponse) Reset() { + *x = GlomeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GlomeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GlomeResponse) ProtoMessage() {} + +func (x *GlomeResponse) ProtoReflect() protoreflect.Message { + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GlomeResponse.ProtoReflect.Descriptor instead. +func (*GlomeResponse) Descriptor() ([]byte, []int) { + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{21} +} + type GenerateKeysRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1701,7 +1850,7 @@ type GenerateKeysRequest struct { func (x *GenerateKeysRequest) Reset() { *x = GenerateKeysRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[20] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1714,7 +1863,7 @@ func (x *GenerateKeysRequest) String() string { func (*GenerateKeysRequest) ProtoMessage() {} func (x *GenerateKeysRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[20] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1727,7 +1876,7 @@ func (x *GenerateKeysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateKeysRequest.ProtoReflect.Descriptor instead. func (*GenerateKeysRequest) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{20} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{22} } func (x *GenerateKeysRequest) GetKeyParams() []KeyGen { @@ -1762,7 +1911,7 @@ type GenerateKeysResponse struct { func (x *GenerateKeysResponse) Reset() { *x = GenerateKeysResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[21] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1775,7 +1924,7 @@ func (x *GenerateKeysResponse) String() string { func (*GenerateKeysResponse) ProtoMessage() {} func (x *GenerateKeysResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[21] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1788,7 +1937,7 @@ func (x *GenerateKeysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateKeysResponse.ProtoReflect.Descriptor instead. func (*GenerateKeysResponse) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{21} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{23} } func (x *GenerateKeysResponse) GetPublicKeys() []*PublicKey { @@ -1809,7 +1958,7 @@ type AllowedAuthenticationRequest struct { func (x *AllowedAuthenticationRequest) Reset() { *x = AllowedAuthenticationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[22] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1822,7 +1971,7 @@ func (x *AllowedAuthenticationRequest) String() string { func (*AllowedAuthenticationRequest) ProtoMessage() {} func (x *AllowedAuthenticationRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[22] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1835,7 +1984,7 @@ func (x *AllowedAuthenticationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AllowedAuthenticationRequest.ProtoReflect.Descriptor instead. func (*AllowedAuthenticationRequest) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{22} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{24} } func (x *AllowedAuthenticationRequest) GetAuthenticationTypes() []AuthenticationType { @@ -1854,7 +2003,7 @@ type AllowedAuthenticationResponse struct { func (x *AllowedAuthenticationResponse) Reset() { *x = AllowedAuthenticationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[23] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +2016,7 @@ func (x *AllowedAuthenticationResponse) String() string { func (*AllowedAuthenticationResponse) ProtoMessage() {} func (x *AllowedAuthenticationResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[23] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +2029,7 @@ func (x *AllowedAuthenticationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AllowedAuthenticationResponse.ProtoReflect.Descriptor instead. func (*AllowedAuthenticationResponse) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{23} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{25} } type ServerKeysRequest struct { @@ -1896,7 +2045,7 @@ type ServerKeysRequest struct { func (x *ServerKeysRequest) Reset() { *x = ServerKeysRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[24] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1909,7 +2058,7 @@ func (x *ServerKeysRequest) String() string { func (*ServerKeysRequest) ProtoMessage() {} func (x *ServerKeysRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[24] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1922,7 +2071,7 @@ func (x *ServerKeysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerKeysRequest.ProtoReflect.Descriptor instead. func (*ServerKeysRequest) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{24} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{26} } func (x *ServerKeysRequest) GetAuthArtifacts() []*ServerKeysRequest_AuthenticationArtifacts { @@ -1955,7 +2104,7 @@ type ServerKeysResponse struct { func (x *ServerKeysResponse) Reset() { *x = ServerKeysResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[25] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1968,7 +2117,7 @@ func (x *ServerKeysResponse) String() string { func (*ServerKeysResponse) ProtoMessage() {} func (x *ServerKeysResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[25] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1981,7 +2130,7 @@ func (x *ServerKeysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerKeysResponse.ProtoReflect.Descriptor instead. func (*ServerKeysResponse) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{25} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{27} } type FinalizeRequest struct { @@ -1993,7 +2142,7 @@ type FinalizeRequest struct { func (x *FinalizeRequest) Reset() { *x = FinalizeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[26] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2006,7 +2155,7 @@ func (x *FinalizeRequest) String() string { func (*FinalizeRequest) ProtoMessage() {} func (x *FinalizeRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[26] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2019,7 +2168,7 @@ func (x *FinalizeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FinalizeRequest.ProtoReflect.Descriptor instead. func (*FinalizeRequest) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{26} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{28} } type GetPublicKeysRequest struct { @@ -2031,7 +2180,7 @@ type GetPublicKeysRequest struct { func (x *GetPublicKeysRequest) Reset() { *x = GetPublicKeysRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[27] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2044,7 +2193,7 @@ func (x *GetPublicKeysRequest) String() string { func (*GetPublicKeysRequest) ProtoMessage() {} func (x *GetPublicKeysRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[27] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2057,7 +2206,7 @@ func (x *GetPublicKeysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPublicKeysRequest.ProtoReflect.Descriptor instead. func (*GetPublicKeysRequest) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{27} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{29} } type GetPublicKeysResponse struct { @@ -2071,7 +2220,7 @@ type GetPublicKeysResponse struct { func (x *GetPublicKeysResponse) Reset() { *x = GetPublicKeysResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[28] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2084,7 +2233,7 @@ func (x *GetPublicKeysResponse) String() string { func (*GetPublicKeysResponse) ProtoMessage() {} func (x *GetPublicKeysResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[28] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2097,7 +2246,7 @@ func (x *GetPublicKeysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPublicKeysResponse.ProtoReflect.Descriptor instead. func (*GetPublicKeysResponse) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{28} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{30} } func (x *GetPublicKeysResponse) GetPublicKeys() []*PublicKey { @@ -2121,7 +2270,7 @@ type AccountCredentials_AuthorizedKey struct { func (x *AccountCredentials_AuthorizedKey) Reset() { *x = AccountCredentials_AuthorizedKey{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[29] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2134,7 +2283,7 @@ func (x *AccountCredentials_AuthorizedKey) String() string { func (*AccountCredentials_AuthorizedKey) ProtoMessage() {} func (x *AccountCredentials_AuthorizedKey) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[29] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2189,7 +2338,7 @@ type UserPolicy_SshAuthorizedPrincipals struct { func (x *UserPolicy_SshAuthorizedPrincipals) Reset() { *x = UserPolicy_SshAuthorizedPrincipals{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[30] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2202,7 +2351,7 @@ func (x *UserPolicy_SshAuthorizedPrincipals) String() string { func (*UserPolicy_SshAuthorizedPrincipals) ProtoMessage() {} func (x *UserPolicy_SshAuthorizedPrincipals) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[30] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2237,7 +2386,7 @@ type UserPolicy_SshAuthorizedPrincipal struct { func (x *UserPolicy_SshAuthorizedPrincipal) Reset() { *x = UserPolicy_SshAuthorizedPrincipal{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[31] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2250,7 +2399,7 @@ func (x *UserPolicy_SshAuthorizedPrincipal) String() string { func (*UserPolicy_SshAuthorizedPrincipal) ProtoMessage() {} func (x *UserPolicy_SshAuthorizedPrincipal) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[31] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2441,7 @@ type PasswordRequest_CryptoHash struct { func (x *PasswordRequest_CryptoHash) Reset() { *x = PasswordRequest_CryptoHash{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[32] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2305,7 +2454,7 @@ func (x *PasswordRequest_CryptoHash) String() string { func (*PasswordRequest_CryptoHash) ProtoMessage() {} func (x *PasswordRequest_CryptoHash) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[32] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2350,7 +2499,7 @@ type PasswordRequest_Password struct { func (x *PasswordRequest_Password) Reset() { *x = PasswordRequest_Password{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[33] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2363,7 +2512,7 @@ func (x *PasswordRequest_Password) String() string { func (*PasswordRequest_Password) ProtoMessage() {} func (x *PasswordRequest_Password) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[33] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2430,7 +2579,7 @@ type PasswordRequest_Account struct { func (x *PasswordRequest_Account) Reset() { *x = PasswordRequest_Account{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[34] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2443,7 +2592,7 @@ func (x *PasswordRequest_Account) String() string { func (*PasswordRequest_Account) ProtoMessage() {} func (x *PasswordRequest_Account) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[34] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2499,7 +2648,7 @@ type ServerKeysRequest_AuthenticationArtifacts struct { func (x *ServerKeysRequest_AuthenticationArtifacts) Reset() { *x = ServerKeysRequest_AuthenticationArtifacts{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[35] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2512,7 +2661,7 @@ func (x *ServerKeysRequest_AuthenticationArtifacts) String() string { func (*ServerKeysRequest_AuthenticationArtifacts) ProtoMessage() {} func (x *ServerKeysRequest_AuthenticationArtifacts) ProtoReflect() protoreflect.Message { - mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[35] + mi := &file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2525,7 +2674,7 @@ func (x *ServerKeysRequest_AuthenticationArtifacts) ProtoReflect() protoreflect. // Deprecated: Use ServerKeysRequest_AuthenticationArtifacts.ProtoReflect.Descriptor instead. func (*ServerKeysRequest_AuthenticationArtifacts) Descriptor() ([]byte, []int) { - return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{24, 0} + return file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP(), []int{26, 0} } func (x *ServerKeysRequest_AuthenticationArtifacts) GetPrivateKey() []byte { @@ -2754,7 +2903,7 @@ var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDesc = []by 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x22, 0x12, 0x0a, 0x10, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xc0, 0x04, 0x0a, 0x1b, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, + 0x22, 0xfb, 0x04, 0x0a, 0x1b, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x73, 0x73, 0x68, 0x5f, 0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6e, @@ -2789,202 +2938,226 @@ var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDesc = []by 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x18, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, - 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x83, 0x04, 0x0a, 0x1c, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x11, 0x73, 0x73, 0x68, 0x5f, 0x63, 0x61, 0x5f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x73, 0x68, - 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x0b, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x50, 0x0a, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x6b, 0x0a, 0x16, 0x61, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6e, 0x73, 0x69, - 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x15, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x75, 0x0a, 0x1a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6e, 0x73, - 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x48, 0x00, 0x52, 0x18, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, - 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x0a, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x15, 0x43, 0x61, 0x6e, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, - 0x47, 0x65, 0x6e, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3b, - 0x0a, 0x16, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x6e, 0x5f, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x63, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x09, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6e, 0x73, + 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x39, 0x0a, 0x05, 0x67, 0x6c, 0x6f, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6c, + 0x6f, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x67, 0x6c, + 0x6f, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xbf, + 0x04, 0x0a, 0x1c, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x55, 0x0a, 0x11, 0x73, 0x73, 0x68, 0x5f, 0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x12, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x73, - 0x68, 0x5f, 0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x73, 0x73, 0x68, 0x43, 0x61, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, - 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x1f, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x74, - 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x67, 0x6e, 0x73, 0x69, + 0x2e, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x73, 0x68, 0x43, 0x61, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6e, + 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, + 0x79, 0x73, 0x12, 0x50, 0x0a, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6b, + 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, - 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x22, 0x33, 0x0a, 0x04, 0x54, 0x6f, - 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x4f, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x4f, 0x4f, 0x4c, - 0x5f, 0x48, 0x49, 0x42, 0x41, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x22, - 0x22, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x6b, - 0x65, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, - 0x1b, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x47, 0x65, 0x6e, 0x52, 0x09, 0x6b, 0x65, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x4b, 0x65, 0x79, 0x73, 0x12, 0x6b, 0x0a, 0x16, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, + 0x65, 0x64, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x12, 0x75, 0x0a, 0x1a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, + 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x18, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, + 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x3a, 0x0a, 0x05, 0x67, 0x6c, 0x6f, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6c, + 0x6f, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x05, 0x67, + 0x6c, 0x6f, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x53, 0x0a, 0x15, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x6b, 0x65, 0x79, + 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, + 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x47, 0x65, 0x6e, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x3b, 0x0a, 0x16, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x6e, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, + 0x37, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1c, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x12, 0x43, + 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x73, 0x68, 0x5f, 0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x73, + 0x73, 0x68, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x61, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa5, + 0x01, 0x0a, 0x1f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, + 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x39, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, + 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x74, 0x6f, 0x6f, + 0x6c, 0x22, 0x33, 0x0a, 0x04, 0x54, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x4f, 0x4f, + 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x15, 0x0a, 0x11, 0x54, 0x4f, 0x4f, 0x4c, 0x5f, 0x48, 0x49, 0x42, 0x41, 0x5f, 0x44, 0x45, 0x46, + 0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x22, 0x22, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x64, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7a, 0x0a, 0x0c, 0x47, 0x6c, + 0x6f, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6b, 0x65, 0x79, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, + 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x6c, 0x6f, 0x6d, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3a, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x47, 0x65, 0x6e, + 0x52, 0x09, 0x6b, 0x65, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x4f, 0x6e, 0x22, 0x57, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x7a, 0x0a, + 0x1c, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, + 0x14, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6e, + 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x41, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x91, 0x02, 0x0a, 0x11, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x65, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x41, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, - 0x22, 0x57, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, + 0x1a, 0x5c, 0x0a, 0x17, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, + 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x14, + 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x58, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x7a, 0x0a, 0x1c, 0x41, 0x6c, 0x6c, - 0x6f, 0x77, 0x65, 0x64, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x14, 0x61, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x91, 0x02, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x0e, - 0x61, 0x75, 0x74, 0x68, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x1a, 0x5c, 0x0a, 0x17, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x11, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, - 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6e, 0x73, 0x69, - 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x73, 0x2a, 0x9b, 0x01, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x4b, - 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x5f, - 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x5f, 0x35, 0x32, 0x31, 0x10, 0x02, 0x12, - 0x14, 0x0a, 0x10, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x32, 0x35, - 0x35, 0x31, 0x39, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, - 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, - 0x36, 0x10, 0x05, 0x2a, 0xe3, 0x01, 0x0a, 0x06, 0x4b, 0x65, 0x79, 0x47, 0x65, 0x6e, 0x12, 0x1f, - 0x0a, 0x1b, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, - 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x21, 0x0a, 0x1d, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, - 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, - 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, - 0x5f, 0x50, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x45, 0x59, 0x5f, - 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x5f, 0x35, 0x32, 0x31, 0x10, 0x03, 0x12, 0x26, - 0x0a, 0x22, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, - 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x44, 0x53, 0x41, 0x5f, 0x45, 0x44, 0x32, - 0x35, 0x35, 0x31, 0x39, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, - 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, - 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x05, 0x2a, 0xa3, 0x01, 0x0a, 0x12, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, - 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x53, - 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x55, 0x54, 0x48, 0x45, - 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, - 0x55, 0x42, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x55, 0x54, 0x48, 0x45, - 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, - 0x42, 0x44, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x32, - 0xf2, 0x03, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x12, - 0x8b, 0x01, 0x0a, 0x18, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x34, 0x2e, 0x67, - 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x81, 0x01, - 0x0a, 0x14, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x2a, 0xcc, 0x01, 0x0a, 0x07, 0x4b, 0x65, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, + 0x41, 0x5f, 0x50, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x5f, 0x35, 0x32, + 0x31, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x04, + 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, + 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x10, 0x06, 0x12, 0x18, + 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, + 0x5f, 0x50, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x07, 0x2a, 0xac, 0x02, 0x0a, 0x06, 0x4b, 0x65, 0x79, + 0x47, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x1b, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, + 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, + 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, + 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x47, + 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x02, 0x12, 0x24, 0x0a, + 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x5f, 0x35, 0x32, + 0x31, 0x10, 0x03, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, + 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x44, 0x44, 0x53, + 0x41, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x4b, + 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x05, 0x12, 0x21, + 0x0a, 0x1d, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, 0x5f, 0x4b, 0x45, + 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x10, + 0x06, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x5f, 0x53, 0x53, 0x48, + 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, + 0x50, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x07, 0x2a, 0xa3, 0x01, 0x0a, 0x12, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, + 0x0a, 0x1f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x57, + 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x55, 0x42, + 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x42, 0x44, + 0x49, 0x4e, 0x54, 0x45, 0x52, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x03, 0x32, 0xf2, 0x03, + 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x12, 0x8b, 0x01, + 0x0a, 0x18, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6e, 0x73, + 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x35, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x81, 0x01, 0x0a, 0x14, + 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x6f, 0x74, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, - 0x01, 0x12, 0x69, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x29, 0x2e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, + 0x69, 0x0a, 0x0e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x12, 0x2a, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, - 0x73, 0x69, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0d, 0x47, 0x65, + 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x6e, + 0x73, 0x69, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x6e, 0x73, 0x69, 0x2e, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x67, 0x6e, 0x73, 0x69, + 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x7a, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3000,7 +3173,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDescGZIP() } var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes = make([]protoimpl.MessageInfo, 38) var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_goTypes = []interface{}{ (KeyType)(0), // 0: gnsi.credentialz.v1.KeyType (KeyGen)(0), // 1: gnsi.credentialz.v1.KeyGen @@ -3028,77 +3201,81 @@ var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_goTypes = []in (*CaPublicKeyResponse)(nil), // 23: gnsi.credentialz.v1.CaPublicKeyResponse (*AuthorizedPrincipalCheckRequest)(nil), // 24: gnsi.credentialz.v1.AuthorizedPrincipalCheckRequest (*AuthorizedPrincipalCheckResponse)(nil), // 25: gnsi.credentialz.v1.AuthorizedPrincipalCheckResponse - (*GenerateKeysRequest)(nil), // 26: gnsi.credentialz.v1.GenerateKeysRequest - (*GenerateKeysResponse)(nil), // 27: gnsi.credentialz.v1.GenerateKeysResponse - (*AllowedAuthenticationRequest)(nil), // 28: gnsi.credentialz.v1.AllowedAuthenticationRequest - (*AllowedAuthenticationResponse)(nil), // 29: gnsi.credentialz.v1.AllowedAuthenticationResponse - (*ServerKeysRequest)(nil), // 30: gnsi.credentialz.v1.ServerKeysRequest - (*ServerKeysResponse)(nil), // 31: gnsi.credentialz.v1.ServerKeysResponse - (*FinalizeRequest)(nil), // 32: gnsi.credentialz.v1.FinalizeRequest - (*GetPublicKeysRequest)(nil), // 33: gnsi.credentialz.v1.GetPublicKeysRequest - (*GetPublicKeysResponse)(nil), // 34: gnsi.credentialz.v1.GetPublicKeysResponse - (*AccountCredentials_AuthorizedKey)(nil), // 35: gnsi.credentialz.v1.AccountCredentials.AuthorizedKey - (*UserPolicy_SshAuthorizedPrincipals)(nil), // 36: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipals - (*UserPolicy_SshAuthorizedPrincipal)(nil), // 37: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipal - (*PasswordRequest_CryptoHash)(nil), // 38: gnsi.credentialz.v1.PasswordRequest.CryptoHash - (*PasswordRequest_Password)(nil), // 39: gnsi.credentialz.v1.PasswordRequest.Password - (*PasswordRequest_Account)(nil), // 40: gnsi.credentialz.v1.PasswordRequest.Account - (*ServerKeysRequest_AuthenticationArtifacts)(nil), // 41: gnsi.credentialz.v1.ServerKeysRequest.AuthenticationArtifacts + (*GlomeRequest)(nil), // 26: gnsi.credentialz.v1.GlomeRequest + (*GlomeResponse)(nil), // 27: gnsi.credentialz.v1.GlomeResponse + (*GenerateKeysRequest)(nil), // 28: gnsi.credentialz.v1.GenerateKeysRequest + (*GenerateKeysResponse)(nil), // 29: gnsi.credentialz.v1.GenerateKeysResponse + (*AllowedAuthenticationRequest)(nil), // 30: gnsi.credentialz.v1.AllowedAuthenticationRequest + (*AllowedAuthenticationResponse)(nil), // 31: gnsi.credentialz.v1.AllowedAuthenticationResponse + (*ServerKeysRequest)(nil), // 32: gnsi.credentialz.v1.ServerKeysRequest + (*ServerKeysResponse)(nil), // 33: gnsi.credentialz.v1.ServerKeysResponse + (*FinalizeRequest)(nil), // 34: gnsi.credentialz.v1.FinalizeRequest + (*GetPublicKeysRequest)(nil), // 35: gnsi.credentialz.v1.GetPublicKeysRequest + (*GetPublicKeysResponse)(nil), // 36: gnsi.credentialz.v1.GetPublicKeysResponse + (*AccountCredentials_AuthorizedKey)(nil), // 37: gnsi.credentialz.v1.AccountCredentials.AuthorizedKey + (*UserPolicy_SshAuthorizedPrincipals)(nil), // 38: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipals + (*UserPolicy_SshAuthorizedPrincipal)(nil), // 39: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipal + (*PasswordRequest_CryptoHash)(nil), // 40: gnsi.credentialz.v1.PasswordRequest.CryptoHash + (*PasswordRequest_Password)(nil), // 41: gnsi.credentialz.v1.PasswordRequest.Password + (*PasswordRequest_Account)(nil), // 42: gnsi.credentialz.v1.PasswordRequest.Account + (*ServerKeysRequest_AuthenticationArtifacts)(nil), // 43: gnsi.credentialz.v1.ServerKeysRequest.AuthenticationArtifacts } var file_github_com_openconfig_gnsi_credentialz_credentialz_proto_depIdxs = []int32{ 8, // 0: gnsi.credentialz.v1.RotateAccountCredentialsRequest.credential:type_name -> gnsi.credentialz.v1.AuthorizedKeysRequest 12, // 1: gnsi.credentialz.v1.RotateAccountCredentialsRequest.user:type_name -> gnsi.credentialz.v1.AuthorizedUsersRequest 15, // 2: gnsi.credentialz.v1.RotateAccountCredentialsRequest.password:type_name -> gnsi.credentialz.v1.PasswordRequest - 32, // 3: gnsi.credentialz.v1.RotateAccountCredentialsRequest.finalize:type_name -> gnsi.credentialz.v1.FinalizeRequest + 34, // 3: gnsi.credentialz.v1.RotateAccountCredentialsRequest.finalize:type_name -> gnsi.credentialz.v1.FinalizeRequest 11, // 4: gnsi.credentialz.v1.RotateAccountCredentialsResponse.credential:type_name -> gnsi.credentialz.v1.AuthorizedKeysResponse 14, // 5: gnsi.credentialz.v1.RotateAccountCredentialsResponse.user:type_name -> gnsi.credentialz.v1.AuthorizedUsersResponse 16, // 6: gnsi.credentialz.v1.RotateAccountCredentialsResponse.password:type_name -> gnsi.credentialz.v1.PasswordResponse 10, // 7: gnsi.credentialz.v1.AuthorizedKeysRequest.credentials:type_name -> gnsi.credentialz.v1.AccountCredentials 3, // 8: gnsi.credentialz.v1.Option.id:type_name -> gnsi.credentialz.v1.Option.StandardOption - 35, // 9: gnsi.credentialz.v1.AccountCredentials.authorized_keys:type_name -> gnsi.credentialz.v1.AccountCredentials.AuthorizedKey + 37, // 9: gnsi.credentialz.v1.AccountCredentials.authorized_keys:type_name -> gnsi.credentialz.v1.AccountCredentials.AuthorizedKey 13, // 10: gnsi.credentialz.v1.AuthorizedUsersRequest.policies:type_name -> gnsi.credentialz.v1.UserPolicy - 36, // 11: gnsi.credentialz.v1.UserPolicy.authorized_principals:type_name -> gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipals - 40, // 12: gnsi.credentialz.v1.PasswordRequest.accounts:type_name -> gnsi.credentialz.v1.PasswordRequest.Account + 38, // 11: gnsi.credentialz.v1.UserPolicy.authorized_principals:type_name -> gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipals + 42, // 12: gnsi.credentialz.v1.PasswordRequest.accounts:type_name -> gnsi.credentialz.v1.PasswordRequest.Account 22, // 13: gnsi.credentialz.v1.RotateHostParametersRequest.ssh_ca_public_key:type_name -> gnsi.credentialz.v1.CaPublicKeyRequest - 30, // 14: gnsi.credentialz.v1.RotateHostParametersRequest.server_keys:type_name -> gnsi.credentialz.v1.ServerKeysRequest - 32, // 15: gnsi.credentialz.v1.RotateHostParametersRequest.finalize:type_name -> gnsi.credentialz.v1.FinalizeRequest - 26, // 16: gnsi.credentialz.v1.RotateHostParametersRequest.generate_keys:type_name -> gnsi.credentialz.v1.GenerateKeysRequest - 28, // 17: gnsi.credentialz.v1.RotateHostParametersRequest.authentication_allowed:type_name -> gnsi.credentialz.v1.AllowedAuthenticationRequest + 32, // 14: gnsi.credentialz.v1.RotateHostParametersRequest.server_keys:type_name -> gnsi.credentialz.v1.ServerKeysRequest + 34, // 15: gnsi.credentialz.v1.RotateHostParametersRequest.finalize:type_name -> gnsi.credentialz.v1.FinalizeRequest + 28, // 16: gnsi.credentialz.v1.RotateHostParametersRequest.generate_keys:type_name -> gnsi.credentialz.v1.GenerateKeysRequest + 30, // 17: gnsi.credentialz.v1.RotateHostParametersRequest.authentication_allowed:type_name -> gnsi.credentialz.v1.AllowedAuthenticationRequest 24, // 18: gnsi.credentialz.v1.RotateHostParametersRequest.authorized_principal_check:type_name -> gnsi.credentialz.v1.AuthorizedPrincipalCheckRequest - 23, // 19: gnsi.credentialz.v1.RotateHostParametersResponse.ssh_ca_public_key:type_name -> gnsi.credentialz.v1.CaPublicKeyResponse - 31, // 20: gnsi.credentialz.v1.RotateHostParametersResponse.server_keys:type_name -> gnsi.credentialz.v1.ServerKeysResponse - 27, // 21: gnsi.credentialz.v1.RotateHostParametersResponse.generate_keys:type_name -> gnsi.credentialz.v1.GenerateKeysResponse - 29, // 22: gnsi.credentialz.v1.RotateHostParametersResponse.authentication_allowed:type_name -> gnsi.credentialz.v1.AllowedAuthenticationResponse - 25, // 23: gnsi.credentialz.v1.RotateHostParametersResponse.authorized_principal_check:type_name -> gnsi.credentialz.v1.AuthorizedPrincipalCheckResponse - 1, // 24: gnsi.credentialz.v1.CanGenerateKeyRequest.key_params:type_name -> gnsi.credentialz.v1.KeyGen - 0, // 25: gnsi.credentialz.v1.PublicKey.key_type:type_name -> gnsi.credentialz.v1.KeyType - 21, // 26: gnsi.credentialz.v1.CaPublicKeyRequest.ssh_ca_public_keys:type_name -> gnsi.credentialz.v1.PublicKey - 5, // 27: gnsi.credentialz.v1.AuthorizedPrincipalCheckRequest.tool:type_name -> gnsi.credentialz.v1.AuthorizedPrincipalCheckRequest.Tool - 1, // 28: gnsi.credentialz.v1.GenerateKeysRequest.key_params:type_name -> gnsi.credentialz.v1.KeyGen - 21, // 29: gnsi.credentialz.v1.GenerateKeysResponse.public_keys:type_name -> gnsi.credentialz.v1.PublicKey - 2, // 30: gnsi.credentialz.v1.AllowedAuthenticationRequest.authentication_types:type_name -> gnsi.credentialz.v1.AuthenticationType - 41, // 31: gnsi.credentialz.v1.ServerKeysRequest.auth_artifacts:type_name -> gnsi.credentialz.v1.ServerKeysRequest.AuthenticationArtifacts - 21, // 32: gnsi.credentialz.v1.GetPublicKeysResponse.public_keys:type_name -> gnsi.credentialz.v1.PublicKey - 9, // 33: gnsi.credentialz.v1.AccountCredentials.AuthorizedKey.options:type_name -> gnsi.credentialz.v1.Option - 0, // 34: gnsi.credentialz.v1.AccountCredentials.AuthorizedKey.key_type:type_name -> gnsi.credentialz.v1.KeyType - 37, // 35: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipals.authorized_principals:type_name -> gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipal - 9, // 36: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipal.options:type_name -> gnsi.credentialz.v1.Option - 4, // 37: gnsi.credentialz.v1.PasswordRequest.CryptoHash.hash_type:type_name -> gnsi.credentialz.v1.PasswordRequest.CryptoHash.HashType - 38, // 38: gnsi.credentialz.v1.PasswordRequest.Password.crypto_hash:type_name -> gnsi.credentialz.v1.PasswordRequest.CryptoHash - 39, // 39: gnsi.credentialz.v1.PasswordRequest.Account.password:type_name -> gnsi.credentialz.v1.PasswordRequest.Password - 6, // 40: gnsi.credentialz.v1.Credentialz.RotateAccountCredentials:input_type -> gnsi.credentialz.v1.RotateAccountCredentialsRequest - 17, // 41: gnsi.credentialz.v1.Credentialz.RotateHostParameters:input_type -> gnsi.credentialz.v1.RotateHostParametersRequest - 19, // 42: gnsi.credentialz.v1.Credentialz.CanGenerateKey:input_type -> gnsi.credentialz.v1.CanGenerateKeyRequest - 33, // 43: gnsi.credentialz.v1.Credentialz.GetPublicKeys:input_type -> gnsi.credentialz.v1.GetPublicKeysRequest - 7, // 44: gnsi.credentialz.v1.Credentialz.RotateAccountCredentials:output_type -> gnsi.credentialz.v1.RotateAccountCredentialsResponse - 18, // 45: gnsi.credentialz.v1.Credentialz.RotateHostParameters:output_type -> gnsi.credentialz.v1.RotateHostParametersResponse - 20, // 46: gnsi.credentialz.v1.Credentialz.CanGenerateKey:output_type -> gnsi.credentialz.v1.CanGenerateKeyResponse - 34, // 47: gnsi.credentialz.v1.Credentialz.GetPublicKeys:output_type -> gnsi.credentialz.v1.GetPublicKeysResponse - 44, // [44:48] is the sub-list for method output_type - 40, // [40:44] is the sub-list for method input_type - 40, // [40:40] is the sub-list for extension type_name - 40, // [40:40] is the sub-list for extension extendee - 0, // [0:40] is the sub-list for field type_name + 26, // 19: gnsi.credentialz.v1.RotateHostParametersRequest.glome:type_name -> gnsi.credentialz.v1.GlomeRequest + 23, // 20: gnsi.credentialz.v1.RotateHostParametersResponse.ssh_ca_public_key:type_name -> gnsi.credentialz.v1.CaPublicKeyResponse + 33, // 21: gnsi.credentialz.v1.RotateHostParametersResponse.server_keys:type_name -> gnsi.credentialz.v1.ServerKeysResponse + 29, // 22: gnsi.credentialz.v1.RotateHostParametersResponse.generate_keys:type_name -> gnsi.credentialz.v1.GenerateKeysResponse + 31, // 23: gnsi.credentialz.v1.RotateHostParametersResponse.authentication_allowed:type_name -> gnsi.credentialz.v1.AllowedAuthenticationResponse + 25, // 24: gnsi.credentialz.v1.RotateHostParametersResponse.authorized_principal_check:type_name -> gnsi.credentialz.v1.AuthorizedPrincipalCheckResponse + 27, // 25: gnsi.credentialz.v1.RotateHostParametersResponse.glome:type_name -> gnsi.credentialz.v1.GlomeResponse + 1, // 26: gnsi.credentialz.v1.CanGenerateKeyRequest.key_params:type_name -> gnsi.credentialz.v1.KeyGen + 0, // 27: gnsi.credentialz.v1.PublicKey.key_type:type_name -> gnsi.credentialz.v1.KeyType + 21, // 28: gnsi.credentialz.v1.CaPublicKeyRequest.ssh_ca_public_keys:type_name -> gnsi.credentialz.v1.PublicKey + 5, // 29: gnsi.credentialz.v1.AuthorizedPrincipalCheckRequest.tool:type_name -> gnsi.credentialz.v1.AuthorizedPrincipalCheckRequest.Tool + 1, // 30: gnsi.credentialz.v1.GenerateKeysRequest.key_params:type_name -> gnsi.credentialz.v1.KeyGen + 21, // 31: gnsi.credentialz.v1.GenerateKeysResponse.public_keys:type_name -> gnsi.credentialz.v1.PublicKey + 2, // 32: gnsi.credentialz.v1.AllowedAuthenticationRequest.authentication_types:type_name -> gnsi.credentialz.v1.AuthenticationType + 43, // 33: gnsi.credentialz.v1.ServerKeysRequest.auth_artifacts:type_name -> gnsi.credentialz.v1.ServerKeysRequest.AuthenticationArtifacts + 21, // 34: gnsi.credentialz.v1.GetPublicKeysResponse.public_keys:type_name -> gnsi.credentialz.v1.PublicKey + 9, // 35: gnsi.credentialz.v1.AccountCredentials.AuthorizedKey.options:type_name -> gnsi.credentialz.v1.Option + 0, // 36: gnsi.credentialz.v1.AccountCredentials.AuthorizedKey.key_type:type_name -> gnsi.credentialz.v1.KeyType + 39, // 37: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipals.authorized_principals:type_name -> gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipal + 9, // 38: gnsi.credentialz.v1.UserPolicy.SshAuthorizedPrincipal.options:type_name -> gnsi.credentialz.v1.Option + 4, // 39: gnsi.credentialz.v1.PasswordRequest.CryptoHash.hash_type:type_name -> gnsi.credentialz.v1.PasswordRequest.CryptoHash.HashType + 40, // 40: gnsi.credentialz.v1.PasswordRequest.Password.crypto_hash:type_name -> gnsi.credentialz.v1.PasswordRequest.CryptoHash + 41, // 41: gnsi.credentialz.v1.PasswordRequest.Account.password:type_name -> gnsi.credentialz.v1.PasswordRequest.Password + 6, // 42: gnsi.credentialz.v1.Credentialz.RotateAccountCredentials:input_type -> gnsi.credentialz.v1.RotateAccountCredentialsRequest + 17, // 43: gnsi.credentialz.v1.Credentialz.RotateHostParameters:input_type -> gnsi.credentialz.v1.RotateHostParametersRequest + 19, // 44: gnsi.credentialz.v1.Credentialz.CanGenerateKey:input_type -> gnsi.credentialz.v1.CanGenerateKeyRequest + 35, // 45: gnsi.credentialz.v1.Credentialz.GetPublicKeys:input_type -> gnsi.credentialz.v1.GetPublicKeysRequest + 7, // 46: gnsi.credentialz.v1.Credentialz.RotateAccountCredentials:output_type -> gnsi.credentialz.v1.RotateAccountCredentialsResponse + 18, // 47: gnsi.credentialz.v1.Credentialz.RotateHostParameters:output_type -> gnsi.credentialz.v1.RotateHostParametersResponse + 20, // 48: gnsi.credentialz.v1.Credentialz.CanGenerateKey:output_type -> gnsi.credentialz.v1.CanGenerateKeyResponse + 36, // 49: gnsi.credentialz.v1.Credentialz.GetPublicKeys:output_type -> gnsi.credentialz.v1.GetPublicKeysResponse + 46, // [46:50] is the sub-list for method output_type + 42, // [42:46] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() } @@ -3348,7 +3525,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateKeysRequest); i { + switch v := v.(*GlomeRequest); i { case 0: return &v.state case 1: @@ -3360,7 +3537,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateKeysResponse); i { + switch v := v.(*GlomeResponse); i { case 0: return &v.state case 1: @@ -3372,7 +3549,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AllowedAuthenticationRequest); i { + switch v := v.(*GenerateKeysRequest); i { case 0: return &v.state case 1: @@ -3384,7 +3561,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AllowedAuthenticationResponse); i { + switch v := v.(*GenerateKeysResponse); i { case 0: return &v.state case 1: @@ -3396,7 +3573,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerKeysRequest); i { + switch v := v.(*AllowedAuthenticationRequest); i { case 0: return &v.state case 1: @@ -3408,7 +3585,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerKeysResponse); i { + switch v := v.(*AllowedAuthenticationResponse); i { case 0: return &v.state case 1: @@ -3420,7 +3597,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinalizeRequest); i { + switch v := v.(*ServerKeysRequest); i { case 0: return &v.state case 1: @@ -3432,7 +3609,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeysRequest); i { + switch v := v.(*ServerKeysResponse); i { case 0: return &v.state case 1: @@ -3444,7 +3621,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeysResponse); i { + switch v := v.(*FinalizeRequest); i { case 0: return &v.state case 1: @@ -3456,7 +3633,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountCredentials_AuthorizedKey); i { + switch v := v.(*GetPublicKeysRequest); i { case 0: return &v.state case 1: @@ -3468,7 +3645,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserPolicy_SshAuthorizedPrincipals); i { + switch v := v.(*GetPublicKeysResponse); i { case 0: return &v.state case 1: @@ -3480,7 +3657,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserPolicy_SshAuthorizedPrincipal); i { + switch v := v.(*AccountCredentials_AuthorizedKey); i { case 0: return &v.state case 1: @@ -3492,7 +3669,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordRequest_CryptoHash); i { + switch v := v.(*UserPolicy_SshAuthorizedPrincipals); i { case 0: return &v.state case 1: @@ -3504,7 +3681,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordRequest_Password); i { + switch v := v.(*UserPolicy_SshAuthorizedPrincipal); i { case 0: return &v.state case 1: @@ -3516,7 +3693,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PasswordRequest_Account); i { + switch v := v.(*PasswordRequest_CryptoHash); i { case 0: return &v.state case 1: @@ -3528,6 +3705,30 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { } } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordRequest_Password); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordRequest_Account); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerKeysRequest_AuthenticationArtifacts); i { case 0: return &v.state @@ -3562,6 +3763,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { (*RotateHostParametersRequest_GenerateKeys)(nil), (*RotateHostParametersRequest_AuthenticationAllowed)(nil), (*RotateHostParametersRequest_AuthorizedPrincipalCheck)(nil), + (*RotateHostParametersRequest_Glome)(nil), } file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[12].OneofWrappers = []interface{}{ (*RotateHostParametersResponse_SshCaPublicKey)(nil), @@ -3569,8 +3771,9 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { (*RotateHostParametersResponse_GenerateKeys)(nil), (*RotateHostParametersResponse_AuthenticationAllowed)(nil), (*RotateHostParametersResponse_AuthorizedPrincipalCheck)(nil), + (*RotateHostParametersResponse_Glome)(nil), } - file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[33].OneofWrappers = []interface{}{ + file_github_com_openconfig_gnsi_credentialz_credentialz_proto_msgTypes[35].OneofWrappers = []interface{}{ (*PasswordRequest_Password_Plaintext)(nil), (*PasswordRequest_Password_CryptoHash)(nil), } @@ -3580,7 +3783,7 @@ func file_github_com_openconfig_gnsi_credentialz_credentialz_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_github_com_openconfig_gnsi_credentialz_credentialz_proto_rawDesc, NumEnums: 6, - NumMessages: 36, + NumMessages: 38, NumExtensions: 0, NumServices: 1, },