From fd6374be1ac0dc7c732d6619cf164ab01f5bead9 Mon Sep 17 00:00:00 2001 From: Shane Date: Wed, 15 Jul 2026 14:34:21 -0400 Subject: [PATCH] feat(fleet): Attest RPC + enrollment write RPCs + kind/pinned fields + Management config --- gen/ts/cryptos/fleet/v1/fleet_pb.ts | 209 +++- gen/ts/cryptos/v1/config_pb.ts | 76 +- gen/ts/cryptos/v1/node_pb.ts | 119 ++- go/cryptos/fleet/v1/fleet.pb.go | 774 ++++++++++++--- go/cryptos/fleet/v1/fleet_grpc.pb.go | 154 ++- .../fleet/v1/fleetv1connect/fleet.connect.go | 113 ++- go/cryptos/v1/config.pb.go | 556 ++++++----- .../v1/cryptosv1connect/node.connect.go | 34 + go/cryptos/v1/node.pb.go | 939 ++++++++++-------- go/cryptos/v1/node_grpc.pb.go | 44 + proto/cryptos/fleet/v1/fleet.proto | 57 +- proto/cryptos/v1/config.proto | 14 + proto/cryptos/v1/node.proto | 20 + 13 files changed, 2296 insertions(+), 813 deletions(-) diff --git a/gen/ts/cryptos/fleet/v1/fleet_pb.ts b/gen/ts/cryptos/fleet/v1/fleet_pb.ts index 26801f4..991eda7 100644 --- a/gen/ts/cryptos/fleet/v1/fleet_pb.ts +++ b/gen/ts/cryptos/fleet/v1/fleet_pb.ts @@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file cryptos/fleet/v1/fleet.proto. */ export const file_cryptos_fleet_v1_fleet: GenFile = /*@__PURE__*/ - fileDesc("ChxjcnlwdG9zL2ZsZWV0L3YxL2ZsZWV0LnByb3RvEhBjcnlwdG9zLmZsZWV0LnYxIhIKEExpc3ROb2Rlc1JlcXVlc3QiQQoRTGlzdE5vZGVzUmVzcG9uc2USLAoFbm9kZXMYASADKAsyHS5jcnlwdG9zLmZsZWV0LnYxLk5vZGVTdW1tYXJ5Ih4KDkdldE5vZGVSZXF1ZXN0EgwKBG5hbWUYASABKAkiPQoPR2V0Tm9kZVJlc3BvbnNlEioKBG5vZGUYASABKAsyHC5jcnlwdG9zLmZsZWV0LnYxLk5vZGVEZXRhaWwiJwoXTGlzdENlcnRpZmljYXRlc1JlcXVlc3QSDAoEbm9kZRgBIAEoCSJPChhMaXN0Q2VydGlmaWNhdGVzUmVzcG9uc2USMwoMY2VydGlmaWNhdGVzGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0aWZpY2F0ZSIVChNMaXN0UHJvZmlsZXNSZXF1ZXN0IkQKFExpc3RQcm9maWxlc1Jlc3BvbnNlEiwKBWl0ZW1zGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0UHJvZmlsZSIVChNMaXN0QWRhcHRlcnNSZXF1ZXN0IkoKFExpc3RBZGFwdGVyc1Jlc3BvbnNlEjIKBWl0ZW1zGAEgAygLMiMuY3J5cHRvcy5mbGVldC52MS5FbnJvbGxtZW50QWRhcHRlciISChBMaXN0QXVkaXRSZXF1ZXN0IkAKEUxpc3RBdWRpdFJlc3BvbnNlEisKBWl0ZW1zGAEgAygLMhwuY3J5cHRvcy5mbGVldC52MS5BdWRpdEV2ZW50IhgKFkxpc3RFbnJvbGxtZW50c1JlcXVlc3QiTQoXTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USMgoFaXRlbXMYASADKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0Iq8BCgtOb2RlU3VtbWFyeRIMCgRuYW1lGAEgASgJEg8KB2FkZHJlc3MYAiABKAkSDAoEcm9sZRgDIAEoCRIWCg5pZGVudGl0eV9zdGF0ZRgEIAEoCRIKCgJjbhgFIAEoCRIOCgZpc3N1ZXIYBiABKAkSKAoGaGVhbHRoGAcgASgOMhguY3J5cHRvcy5mbGVldC52MS5IZWFsdGgSFQoNaGVhbHRoX2RldGFpbBgIIAEoCSJJCgxOb2RlSWRlbnRpdHkSEQoJY2hhaW5fcGVtGAEgASgJEhEKCWNoYWluX2RlchgCIAMoDBITCgtsZWFmX3NoYTI1NhgDIAEoCSKpAQoKTm9kZURldGFpbBIuCgdzdW1tYXJ5GAEgASgLMh0uY3J5cHRvcy5mbGVldC52MS5Ob2RlU3VtbWFyeRIwCghpZGVudGl0eRgCIAEoCzIeLmNyeXB0b3MuZmxlZXQudjEuTm9kZUlkZW50aXR5EhUKDXRwbV9hdmFpbGFibGUYAyABKAgSEgoKYm9vdF9jb3VudBgEIAEoBBIOCgZ1cHRpbWUYBSABKAkiwAEKC0NlcnRpZmljYXRlEg4KBnNlcmlhbBgBIAEoCRISCgpzdWJqZWN0X2NuGAIgASgJEhMKC2lzc3Vlcl9ub2RlGAMgASgJEgwKBGtpbmQYBCABKAkSDgoGc3RhdHVzGAUgASgJEhIKCm5vdF9iZWZvcmUYBiABKAkSEQoJbm90X2FmdGVyGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkSEgoKcmV2b2tlZF9hdBgJIAEoCRIOCgZyZWFzb24YCiABKAkinAEKC0NlcnRQcm9maWxlEgwKBG5hbWUYASABKAkSDwoHa2V5X2FsZxgCIAEoCRIRCglrZXlfdXNhZ2UYAyADKAkSFQoNZXh0X2tleV91c2FnZRgEIAMoCRINCgVpc19jYRgFIAEoCBIQCghwYXRoX2xlbhgGIAEoBRIMCgRzYW5zGAcgAygJEhUKDXZhbGlkaXR5X2RheXMYCCABKAUijQEKEUVucm9sbG1lbnRBZGFwdGVyEgwKBGtpbmQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghlbmRwb2ludBgDIAEoCRIPCgdwcm9maWxlGAQgASgJEg8KB2VuYWJsZWQYBSABKAgSEgoKY2hhbGxlbmdlcxgGIAMoCRIUCgxncG9fdGVtcGxhdGUYByABKAkibQoKQXVkaXRFdmVudBIKCgJpZBgBIAEoCRIKCgJhdBgCIAEoCRIMCgRraW5kGAMgASgJEg8KB3N1bW1hcnkYBCABKAkSEwoLdGFyZ2V0X2tpbmQYBSABKAkSEwoLdGFyZ2V0X3BhdGgYBiABKAkirAIKEUVucm9sbG1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEhUKDXByb3Bvc2VkX25hbWUYAiABKAkSDAoEcm9sZRgDIAEoCRIRCglwYXJlbnRfY24YBCABKAkSDwoHYWRkcmVzcxgFIAEoCRIOCgZzdGF0dXMYBiABKAkSGwoTYXR0ZXN0YXRpb25fc3VtbWFyeRgHIAEoCRIbChNhdHRlc3RhdGlvbl9ub2RlX2lkGAggASgJEhQKDGNzcl9rZXlfdHlwZRgJIAEoCRIWCg5jc3Jfc3ViamVjdF9jbhgKIAEoCRIUCgxyZXF1ZXN0ZWRfYXQYCyABKAkSGAoQcmVqZWN0aW9uX3JlYXNvbhgMIAEoCRIaChJhZG1pdHRlZF9ub2RlX25hbWUYDSABKAkiDwoNV2hvQW1JUmVxdWVzdCI9ChBPcGVyYXRvcklkZW50aXR5EgoKAmNuGAEgASgJEg4KBnNlcmlhbBgCIAEoCRINCgVsZXZlbBgDIAEoCSJGCg5XaG9BbUlSZXNwb25zZRI0CghvcGVyYXRvchgBIAEoCzIiLmNyeXB0b3MuZmxlZXQudjEuT3BlcmF0b3JJZGVudGl0eSpSCgZIZWFsdGgSFgoSSEVBTFRIX1VOU1BFQ0lGSUVEEAASDQoJSEVBTFRIX1VQEAESDwoLSEVBTFRIX0RPV04QAhIQCgxIRUFMVEhfRVJST1IQAzLoBQoMRmxlZXRTZXJ2aWNlElQKCUxpc3ROb2RlcxIiLmNyeXB0b3MuZmxlZXQudjEuTGlzdE5vZGVzUmVxdWVzdBojLmNyeXB0b3MuZmxlZXQudjEuTGlzdE5vZGVzUmVzcG9uc2USTgoHR2V0Tm9kZRIgLmNyeXB0b3MuZmxlZXQudjEuR2V0Tm9kZVJlcXVlc3QaIS5jcnlwdG9zLmZsZWV0LnYxLkdldE5vZGVSZXNwb25zZRJpChBMaXN0Q2VydGlmaWNhdGVzEikuY3J5cHRvcy5mbGVldC52MS5MaXN0Q2VydGlmaWNhdGVzUmVxdWVzdBoqLmNyeXB0b3MuZmxlZXQudjEuTGlzdENlcnRpZmljYXRlc1Jlc3BvbnNlEl0KDExpc3RQcm9maWxlcxIlLmNyeXB0b3MuZmxlZXQudjEuTGlzdFByb2ZpbGVzUmVxdWVzdBomLmNyeXB0b3MuZmxlZXQudjEuTGlzdFByb2ZpbGVzUmVzcG9uc2USXQoMTGlzdEFkYXB0ZXJzEiUuY3J5cHRvcy5mbGVldC52MS5MaXN0QWRhcHRlcnNSZXF1ZXN0GiYuY3J5cHRvcy5mbGVldC52MS5MaXN0QWRhcHRlcnNSZXNwb25zZRJUCglMaXN0QXVkaXQSIi5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBdWRpdFJlcXVlc3QaIy5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBdWRpdFJlc3BvbnNlEmYKD0xpc3RFbnJvbGxtZW50cxIoLmNyeXB0b3MuZmxlZXQudjEuTGlzdEVucm9sbG1lbnRzUmVxdWVzdBopLmNyeXB0b3MuZmxlZXQudjEuTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USSwoGV2hvQW1JEh8uY3J5cHRvcy5mbGVldC52MS5XaG9BbUlSZXF1ZXN0GiAuY3J5cHRvcy5mbGVldC52MS5XaG9BbUlSZXNwb25zZUI4WjZnaXRodWIuY29tL0NyeXB0T1MtUEtJL2FwaS9nby9jcnlwdG9zL2ZsZWV0L3YxO2ZsZWV0djFiBnByb3RvMw"); + fileDesc("ChxjcnlwdG9zL2ZsZWV0L3YxL2ZsZWV0LnByb3RvEhBjcnlwdG9zLmZsZWV0LnYxIhIKEExpc3ROb2Rlc1JlcXVlc3QiQQoRTGlzdE5vZGVzUmVzcG9uc2USLAoFbm9kZXMYASADKAsyHS5jcnlwdG9zLmZsZWV0LnYxLk5vZGVTdW1tYXJ5Ih4KDkdldE5vZGVSZXF1ZXN0EgwKBG5hbWUYASABKAkiPQoPR2V0Tm9kZVJlc3BvbnNlEioKBG5vZGUYASABKAsyHC5jcnlwdG9zLmZsZWV0LnYxLk5vZGVEZXRhaWwiJwoXTGlzdENlcnRpZmljYXRlc1JlcXVlc3QSDAoEbm9kZRgBIAEoCSJPChhMaXN0Q2VydGlmaWNhdGVzUmVzcG9uc2USMwoMY2VydGlmaWNhdGVzGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0aWZpY2F0ZSIVChNMaXN0UHJvZmlsZXNSZXF1ZXN0IkQKFExpc3RQcm9maWxlc1Jlc3BvbnNlEiwKBWl0ZW1zGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0UHJvZmlsZSIVChNMaXN0QWRhcHRlcnNSZXF1ZXN0IkoKFExpc3RBZGFwdGVyc1Jlc3BvbnNlEjIKBWl0ZW1zGAEgAygLMiMuY3J5cHRvcy5mbGVldC52MS5FbnJvbGxtZW50QWRhcHRlciISChBMaXN0QXVkaXRSZXF1ZXN0IkAKEUxpc3RBdWRpdFJlc3BvbnNlEisKBWl0ZW1zGAEgAygLMhwuY3J5cHRvcy5mbGVldC52MS5BdWRpdEV2ZW50IhgKFkxpc3RFbnJvbGxtZW50c1JlcXVlc3QiTQoXTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USMgoFaXRlbXMYASADKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0Iq8BCgtOb2RlU3VtbWFyeRIMCgRuYW1lGAEgASgJEg8KB2FkZHJlc3MYAiABKAkSDAoEcm9sZRgDIAEoCRIWCg5pZGVudGl0eV9zdGF0ZRgEIAEoCRIKCgJjbhgFIAEoCRIOCgZpc3N1ZXIYBiABKAkSKAoGaGVhbHRoGAcgASgOMhguY3J5cHRvcy5mbGVldC52MS5IZWFsdGgSFQoNaGVhbHRoX2RldGFpbBgIIAEoCSJJCgxOb2RlSWRlbnRpdHkSEQoJY2hhaW5fcGVtGAEgASgJEhEKCWNoYWluX2RlchgCIAMoDBITCgtsZWFmX3NoYTI1NhgDIAEoCSKpAQoKTm9kZURldGFpbBIuCgdzdW1tYXJ5GAEgASgLMh0uY3J5cHRvcy5mbGVldC52MS5Ob2RlU3VtbWFyeRIwCghpZGVudGl0eRgCIAEoCzIeLmNyeXB0b3MuZmxlZXQudjEuTm9kZUlkZW50aXR5EhUKDXRwbV9hdmFpbGFibGUYAyABKAgSEgoKYm9vdF9jb3VudBgEIAEoBBIOCgZ1cHRpbWUYBSABKAkiwAEKC0NlcnRpZmljYXRlEg4KBnNlcmlhbBgBIAEoCRISCgpzdWJqZWN0X2NuGAIgASgJEhMKC2lzc3Vlcl9ub2RlGAMgASgJEgwKBGtpbmQYBCABKAkSDgoGc3RhdHVzGAUgASgJEhIKCm5vdF9iZWZvcmUYBiABKAkSEQoJbm90X2FmdGVyGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkSEgoKcmV2b2tlZF9hdBgJIAEoCRIOCgZyZWFzb24YCiABKAkinAEKC0NlcnRQcm9maWxlEgwKBG5hbWUYASABKAkSDwoHa2V5X2FsZxgCIAEoCRIRCglrZXlfdXNhZ2UYAyADKAkSFQoNZXh0X2tleV91c2FnZRgEIAMoCRINCgVpc19jYRgFIAEoCBIQCghwYXRoX2xlbhgGIAEoBRIMCgRzYW5zGAcgAygJEhUKDXZhbGlkaXR5X2RheXMYCCABKAUijQEKEUVucm9sbG1lbnRBZGFwdGVyEgwKBGtpbmQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghlbmRwb2ludBgDIAEoCRIPCgdwcm9maWxlGAQgASgJEg8KB2VuYWJsZWQYBSABKAgSEgoKY2hhbGxlbmdlcxgGIAMoCRIUCgxncG9fdGVtcGxhdGUYByABKAkibQoKQXVkaXRFdmVudBIKCgJpZBgBIAEoCRIKCgJhdBgCIAEoCRIMCgRraW5kGAMgASgJEg8KB3N1bW1hcnkYBCABKAkSEwoLdGFyZ2V0X2tpbmQYBSABKAkSEwoLdGFyZ2V0X3BhdGgYBiABKAki1QIKEUVucm9sbG1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEhUKDXByb3Bvc2VkX25hbWUYAiABKAkSDAoEcm9sZRgDIAEoCRIRCglwYXJlbnRfY24YBCABKAkSDwoHYWRkcmVzcxgFIAEoCRIOCgZzdGF0dXMYBiABKAkSGwoTYXR0ZXN0YXRpb25fc3VtbWFyeRgHIAEoCRIbChNhdHRlc3RhdGlvbl9ub2RlX2lkGAggASgJEhQKDGNzcl9rZXlfdHlwZRgJIAEoCRIWCg5jc3Jfc3ViamVjdF9jbhgKIAEoCRIUCgxyZXF1ZXN0ZWRfYXQYCyABKAkSGAoQcmVqZWN0aW9uX3JlYXNvbhgMIAEoCRIaChJhZG1pdHRlZF9ub2RlX25hbWUYDSABKAkSDAoEa2luZBgOIAEoCRIZChFwaW5uZWRfa2V5X3NoYTI1NhgPIAEoCSK1AQoXQ3JlYXRlRW5yb2xsbWVudFJlcXVlc3QSDAoEa2luZBgBIAEoCRIVCg1ub2RlX2VuZHBvaW50GAIgASgJEhYKDmFkbWluX2NlcnRfcGVtGAMgASgJEhUKDWFkbWluX2tleV9wZW0YBCABKAkSDgoGY2FfcGVtGAUgASgJEhIKCmNoaWxkX25vZGUYBiABKAkSEQoJcGFyZW50X2NuGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkiUwoYQ3JlYXRlRW5yb2xsbWVudFJlc3BvbnNlEjcKCmVucm9sbG1lbnQYASABKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0IiYKGEFwcHJvdmVFbnJvbGxtZW50UmVxdWVzdBIKCgJpZBgBIAEoCSJUChlBcHByb3ZlRW5yb2xsbWVudFJlc3BvbnNlEjcKCmVucm9sbG1lbnQYASABKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0IjUKF1JlamVjdEVucm9sbG1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJTChhSZWplY3RFbnJvbGxtZW50UmVzcG9uc2USNwoKZW5yb2xsbWVudBgBIAEoCzIjLmNyeXB0b3MuZmxlZXQudjEuRW5yb2xsbWVudFJlcXVlc3QiDwoNV2hvQW1JUmVxdWVzdCI9ChBPcGVyYXRvcklkZW50aXR5EgoKAmNuGAEgASgJEg4KBnNlcmlhbBgCIAEoCRINCgVsZXZlbBgDIAEoCSJGCg5XaG9BbUlSZXNwb25zZRI0CghvcGVyYXRvchgBIAEoCzIiLmNyeXB0b3MuZmxlZXQudjEuT3BlcmF0b3JJZGVudGl0eSpSCgZIZWFsdGgSFgoSSEVBTFRIX1VOU1BFQ0lGSUVEEAASDQoJSEVBTFRIX1VQEAESDwoLSEVBTFRIX0RPV04QAhIQCgxIRUFMVEhfRVJST1IQAzKsCAoMRmxlZXRTZXJ2aWNlElQKCUxpc3ROb2RlcxIiLmNyeXB0b3MuZmxlZXQudjEuTGlzdE5vZGVzUmVxdWVzdBojLmNyeXB0b3MuZmxlZXQudjEuTGlzdE5vZGVzUmVzcG9uc2USTgoHR2V0Tm9kZRIgLmNyeXB0b3MuZmxlZXQudjEuR2V0Tm9kZVJlcXVlc3QaIS5jcnlwdG9zLmZsZWV0LnYxLkdldE5vZGVSZXNwb25zZRJpChBMaXN0Q2VydGlmaWNhdGVzEikuY3J5cHRvcy5mbGVldC52MS5MaXN0Q2VydGlmaWNhdGVzUmVxdWVzdBoqLmNyeXB0b3MuZmxlZXQudjEuTGlzdENlcnRpZmljYXRlc1Jlc3BvbnNlEl0KDExpc3RQcm9maWxlcxIlLmNyeXB0b3MuZmxlZXQudjEuTGlzdFByb2ZpbGVzUmVxdWVzdBomLmNyeXB0b3MuZmxlZXQudjEuTGlzdFByb2ZpbGVzUmVzcG9uc2USXQoMTGlzdEFkYXB0ZXJzEiUuY3J5cHRvcy5mbGVldC52MS5MaXN0QWRhcHRlcnNSZXF1ZXN0GiYuY3J5cHRvcy5mbGVldC52MS5MaXN0QWRhcHRlcnNSZXNwb25zZRJUCglMaXN0QXVkaXQSIi5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBdWRpdFJlcXVlc3QaIy5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBdWRpdFJlc3BvbnNlEmYKD0xpc3RFbnJvbGxtZW50cxIoLmNyeXB0b3MuZmxlZXQudjEuTGlzdEVucm9sbG1lbnRzUmVxdWVzdBopLmNyeXB0b3MuZmxlZXQudjEuTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USaQoQQ3JlYXRlRW5yb2xsbWVudBIpLmNyeXB0b3MuZmxlZXQudjEuQ3JlYXRlRW5yb2xsbWVudFJlcXVlc3QaKi5jcnlwdG9zLmZsZWV0LnYxLkNyZWF0ZUVucm9sbG1lbnRSZXNwb25zZRJsChFBcHByb3ZlRW5yb2xsbWVudBIqLmNyeXB0b3MuZmxlZXQudjEuQXBwcm92ZUVucm9sbG1lbnRSZXF1ZXN0GisuY3J5cHRvcy5mbGVldC52MS5BcHByb3ZlRW5yb2xsbWVudFJlc3BvbnNlEmkKEFJlamVjdEVucm9sbG1lbnQSKS5jcnlwdG9zLmZsZWV0LnYxLlJlamVjdEVucm9sbG1lbnRSZXF1ZXN0GiouY3J5cHRvcy5mbGVldC52MS5SZWplY3RFbnJvbGxtZW50UmVzcG9uc2USSwoGV2hvQW1JEh8uY3J5cHRvcy5mbGVldC52MS5XaG9BbUlSZXF1ZXN0GiAuY3J5cHRvcy5mbGVldC52MS5XaG9BbUlSZXNwb25zZUI4WjZnaXRodWIuY29tL0NyeXB0T1MtUEtJL2FwaS9nby9jcnlwdG9zL2ZsZWV0L3YxO2ZsZWV0djFiBnByb3RvMw"); /** * @generated from message cryptos.fleet.v1.ListNodesRequest @@ -667,6 +667,20 @@ export type EnrollmentRequest = Message<"cryptos.fleet.v1.EnrollmentRequest"> & * @generated from field: string admitted_node_name = 13; */ admittedNodeName: string; + + /** + * LINK|SUBORDINATE + * + * @generated from field: string kind = 14; + */ + kind: string; + + /** + * SPKI SHA-256 (hex) of the node identity pinned at first enroll (TOFU). + * + * @generated from field: string pinned_key_sha256 = 15; + */ + pinnedKeySha256: string; }; /** @@ -676,6 +690,154 @@ export type EnrollmentRequest = Message<"cryptos.fleet.v1.EnrollmentRequest"> & export const EnrollmentRequestSchema: GenMessage = /*@__PURE__*/ messageDesc(file_cryptos_fleet_v1_fleet, 21); +/** + * @generated from message cryptos.fleet.v1.CreateEnrollmentRequest + */ +export type CreateEnrollmentRequest = Message<"cryptos.fleet.v1.CreateEnrollmentRequest"> & { + /** + * LINK|SUBORDINATE + * + * @generated from field: string kind = 1; + */ + kind: string; + + /** + * LINK: how to reach + initially trust the node. + * + * @generated from field: string node_endpoint = 2; + */ + nodeEndpoint: string; + + /** + * @generated from field: string admin_cert_pem = 3; + */ + adminCertPem: string; + + /** + * @generated from field: string admin_key_pem = 4; + */ + adminKeyPem: string; + + /** + * @generated from field: string ca_pem = 5; + */ + caPem: string; + + /** + * SUBORDINATE: the child node, its parent CA, and the issuing profile. + * + * @generated from field: string child_node = 6; + */ + childNode: string; + + /** + * @generated from field: string parent_cn = 7; + */ + parentCn: string; + + /** + * @generated from field: string profile = 8; + */ + profile: string; +}; + +/** + * Describes the message cryptos.fleet.v1.CreateEnrollmentRequest. + * Use `create(CreateEnrollmentRequestSchema)` to create a new message. + */ +export const CreateEnrollmentRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 22); + +/** + * @generated from message cryptos.fleet.v1.CreateEnrollmentResponse + */ +export type CreateEnrollmentResponse = Message<"cryptos.fleet.v1.CreateEnrollmentResponse"> & { + /** + * @generated from field: cryptos.fleet.v1.EnrollmentRequest enrollment = 1; + */ + enrollment?: EnrollmentRequest | undefined; +}; + +/** + * Describes the message cryptos.fleet.v1.CreateEnrollmentResponse. + * Use `create(CreateEnrollmentResponseSchema)` to create a new message. + */ +export const CreateEnrollmentResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 23); + +/** + * @generated from message cryptos.fleet.v1.ApproveEnrollmentRequest + */ +export type ApproveEnrollmentRequest = Message<"cryptos.fleet.v1.ApproveEnrollmentRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; +}; + +/** + * Describes the message cryptos.fleet.v1.ApproveEnrollmentRequest. + * Use `create(ApproveEnrollmentRequestSchema)` to create a new message. + */ +export const ApproveEnrollmentRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 24); + +/** + * @generated from message cryptos.fleet.v1.ApproveEnrollmentResponse + */ +export type ApproveEnrollmentResponse = Message<"cryptos.fleet.v1.ApproveEnrollmentResponse"> & { + /** + * @generated from field: cryptos.fleet.v1.EnrollmentRequest enrollment = 1; + */ + enrollment?: EnrollmentRequest | undefined; +}; + +/** + * Describes the message cryptos.fleet.v1.ApproveEnrollmentResponse. + * Use `create(ApproveEnrollmentResponseSchema)` to create a new message. + */ +export const ApproveEnrollmentResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 25); + +/** + * @generated from message cryptos.fleet.v1.RejectEnrollmentRequest + */ +export type RejectEnrollmentRequest = Message<"cryptos.fleet.v1.RejectEnrollmentRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string reason = 2; + */ + reason: string; +}; + +/** + * Describes the message cryptos.fleet.v1.RejectEnrollmentRequest. + * Use `create(RejectEnrollmentRequestSchema)` to create a new message. + */ +export const RejectEnrollmentRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 26); + +/** + * @generated from message cryptos.fleet.v1.RejectEnrollmentResponse + */ +export type RejectEnrollmentResponse = Message<"cryptos.fleet.v1.RejectEnrollmentResponse"> & { + /** + * @generated from field: cryptos.fleet.v1.EnrollmentRequest enrollment = 1; + */ + enrollment?: EnrollmentRequest | undefined; +}; + +/** + * Describes the message cryptos.fleet.v1.RejectEnrollmentResponse. + * Use `create(RejectEnrollmentResponseSchema)` to create a new message. + */ +export const RejectEnrollmentResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 27); + /** * @generated from message cryptos.fleet.v1.WhoAmIRequest */ @@ -687,7 +849,7 @@ export type WhoAmIRequest = Message<"cryptos.fleet.v1.WhoAmIRequest"> & { * Use `create(WhoAmIRequestSchema)` to create a new message. */ export const WhoAmIRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_fleet_v1_fleet, 22); + messageDesc(file_cryptos_fleet_v1_fleet, 28); /** * OperatorIdentity is the operator the manager verified from the mTLS client @@ -719,7 +881,7 @@ export type OperatorIdentity = Message<"cryptos.fleet.v1.OperatorIdentity"> & { * Use `create(OperatorIdentitySchema)` to create a new message. */ export const OperatorIdentitySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_fleet_v1_fleet, 23); + messageDesc(file_cryptos_fleet_v1_fleet, 29); /** * @generated from message cryptos.fleet.v1.WhoAmIResponse @@ -736,7 +898,7 @@ export type WhoAmIResponse = Message<"cryptos.fleet.v1.WhoAmIResponse"> & { * Use `create(WhoAmIResponseSchema)` to create a new message. */ export const WhoAmIResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_fleet_v1_fleet, 24); + messageDesc(file_cryptos_fleet_v1_fleet, 30); /** * Health reports the manager's view of node reachability, independent of @@ -773,9 +935,10 @@ export const HealthSchema: GenEnum = /*@__PURE__*/ enumDesc(file_cryptos_fleet_v1_fleet, 0); /** - * FleetService is the Fleet Manager's read surface over a set of CryptOS - * nodes. It aggregates each node's status and identity behind a single - * Connect endpoint for the manager's web UI. + * FleetService is the Fleet Manager's surface over a set of CryptOS nodes: + * read aggregation (status, identity, certificates, catalog) plus the + * operator-driven enrollment writes. A single Connect endpoint for the + * manager's web UI. * * @generated from service cryptos.fleet.v1.FleetService */ @@ -854,6 +1017,38 @@ export const FleetService: GenService<{ input: typeof ListEnrollmentsRequestSchema; output: typeof ListEnrollmentsResponseSchema; }, + /** + * CreateEnrollment opens a new enrollment request (LINK a node or provision a + * SUBORDINATE CA); the manager verifies attestation for LINK. + * + * @generated from rpc cryptos.fleet.v1.FleetService.CreateEnrollment + */ + createEnrollment: { + methodKind: "unary"; + input: typeof CreateEnrollmentRequestSchema; + output: typeof CreateEnrollmentResponseSchema; + }, + /** + * ApproveEnrollment approves a pending request (LINK -> ApplyConfig managed + * state; SUBORDINATE -> CSR-ferry). + * + * @generated from rpc cryptos.fleet.v1.FleetService.ApproveEnrollment + */ + approveEnrollment: { + methodKind: "unary"; + input: typeof ApproveEnrollmentRequestSchema; + output: typeof ApproveEnrollmentResponseSchema; + }, + /** + * RejectEnrollment rejects a pending request with a reason. + * + * @generated from rpc cryptos.fleet.v1.FleetService.RejectEnrollment + */ + rejectEnrollment: { + methodKind: "unary"; + input: typeof RejectEnrollmentRequestSchema; + output: typeof RejectEnrollmentResponseSchema; + }, /** * WhoAmI echoes the operator identity the manager verified from the * presented client certificate (subject CN, cert serial, access level). diff --git a/gen/ts/cryptos/v1/config_pb.ts b/gen/ts/cryptos/v1/config_pb.ts index cb98340..af35c21 100644 --- a/gen/ts/cryptos/v1/config_pb.ts +++ b/gen/ts/cryptos/v1/config_pb.ts @@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file cryptos/v1/config.proto. */ export const file_cryptos_v1_config: GenFile = /*@__PURE__*/ - fileDesc("ChdjcnlwdG9zL3YxL2NvbmZpZy5wcm90bxIKY3J5cHRvcy52MSLdAgoNTWFjaGluZUNvbmZpZxITCgthcGlfdmVyc2lvbhgBIAEoCRIMCgRraW5kGAIgASgJEiYKCG1ldGFkYXRhGAMgASgLMhQuY3J5cHRvcy52MS5NZXRhZGF0YRIeCgRyb2xlGAQgASgLMhAuY3J5cHRvcy52MS5Sb2xlEiQKB25ldHdvcmsYBSABKAsyEy5jcnlwdG9zLnYxLk5ldHdvcmsSJAoHc3RvcmFnZRgGIAEoCzITLmNyeXB0b3MudjEuU3RvcmFnZRIoCglib290c3RyYXAYByABKAsyFS5jcnlwdG9zLnYxLkJvb3RzdHJhcBIcCgNwa2kYCCABKAsyDy5jcnlwdG9zLnYxLlBraRIkCgdpbnN0YWxsGAkgASgLMhMuY3J5cHRvcy52MS5JbnN0YWxsEicKCXN0YXRlX2tleRgKIAEoCzIULmNyeXB0b3MudjEuU3RhdGVLZXkiPgoIU3RhdGVLZXkSDAoEbW9kZRgBIAEoCRIkCgNrbXMYAiABKAsyFy5jcnlwdG9zLnYxLkttc1N0YXRlS2V5IjIKC0ttc1N0YXRlS2V5EhAKCGVuZHBvaW50GAEgASgJEhEKCXRydXN0X3BlbRgCIAEoCSIYCghNZXRhZGF0YRIMCgRuYW1lGAEgASgJIhQKBFJvbGUSDAoEa2luZBgBIAEoCSI+CgdOZXR3b3JrEhEKCWludGVyZmFjZRgBIAEoCRIPCgdhZGRyZXNzGAIgASgJEg8KB2dhdGV3YXkYAyABKAkiPAoHU3RvcmFnZRIdChVzdGF0ZV9wYXJ0aXRpb25fbGFiZWwYASABKAkSEgoKZmlyc3RfYm9vdBgCIAEoCCI+CglCb290c3RyYXASFgoOYWRtaW5fY2VydF9wZW0YASABKAkSGQoRYWRtaW5fY2VydF9zaGEyNTYYAiABKAki9QIKA1BraRIUCgxyb290X2tleV9hbGcYASABKAkSKQoMcm9vdF9zdWJqZWN0GAIgASgLMhMuY3J5cHRvcy52MS5TdWJqZWN0EhsKE3Jvb3RfdmFsaWRpdHlfeWVhcnMYAyABKA0SGwoTcGF0aF9sZW5fY29uc3RyYWludBgEIAEoDRIwCghwcm9maWxlcxgFIAMoCzIeLmNyeXB0b3MudjEuQ2VydGlmaWNhdGVQcm9maWxlEiIKBnBhcmVudBgGIAEoCzISLmNyeXB0b3MudjEuUGFyZW50EhsKE3Jldm9jYXRpb25fYmFzZV91cmwYByABKAkSJwofYWxsb3dfdW52ZXJpZmllZF9yZXZvY2F0aW9uX3VybBgIIAEoCBIdChVjcmxfbmV4dF91cGRhdGVfaG91cnMYCSABKA0SHAoUcmV2b2NhdGlvbl9odHRwX3BvcnQYCiABKA0SGgoScm9vdF9sZWFmX2lzc3VhbmNlGAsgASgJIjUKBlBhcmVudBITCgtjYV9jZXJ0X3BlbRgBIAEoCRIWCg5jYV9jZXJ0X3NoYTI1NhgCIAEoCSKzAgoSQ2VydGlmaWNhdGVQcm9maWxlEgwKBG5hbWUYASABKAkSDwoHa2V5X2FsZxgCIAEoCRIkCgdzdWJqZWN0GAMgASgLMhMuY3J5cHRvcy52MS5TdWJqZWN0EhUKDXZhbGlkaXR5X2RheXMYBCABKA0SNwoRYmFzaWNfY29uc3RyYWludHMYBSABKAsyHC5jcnlwdG9zLnYxLkJhc2ljQ29uc3RyYWludHMSEQoJa2V5X3VzYWdlGAYgAygJEhUKDWV4dF9rZXlfdXNhZ2UYByADKAkSKQoEc2FucxgIIAEoCzIbLmNyeXB0b3MudjEuU3ViamVjdEFsdE5hbWVzEjMKEGV4dHJhX2V4dGVuc2lvbnMYCSADKAsyGS5jcnlwdG9zLnYxLlg1MDlFeHRlbnNpb24iRQoQQmFzaWNDb25zdHJhaW50cxINCgVpc19jYRgBIAEoCBIVCghwYXRoX2xlbhgCIAEoDUgAiAEBQgsKCV9wYXRoX2xlbiJGCg9TdWJqZWN0QWx0TmFtZXMSCwoDZG5zGAEgAygJEgoKAmlwGAIgAygJEg0KBWVtYWlsGAMgAygJEgsKA3VyaRgEIAMoCSI9Cg1YNTA5RXh0ZW5zaW9uEgsKA29pZBgBIAEoCRIQCghjcml0aWNhbBgCIAEoCBINCgV2YWx1ZRgDIAEoDCIXCgdJbnN0YWxsEgwKBGRpc2sYASABKAkiRQoHU3ViamVjdBITCgtjb21tb25fbmFtZRgBIAEoCRIUCgxvcmdhbml6YXRpb24YAiABKAkSDwoHY291bnRyeRgDIAEoCUI0WjJnaXRodWIuY29tL0NyeXB0T1MtUEtJL2FwaS9nby9jcnlwdG9zL3YxO2NyeXB0b3N2MWIGcHJvdG8z"); + fileDesc("ChdjcnlwdG9zL3YxL2NvbmZpZy5wcm90bxIKY3J5cHRvcy52MSKJAwoNTWFjaGluZUNvbmZpZxITCgthcGlfdmVyc2lvbhgBIAEoCRIMCgRraW5kGAIgASgJEiYKCG1ldGFkYXRhGAMgASgLMhQuY3J5cHRvcy52MS5NZXRhZGF0YRIeCgRyb2xlGAQgASgLMhAuY3J5cHRvcy52MS5Sb2xlEiQKB25ldHdvcmsYBSABKAsyEy5jcnlwdG9zLnYxLk5ldHdvcmsSJAoHc3RvcmFnZRgGIAEoCzITLmNyeXB0b3MudjEuU3RvcmFnZRIoCglib290c3RyYXAYByABKAsyFS5jcnlwdG9zLnYxLkJvb3RzdHJhcBIcCgNwa2kYCCABKAsyDy5jcnlwdG9zLnYxLlBraRIkCgdpbnN0YWxsGAkgASgLMhMuY3J5cHRvcy52MS5JbnN0YWxsEicKCXN0YXRlX2tleRgKIAEoCzIULmNyeXB0b3MudjEuU3RhdGVLZXkSKgoKbWFuYWdlbWVudBgLIAEoCzIWLmNyeXB0b3MudjEuTWFuYWdlbWVudCJWCgpNYW5hZ2VtZW50EhIKCm1hbmFnZXJfY24YASABKAkSEQoJdHJ1c3RfcGVtGAIgASgJEiEKGW9wZXJhdG9yX3N1cmZhY2VfcmVhZG9ubHkYAyABKAgiPgoIU3RhdGVLZXkSDAoEbW9kZRgBIAEoCRIkCgNrbXMYAiABKAsyFy5jcnlwdG9zLnYxLkttc1N0YXRlS2V5IjIKC0ttc1N0YXRlS2V5EhAKCGVuZHBvaW50GAEgASgJEhEKCXRydXN0X3BlbRgCIAEoCSIYCghNZXRhZGF0YRIMCgRuYW1lGAEgASgJIhQKBFJvbGUSDAoEa2luZBgBIAEoCSI+CgdOZXR3b3JrEhEKCWludGVyZmFjZRgBIAEoCRIPCgdhZGRyZXNzGAIgASgJEg8KB2dhdGV3YXkYAyABKAkiPAoHU3RvcmFnZRIdChVzdGF0ZV9wYXJ0aXRpb25fbGFiZWwYASABKAkSEgoKZmlyc3RfYm9vdBgCIAEoCCI+CglCb290c3RyYXASFgoOYWRtaW5fY2VydF9wZW0YASABKAkSGQoRYWRtaW5fY2VydF9zaGEyNTYYAiABKAki9QIKA1BraRIUCgxyb290X2tleV9hbGcYASABKAkSKQoMcm9vdF9zdWJqZWN0GAIgASgLMhMuY3J5cHRvcy52MS5TdWJqZWN0EhsKE3Jvb3RfdmFsaWRpdHlfeWVhcnMYAyABKA0SGwoTcGF0aF9sZW5fY29uc3RyYWludBgEIAEoDRIwCghwcm9maWxlcxgFIAMoCzIeLmNyeXB0b3MudjEuQ2VydGlmaWNhdGVQcm9maWxlEiIKBnBhcmVudBgGIAEoCzISLmNyeXB0b3MudjEuUGFyZW50EhsKE3Jldm9jYXRpb25fYmFzZV91cmwYByABKAkSJwofYWxsb3dfdW52ZXJpZmllZF9yZXZvY2F0aW9uX3VybBgIIAEoCBIdChVjcmxfbmV4dF91cGRhdGVfaG91cnMYCSABKA0SHAoUcmV2b2NhdGlvbl9odHRwX3BvcnQYCiABKA0SGgoScm9vdF9sZWFmX2lzc3VhbmNlGAsgASgJIjUKBlBhcmVudBITCgtjYV9jZXJ0X3BlbRgBIAEoCRIWCg5jYV9jZXJ0X3NoYTI1NhgCIAEoCSKzAgoSQ2VydGlmaWNhdGVQcm9maWxlEgwKBG5hbWUYASABKAkSDwoHa2V5X2FsZxgCIAEoCRIkCgdzdWJqZWN0GAMgASgLMhMuY3J5cHRvcy52MS5TdWJqZWN0EhUKDXZhbGlkaXR5X2RheXMYBCABKA0SNwoRYmFzaWNfY29uc3RyYWludHMYBSABKAsyHC5jcnlwdG9zLnYxLkJhc2ljQ29uc3RyYWludHMSEQoJa2V5X3VzYWdlGAYgAygJEhUKDWV4dF9rZXlfdXNhZ2UYByADKAkSKQoEc2FucxgIIAEoCzIbLmNyeXB0b3MudjEuU3ViamVjdEFsdE5hbWVzEjMKEGV4dHJhX2V4dGVuc2lvbnMYCSADKAsyGS5jcnlwdG9zLnYxLlg1MDlFeHRlbnNpb24iRQoQQmFzaWNDb25zdHJhaW50cxINCgVpc19jYRgBIAEoCBIVCghwYXRoX2xlbhgCIAEoDUgAiAEBQgsKCV9wYXRoX2xlbiJGCg9TdWJqZWN0QWx0TmFtZXMSCwoDZG5zGAEgAygJEgoKAmlwGAIgAygJEg0KBWVtYWlsGAMgAygJEgsKA3VyaRgEIAMoCSI9Cg1YNTA5RXh0ZW5zaW9uEgsKA29pZBgBIAEoCRIQCghjcml0aWNhbBgCIAEoCBINCgV2YWx1ZRgDIAEoDCIXCgdJbnN0YWxsEgwKBGRpc2sYASABKAkiRQoHU3ViamVjdBITCgtjb21tb25fbmFtZRgBIAEoCRIUCgxvcmdhbml6YXRpb24YAiABKAkSDwoHY291bnRyeRgDIAEoCUI0WjJnaXRodWIuY29tL0NyeXB0T1MtUEtJL2FwaS9nby9jcnlwdG9zL3YxO2NyeXB0b3N2MWIGcHJvdG8z"); /** * MachineConfig is the declarative configuration applied via ApplyConfig. @@ -79,6 +79,14 @@ export type MachineConfig = Message<"cryptos.v1.MachineConfig"> & { * @generated from field: cryptos.v1.StateKey state_key = 10; */ stateKey?: StateKey | undefined; + + /** + * management carries FM-managed state pushed via ApplyConfig when a node is + * linked to a Fleet Manager (LINK enrollment). Empty on unmanaged nodes. + * + * @generated from field: cryptos.v1.Management management = 11; + */ + management?: Management | undefined; }; /** @@ -88,6 +96,42 @@ export type MachineConfig = Message<"cryptos.v1.MachineConfig"> & { export const MachineConfigSchema: GenMessage = /*@__PURE__*/ messageDesc(file_cryptos_v1_config, 0); +/** + * Management marks a node as Fleet-Manager-managed. Set by a LINK enrollment + * approval via ApplyConfig; takes effect on reboot. + * + * @generated from message cryptos.v1.Management + */ +export type Management = Message<"cryptos.v1.Management"> & { + /** + * Subject CN of the managing Fleet Manager operator identity. + * + * @generated from field: string manager_cn = 1; + */ + managerCn: string; + + /** + * PEM trust anchor (operator CA) the node adds to its authorized client CAs. + * + * @generated from field: string trust_pem = 2; + */ + trustPem: string; + + /** + * When true, the node's embedded operator surface is read-only. + * + * @generated from field: bool operator_surface_readonly = 3; + */ + operatorSurfaceReadonly: boolean; +}; + +/** + * Describes the message cryptos.v1.Management. + * Use `create(ManagementSchema)` to create a new message. + */ +export const ManagementSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_v1_config, 1); + /** * StateKey selects the protector for the encrypted state-partition key. * @@ -114,7 +158,7 @@ export type StateKey = Message<"cryptos.v1.StateKey"> & { * Use `create(StateKeySchema)` to create a new message. */ export const StateKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 1); + messageDesc(file_cryptos_v1_config, 2); /** * KmsStateKey configures the envelope-encryption KMS that seals/unseals the @@ -144,7 +188,7 @@ export type KmsStateKey = Message<"cryptos.v1.KmsStateKey"> & { * Use `create(KmsStateKeySchema)` to create a new message. */ export const KmsStateKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 2); + messageDesc(file_cryptos_v1_config, 3); /** * @generated from message cryptos.v1.Metadata @@ -161,7 +205,7 @@ export type Metadata = Message<"cryptos.v1.Metadata"> & { * Use `create(MetadataSchema)` to create a new message. */ export const MetadataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 3); + messageDesc(file_cryptos_v1_config, 4); /** * @generated from message cryptos.v1.Role @@ -180,7 +224,7 @@ export type Role = Message<"cryptos.v1.Role"> & { * Use `create(RoleSchema)` to create a new message. */ export const RoleSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 4); + messageDesc(file_cryptos_v1_config, 5); /** * @generated from message cryptos.v1.Network @@ -209,7 +253,7 @@ export type Network = Message<"cryptos.v1.Network"> & { * Use `create(NetworkSchema)` to create a new message. */ export const NetworkSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 5); + messageDesc(file_cryptos_v1_config, 6); /** * @generated from message cryptos.v1.Storage @@ -231,7 +275,7 @@ export type Storage = Message<"cryptos.v1.Storage"> & { * Use `create(StorageSchema)` to create a new message. */ export const StorageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 6); + messageDesc(file_cryptos_v1_config, 7); /** * Bootstrap carries the administrator credential trusted on first boot. @@ -256,7 +300,7 @@ export type Bootstrap = Message<"cryptos.v1.Bootstrap"> & { * Use `create(BootstrapSchema)` to create a new message. */ export const BootstrapSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 7); + messageDesc(file_cryptos_v1_config, 8); /** * @generated from message cryptos.v1.Pki @@ -350,7 +394,7 @@ export type Pki = Message<"cryptos.v1.Pki"> & { * Use `create(PkiSchema)` to create a new message. */ export const PkiSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 8); + messageDesc(file_cryptos_v1_config, 9); /** * Parent is the trust anchor a subordinate CA pins for its issuer: the parent @@ -376,7 +420,7 @@ export type Parent = Message<"cryptos.v1.Parent"> & { * Use `create(ParentSchema)` to create a new message. */ export const ParentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 9); + messageDesc(file_cryptos_v1_config, 10); /** * CertificateProfile drives CSR generation and certificate signing: key @@ -446,7 +490,7 @@ export type CertificateProfile = Message<"cryptos.v1.CertificateProfile"> & { * Use `create(CertificateProfileSchema)` to create a new message. */ export const CertificateProfileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 10); + messageDesc(file_cryptos_v1_config, 11); /** * @generated from message cryptos.v1.BasicConstraints @@ -471,7 +515,7 @@ export type BasicConstraints = Message<"cryptos.v1.BasicConstraints"> & { * Use `create(BasicConstraintsSchema)` to create a new message. */ export const BasicConstraintsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 11); + messageDesc(file_cryptos_v1_config, 12); /** * @generated from message cryptos.v1.SubjectAltNames @@ -503,7 +547,7 @@ export type SubjectAltNames = Message<"cryptos.v1.SubjectAltNames"> & { * Use `create(SubjectAltNamesSchema)` to create a new message. */ export const SubjectAltNamesSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 12); + messageDesc(file_cryptos_v1_config, 13); /** * X509Extension is the raw escape hatch: a dotted OID, criticality flag, and the @@ -533,7 +577,7 @@ export type X509Extension = Message<"cryptos.v1.X509Extension"> & { * Use `create(X509ExtensionSchema)` to create a new message. */ export const X509ExtensionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 13); + messageDesc(file_cryptos_v1_config, 14); /** * Install declares how the node provisions itself to persistent storage during @@ -556,7 +600,7 @@ export type Install = Message<"cryptos.v1.Install"> & { * Use `create(InstallSchema)` to create a new message. */ export const InstallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 14); + messageDesc(file_cryptos_v1_config, 15); /** * @generated from message cryptos.v1.Subject @@ -583,5 +627,5 @@ export type Subject = Message<"cryptos.v1.Subject"> & { * Use `create(SubjectSchema)` to create a new message. */ export const SubjectSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_config, 15); + messageDesc(file_cryptos_v1_config, 16); diff --git a/gen/ts/cryptos/v1/node_pb.ts b/gen/ts/cryptos/v1/node_pb.ts index 4e0f406..51b8ff1 100644 --- a/gen/ts/cryptos/v1/node_pb.ts +++ b/gen/ts/cryptos/v1/node_pb.ts @@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file cryptos/v1/node.proto. */ export const file_cryptos_v1_node: GenFile = /*@__PURE__*/ - fileDesc("ChVjcnlwdG9zL3YxL25vZGUucHJvdG8SCmNyeXB0b3MudjEiPwoSQXBwbHlDb25maWdSZXF1ZXN0EikKBmNvbmZpZxgBIAEoCzIZLmNyeXB0b3MudjEuTWFjaGluZUNvbmZpZyJZChNBcHBseUNvbmZpZ1Jlc3BvbnNlEhIKCmdlbmVyYXRpb24YASABKAQSFwoPcmVxdWlyZXNfcmVib290GAIgASgIEhUKDWNvbmZpZ19kaWdlc3QYAyABKAwiEgoQR2V0U3RhdHVzUmVxdWVzdCI7ChFHZXRTdGF0dXNSZXNwb25zZRImCgZzdGF0dXMYASABKAsyFi5jcnlwdG9zLnYxLk5vZGVTdGF0dXMiFAoSR2V0SWRlbnRpdHlSZXF1ZXN0Ij0KE0dldElkZW50aXR5UmVzcG9uc2USJgoIaWRlbnRpdHkYASABKAsyFC5jcnlwdG9zLnYxLklkZW50aXR5IlsKFFN0YXJ0Q2VyZW1vbnlSZXF1ZXN0EiYKBGtpbmQYASABKA4yGC5jcnlwdG9zLnYxLkNlcmVtb255S2luZBIbChNtYWNoaW5lX2NvbmZpZ195YW1sGAIgASgMIkEKFVN0YXJ0Q2VyZW1vbnlSZXNwb25zZRIoCgVldmVudBgBIAEoCzIZLmNyeXB0b3MudjEuQ2VyZW1vbnlFdmVudCIyCg5TaWduQ1NSUmVxdWVzdBIPCgdjc3JfZGVyGAEgASgMEg8KB3Byb2ZpbGUYAiABKAkiIwoPU2lnbkNTUlJlc3BvbnNlEhAKCGNlcnRfZGVyGAEgASgMIisKDFJlc2V0UmVxdWVzdBIbChNjb25maXJtX2NvbW1vbl9uYW1lGAEgASgJIg8KDVJlc2V0UmVzcG9uc2UiQgoZU2lnblN1Ym9yZGluYXRlQ1NSUmVxdWVzdBIPCgdjc3JfZGVyGAEgASgMEhQKDHByb2ZpbGVfbmFtZRgCIAEoCSJCChpTaWduU3Vib3JkaW5hdGVDU1JSZXNwb25zZRIRCgljaGFpbl9kZXIYASADKAwSEQoJY2hhaW5fcGVtGAIgASgJIjkKEElzc3VlTGVhZlJlcXVlc3QSDwoHY3NyX2RlchgBIAEoDBIUCgxwcm9maWxlX25hbWUYAiABKAkiJQoRSXNzdWVMZWFmUmVzcG9uc2USEAoIY2VydF9kZXIYASABKAwiGgoYR2V0U3Vib3JkaW5hdGVDU1JSZXF1ZXN0IiwKGUdldFN1Ym9yZGluYXRlQ1NSUmVzcG9uc2USDwoHY3NyX2RlchgBIAEoDCJLCiNTdWJtaXRTdWJvcmRpbmF0ZUNlcnRpZmljYXRlUmVxdWVzdBIRCgljaGFpbl9kZXIYASADKAwSEQoJY2hhaW5fcGVtGAIgASgJIk4KJFN1Ym1pdFN1Ym9yZGluYXRlQ2VydGlmaWNhdGVSZXNwb25zZRImCghpZGVudGl0eRgBIAEoCzIULmNyeXB0b3MudjEuSWRlbnRpdHkiKAoSRXhwb3J0Q0FLZXlSZXF1ZXN0EhIKCnBhc3NwaHJhc2UYASABKAwiJwoTRXhwb3J0Q0FLZXlSZXNwb25zZRIQCghlbnZlbG9wZRgBIAEoDCI6ChJJbXBvcnRDQUtleVJlcXVlc3QSEAoIZW52ZWxvcGUYASABKAwSEgoKcGFzc3BocmFzZRgCIAEoDCI9ChNJbXBvcnRDQUtleVJlc3BvbnNlEiYKCGlkZW50aXR5GAEgASgLMhQuY3J5cHRvcy52MS5JZGVudGl0eSIZChdCZWdpbktleVJvdGF0aW9uUmVxdWVzdCIrChhCZWdpbktleVJvdGF0aW9uUmVzcG9uc2USDwoHY3NyX2RlchgBIAEoDCJCChpDb21wbGV0ZUtleVJvdGF0aW9uUmVxdWVzdBIRCgljaGFpbl9kZXIYASADKAwSEQoJY2hhaW5fcGVtGAIgASgJIkUKG0NvbXBsZXRlS2V5Um90YXRpb25SZXNwb25zZRImCghpZGVudGl0eRgBIAEoCzIULmNyeXB0b3MudjEuSWRlbnRpdHki6QEKCklzc3VlZENlcnQSEgoKc2VyaWFsX2hleBgBIAEoCRISCgpzdWJqZWN0X2RuGAIgASgJEi4KCm5vdF9iZWZvcmUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCW5vdF9hZnRlchgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHc2tpX2hleBgFIAEoCRIUCgxwcm9maWxlX25hbWUYBiABKAkSLQoJaXNzdWVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJlCgpSZXZvY2F0aW9uEhIKCnNlcmlhbF9oZXgYASABKAkSLgoKcmV2b2tlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEwoLcmVhc29uX2NvZGUYAyABKAUiQwoYUmV2b2tlQ2VydGlmaWNhdGVSZXF1ZXN0EhIKCnNlcmlhbF9oZXgYASABKAkSEwoLcmVhc29uX2NvZGUYAiABKAUiRwoZUmV2b2tlQ2VydGlmaWNhdGVSZXNwb25zZRIqCgpyZXZvY2F0aW9uGAEgASgLMhYuY3J5cHRvcy52MS5SZXZvY2F0aW9uIhMKEUxpc3RJc3N1ZWRSZXF1ZXN0IjwKEkxpc3RJc3N1ZWRSZXNwb25zZRImCgZpc3N1ZWQYASADKAsyFi5jcnlwdG9zLnYxLklzc3VlZENlcnQiGAoWTGlzdFJldm9jYXRpb25zUmVxdWVzdCJGChdMaXN0UmV2b2NhdGlvbnNSZXNwb25zZRIrCgtyZXZvY2F0aW9ucxgBIAMoCzIWLmNyeXB0b3MudjEuUmV2b2NhdGlvbjLYCwoLTm9kZVNlcnZpY2USTgoLQXBwbHlDb25maWcSHi5jcnlwdG9zLnYxLkFwcGx5Q29uZmlnUmVxdWVzdBofLmNyeXB0b3MudjEuQXBwbHlDb25maWdSZXNwb25zZRJICglHZXRTdGF0dXMSHC5jcnlwdG9zLnYxLkdldFN0YXR1c1JlcXVlc3QaHS5jcnlwdG9zLnYxLkdldFN0YXR1c1Jlc3BvbnNlEk4KC0dldElkZW50aXR5Eh4uY3J5cHRvcy52MS5HZXRJZGVudGl0eVJlcXVlc3QaHy5jcnlwdG9zLnYxLkdldElkZW50aXR5UmVzcG9uc2USVgoNU3RhcnRDZXJlbW9ueRIgLmNyeXB0b3MudjEuU3RhcnRDZXJlbW9ueVJlcXVlc3QaIS5jcnlwdG9zLnYxLlN0YXJ0Q2VyZW1vbnlSZXNwb25zZTABEkIKB1NpZ25DU1ISGi5jcnlwdG9zLnYxLlNpZ25DU1JSZXF1ZXN0GhsuY3J5cHRvcy52MS5TaWduQ1NSUmVzcG9uc2USYwoSU2lnblN1Ym9yZGluYXRlQ1NSEiUuY3J5cHRvcy52MS5TaWduU3Vib3JkaW5hdGVDU1JSZXF1ZXN0GiYuY3J5cHRvcy52MS5TaWduU3Vib3JkaW5hdGVDU1JSZXNwb25zZRJICglJc3N1ZUxlYWYSHC5jcnlwdG9zLnYxLklzc3VlTGVhZlJlcXVlc3QaHS5jcnlwdG9zLnYxLklzc3VlTGVhZlJlc3BvbnNlEmAKEUdldFN1Ym9yZGluYXRlQ1NSEiQuY3J5cHRvcy52MS5HZXRTdWJvcmRpbmF0ZUNTUlJlcXVlc3QaJS5jcnlwdG9zLnYxLkdldFN1Ym9yZGluYXRlQ1NSUmVzcG9uc2USgQEKHFN1Ym1pdFN1Ym9yZGluYXRlQ2VydGlmaWNhdGUSLy5jcnlwdG9zLnYxLlN1Ym1pdFN1Ym9yZGluYXRlQ2VydGlmaWNhdGVSZXF1ZXN0GjAuY3J5cHRvcy52MS5TdWJtaXRTdWJvcmRpbmF0ZUNlcnRpZmljYXRlUmVzcG9uc2USYAoRUmV2b2tlQ2VydGlmaWNhdGUSJC5jcnlwdG9zLnYxLlJldm9rZUNlcnRpZmljYXRlUmVxdWVzdBolLmNyeXB0b3MudjEuUmV2b2tlQ2VydGlmaWNhdGVSZXNwb25zZRJLCgpMaXN0SXNzdWVkEh0uY3J5cHRvcy52MS5MaXN0SXNzdWVkUmVxdWVzdBoeLmNyeXB0b3MudjEuTGlzdElzc3VlZFJlc3BvbnNlEloKD0xpc3RSZXZvY2F0aW9ucxIiLmNyeXB0b3MudjEuTGlzdFJldm9jYXRpb25zUmVxdWVzdBojLmNyeXB0b3MudjEuTGlzdFJldm9jYXRpb25zUmVzcG9uc2USTgoLRXhwb3J0Q0FLZXkSHi5jcnlwdG9zLnYxLkV4cG9ydENBS2V5UmVxdWVzdBofLmNyeXB0b3MudjEuRXhwb3J0Q0FLZXlSZXNwb25zZRJOCgtJbXBvcnRDQUtleRIeLmNyeXB0b3MudjEuSW1wb3J0Q0FLZXlSZXF1ZXN0Gh8uY3J5cHRvcy52MS5JbXBvcnRDQUtleVJlc3BvbnNlEl0KEEJlZ2luS2V5Um90YXRpb24SIy5jcnlwdG9zLnYxLkJlZ2luS2V5Um90YXRpb25SZXF1ZXN0GiQuY3J5cHRvcy52MS5CZWdpbktleVJvdGF0aW9uUmVzcG9uc2USZgoTQ29tcGxldGVLZXlSb3RhdGlvbhImLmNyeXB0b3MudjEuQ29tcGxldGVLZXlSb3RhdGlvblJlcXVlc3QaJy5jcnlwdG9zLnYxLkNvbXBsZXRlS2V5Um90YXRpb25SZXNwb25zZRI8CgVSZXNldBIYLmNyeXB0b3MudjEuUmVzZXRSZXF1ZXN0GhkuY3J5cHRvcy52MS5SZXNldFJlc3BvbnNlQjRaMmdpdGh1Yi5jb20vQ3J5cHRPUy1QS0kvYXBpL2dvL2NyeXB0b3MvdjE7Y3J5cHRvc3YxYgZwcm90bzM", [file_cryptos_v1_ceremony, file_cryptos_v1_config, file_cryptos_v1_identity, file_cryptos_v1_status, file_google_protobuf_timestamp]); + fileDesc("ChVjcnlwdG9zL3YxL25vZGUucHJvdG8SCmNyeXB0b3MudjEiPwoSQXBwbHlDb25maWdSZXF1ZXN0EikKBmNvbmZpZxgBIAEoCzIZLmNyeXB0b3MudjEuTWFjaGluZUNvbmZpZyJZChNBcHBseUNvbmZpZ1Jlc3BvbnNlEhIKCmdlbmVyYXRpb24YASABKAQSFwoPcmVxdWlyZXNfcmVib290GAIgASgIEhUKDWNvbmZpZ19kaWdlc3QYAyABKAwiEgoQR2V0U3RhdHVzUmVxdWVzdCI7ChFHZXRTdGF0dXNSZXNwb25zZRImCgZzdGF0dXMYASABKAsyFi5jcnlwdG9zLnYxLk5vZGVTdGF0dXMiFAoSR2V0SWRlbnRpdHlSZXF1ZXN0Ij0KE0dldElkZW50aXR5UmVzcG9uc2USJgoIaWRlbnRpdHkYASABKAsyFC5jcnlwdG9zLnYxLklkZW50aXR5IlsKFFN0YXJ0Q2VyZW1vbnlSZXF1ZXN0EiYKBGtpbmQYASABKA4yGC5jcnlwdG9zLnYxLkNlcmVtb255S2luZBIbChNtYWNoaW5lX2NvbmZpZ195YW1sGAIgASgMIkEKFVN0YXJ0Q2VyZW1vbnlSZXNwb25zZRIoCgVldmVudBgBIAEoCzIZLmNyeXB0b3MudjEuQ2VyZW1vbnlFdmVudCIyCg5TaWduQ1NSUmVxdWVzdBIPCgdjc3JfZGVyGAEgASgMEg8KB3Byb2ZpbGUYAiABKAkiIwoPU2lnbkNTUlJlc3BvbnNlEhAKCGNlcnRfZGVyGAEgASgMIisKDFJlc2V0UmVxdWVzdBIbChNjb25maXJtX2NvbW1vbl9uYW1lGAEgASgJIg8KDVJlc2V0UmVzcG9uc2UiHgoNQXR0ZXN0UmVxdWVzdBINCgVub25jZRgBIAEoDCJeCg5BdHRlc3RSZXNwb25zZRIRCglzaWduYXR1cmUYASABKAwSGAoQaWRlbnRpdHlfcHViX2RlchgCIAEoDBIOCgZla19wdWIYAyABKAwSDwoHZWtfY2VydBgEIAEoDCJCChlTaWduU3Vib3JkaW5hdGVDU1JSZXF1ZXN0Eg8KB2Nzcl9kZXIYASABKAwSFAoMcHJvZmlsZV9uYW1lGAIgASgJIkIKGlNpZ25TdWJvcmRpbmF0ZUNTUlJlc3BvbnNlEhEKCWNoYWluX2RlchgBIAMoDBIRCgljaGFpbl9wZW0YAiABKAkiOQoQSXNzdWVMZWFmUmVxdWVzdBIPCgdjc3JfZGVyGAEgASgMEhQKDHByb2ZpbGVfbmFtZRgCIAEoCSIlChFJc3N1ZUxlYWZSZXNwb25zZRIQCghjZXJ0X2RlchgBIAEoDCIaChhHZXRTdWJvcmRpbmF0ZUNTUlJlcXVlc3QiLAoZR2V0U3Vib3JkaW5hdGVDU1JSZXNwb25zZRIPCgdjc3JfZGVyGAEgASgMIksKI1N1Ym1pdFN1Ym9yZGluYXRlQ2VydGlmaWNhdGVSZXF1ZXN0EhEKCWNoYWluX2RlchgBIAMoDBIRCgljaGFpbl9wZW0YAiABKAkiTgokU3VibWl0U3Vib3JkaW5hdGVDZXJ0aWZpY2F0ZVJlc3BvbnNlEiYKCGlkZW50aXR5GAEgASgLMhQuY3J5cHRvcy52MS5JZGVudGl0eSIoChJFeHBvcnRDQUtleVJlcXVlc3QSEgoKcGFzc3BocmFzZRgBIAEoDCInChNFeHBvcnRDQUtleVJlc3BvbnNlEhAKCGVudmVsb3BlGAEgASgMIjoKEkltcG9ydENBS2V5UmVxdWVzdBIQCghlbnZlbG9wZRgBIAEoDBISCgpwYXNzcGhyYXNlGAIgASgMIj0KE0ltcG9ydENBS2V5UmVzcG9uc2USJgoIaWRlbnRpdHkYASABKAsyFC5jcnlwdG9zLnYxLklkZW50aXR5IhkKF0JlZ2luS2V5Um90YXRpb25SZXF1ZXN0IisKGEJlZ2luS2V5Um90YXRpb25SZXNwb25zZRIPCgdjc3JfZGVyGAEgASgMIkIKGkNvbXBsZXRlS2V5Um90YXRpb25SZXF1ZXN0EhEKCWNoYWluX2RlchgBIAMoDBIRCgljaGFpbl9wZW0YAiABKAkiRQobQ29tcGxldGVLZXlSb3RhdGlvblJlc3BvbnNlEiYKCGlkZW50aXR5GAEgASgLMhQuY3J5cHRvcy52MS5JZGVudGl0eSLpAQoKSXNzdWVkQ2VydBISCgpzZXJpYWxfaGV4GAEgASgJEhIKCnN1YmplY3RfZG4YAiABKAkSLgoKbm90X2JlZm9yZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJbm90X2FmdGVyGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIPCgdza2lfaGV4GAUgASgJEhQKDHByb2ZpbGVfbmFtZRgGIAEoCRItCglpc3N1ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wImUKClJldm9jYXRpb24SEgoKc2VyaWFsX2hleBgBIAEoCRIuCgpyZXZva2VkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgtyZWFzb25fY29kZRgDIAEoBSJDChhSZXZva2VDZXJ0aWZpY2F0ZVJlcXVlc3QSEgoKc2VyaWFsX2hleBgBIAEoCRITCgtyZWFzb25fY29kZRgCIAEoBSJHChlSZXZva2VDZXJ0aWZpY2F0ZVJlc3BvbnNlEioKCnJldm9jYXRpb24YASABKAsyFi5jcnlwdG9zLnYxLlJldm9jYXRpb24iEwoRTGlzdElzc3VlZFJlcXVlc3QiPAoSTGlzdElzc3VlZFJlc3BvbnNlEiYKBmlzc3VlZBgBIAMoCzIWLmNyeXB0b3MudjEuSXNzdWVkQ2VydCIYChZMaXN0UmV2b2NhdGlvbnNSZXF1ZXN0IkYKF0xpc3RSZXZvY2F0aW9uc1Jlc3BvbnNlEisKC3Jldm9jYXRpb25zGAEgAygLMhYuY3J5cHRvcy52MS5SZXZvY2F0aW9uMpkMCgtOb2RlU2VydmljZRJOCgtBcHBseUNvbmZpZxIeLmNyeXB0b3MudjEuQXBwbHlDb25maWdSZXF1ZXN0Gh8uY3J5cHRvcy52MS5BcHBseUNvbmZpZ1Jlc3BvbnNlEkgKCUdldFN0YXR1cxIcLmNyeXB0b3MudjEuR2V0U3RhdHVzUmVxdWVzdBodLmNyeXB0b3MudjEuR2V0U3RhdHVzUmVzcG9uc2USTgoLR2V0SWRlbnRpdHkSHi5jcnlwdG9zLnYxLkdldElkZW50aXR5UmVxdWVzdBofLmNyeXB0b3MudjEuR2V0SWRlbnRpdHlSZXNwb25zZRJWCg1TdGFydENlcmVtb255EiAuY3J5cHRvcy52MS5TdGFydENlcmVtb255UmVxdWVzdBohLmNyeXB0b3MudjEuU3RhcnRDZXJlbW9ueVJlc3BvbnNlMAESQgoHU2lnbkNTUhIaLmNyeXB0b3MudjEuU2lnbkNTUlJlcXVlc3QaGy5jcnlwdG9zLnYxLlNpZ25DU1JSZXNwb25zZRJjChJTaWduU3Vib3JkaW5hdGVDU1ISJS5jcnlwdG9zLnYxLlNpZ25TdWJvcmRpbmF0ZUNTUlJlcXVlc3QaJi5jcnlwdG9zLnYxLlNpZ25TdWJvcmRpbmF0ZUNTUlJlc3BvbnNlEkgKCUlzc3VlTGVhZhIcLmNyeXB0b3MudjEuSXNzdWVMZWFmUmVxdWVzdBodLmNyeXB0b3MudjEuSXNzdWVMZWFmUmVzcG9uc2USYAoRR2V0U3Vib3JkaW5hdGVDU1ISJC5jcnlwdG9zLnYxLkdldFN1Ym9yZGluYXRlQ1NSUmVxdWVzdBolLmNyeXB0b3MudjEuR2V0U3Vib3JkaW5hdGVDU1JSZXNwb25zZRKBAQocU3VibWl0U3Vib3JkaW5hdGVDZXJ0aWZpY2F0ZRIvLmNyeXB0b3MudjEuU3VibWl0U3Vib3JkaW5hdGVDZXJ0aWZpY2F0ZVJlcXVlc3QaMC5jcnlwdG9zLnYxLlN1Ym1pdFN1Ym9yZGluYXRlQ2VydGlmaWNhdGVSZXNwb25zZRJgChFSZXZva2VDZXJ0aWZpY2F0ZRIkLmNyeXB0b3MudjEuUmV2b2tlQ2VydGlmaWNhdGVSZXF1ZXN0GiUuY3J5cHRvcy52MS5SZXZva2VDZXJ0aWZpY2F0ZVJlc3BvbnNlEksKCkxpc3RJc3N1ZWQSHS5jcnlwdG9zLnYxLkxpc3RJc3N1ZWRSZXF1ZXN0Gh4uY3J5cHRvcy52MS5MaXN0SXNzdWVkUmVzcG9uc2USWgoPTGlzdFJldm9jYXRpb25zEiIuY3J5cHRvcy52MS5MaXN0UmV2b2NhdGlvbnNSZXF1ZXN0GiMuY3J5cHRvcy52MS5MaXN0UmV2b2NhdGlvbnNSZXNwb25zZRJOCgtFeHBvcnRDQUtleRIeLmNyeXB0b3MudjEuRXhwb3J0Q0FLZXlSZXF1ZXN0Gh8uY3J5cHRvcy52MS5FeHBvcnRDQUtleVJlc3BvbnNlEk4KC0ltcG9ydENBS2V5Eh4uY3J5cHRvcy52MS5JbXBvcnRDQUtleVJlcXVlc3QaHy5jcnlwdG9zLnYxLkltcG9ydENBS2V5UmVzcG9uc2USXQoQQmVnaW5LZXlSb3RhdGlvbhIjLmNyeXB0b3MudjEuQmVnaW5LZXlSb3RhdGlvblJlcXVlc3QaJC5jcnlwdG9zLnYxLkJlZ2luS2V5Um90YXRpb25SZXNwb25zZRJmChNDb21wbGV0ZUtleVJvdGF0aW9uEiYuY3J5cHRvcy52MS5Db21wbGV0ZUtleVJvdGF0aW9uUmVxdWVzdBonLmNyeXB0b3MudjEuQ29tcGxldGVLZXlSb3RhdGlvblJlc3BvbnNlEjwKBVJlc2V0EhguY3J5cHRvcy52MS5SZXNldFJlcXVlc3QaGS5jcnlwdG9zLnYxLlJlc2V0UmVzcG9uc2USPwoGQXR0ZXN0EhkuY3J5cHRvcy52MS5BdHRlc3RSZXF1ZXN0GhouY3J5cHRvcy52MS5BdHRlc3RSZXNwb25zZUI0WjJnaXRodWIuY29tL0NyeXB0T1MtUEtJL2FwaS9nby9jcnlwdG9zL3YxO2NyeXB0b3N2MWIGcHJvdG8z", [file_cryptos_v1_ceremony, file_cryptos_v1_config, file_cryptos_v1_identity, file_cryptos_v1_status, file_google_protobuf_timestamp]); /** * @generated from message cryptos.v1.ApplyConfigRequest @@ -252,6 +252,63 @@ export type ResetResponse = Message<"cryptos.v1.ResetResponse"> & { export const ResetResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_cryptos_v1_node, 11); +/** + * @generated from message cryptos.v1.AttestRequest + */ +export type AttestRequest = Message<"cryptos.v1.AttestRequest"> & { + /** + * Random challenge from the manager; the node signs it with its identity key. + * + * @generated from field: bytes nonce = 1; + */ + nonce: Uint8Array; +}; + +/** + * Describes the message cryptos.v1.AttestRequest. + * Use `create(AttestRequestSchema)` to create a new message. + */ +export const AttestRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_v1_node, 12); + +/** + * @generated from message cryptos.v1.AttestResponse + */ +export type AttestResponse = Message<"cryptos.v1.AttestResponse"> & { + /** + * ECDSA signature (ASN.1 DER) over SHA-384 of the nonce. + * + * @generated from field: bytes signature = 1; + */ + signature: Uint8Array; + + /** + * The node's CA identity public key, PKIX/DER encoded. + * + * @generated from field: bytes identity_pub_der = 2; + */ + identityPubDer: Uint8Array; + + /** + * Reserved for v1.1 TPM EK attestation (not populated in v1.0.0). + * + * @generated from field: bytes ek_pub = 3; + */ + ekPub: Uint8Array; + + /** + * @generated from field: bytes ek_cert = 4; + */ + ekCert: Uint8Array; +}; + +/** + * Describes the message cryptos.v1.AttestResponse. + * Use `create(AttestResponseSchema)` to create a new message. + */ +export const AttestResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_v1_node, 13); + /** * SignSubordinateCSRRequest carries a DER PKCS#10 CSR and the name of the * certificate profile the signer stamps (which sets CA:TRUE + pathLen). @@ -275,7 +332,7 @@ export type SignSubordinateCSRRequest = Message<"cryptos.v1.SignSubordinateCSRRe * Use `create(SignSubordinateCSRRequestSchema)` to create a new message. */ export const SignSubordinateCSRRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 12); + messageDesc(file_cryptos_v1_node, 14); /** * SignSubordinateCSRResponse returns the signed child CA certificate and the @@ -300,7 +357,7 @@ export type SignSubordinateCSRResponse = Message<"cryptos.v1.SignSubordinateCSRR * Use `create(SignSubordinateCSRResponseSchema)` to create a new message. */ export const SignSubordinateCSRResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 13); + messageDesc(file_cryptos_v1_node, 15); /** * IssueLeafRequest carries a DER PKCS#10 CSR and the leaf profile name. @@ -324,7 +381,7 @@ export type IssueLeafRequest = Message<"cryptos.v1.IssueLeafRequest"> & { * Use `create(IssueLeafRequestSchema)` to create a new message. */ export const IssueLeafRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 14); + messageDesc(file_cryptos_v1_node, 16); /** * @generated from message cryptos.v1.IssueLeafResponse @@ -341,7 +398,7 @@ export type IssueLeafResponse = Message<"cryptos.v1.IssueLeafResponse"> & { * Use `create(IssueLeafResponseSchema)` to create a new message. */ export const IssueLeafResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 15); + messageDesc(file_cryptos_v1_node, 17); /** * @generated from message cryptos.v1.GetSubordinateCSRRequest @@ -354,7 +411,7 @@ export type GetSubordinateCSRRequest = Message<"cryptos.v1.GetSubordinateCSRRequ * Use `create(GetSubordinateCSRRequestSchema)` to create a new message. */ export const GetSubordinateCSRRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 16); + messageDesc(file_cryptos_v1_node, 18); /** * @generated from message cryptos.v1.GetSubordinateCSRResponse @@ -371,7 +428,7 @@ export type GetSubordinateCSRResponse = Message<"cryptos.v1.GetSubordinateCSRRes * Use `create(GetSubordinateCSRResponseSchema)` to create a new message. */ export const GetSubordinateCSRResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 17); + messageDesc(file_cryptos_v1_node, 19); /** * SubmitSubordinateCertificateRequest carries the parent-signed chain, @@ -396,7 +453,7 @@ export type SubmitSubordinateCertificateRequest = Message<"cryptos.v1.SubmitSubo * Use `create(SubmitSubordinateCertificateRequestSchema)` to create a new message. */ export const SubmitSubordinateCertificateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 18); + messageDesc(file_cryptos_v1_node, 20); /** * @generated from message cryptos.v1.SubmitSubordinateCertificateResponse @@ -413,7 +470,7 @@ export type SubmitSubordinateCertificateResponse = Message<"cryptos.v1.SubmitSub * Use `create(SubmitSubordinateCertificateResponseSchema)` to create a new message. */ export const SubmitSubordinateCertificateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 19); + messageDesc(file_cryptos_v1_node, 21); /** * ExportCAKeyRequest carries the operator passphrase the node seals the backup @@ -433,7 +490,7 @@ export type ExportCAKeyRequest = Message<"cryptos.v1.ExportCAKeyRequest"> & { * Use `create(ExportCAKeyRequestSchema)` to create a new message. */ export const ExportCAKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 20); + messageDesc(file_cryptos_v1_node, 22); /** * ExportCAKeyResponse returns the encrypted backup envelope (KDF + AEAD over the @@ -453,7 +510,7 @@ export type ExportCAKeyResponse = Message<"cryptos.v1.ExportCAKeyResponse"> & { * Use `create(ExportCAKeyResponseSchema)` to create a new message. */ export const ExportCAKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 21); + messageDesc(file_cryptos_v1_node, 23); /** * ImportCAKeyRequest carries an encrypted backup envelope and the passphrase to @@ -478,7 +535,7 @@ export type ImportCAKeyRequest = Message<"cryptos.v1.ImportCAKeyRequest"> & { * Use `create(ImportCAKeyRequestSchema)` to create a new message. */ export const ImportCAKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 22); + messageDesc(file_cryptos_v1_node, 24); /** * @generated from message cryptos.v1.ImportCAKeyResponse @@ -495,7 +552,7 @@ export type ImportCAKeyResponse = Message<"cryptos.v1.ImportCAKeyResponse"> & { * Use `create(ImportCAKeyResponseSchema)` to create a new message. */ export const ImportCAKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 23); + messageDesc(file_cryptos_v1_node, 25); /** * @generated from message cryptos.v1.BeginKeyRotationRequest @@ -508,7 +565,7 @@ export type BeginKeyRotationRequest = Message<"cryptos.v1.BeginKeyRotationReques * Use `create(BeginKeyRotationRequestSchema)` to create a new message. */ export const BeginKeyRotationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 24); + messageDesc(file_cryptos_v1_node, 26); /** * BeginKeyRotationResponse returns the DER CSR for the newly generated key, to @@ -528,7 +585,7 @@ export type BeginKeyRotationResponse = Message<"cryptos.v1.BeginKeyRotationRespo * Use `create(BeginKeyRotationResponseSchema)` to create a new message. */ export const BeginKeyRotationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 25); + messageDesc(file_cryptos_v1_node, 27); /** * CompleteKeyRotationRequest carries the parent-signed chain for the new key, @@ -553,7 +610,7 @@ export type CompleteKeyRotationRequest = Message<"cryptos.v1.CompleteKeyRotation * Use `create(CompleteKeyRotationRequestSchema)` to create a new message. */ export const CompleteKeyRotationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 26); + messageDesc(file_cryptos_v1_node, 28); /** * @generated from message cryptos.v1.CompleteKeyRotationResponse @@ -570,7 +627,7 @@ export type CompleteKeyRotationResponse = Message<"cryptos.v1.CompleteKeyRotatio * Use `create(CompleteKeyRotationResponseSchema)` to create a new message. */ export const CompleteKeyRotationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 27); + messageDesc(file_cryptos_v1_node, 29); /** * IssuedCert is one entry in a node's issued-certificate inventory. @@ -623,7 +680,7 @@ export type IssuedCert = Message<"cryptos.v1.IssuedCert"> & { * Use `create(IssuedCertSchema)` to create a new message. */ export const IssuedCertSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 28); + messageDesc(file_cryptos_v1_node, 30); /** * Revocation records a revoked certificate. @@ -654,7 +711,7 @@ export type Revocation = Message<"cryptos.v1.Revocation"> & { * Use `create(RevocationSchema)` to create a new message. */ export const RevocationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 29); + messageDesc(file_cryptos_v1_node, 31); /** * RevokeCertificateRequest identifies the certificate to revoke by hex serial @@ -679,7 +736,7 @@ export type RevokeCertificateRequest = Message<"cryptos.v1.RevokeCertificateRequ * Use `create(RevokeCertificateRequestSchema)` to create a new message. */ export const RevokeCertificateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 30); + messageDesc(file_cryptos_v1_node, 32); /** * @generated from message cryptos.v1.RevokeCertificateResponse @@ -696,7 +753,7 @@ export type RevokeCertificateResponse = Message<"cryptos.v1.RevokeCertificateRes * Use `create(RevokeCertificateResponseSchema)` to create a new message. */ export const RevokeCertificateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 31); + messageDesc(file_cryptos_v1_node, 33); /** * @generated from message cryptos.v1.ListIssuedRequest @@ -709,7 +766,7 @@ export type ListIssuedRequest = Message<"cryptos.v1.ListIssuedRequest"> & { * Use `create(ListIssuedRequestSchema)` to create a new message. */ export const ListIssuedRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 32); + messageDesc(file_cryptos_v1_node, 34); /** * @generated from message cryptos.v1.ListIssuedResponse @@ -726,7 +783,7 @@ export type ListIssuedResponse = Message<"cryptos.v1.ListIssuedResponse"> & { * Use `create(ListIssuedResponseSchema)` to create a new message. */ export const ListIssuedResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 33); + messageDesc(file_cryptos_v1_node, 35); /** * @generated from message cryptos.v1.ListRevocationsRequest @@ -739,7 +796,7 @@ export type ListRevocationsRequest = Message<"cryptos.v1.ListRevocationsRequest" * Use `create(ListRevocationsRequestSchema)` to create a new message. */ export const ListRevocationsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 34); + messageDesc(file_cryptos_v1_node, 36); /** * @generated from message cryptos.v1.ListRevocationsResponse @@ -756,7 +813,7 @@ export type ListRevocationsResponse = Message<"cryptos.v1.ListRevocationsRespons * Use `create(ListRevocationsResponseSchema)` to create a new message. */ export const ListRevocationsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_cryptos_v1_node, 35); + messageDesc(file_cryptos_v1_node, 37); /** * NodeService is the Phase 1 management surface for a single CryptOS node. @@ -978,6 +1035,18 @@ export const NodeService: GenService<{ input: typeof ResetRequestSchema; output: typeof ResetResponseSchema; }, + /** + * Attest signs the caller's nonce with the node's CA identity key so the + * Fleet Manager can verify possession of the node identity (challenge- + * response). ek_pub/ek_cert are reserved for future TPM EK attestation. + * + * @generated from rpc cryptos.v1.NodeService.Attest + */ + attest: { + methodKind: "unary"; + input: typeof AttestRequestSchema; + output: typeof AttestResponseSchema; + }, }> = /*@__PURE__*/ serviceDesc(file_cryptos_v1_node, 0); diff --git a/go/cryptos/fleet/v1/fleet.pb.go b/go/cryptos/fleet/v1/fleet.pb.go index 2ecae83..7f7db12 100644 --- a/go/cryptos/fleet/v1/fleet.pb.go +++ b/go/cryptos/fleet/v1/fleet.pb.go @@ -1383,6 +1383,10 @@ type EnrollmentRequest struct { RequestedAt string `protobuf:"bytes,11,opt,name=requested_at,json=requestedAt,proto3" json:"requested_at,omitempty"` RejectionReason string `protobuf:"bytes,12,opt,name=rejection_reason,json=rejectionReason,proto3" json:"rejection_reason,omitempty"` AdmittedNodeName string `protobuf:"bytes,13,opt,name=admitted_node_name,json=admittedNodeName,proto3" json:"admitted_node_name,omitempty"` + // LINK|SUBORDINATE + Kind string `protobuf:"bytes,14,opt,name=kind,proto3" json:"kind,omitempty"` + // SPKI SHA-256 (hex) of the node identity pinned at first enroll (TOFU). + PinnedKeySha256 string `protobuf:"bytes,15,opt,name=pinned_key_sha256,json=pinnedKeySha256,proto3" json:"pinned_key_sha256,omitempty"` } func (x *EnrollmentRequest) Reset() { @@ -1508,6 +1512,369 @@ func (x *EnrollmentRequest) GetAdmittedNodeName() string { return "" } +func (x *EnrollmentRequest) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *EnrollmentRequest) GetPinnedKeySha256() string { + if x != nil { + return x.PinnedKeySha256 + } + return "" +} + +type CreateEnrollmentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // LINK|SUBORDINATE + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + // LINK: how to reach + initially trust the node. + NodeEndpoint string `protobuf:"bytes,2,opt,name=node_endpoint,json=nodeEndpoint,proto3" json:"node_endpoint,omitempty"` + AdminCertPem string `protobuf:"bytes,3,opt,name=admin_cert_pem,json=adminCertPem,proto3" json:"admin_cert_pem,omitempty"` + AdminKeyPem string `protobuf:"bytes,4,opt,name=admin_key_pem,json=adminKeyPem,proto3" json:"admin_key_pem,omitempty"` + CaPem string `protobuf:"bytes,5,opt,name=ca_pem,json=caPem,proto3" json:"ca_pem,omitempty"` + // SUBORDINATE: the child node, its parent CA, and the issuing profile. + ChildNode string `protobuf:"bytes,6,opt,name=child_node,json=childNode,proto3" json:"child_node,omitempty"` + ParentCn string `protobuf:"bytes,7,opt,name=parent_cn,json=parentCn,proto3" json:"parent_cn,omitempty"` + Profile string `protobuf:"bytes,8,opt,name=profile,proto3" json:"profile,omitempty"` +} + +func (x *CreateEnrollmentRequest) Reset() { + *x = CreateEnrollmentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateEnrollmentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateEnrollmentRequest) ProtoMessage() {} + +func (x *CreateEnrollmentRequest) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[22] + 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 CreateEnrollmentRequest.ProtoReflect.Descriptor instead. +func (*CreateEnrollmentRequest) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{22} +} + +func (x *CreateEnrollmentRequest) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *CreateEnrollmentRequest) GetNodeEndpoint() string { + if x != nil { + return x.NodeEndpoint + } + return "" +} + +func (x *CreateEnrollmentRequest) GetAdminCertPem() string { + if x != nil { + return x.AdminCertPem + } + return "" +} + +func (x *CreateEnrollmentRequest) GetAdminKeyPem() string { + if x != nil { + return x.AdminKeyPem + } + return "" +} + +func (x *CreateEnrollmentRequest) GetCaPem() string { + if x != nil { + return x.CaPem + } + return "" +} + +func (x *CreateEnrollmentRequest) GetChildNode() string { + if x != nil { + return x.ChildNode + } + return "" +} + +func (x *CreateEnrollmentRequest) GetParentCn() string { + if x != nil { + return x.ParentCn + } + return "" +} + +func (x *CreateEnrollmentRequest) GetProfile() string { + if x != nil { + return x.Profile + } + return "" +} + +type CreateEnrollmentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Enrollment *EnrollmentRequest `protobuf:"bytes,1,opt,name=enrollment,proto3" json:"enrollment,omitempty"` +} + +func (x *CreateEnrollmentResponse) Reset() { + *x = CreateEnrollmentResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateEnrollmentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateEnrollmentResponse) ProtoMessage() {} + +func (x *CreateEnrollmentResponse) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[23] + 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 CreateEnrollmentResponse.ProtoReflect.Descriptor instead. +func (*CreateEnrollmentResponse) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{23} +} + +func (x *CreateEnrollmentResponse) GetEnrollment() *EnrollmentRequest { + if x != nil { + return x.Enrollment + } + return nil +} + +type ApproveEnrollmentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *ApproveEnrollmentRequest) Reset() { + *x = ApproveEnrollmentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApproveEnrollmentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApproveEnrollmentRequest) ProtoMessage() {} + +func (x *ApproveEnrollmentRequest) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[24] + 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 ApproveEnrollmentRequest.ProtoReflect.Descriptor instead. +func (*ApproveEnrollmentRequest) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{24} +} + +func (x *ApproveEnrollmentRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type ApproveEnrollmentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Enrollment *EnrollmentRequest `protobuf:"bytes,1,opt,name=enrollment,proto3" json:"enrollment,omitempty"` +} + +func (x *ApproveEnrollmentResponse) Reset() { + *x = ApproveEnrollmentResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApproveEnrollmentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApproveEnrollmentResponse) ProtoMessage() {} + +func (x *ApproveEnrollmentResponse) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[25] + 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 ApproveEnrollmentResponse.ProtoReflect.Descriptor instead. +func (*ApproveEnrollmentResponse) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{25} +} + +func (x *ApproveEnrollmentResponse) GetEnrollment() *EnrollmentRequest { + if x != nil { + return x.Enrollment + } + return nil +} + +type RejectEnrollmentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` +} + +func (x *RejectEnrollmentRequest) Reset() { + *x = RejectEnrollmentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RejectEnrollmentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RejectEnrollmentRequest) ProtoMessage() {} + +func (x *RejectEnrollmentRequest) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_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 RejectEnrollmentRequest.ProtoReflect.Descriptor instead. +func (*RejectEnrollmentRequest) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{26} +} + +func (x *RejectEnrollmentRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RejectEnrollmentRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +type RejectEnrollmentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Enrollment *EnrollmentRequest `protobuf:"bytes,1,opt,name=enrollment,proto3" json:"enrollment,omitempty"` +} + +func (x *RejectEnrollmentResponse) Reset() { + *x = RejectEnrollmentResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RejectEnrollmentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RejectEnrollmentResponse) ProtoMessage() {} + +func (x *RejectEnrollmentResponse) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_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 RejectEnrollmentResponse.ProtoReflect.Descriptor instead. +func (*RejectEnrollmentResponse) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{27} +} + +func (x *RejectEnrollmentResponse) GetEnrollment() *EnrollmentRequest { + if x != nil { + return x.Enrollment + } + return nil +} + type WhoAmIRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1517,7 +1884,7 @@ type WhoAmIRequest struct { func (x *WhoAmIRequest) Reset() { *x = WhoAmIRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[22] + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1530,7 +1897,7 @@ func (x *WhoAmIRequest) String() string { func (*WhoAmIRequest) ProtoMessage() {} func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[22] + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1543,7 +1910,7 @@ func (x *WhoAmIRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIRequest.ProtoReflect.Descriptor instead. func (*WhoAmIRequest) Descriptor() ([]byte, []int) { - return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{22} + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{28} } // OperatorIdentity is the operator the manager verified from the mTLS client @@ -1562,7 +1929,7 @@ type OperatorIdentity struct { func (x *OperatorIdentity) Reset() { *x = OperatorIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[23] + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1575,7 +1942,7 @@ func (x *OperatorIdentity) String() string { func (*OperatorIdentity) ProtoMessage() {} func (x *OperatorIdentity) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[23] + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1588,7 +1955,7 @@ func (x *OperatorIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use OperatorIdentity.ProtoReflect.Descriptor instead. func (*OperatorIdentity) Descriptor() ([]byte, []int) { - return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{23} + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{29} } func (x *OperatorIdentity) GetCn() string { @@ -1623,7 +1990,7 @@ type WhoAmIResponse struct { func (x *WhoAmIResponse) Reset() { *x = WhoAmIResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[24] + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1636,7 +2003,7 @@ func (x *WhoAmIResponse) String() string { func (*WhoAmIResponse) ProtoMessage() {} func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[24] + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1649,7 +2016,7 @@ func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIResponse.ProtoReflect.Descriptor instead. func (*WhoAmIResponse) Descriptor() ([]byte, []int) { - return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{24} + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{30} } func (x *WhoAmIResponse) GetOperator() *OperatorIdentity { @@ -1803,7 +2170,7 @@ var file_cryptos_fleet_v1_fleet_proto_rawDesc = []byte{ 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xd0, 0x03, + 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x90, 0x04, 0x0a, 0x11, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, @@ -1833,74 +2200,140 @@ var file_cryptos_fleet_v1_fleet_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x64, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x64, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x0f, 0x0a, 0x0d, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x50, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x63, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x22, 0x50, 0x0a, 0x0e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2a, 0x52, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, - 0x16, 0x0a, 0x12, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x45, 0x41, 0x4c, 0x54, - 0x48, 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, - 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x45, 0x41, 0x4c, 0x54, - 0x48, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x32, 0xe8, 0x05, 0x0a, 0x0c, 0x46, 0x6c, - 0x65, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x4c, 0x69, - 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x69, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, - 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6b, + 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, + 0x22, 0x89, 0x02, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x63, + 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0d, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x50, 0x65, 0x6d, 0x12, + 0x15, 0x0a, 0x06, 0x63, 0x61, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x63, 0x61, 0x50, 0x65, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, + 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x63, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x43, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x5f, 0x0a, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x65, 0x6e, 0x72, 0x6f, + 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x0a, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x2a, 0x0a, + 0x18, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x60, 0x0a, 0x19, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x0a, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x41, 0x0a, 0x17, 0x52, + 0x65, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5f, + 0x0a, 0x18, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x65, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x0a, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0x0f, 0x0a, 0x0d, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x50, 0x0a, 0x10, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x63, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x22, 0x50, 0x0a, 0x0e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, + 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x2a, 0x52, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x16, + 0x0a, 0x12, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, + 0x5f, 0x55, 0x50, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x5f, + 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, + 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x32, 0xac, 0x08, 0x0a, 0x0c, 0x46, 0x6c, 0x65, + 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, + 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x69, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, + 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x72, 0x79, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, - 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, - 0x64, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x66, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, - 0x49, 0x12, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x4f, 0x53, 0x2d, 0x50, 0x4b, 0x49, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x66, 0x6c, - 0x65, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x26, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, + 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x28, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6c, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x45, 0x6e, 0x72, 0x6f, + 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, + 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x45, 0x6e, 0x72, + 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x69, 0x0a, 0x10, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, + 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x72, + 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x57, 0x68, + 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, + 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x4f, 0x53, 0x2d, 0x50, 0x4b, + 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, + 0x2f, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1916,34 +2349,40 @@ func file_cryptos_fleet_v1_fleet_proto_rawDescGZIP() []byte { } var file_cryptos_fleet_v1_fleet_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_cryptos_fleet_v1_fleet_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_cryptos_fleet_v1_fleet_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_cryptos_fleet_v1_fleet_proto_goTypes = []any{ - (Health)(0), // 0: cryptos.fleet.v1.Health - (*ListNodesRequest)(nil), // 1: cryptos.fleet.v1.ListNodesRequest - (*ListNodesResponse)(nil), // 2: cryptos.fleet.v1.ListNodesResponse - (*GetNodeRequest)(nil), // 3: cryptos.fleet.v1.GetNodeRequest - (*GetNodeResponse)(nil), // 4: cryptos.fleet.v1.GetNodeResponse - (*ListCertificatesRequest)(nil), // 5: cryptos.fleet.v1.ListCertificatesRequest - (*ListCertificatesResponse)(nil), // 6: cryptos.fleet.v1.ListCertificatesResponse - (*ListProfilesRequest)(nil), // 7: cryptos.fleet.v1.ListProfilesRequest - (*ListProfilesResponse)(nil), // 8: cryptos.fleet.v1.ListProfilesResponse - (*ListAdaptersRequest)(nil), // 9: cryptos.fleet.v1.ListAdaptersRequest - (*ListAdaptersResponse)(nil), // 10: cryptos.fleet.v1.ListAdaptersResponse - (*ListAuditRequest)(nil), // 11: cryptos.fleet.v1.ListAuditRequest - (*ListAuditResponse)(nil), // 12: cryptos.fleet.v1.ListAuditResponse - (*ListEnrollmentsRequest)(nil), // 13: cryptos.fleet.v1.ListEnrollmentsRequest - (*ListEnrollmentsResponse)(nil), // 14: cryptos.fleet.v1.ListEnrollmentsResponse - (*NodeSummary)(nil), // 15: cryptos.fleet.v1.NodeSummary - (*NodeIdentity)(nil), // 16: cryptos.fleet.v1.NodeIdentity - (*NodeDetail)(nil), // 17: cryptos.fleet.v1.NodeDetail - (*Certificate)(nil), // 18: cryptos.fleet.v1.Certificate - (*CertProfile)(nil), // 19: cryptos.fleet.v1.CertProfile - (*EnrollmentAdapter)(nil), // 20: cryptos.fleet.v1.EnrollmentAdapter - (*AuditEvent)(nil), // 21: cryptos.fleet.v1.AuditEvent - (*EnrollmentRequest)(nil), // 22: cryptos.fleet.v1.EnrollmentRequest - (*WhoAmIRequest)(nil), // 23: cryptos.fleet.v1.WhoAmIRequest - (*OperatorIdentity)(nil), // 24: cryptos.fleet.v1.OperatorIdentity - (*WhoAmIResponse)(nil), // 25: cryptos.fleet.v1.WhoAmIResponse + (Health)(0), // 0: cryptos.fleet.v1.Health + (*ListNodesRequest)(nil), // 1: cryptos.fleet.v1.ListNodesRequest + (*ListNodesResponse)(nil), // 2: cryptos.fleet.v1.ListNodesResponse + (*GetNodeRequest)(nil), // 3: cryptos.fleet.v1.GetNodeRequest + (*GetNodeResponse)(nil), // 4: cryptos.fleet.v1.GetNodeResponse + (*ListCertificatesRequest)(nil), // 5: cryptos.fleet.v1.ListCertificatesRequest + (*ListCertificatesResponse)(nil), // 6: cryptos.fleet.v1.ListCertificatesResponse + (*ListProfilesRequest)(nil), // 7: cryptos.fleet.v1.ListProfilesRequest + (*ListProfilesResponse)(nil), // 8: cryptos.fleet.v1.ListProfilesResponse + (*ListAdaptersRequest)(nil), // 9: cryptos.fleet.v1.ListAdaptersRequest + (*ListAdaptersResponse)(nil), // 10: cryptos.fleet.v1.ListAdaptersResponse + (*ListAuditRequest)(nil), // 11: cryptos.fleet.v1.ListAuditRequest + (*ListAuditResponse)(nil), // 12: cryptos.fleet.v1.ListAuditResponse + (*ListEnrollmentsRequest)(nil), // 13: cryptos.fleet.v1.ListEnrollmentsRequest + (*ListEnrollmentsResponse)(nil), // 14: cryptos.fleet.v1.ListEnrollmentsResponse + (*NodeSummary)(nil), // 15: cryptos.fleet.v1.NodeSummary + (*NodeIdentity)(nil), // 16: cryptos.fleet.v1.NodeIdentity + (*NodeDetail)(nil), // 17: cryptos.fleet.v1.NodeDetail + (*Certificate)(nil), // 18: cryptos.fleet.v1.Certificate + (*CertProfile)(nil), // 19: cryptos.fleet.v1.CertProfile + (*EnrollmentAdapter)(nil), // 20: cryptos.fleet.v1.EnrollmentAdapter + (*AuditEvent)(nil), // 21: cryptos.fleet.v1.AuditEvent + (*EnrollmentRequest)(nil), // 22: cryptos.fleet.v1.EnrollmentRequest + (*CreateEnrollmentRequest)(nil), // 23: cryptos.fleet.v1.CreateEnrollmentRequest + (*CreateEnrollmentResponse)(nil), // 24: cryptos.fleet.v1.CreateEnrollmentResponse + (*ApproveEnrollmentRequest)(nil), // 25: cryptos.fleet.v1.ApproveEnrollmentRequest + (*ApproveEnrollmentResponse)(nil), // 26: cryptos.fleet.v1.ApproveEnrollmentResponse + (*RejectEnrollmentRequest)(nil), // 27: cryptos.fleet.v1.RejectEnrollmentRequest + (*RejectEnrollmentResponse)(nil), // 28: cryptos.fleet.v1.RejectEnrollmentResponse + (*WhoAmIRequest)(nil), // 29: cryptos.fleet.v1.WhoAmIRequest + (*OperatorIdentity)(nil), // 30: cryptos.fleet.v1.OperatorIdentity + (*WhoAmIResponse)(nil), // 31: cryptos.fleet.v1.WhoAmIResponse } var file_cryptos_fleet_v1_fleet_proto_depIdxs = []int32{ 15, // 0: cryptos.fleet.v1.ListNodesResponse.nodes:type_name -> cryptos.fleet.v1.NodeSummary @@ -1956,28 +2395,37 @@ var file_cryptos_fleet_v1_fleet_proto_depIdxs = []int32{ 0, // 7: cryptos.fleet.v1.NodeSummary.health:type_name -> cryptos.fleet.v1.Health 15, // 8: cryptos.fleet.v1.NodeDetail.summary:type_name -> cryptos.fleet.v1.NodeSummary 16, // 9: cryptos.fleet.v1.NodeDetail.identity:type_name -> cryptos.fleet.v1.NodeIdentity - 24, // 10: cryptos.fleet.v1.WhoAmIResponse.operator:type_name -> cryptos.fleet.v1.OperatorIdentity - 1, // 11: cryptos.fleet.v1.FleetService.ListNodes:input_type -> cryptos.fleet.v1.ListNodesRequest - 3, // 12: cryptos.fleet.v1.FleetService.GetNode:input_type -> cryptos.fleet.v1.GetNodeRequest - 5, // 13: cryptos.fleet.v1.FleetService.ListCertificates:input_type -> cryptos.fleet.v1.ListCertificatesRequest - 7, // 14: cryptos.fleet.v1.FleetService.ListProfiles:input_type -> cryptos.fleet.v1.ListProfilesRequest - 9, // 15: cryptos.fleet.v1.FleetService.ListAdapters:input_type -> cryptos.fleet.v1.ListAdaptersRequest - 11, // 16: cryptos.fleet.v1.FleetService.ListAudit:input_type -> cryptos.fleet.v1.ListAuditRequest - 13, // 17: cryptos.fleet.v1.FleetService.ListEnrollments:input_type -> cryptos.fleet.v1.ListEnrollmentsRequest - 23, // 18: cryptos.fleet.v1.FleetService.WhoAmI:input_type -> cryptos.fleet.v1.WhoAmIRequest - 2, // 19: cryptos.fleet.v1.FleetService.ListNodes:output_type -> cryptos.fleet.v1.ListNodesResponse - 4, // 20: cryptos.fleet.v1.FleetService.GetNode:output_type -> cryptos.fleet.v1.GetNodeResponse - 6, // 21: cryptos.fleet.v1.FleetService.ListCertificates:output_type -> cryptos.fleet.v1.ListCertificatesResponse - 8, // 22: cryptos.fleet.v1.FleetService.ListProfiles:output_type -> cryptos.fleet.v1.ListProfilesResponse - 10, // 23: cryptos.fleet.v1.FleetService.ListAdapters:output_type -> cryptos.fleet.v1.ListAdaptersResponse - 12, // 24: cryptos.fleet.v1.FleetService.ListAudit:output_type -> cryptos.fleet.v1.ListAuditResponse - 14, // 25: cryptos.fleet.v1.FleetService.ListEnrollments:output_type -> cryptos.fleet.v1.ListEnrollmentsResponse - 25, // 26: cryptos.fleet.v1.FleetService.WhoAmI:output_type -> cryptos.fleet.v1.WhoAmIResponse - 19, // [19:27] is the sub-list for method output_type - 11, // [11:19] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 22, // 10: cryptos.fleet.v1.CreateEnrollmentResponse.enrollment:type_name -> cryptos.fleet.v1.EnrollmentRequest + 22, // 11: cryptos.fleet.v1.ApproveEnrollmentResponse.enrollment:type_name -> cryptos.fleet.v1.EnrollmentRequest + 22, // 12: cryptos.fleet.v1.RejectEnrollmentResponse.enrollment:type_name -> cryptos.fleet.v1.EnrollmentRequest + 30, // 13: cryptos.fleet.v1.WhoAmIResponse.operator:type_name -> cryptos.fleet.v1.OperatorIdentity + 1, // 14: cryptos.fleet.v1.FleetService.ListNodes:input_type -> cryptos.fleet.v1.ListNodesRequest + 3, // 15: cryptos.fleet.v1.FleetService.GetNode:input_type -> cryptos.fleet.v1.GetNodeRequest + 5, // 16: cryptos.fleet.v1.FleetService.ListCertificates:input_type -> cryptos.fleet.v1.ListCertificatesRequest + 7, // 17: cryptos.fleet.v1.FleetService.ListProfiles:input_type -> cryptos.fleet.v1.ListProfilesRequest + 9, // 18: cryptos.fleet.v1.FleetService.ListAdapters:input_type -> cryptos.fleet.v1.ListAdaptersRequest + 11, // 19: cryptos.fleet.v1.FleetService.ListAudit:input_type -> cryptos.fleet.v1.ListAuditRequest + 13, // 20: cryptos.fleet.v1.FleetService.ListEnrollments:input_type -> cryptos.fleet.v1.ListEnrollmentsRequest + 23, // 21: cryptos.fleet.v1.FleetService.CreateEnrollment:input_type -> cryptos.fleet.v1.CreateEnrollmentRequest + 25, // 22: cryptos.fleet.v1.FleetService.ApproveEnrollment:input_type -> cryptos.fleet.v1.ApproveEnrollmentRequest + 27, // 23: cryptos.fleet.v1.FleetService.RejectEnrollment:input_type -> cryptos.fleet.v1.RejectEnrollmentRequest + 29, // 24: cryptos.fleet.v1.FleetService.WhoAmI:input_type -> cryptos.fleet.v1.WhoAmIRequest + 2, // 25: cryptos.fleet.v1.FleetService.ListNodes:output_type -> cryptos.fleet.v1.ListNodesResponse + 4, // 26: cryptos.fleet.v1.FleetService.GetNode:output_type -> cryptos.fleet.v1.GetNodeResponse + 6, // 27: cryptos.fleet.v1.FleetService.ListCertificates:output_type -> cryptos.fleet.v1.ListCertificatesResponse + 8, // 28: cryptos.fleet.v1.FleetService.ListProfiles:output_type -> cryptos.fleet.v1.ListProfilesResponse + 10, // 29: cryptos.fleet.v1.FleetService.ListAdapters:output_type -> cryptos.fleet.v1.ListAdaptersResponse + 12, // 30: cryptos.fleet.v1.FleetService.ListAudit:output_type -> cryptos.fleet.v1.ListAuditResponse + 14, // 31: cryptos.fleet.v1.FleetService.ListEnrollments:output_type -> cryptos.fleet.v1.ListEnrollmentsResponse + 24, // 32: cryptos.fleet.v1.FleetService.CreateEnrollment:output_type -> cryptos.fleet.v1.CreateEnrollmentResponse + 26, // 33: cryptos.fleet.v1.FleetService.ApproveEnrollment:output_type -> cryptos.fleet.v1.ApproveEnrollmentResponse + 28, // 34: cryptos.fleet.v1.FleetService.RejectEnrollment:output_type -> cryptos.fleet.v1.RejectEnrollmentResponse + 31, // 35: cryptos.fleet.v1.FleetService.WhoAmI:output_type -> cryptos.fleet.v1.WhoAmIResponse + 25, // [25:36] is the sub-list for method output_type + 14, // [14:25] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_cryptos_fleet_v1_fleet_proto_init() } @@ -2251,7 +2699,7 @@ func file_cryptos_fleet_v1_fleet_proto_init() { } } file_cryptos_fleet_v1_fleet_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*WhoAmIRequest); i { + switch v := v.(*CreateEnrollmentRequest); i { case 0: return &v.state case 1: @@ -2263,7 +2711,7 @@ func file_cryptos_fleet_v1_fleet_proto_init() { } } file_cryptos_fleet_v1_fleet_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*OperatorIdentity); i { + switch v := v.(*CreateEnrollmentResponse); i { case 0: return &v.state case 1: @@ -2275,6 +2723,78 @@ func file_cryptos_fleet_v1_fleet_proto_init() { } } file_cryptos_fleet_v1_fleet_proto_msgTypes[24].Exporter = func(v any, i int) any { + switch v := v.(*ApproveEnrollmentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_fleet_v1_fleet_proto_msgTypes[25].Exporter = func(v any, i int) any { + switch v := v.(*ApproveEnrollmentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_fleet_v1_fleet_proto_msgTypes[26].Exporter = func(v any, i int) any { + switch v := v.(*RejectEnrollmentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_fleet_v1_fleet_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*RejectEnrollmentResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_fleet_v1_fleet_proto_msgTypes[28].Exporter = func(v any, i int) any { + switch v := v.(*WhoAmIRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_fleet_v1_fleet_proto_msgTypes[29].Exporter = func(v any, i int) any { + switch v := v.(*OperatorIdentity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_fleet_v1_fleet_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*WhoAmIResponse); i { case 0: return &v.state @@ -2293,7 +2813,7 @@ func file_cryptos_fleet_v1_fleet_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cryptos_fleet_v1_fleet_proto_rawDesc, NumEnums: 1, - NumMessages: 25, + NumMessages: 31, NumExtensions: 0, NumServices: 1, }, diff --git a/go/cryptos/fleet/v1/fleet_grpc.pb.go b/go/cryptos/fleet/v1/fleet_grpc.pb.go index 0ac2de2..4dc1f0e 100644 --- a/go/cryptos/fleet/v1/fleet_grpc.pb.go +++ b/go/cryptos/fleet/v1/fleet_grpc.pb.go @@ -19,23 +19,27 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - FleetService_ListNodes_FullMethodName = "/cryptos.fleet.v1.FleetService/ListNodes" - FleetService_GetNode_FullMethodName = "/cryptos.fleet.v1.FleetService/GetNode" - FleetService_ListCertificates_FullMethodName = "/cryptos.fleet.v1.FleetService/ListCertificates" - FleetService_ListProfiles_FullMethodName = "/cryptos.fleet.v1.FleetService/ListProfiles" - FleetService_ListAdapters_FullMethodName = "/cryptos.fleet.v1.FleetService/ListAdapters" - FleetService_ListAudit_FullMethodName = "/cryptos.fleet.v1.FleetService/ListAudit" - FleetService_ListEnrollments_FullMethodName = "/cryptos.fleet.v1.FleetService/ListEnrollments" - FleetService_WhoAmI_FullMethodName = "/cryptos.fleet.v1.FleetService/WhoAmI" + FleetService_ListNodes_FullMethodName = "/cryptos.fleet.v1.FleetService/ListNodes" + FleetService_GetNode_FullMethodName = "/cryptos.fleet.v1.FleetService/GetNode" + FleetService_ListCertificates_FullMethodName = "/cryptos.fleet.v1.FleetService/ListCertificates" + FleetService_ListProfiles_FullMethodName = "/cryptos.fleet.v1.FleetService/ListProfiles" + FleetService_ListAdapters_FullMethodName = "/cryptos.fleet.v1.FleetService/ListAdapters" + FleetService_ListAudit_FullMethodName = "/cryptos.fleet.v1.FleetService/ListAudit" + FleetService_ListEnrollments_FullMethodName = "/cryptos.fleet.v1.FleetService/ListEnrollments" + FleetService_CreateEnrollment_FullMethodName = "/cryptos.fleet.v1.FleetService/CreateEnrollment" + FleetService_ApproveEnrollment_FullMethodName = "/cryptos.fleet.v1.FleetService/ApproveEnrollment" + FleetService_RejectEnrollment_FullMethodName = "/cryptos.fleet.v1.FleetService/RejectEnrollment" + FleetService_WhoAmI_FullMethodName = "/cryptos.fleet.v1.FleetService/WhoAmI" ) // FleetServiceClient is the client API for FleetService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. // -// FleetService is the Fleet Manager's read surface over a set of CryptOS -// nodes. It aggregates each node's status and identity behind a single -// Connect endpoint for the manager's web UI. +// FleetService is the Fleet Manager's surface over a set of CryptOS nodes: +// read aggregation (status, identity, certificates, catalog) plus the +// operator-driven enrollment writes. A single Connect endpoint for the +// manager's web UI. type FleetServiceClient interface { // ListNodes returns a summary for every node the manager knows about. ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) @@ -55,6 +59,14 @@ type FleetServiceClient interface { // ListEnrollments returns the manager's pending and resolved enrollment // requests. ListEnrollments(ctx context.Context, in *ListEnrollmentsRequest, opts ...grpc.CallOption) (*ListEnrollmentsResponse, error) + // CreateEnrollment opens a new enrollment request (LINK a node or provision a + // SUBORDINATE CA); the manager verifies attestation for LINK. + CreateEnrollment(ctx context.Context, in *CreateEnrollmentRequest, opts ...grpc.CallOption) (*CreateEnrollmentResponse, error) + // ApproveEnrollment approves a pending request (LINK -> ApplyConfig managed + // state; SUBORDINATE -> CSR-ferry). + ApproveEnrollment(ctx context.Context, in *ApproveEnrollmentRequest, opts ...grpc.CallOption) (*ApproveEnrollmentResponse, error) + // RejectEnrollment rejects a pending request with a reason. + RejectEnrollment(ctx context.Context, in *RejectEnrollmentRequest, opts ...grpc.CallOption) (*RejectEnrollmentResponse, error) // WhoAmI echoes the operator identity the manager verified from the // presented client certificate (subject CN, cert serial, access level). WhoAmI(ctx context.Context, in *WhoAmIRequest, opts ...grpc.CallOption) (*WhoAmIResponse, error) @@ -138,6 +150,36 @@ func (c *fleetServiceClient) ListEnrollments(ctx context.Context, in *ListEnroll return out, nil } +func (c *fleetServiceClient) CreateEnrollment(ctx context.Context, in *CreateEnrollmentRequest, opts ...grpc.CallOption) (*CreateEnrollmentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateEnrollmentResponse) + err := c.cc.Invoke(ctx, FleetService_CreateEnrollment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *fleetServiceClient) ApproveEnrollment(ctx context.Context, in *ApproveEnrollmentRequest, opts ...grpc.CallOption) (*ApproveEnrollmentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ApproveEnrollmentResponse) + err := c.cc.Invoke(ctx, FleetService_ApproveEnrollment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *fleetServiceClient) RejectEnrollment(ctx context.Context, in *RejectEnrollmentRequest, opts ...grpc.CallOption) (*RejectEnrollmentResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RejectEnrollmentResponse) + err := c.cc.Invoke(ctx, FleetService_RejectEnrollment_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *fleetServiceClient) WhoAmI(ctx context.Context, in *WhoAmIRequest, opts ...grpc.CallOption) (*WhoAmIResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(WhoAmIResponse) @@ -152,9 +194,10 @@ func (c *fleetServiceClient) WhoAmI(ctx context.Context, in *WhoAmIRequest, opts // All implementations should embed UnimplementedFleetServiceServer // for forward compatibility. // -// FleetService is the Fleet Manager's read surface over a set of CryptOS -// nodes. It aggregates each node's status and identity behind a single -// Connect endpoint for the manager's web UI. +// FleetService is the Fleet Manager's surface over a set of CryptOS nodes: +// read aggregation (status, identity, certificates, catalog) plus the +// operator-driven enrollment writes. A single Connect endpoint for the +// manager's web UI. type FleetServiceServer interface { // ListNodes returns a summary for every node the manager knows about. ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) @@ -174,6 +217,14 @@ type FleetServiceServer interface { // ListEnrollments returns the manager's pending and resolved enrollment // requests. ListEnrollments(context.Context, *ListEnrollmentsRequest) (*ListEnrollmentsResponse, error) + // CreateEnrollment opens a new enrollment request (LINK a node or provision a + // SUBORDINATE CA); the manager verifies attestation for LINK. + CreateEnrollment(context.Context, *CreateEnrollmentRequest) (*CreateEnrollmentResponse, error) + // ApproveEnrollment approves a pending request (LINK -> ApplyConfig managed + // state; SUBORDINATE -> CSR-ferry). + ApproveEnrollment(context.Context, *ApproveEnrollmentRequest) (*ApproveEnrollmentResponse, error) + // RejectEnrollment rejects a pending request with a reason. + RejectEnrollment(context.Context, *RejectEnrollmentRequest) (*RejectEnrollmentResponse, error) // WhoAmI echoes the operator identity the manager verified from the // presented client certificate (subject CN, cert serial, access level). WhoAmI(context.Context, *WhoAmIRequest) (*WhoAmIResponse, error) @@ -207,6 +258,15 @@ func (UnimplementedFleetServiceServer) ListAudit(context.Context, *ListAuditRequ func (UnimplementedFleetServiceServer) ListEnrollments(context.Context, *ListEnrollmentsRequest) (*ListEnrollmentsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListEnrollments not implemented") } +func (UnimplementedFleetServiceServer) CreateEnrollment(context.Context, *CreateEnrollmentRequest) (*CreateEnrollmentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateEnrollment not implemented") +} +func (UnimplementedFleetServiceServer) ApproveEnrollment(context.Context, *ApproveEnrollmentRequest) (*ApproveEnrollmentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApproveEnrollment not implemented") +} +func (UnimplementedFleetServiceServer) RejectEnrollment(context.Context, *RejectEnrollmentRequest) (*RejectEnrollmentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RejectEnrollment not implemented") +} func (UnimplementedFleetServiceServer) WhoAmI(context.Context, *WhoAmIRequest) (*WhoAmIResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method WhoAmI not implemented") } @@ -356,6 +416,60 @@ func _FleetService_ListEnrollments_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _FleetService_CreateEnrollment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateEnrollmentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FleetServiceServer).CreateEnrollment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: FleetService_CreateEnrollment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FleetServiceServer).CreateEnrollment(ctx, req.(*CreateEnrollmentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _FleetService_ApproveEnrollment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ApproveEnrollmentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FleetServiceServer).ApproveEnrollment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: FleetService_ApproveEnrollment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FleetServiceServer).ApproveEnrollment(ctx, req.(*ApproveEnrollmentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _FleetService_RejectEnrollment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RejectEnrollmentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FleetServiceServer).RejectEnrollment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: FleetService_RejectEnrollment_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FleetServiceServer).RejectEnrollment(ctx, req.(*RejectEnrollmentRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _FleetService_WhoAmI_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(WhoAmIRequest) if err := dec(in); err != nil { @@ -409,6 +523,18 @@ var FleetService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListEnrollments", Handler: _FleetService_ListEnrollments_Handler, }, + { + MethodName: "CreateEnrollment", + Handler: _FleetService_CreateEnrollment_Handler, + }, + { + MethodName: "ApproveEnrollment", + Handler: _FleetService_ApproveEnrollment_Handler, + }, + { + MethodName: "RejectEnrollment", + Handler: _FleetService_RejectEnrollment_Handler, + }, { MethodName: "WhoAmI", Handler: _FleetService_WhoAmI_Handler, diff --git a/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go b/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go index bc002e5..ae5bdd7 100644 --- a/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go +++ b/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go @@ -51,6 +51,15 @@ const ( // FleetServiceListEnrollmentsProcedure is the fully-qualified name of the FleetService's // ListEnrollments RPC. FleetServiceListEnrollmentsProcedure = "/cryptos.fleet.v1.FleetService/ListEnrollments" + // FleetServiceCreateEnrollmentProcedure is the fully-qualified name of the FleetService's + // CreateEnrollment RPC. + FleetServiceCreateEnrollmentProcedure = "/cryptos.fleet.v1.FleetService/CreateEnrollment" + // FleetServiceApproveEnrollmentProcedure is the fully-qualified name of the FleetService's + // ApproveEnrollment RPC. + FleetServiceApproveEnrollmentProcedure = "/cryptos.fleet.v1.FleetService/ApproveEnrollment" + // FleetServiceRejectEnrollmentProcedure is the fully-qualified name of the FleetService's + // RejectEnrollment RPC. + FleetServiceRejectEnrollmentProcedure = "/cryptos.fleet.v1.FleetService/RejectEnrollment" // FleetServiceWhoAmIProcedure is the fully-qualified name of the FleetService's WhoAmI RPC. FleetServiceWhoAmIProcedure = "/cryptos.fleet.v1.FleetService/WhoAmI" ) @@ -75,6 +84,14 @@ type FleetServiceClient interface { // ListEnrollments returns the manager's pending and resolved enrollment // requests. ListEnrollments(context.Context, *connect.Request[v1.ListEnrollmentsRequest]) (*connect.Response[v1.ListEnrollmentsResponse], error) + // CreateEnrollment opens a new enrollment request (LINK a node or provision a + // SUBORDINATE CA); the manager verifies attestation for LINK. + CreateEnrollment(context.Context, *connect.Request[v1.CreateEnrollmentRequest]) (*connect.Response[v1.CreateEnrollmentResponse], error) + // ApproveEnrollment approves a pending request (LINK -> ApplyConfig managed + // state; SUBORDINATE -> CSR-ferry). + ApproveEnrollment(context.Context, *connect.Request[v1.ApproveEnrollmentRequest]) (*connect.Response[v1.ApproveEnrollmentResponse], error) + // RejectEnrollment rejects a pending request with a reason. + RejectEnrollment(context.Context, *connect.Request[v1.RejectEnrollmentRequest]) (*connect.Response[v1.RejectEnrollmentResponse], error) // WhoAmI echoes the operator identity the manager verified from the // presented client certificate (subject CN, cert serial, access level). WhoAmI(context.Context, *connect.Request[v1.WhoAmIRequest]) (*connect.Response[v1.WhoAmIResponse], error) @@ -133,6 +150,24 @@ func NewFleetServiceClient(httpClient connect.HTTPClient, baseURL string, opts . connect.WithSchema(fleetServiceMethods.ByName("ListEnrollments")), connect.WithClientOptions(opts...), ), + createEnrollment: connect.NewClient[v1.CreateEnrollmentRequest, v1.CreateEnrollmentResponse]( + httpClient, + baseURL+FleetServiceCreateEnrollmentProcedure, + connect.WithSchema(fleetServiceMethods.ByName("CreateEnrollment")), + connect.WithClientOptions(opts...), + ), + approveEnrollment: connect.NewClient[v1.ApproveEnrollmentRequest, v1.ApproveEnrollmentResponse]( + httpClient, + baseURL+FleetServiceApproveEnrollmentProcedure, + connect.WithSchema(fleetServiceMethods.ByName("ApproveEnrollment")), + connect.WithClientOptions(opts...), + ), + rejectEnrollment: connect.NewClient[v1.RejectEnrollmentRequest, v1.RejectEnrollmentResponse]( + httpClient, + baseURL+FleetServiceRejectEnrollmentProcedure, + connect.WithSchema(fleetServiceMethods.ByName("RejectEnrollment")), + connect.WithClientOptions(opts...), + ), whoAmI: connect.NewClient[v1.WhoAmIRequest, v1.WhoAmIResponse]( httpClient, baseURL+FleetServiceWhoAmIProcedure, @@ -144,14 +179,17 @@ func NewFleetServiceClient(httpClient connect.HTTPClient, baseURL string, opts . // fleetServiceClient implements FleetServiceClient. type fleetServiceClient struct { - listNodes *connect.Client[v1.ListNodesRequest, v1.ListNodesResponse] - getNode *connect.Client[v1.GetNodeRequest, v1.GetNodeResponse] - listCertificates *connect.Client[v1.ListCertificatesRequest, v1.ListCertificatesResponse] - listProfiles *connect.Client[v1.ListProfilesRequest, v1.ListProfilesResponse] - listAdapters *connect.Client[v1.ListAdaptersRequest, v1.ListAdaptersResponse] - listAudit *connect.Client[v1.ListAuditRequest, v1.ListAuditResponse] - listEnrollments *connect.Client[v1.ListEnrollmentsRequest, v1.ListEnrollmentsResponse] - whoAmI *connect.Client[v1.WhoAmIRequest, v1.WhoAmIResponse] + listNodes *connect.Client[v1.ListNodesRequest, v1.ListNodesResponse] + getNode *connect.Client[v1.GetNodeRequest, v1.GetNodeResponse] + listCertificates *connect.Client[v1.ListCertificatesRequest, v1.ListCertificatesResponse] + listProfiles *connect.Client[v1.ListProfilesRequest, v1.ListProfilesResponse] + listAdapters *connect.Client[v1.ListAdaptersRequest, v1.ListAdaptersResponse] + listAudit *connect.Client[v1.ListAuditRequest, v1.ListAuditResponse] + listEnrollments *connect.Client[v1.ListEnrollmentsRequest, v1.ListEnrollmentsResponse] + createEnrollment *connect.Client[v1.CreateEnrollmentRequest, v1.CreateEnrollmentResponse] + approveEnrollment *connect.Client[v1.ApproveEnrollmentRequest, v1.ApproveEnrollmentResponse] + rejectEnrollment *connect.Client[v1.RejectEnrollmentRequest, v1.RejectEnrollmentResponse] + whoAmI *connect.Client[v1.WhoAmIRequest, v1.WhoAmIResponse] } // ListNodes calls cryptos.fleet.v1.FleetService.ListNodes. @@ -189,6 +227,21 @@ func (c *fleetServiceClient) ListEnrollments(ctx context.Context, req *connect.R return c.listEnrollments.CallUnary(ctx, req) } +// CreateEnrollment calls cryptos.fleet.v1.FleetService.CreateEnrollment. +func (c *fleetServiceClient) CreateEnrollment(ctx context.Context, req *connect.Request[v1.CreateEnrollmentRequest]) (*connect.Response[v1.CreateEnrollmentResponse], error) { + return c.createEnrollment.CallUnary(ctx, req) +} + +// ApproveEnrollment calls cryptos.fleet.v1.FleetService.ApproveEnrollment. +func (c *fleetServiceClient) ApproveEnrollment(ctx context.Context, req *connect.Request[v1.ApproveEnrollmentRequest]) (*connect.Response[v1.ApproveEnrollmentResponse], error) { + return c.approveEnrollment.CallUnary(ctx, req) +} + +// RejectEnrollment calls cryptos.fleet.v1.FleetService.RejectEnrollment. +func (c *fleetServiceClient) RejectEnrollment(ctx context.Context, req *connect.Request[v1.RejectEnrollmentRequest]) (*connect.Response[v1.RejectEnrollmentResponse], error) { + return c.rejectEnrollment.CallUnary(ctx, req) +} + // WhoAmI calls cryptos.fleet.v1.FleetService.WhoAmI. func (c *fleetServiceClient) WhoAmI(ctx context.Context, req *connect.Request[v1.WhoAmIRequest]) (*connect.Response[v1.WhoAmIResponse], error) { return c.whoAmI.CallUnary(ctx, req) @@ -214,6 +267,14 @@ type FleetServiceHandler interface { // ListEnrollments returns the manager's pending and resolved enrollment // requests. ListEnrollments(context.Context, *connect.Request[v1.ListEnrollmentsRequest]) (*connect.Response[v1.ListEnrollmentsResponse], error) + // CreateEnrollment opens a new enrollment request (LINK a node or provision a + // SUBORDINATE CA); the manager verifies attestation for LINK. + CreateEnrollment(context.Context, *connect.Request[v1.CreateEnrollmentRequest]) (*connect.Response[v1.CreateEnrollmentResponse], error) + // ApproveEnrollment approves a pending request (LINK -> ApplyConfig managed + // state; SUBORDINATE -> CSR-ferry). + ApproveEnrollment(context.Context, *connect.Request[v1.ApproveEnrollmentRequest]) (*connect.Response[v1.ApproveEnrollmentResponse], error) + // RejectEnrollment rejects a pending request with a reason. + RejectEnrollment(context.Context, *connect.Request[v1.RejectEnrollmentRequest]) (*connect.Response[v1.RejectEnrollmentResponse], error) // WhoAmI echoes the operator identity the manager verified from the // presented client certificate (subject CN, cert serial, access level). WhoAmI(context.Context, *connect.Request[v1.WhoAmIRequest]) (*connect.Response[v1.WhoAmIResponse], error) @@ -268,6 +329,24 @@ func NewFleetServiceHandler(svc FleetServiceHandler, opts ...connect.HandlerOpti connect.WithSchema(fleetServiceMethods.ByName("ListEnrollments")), connect.WithHandlerOptions(opts...), ) + fleetServiceCreateEnrollmentHandler := connect.NewUnaryHandler( + FleetServiceCreateEnrollmentProcedure, + svc.CreateEnrollment, + connect.WithSchema(fleetServiceMethods.ByName("CreateEnrollment")), + connect.WithHandlerOptions(opts...), + ) + fleetServiceApproveEnrollmentHandler := connect.NewUnaryHandler( + FleetServiceApproveEnrollmentProcedure, + svc.ApproveEnrollment, + connect.WithSchema(fleetServiceMethods.ByName("ApproveEnrollment")), + connect.WithHandlerOptions(opts...), + ) + fleetServiceRejectEnrollmentHandler := connect.NewUnaryHandler( + FleetServiceRejectEnrollmentProcedure, + svc.RejectEnrollment, + connect.WithSchema(fleetServiceMethods.ByName("RejectEnrollment")), + connect.WithHandlerOptions(opts...), + ) fleetServiceWhoAmIHandler := connect.NewUnaryHandler( FleetServiceWhoAmIProcedure, svc.WhoAmI, @@ -290,6 +369,12 @@ func NewFleetServiceHandler(svc FleetServiceHandler, opts ...connect.HandlerOpti fleetServiceListAuditHandler.ServeHTTP(w, r) case FleetServiceListEnrollmentsProcedure: fleetServiceListEnrollmentsHandler.ServeHTTP(w, r) + case FleetServiceCreateEnrollmentProcedure: + fleetServiceCreateEnrollmentHandler.ServeHTTP(w, r) + case FleetServiceApproveEnrollmentProcedure: + fleetServiceApproveEnrollmentHandler.ServeHTTP(w, r) + case FleetServiceRejectEnrollmentProcedure: + fleetServiceRejectEnrollmentHandler.ServeHTTP(w, r) case FleetServiceWhoAmIProcedure: fleetServiceWhoAmIHandler.ServeHTTP(w, r) default: @@ -329,6 +414,18 @@ func (UnimplementedFleetServiceHandler) ListEnrollments(context.Context, *connec return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.ListEnrollments is not implemented")) } +func (UnimplementedFleetServiceHandler) CreateEnrollment(context.Context, *connect.Request[v1.CreateEnrollmentRequest]) (*connect.Response[v1.CreateEnrollmentResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.CreateEnrollment is not implemented")) +} + +func (UnimplementedFleetServiceHandler) ApproveEnrollment(context.Context, *connect.Request[v1.ApproveEnrollmentRequest]) (*connect.Response[v1.ApproveEnrollmentResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.ApproveEnrollment is not implemented")) +} + +func (UnimplementedFleetServiceHandler) RejectEnrollment(context.Context, *connect.Request[v1.RejectEnrollmentRequest]) (*connect.Response[v1.RejectEnrollmentResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.RejectEnrollment is not implemented")) +} + func (UnimplementedFleetServiceHandler) WhoAmI(context.Context, *connect.Request[v1.WhoAmIRequest]) (*connect.Response[v1.WhoAmIResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.WhoAmI is not implemented")) } diff --git a/go/cryptos/v1/config.pb.go b/go/cryptos/v1/config.pb.go index 2740a20..7188f40 100644 --- a/go/cryptos/v1/config.pb.go +++ b/go/cryptos/v1/config.pb.go @@ -44,6 +44,9 @@ type MachineConfig struct { // state_key selects how the LUKS state-partition key is protected. Empty // uses the node's build-time default (nodeid or tpm). StateKey *StateKey `protobuf:"bytes,10,opt,name=state_key,json=stateKey,proto3" json:"state_key,omitempty"` + // management carries FM-managed state pushed via ApplyConfig when a node is + // linked to a Fleet Manager (LINK enrollment). Empty on unmanaged nodes. + Management *Management `protobuf:"bytes,11,opt,name=management,proto3" json:"management,omitempty"` } func (x *MachineConfig) Reset() { @@ -148,6 +151,81 @@ func (x *MachineConfig) GetStateKey() *StateKey { return nil } +func (x *MachineConfig) GetManagement() *Management { + if x != nil { + return x.Management + } + return nil +} + +// Management marks a node as Fleet-Manager-managed. Set by a LINK enrollment +// approval via ApplyConfig; takes effect on reboot. +type Management struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Subject CN of the managing Fleet Manager operator identity. + ManagerCn string `protobuf:"bytes,1,opt,name=manager_cn,json=managerCn,proto3" json:"manager_cn,omitempty"` + // PEM trust anchor (operator CA) the node adds to its authorized client CAs. + TrustPem string `protobuf:"bytes,2,opt,name=trust_pem,json=trustPem,proto3" json:"trust_pem,omitempty"` + // When true, the node's embedded operator surface is read-only. + OperatorSurfaceReadonly bool `protobuf:"varint,3,opt,name=operator_surface_readonly,json=operatorSurfaceReadonly,proto3" json:"operator_surface_readonly,omitempty"` +} + +func (x *Management) Reset() { + *x = Management{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_v1_config_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Management) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Management) ProtoMessage() {} + +func (x *Management) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_v1_config_proto_msgTypes[1] + 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 Management.ProtoReflect.Descriptor instead. +func (*Management) Descriptor() ([]byte, []int) { + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{1} +} + +func (x *Management) GetManagerCn() string { + if x != nil { + return x.ManagerCn + } + return "" +} + +func (x *Management) GetTrustPem() string { + if x != nil { + return x.TrustPem + } + return "" +} + +func (x *Management) GetOperatorSurfaceReadonly() bool { + if x != nil { + return x.OperatorSurfaceReadonly + } + return false +} + // StateKey selects the protector for the encrypted state-partition key. type StateKey struct { state protoimpl.MessageState @@ -163,7 +241,7 @@ type StateKey struct { func (x *StateKey) Reset() { *x = StateKey{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[1] + mi := &file_cryptos_v1_config_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -176,7 +254,7 @@ func (x *StateKey) String() string { func (*StateKey) ProtoMessage() {} func (x *StateKey) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[1] + mi := &file_cryptos_v1_config_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -189,7 +267,7 @@ func (x *StateKey) ProtoReflect() protoreflect.Message { // Deprecated: Use StateKey.ProtoReflect.Descriptor instead. func (*StateKey) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{1} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{2} } func (x *StateKey) GetMode() string { @@ -223,7 +301,7 @@ type KmsStateKey struct { func (x *KmsStateKey) Reset() { *x = KmsStateKey{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[2] + mi := &file_cryptos_v1_config_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -236,7 +314,7 @@ func (x *KmsStateKey) String() string { func (*KmsStateKey) ProtoMessage() {} func (x *KmsStateKey) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[2] + mi := &file_cryptos_v1_config_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -249,7 +327,7 @@ func (x *KmsStateKey) ProtoReflect() protoreflect.Message { // Deprecated: Use KmsStateKey.ProtoReflect.Descriptor instead. func (*KmsStateKey) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{2} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{3} } func (x *KmsStateKey) GetEndpoint() string { @@ -277,7 +355,7 @@ type Metadata struct { func (x *Metadata) Reset() { *x = Metadata{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[3] + mi := &file_cryptos_v1_config_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -290,7 +368,7 @@ func (x *Metadata) String() string { func (*Metadata) ProtoMessage() {} func (x *Metadata) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[3] + mi := &file_cryptos_v1_config_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -303,7 +381,7 @@ func (x *Metadata) ProtoReflect() protoreflect.Message { // Deprecated: Use Metadata.ProtoReflect.Descriptor instead. func (*Metadata) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{3} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{4} } func (x *Metadata) GetName() string { @@ -325,7 +403,7 @@ type Role struct { func (x *Role) Reset() { *x = Role{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[4] + mi := &file_cryptos_v1_config_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -338,7 +416,7 @@ func (x *Role) String() string { func (*Role) ProtoMessage() {} func (x *Role) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[4] + mi := &file_cryptos_v1_config_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -351,7 +429,7 @@ func (x *Role) ProtoReflect() protoreflect.Message { // Deprecated: Use Role.ProtoReflect.Descriptor instead. func (*Role) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{4} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{5} } func (x *Role) GetKind() string { @@ -375,7 +453,7 @@ type Network struct { func (x *Network) Reset() { *x = Network{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[5] + mi := &file_cryptos_v1_config_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -388,7 +466,7 @@ func (x *Network) String() string { func (*Network) ProtoMessage() {} func (x *Network) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[5] + mi := &file_cryptos_v1_config_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -401,7 +479,7 @@ func (x *Network) ProtoReflect() protoreflect.Message { // Deprecated: Use Network.ProtoReflect.Descriptor instead. func (*Network) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{5} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{6} } func (x *Network) GetInterface() string { @@ -437,7 +515,7 @@ type Storage struct { func (x *Storage) Reset() { *x = Storage{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[6] + mi := &file_cryptos_v1_config_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -450,7 +528,7 @@ func (x *Storage) String() string { func (*Storage) ProtoMessage() {} func (x *Storage) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[6] + mi := &file_cryptos_v1_config_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -463,7 +541,7 @@ func (x *Storage) ProtoReflect() protoreflect.Message { // Deprecated: Use Storage.ProtoReflect.Descriptor instead. func (*Storage) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{6} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{7} } func (x *Storage) GetStatePartitionLabel() string { @@ -494,7 +572,7 @@ type Bootstrap struct { func (x *Bootstrap) Reset() { *x = Bootstrap{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[7] + mi := &file_cryptos_v1_config_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -507,7 +585,7 @@ func (x *Bootstrap) String() string { func (*Bootstrap) ProtoMessage() {} func (x *Bootstrap) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[7] + mi := &file_cryptos_v1_config_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -520,7 +598,7 @@ func (x *Bootstrap) ProtoReflect() protoreflect.Message { // Deprecated: Use Bootstrap.ProtoReflect.Descriptor instead. func (*Bootstrap) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{7} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{8} } func (x *Bootstrap) GetAdminCertPem() string { @@ -577,7 +655,7 @@ type Pki struct { func (x *Pki) Reset() { *x = Pki{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[8] + mi := &file_cryptos_v1_config_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -590,7 +668,7 @@ func (x *Pki) String() string { func (*Pki) ProtoMessage() {} func (x *Pki) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[8] + mi := &file_cryptos_v1_config_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -603,7 +681,7 @@ func (x *Pki) ProtoReflect() protoreflect.Message { // Deprecated: Use Pki.ProtoReflect.Descriptor instead. func (*Pki) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{8} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{9} } func (x *Pki) GetRootKeyAlg() string { @@ -698,7 +776,7 @@ type Parent struct { func (x *Parent) Reset() { *x = Parent{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[9] + mi := &file_cryptos_v1_config_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -711,7 +789,7 @@ func (x *Parent) String() string { func (*Parent) ProtoMessage() {} func (x *Parent) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[9] + mi := &file_cryptos_v1_config_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -724,7 +802,7 @@ func (x *Parent) ProtoReflect() protoreflect.Message { // Deprecated: Use Parent.ProtoReflect.Descriptor instead. func (*Parent) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{9} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{10} } func (x *Parent) GetCaCertPem() string { @@ -768,7 +846,7 @@ type CertificateProfile struct { func (x *CertificateProfile) Reset() { *x = CertificateProfile{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[10] + mi := &file_cryptos_v1_config_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -781,7 +859,7 @@ func (x *CertificateProfile) String() string { func (*CertificateProfile) ProtoMessage() {} func (x *CertificateProfile) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[10] + mi := &file_cryptos_v1_config_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -794,7 +872,7 @@ func (x *CertificateProfile) ProtoReflect() protoreflect.Message { // Deprecated: Use CertificateProfile.ProtoReflect.Descriptor instead. func (*CertificateProfile) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{10} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{11} } func (x *CertificateProfile) GetName() string { @@ -874,7 +952,7 @@ type BasicConstraints struct { func (x *BasicConstraints) Reset() { *x = BasicConstraints{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[11] + mi := &file_cryptos_v1_config_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -887,7 +965,7 @@ func (x *BasicConstraints) String() string { func (*BasicConstraints) ProtoMessage() {} func (x *BasicConstraints) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[11] + mi := &file_cryptos_v1_config_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -900,7 +978,7 @@ func (x *BasicConstraints) ProtoReflect() protoreflect.Message { // Deprecated: Use BasicConstraints.ProtoReflect.Descriptor instead. func (*BasicConstraints) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{11} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{12} } func (x *BasicConstraints) GetIsCa() bool { @@ -931,7 +1009,7 @@ type SubjectAltNames struct { func (x *SubjectAltNames) Reset() { *x = SubjectAltNames{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[12] + mi := &file_cryptos_v1_config_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -944,7 +1022,7 @@ func (x *SubjectAltNames) String() string { func (*SubjectAltNames) ProtoMessage() {} func (x *SubjectAltNames) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[12] + mi := &file_cryptos_v1_config_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -957,7 +1035,7 @@ func (x *SubjectAltNames) ProtoReflect() protoreflect.Message { // Deprecated: Use SubjectAltNames.ProtoReflect.Descriptor instead. func (*SubjectAltNames) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{12} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{13} } func (x *SubjectAltNames) GetDns() []string { @@ -1003,7 +1081,7 @@ type X509Extension struct { func (x *X509Extension) Reset() { *x = X509Extension{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[13] + mi := &file_cryptos_v1_config_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1016,7 +1094,7 @@ func (x *X509Extension) String() string { func (*X509Extension) ProtoMessage() {} func (x *X509Extension) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[13] + mi := &file_cryptos_v1_config_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1029,7 +1107,7 @@ func (x *X509Extension) ProtoReflect() protoreflect.Message { // Deprecated: Use X509Extension.ProtoReflect.Descriptor instead. func (*X509Extension) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{13} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{14} } func (x *X509Extension) GetOid() string { @@ -1068,7 +1146,7 @@ type Install struct { func (x *Install) Reset() { *x = Install{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[14] + mi := &file_cryptos_v1_config_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1081,7 +1159,7 @@ func (x *Install) String() string { func (*Install) ProtoMessage() {} func (x *Install) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[14] + mi := &file_cryptos_v1_config_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1094,7 +1172,7 @@ func (x *Install) ProtoReflect() protoreflect.Message { // Deprecated: Use Install.ProtoReflect.Descriptor instead. func (*Install) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{14} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{15} } func (x *Install) GetDisk() string { @@ -1117,7 +1195,7 @@ type Subject struct { func (x *Subject) Reset() { *x = Subject{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_config_proto_msgTypes[15] + mi := &file_cryptos_v1_config_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1130,7 +1208,7 @@ func (x *Subject) String() string { func (*Subject) ProtoMessage() {} func (x *Subject) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_config_proto_msgTypes[15] + mi := &file_cryptos_v1_config_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1143,7 +1221,7 @@ func (x *Subject) ProtoReflect() protoreflect.Message { // Deprecated: Use Subject.ProtoReflect.Descriptor instead. func (*Subject) Descriptor() ([]byte, []int) { - return file_cryptos_v1_config_proto_rawDescGZIP(), []int{15} + return file_cryptos_v1_config_proto_rawDescGZIP(), []int{16} } func (x *Subject) GetCommonName() string { @@ -1172,7 +1250,7 @@ var File_cryptos_v1_config_proto protoreflect.FileDescriptor var file_cryptos_v1_config_proto_rawDesc = []byte{ 0x0a, 0x17, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x22, 0xb4, 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x22, 0xec, 0x03, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, @@ -1199,133 +1277,145 @@ var file_cryptos_v1_config_proto_rawDesc = []byte{ 0x52, 0x07, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x31, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x49, 0x0a, 0x08, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x03, - 0x6b, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x6d, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x22, 0x46, 0x0a, 0x0b, 0x4b, 0x6d, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x72, 0x75, 0x73, 0x74, 0x50, 0x65, 0x6d, 0x22, - 0x1e, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x1a, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x5b, 0x0a, 0x07, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x66, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x22, 0x5c, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x73, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x22, 0x5d, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, - 0x72, 0x61, 0x70, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x65, 0x72, - 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x53, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0xb1, 0x04, 0x0a, 0x03, 0x50, 0x6b, 0x69, 0x12, 0x20, 0x0a, - 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x12, - 0x36, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x74, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x5f, 0x79, 0x65, 0x61, 0x72, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x69, - 0x74, 0x79, 0x59, 0x65, 0x61, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x6c, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x43, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, - 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, - 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x12, - 0x45, 0x0a, 0x1f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, - 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x31, 0x0a, 0x15, 0x63, 0x72, 0x6c, 0x5f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x72, 0x6c, 0x4e, 0x65, 0x78, 0x74, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x74, 0x74, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x72, - 0x6f, 0x6f, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x4c, 0x65, 0x61, - 0x66, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x4e, 0x0a, 0x06, 0x50, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, - 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, - 0x50, 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x43, - 0x65, 0x72, 0x74, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x98, 0x03, 0x0a, 0x12, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x12, 0x2d, 0x0a, - 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x44, 0x61, 0x79, - 0x73, 0x12, 0x49, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x43, - 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x10, 0x62, 0x61, 0x73, 0x69, - 0x63, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, - 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x6b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x74, - 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0b, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2f, 0x0a, - 0x04, 0x73, 0x61, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x73, 0x61, 0x6e, 0x73, 0x12, 0x44, - 0x0a, 0x10, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x54, 0x0a, 0x10, 0x42, 0x61, 0x73, 0x69, 0x63, 0x43, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x13, 0x0a, 0x05, 0x69, 0x73, 0x5f, 0x63, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x43, 0x61, 0x12, 0x1e, 0x0a, - 0x08, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, - 0x00, 0x52, 0x07, 0x70, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x22, 0x5b, 0x0a, 0x0f, 0x53, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x64, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x64, 0x6e, 0x73, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x53, 0x0a, 0x0d, 0x58, 0x35, 0x30, 0x39, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1d, 0x0a, 0x07, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x22, 0x68, 0x0a, 0x07, 0x53, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x4f, 0x53, 0x2d, 0x50, 0x4b, 0x49, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x76, - 0x31, 0x3b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x0a, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x63, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x43, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x72, 0x75, 0x73, 0x74, 0x50, 0x65, 0x6d, 0x12, + 0x3a, 0x0a, 0x19, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x75, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x17, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x75, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x22, 0x49, 0x0a, 0x08, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x6b, + 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x6d, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x52, 0x03, 0x6b, 0x6d, 0x73, 0x22, 0x46, 0x0a, 0x0b, 0x4b, 0x6d, 0x73, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x72, 0x75, 0x73, 0x74, 0x50, 0x65, 0x6d, 0x22, 0x1e, + 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1a, + 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x5b, 0x0a, 0x07, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x22, 0x5c, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x73, 0x74, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, + 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, + 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x22, 0x5d, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, + 0x61, 0x70, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x65, 0x72, 0x74, + 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x43, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x53, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x22, 0xb1, 0x04, 0x0a, 0x03, 0x50, 0x6b, 0x69, 0x12, 0x20, 0x0a, 0x0c, + 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x12, 0x36, + 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x53, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x5f, 0x79, 0x65, 0x61, 0x72, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, + 0x79, 0x59, 0x65, 0x61, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, + 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x2e, + 0x0a, 0x13, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, 0x73, + 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x76, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x45, + 0x0a, 0x1f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x75, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x55, 0x6e, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x31, 0x0a, 0x15, 0x63, 0x72, 0x6c, 0x5f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x72, 0x6c, 0x4e, 0x65, 0x78, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x48, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x76, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x74, 0x74, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x6f, + 0x6f, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x66, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x4c, 0x65, 0x61, 0x66, + 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x4e, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x50, + 0x65, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x43, 0x65, + 0x72, 0x74, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x98, 0x03, 0x0a, 0x12, 0x43, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x12, 0x2d, 0x0a, 0x07, + 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x44, 0x61, 0x79, 0x73, + 0x12, 0x49, 0x0a, 0x11, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x43, 0x6f, + 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x52, 0x10, 0x62, 0x61, 0x73, 0x69, 0x63, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6b, + 0x65, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x6b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x5f, + 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0b, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2f, 0x0a, 0x04, + 0x73, 0x61, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, + 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x04, 0x73, 0x61, 0x6e, 0x73, 0x12, 0x44, 0x0a, + 0x10, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x54, 0x0a, 0x10, 0x42, 0x61, 0x73, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x13, 0x0a, 0x05, 0x69, 0x73, 0x5f, 0x63, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x43, 0x61, 0x12, 0x1e, 0x0a, 0x08, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, + 0x52, 0x07, 0x70, 0x61, 0x74, 0x68, 0x4c, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x22, 0x5b, 0x0a, 0x0f, 0x53, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, + 0x64, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x64, 0x6e, 0x73, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x53, 0x0a, 0x0d, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x69, + 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, 0x69, + 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1d, 0x0a, 0x07, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x22, 0x68, 0x0a, 0x07, 0x53, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, + 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x72, 0x79, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x4f, 0x53, 0x2d, 0x50, 0x4b, 0x49, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x76, 0x31, + 0x3b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1340,47 +1430,49 @@ func file_cryptos_v1_config_proto_rawDescGZIP() []byte { return file_cryptos_v1_config_proto_rawDescData } -var file_cryptos_v1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_cryptos_v1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_cryptos_v1_config_proto_goTypes = []any{ (*MachineConfig)(nil), // 0: cryptos.v1.MachineConfig - (*StateKey)(nil), // 1: cryptos.v1.StateKey - (*KmsStateKey)(nil), // 2: cryptos.v1.KmsStateKey - (*Metadata)(nil), // 3: cryptos.v1.Metadata - (*Role)(nil), // 4: cryptos.v1.Role - (*Network)(nil), // 5: cryptos.v1.Network - (*Storage)(nil), // 6: cryptos.v1.Storage - (*Bootstrap)(nil), // 7: cryptos.v1.Bootstrap - (*Pki)(nil), // 8: cryptos.v1.Pki - (*Parent)(nil), // 9: cryptos.v1.Parent - (*CertificateProfile)(nil), // 10: cryptos.v1.CertificateProfile - (*BasicConstraints)(nil), // 11: cryptos.v1.BasicConstraints - (*SubjectAltNames)(nil), // 12: cryptos.v1.SubjectAltNames - (*X509Extension)(nil), // 13: cryptos.v1.X509Extension - (*Install)(nil), // 14: cryptos.v1.Install - (*Subject)(nil), // 15: cryptos.v1.Subject + (*Management)(nil), // 1: cryptos.v1.Management + (*StateKey)(nil), // 2: cryptos.v1.StateKey + (*KmsStateKey)(nil), // 3: cryptos.v1.KmsStateKey + (*Metadata)(nil), // 4: cryptos.v1.Metadata + (*Role)(nil), // 5: cryptos.v1.Role + (*Network)(nil), // 6: cryptos.v1.Network + (*Storage)(nil), // 7: cryptos.v1.Storage + (*Bootstrap)(nil), // 8: cryptos.v1.Bootstrap + (*Pki)(nil), // 9: cryptos.v1.Pki + (*Parent)(nil), // 10: cryptos.v1.Parent + (*CertificateProfile)(nil), // 11: cryptos.v1.CertificateProfile + (*BasicConstraints)(nil), // 12: cryptos.v1.BasicConstraints + (*SubjectAltNames)(nil), // 13: cryptos.v1.SubjectAltNames + (*X509Extension)(nil), // 14: cryptos.v1.X509Extension + (*Install)(nil), // 15: cryptos.v1.Install + (*Subject)(nil), // 16: cryptos.v1.Subject } var file_cryptos_v1_config_proto_depIdxs = []int32{ - 3, // 0: cryptos.v1.MachineConfig.metadata:type_name -> cryptos.v1.Metadata - 4, // 1: cryptos.v1.MachineConfig.role:type_name -> cryptos.v1.Role - 5, // 2: cryptos.v1.MachineConfig.network:type_name -> cryptos.v1.Network - 6, // 3: cryptos.v1.MachineConfig.storage:type_name -> cryptos.v1.Storage - 7, // 4: cryptos.v1.MachineConfig.bootstrap:type_name -> cryptos.v1.Bootstrap - 8, // 5: cryptos.v1.MachineConfig.pki:type_name -> cryptos.v1.Pki - 14, // 6: cryptos.v1.MachineConfig.install:type_name -> cryptos.v1.Install - 1, // 7: cryptos.v1.MachineConfig.state_key:type_name -> cryptos.v1.StateKey - 2, // 8: cryptos.v1.StateKey.kms:type_name -> cryptos.v1.KmsStateKey - 15, // 9: cryptos.v1.Pki.root_subject:type_name -> cryptos.v1.Subject - 10, // 10: cryptos.v1.Pki.profiles:type_name -> cryptos.v1.CertificateProfile - 9, // 11: cryptos.v1.Pki.parent:type_name -> cryptos.v1.Parent - 15, // 12: cryptos.v1.CertificateProfile.subject:type_name -> cryptos.v1.Subject - 11, // 13: cryptos.v1.CertificateProfile.basic_constraints:type_name -> cryptos.v1.BasicConstraints - 12, // 14: cryptos.v1.CertificateProfile.sans:type_name -> cryptos.v1.SubjectAltNames - 13, // 15: cryptos.v1.CertificateProfile.extra_extensions:type_name -> cryptos.v1.X509Extension - 16, // [16:16] is the sub-list for method output_type - 16, // [16:16] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 4, // 0: cryptos.v1.MachineConfig.metadata:type_name -> cryptos.v1.Metadata + 5, // 1: cryptos.v1.MachineConfig.role:type_name -> cryptos.v1.Role + 6, // 2: cryptos.v1.MachineConfig.network:type_name -> cryptos.v1.Network + 7, // 3: cryptos.v1.MachineConfig.storage:type_name -> cryptos.v1.Storage + 8, // 4: cryptos.v1.MachineConfig.bootstrap:type_name -> cryptos.v1.Bootstrap + 9, // 5: cryptos.v1.MachineConfig.pki:type_name -> cryptos.v1.Pki + 15, // 6: cryptos.v1.MachineConfig.install:type_name -> cryptos.v1.Install + 2, // 7: cryptos.v1.MachineConfig.state_key:type_name -> cryptos.v1.StateKey + 1, // 8: cryptos.v1.MachineConfig.management:type_name -> cryptos.v1.Management + 3, // 9: cryptos.v1.StateKey.kms:type_name -> cryptos.v1.KmsStateKey + 16, // 10: cryptos.v1.Pki.root_subject:type_name -> cryptos.v1.Subject + 11, // 11: cryptos.v1.Pki.profiles:type_name -> cryptos.v1.CertificateProfile + 10, // 12: cryptos.v1.Pki.parent:type_name -> cryptos.v1.Parent + 16, // 13: cryptos.v1.CertificateProfile.subject:type_name -> cryptos.v1.Subject + 12, // 14: cryptos.v1.CertificateProfile.basic_constraints:type_name -> cryptos.v1.BasicConstraints + 13, // 15: cryptos.v1.CertificateProfile.sans:type_name -> cryptos.v1.SubjectAltNames + 14, // 16: cryptos.v1.CertificateProfile.extra_extensions:type_name -> cryptos.v1.X509Extension + 17, // [17:17] is the sub-list for method output_type + 17, // [17:17] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_cryptos_v1_config_proto_init() } @@ -1402,7 +1494,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*StateKey); i { + switch v := v.(*Management); i { case 0: return &v.state case 1: @@ -1414,7 +1506,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*KmsStateKey); i { + switch v := v.(*StateKey); i { case 0: return &v.state case 1: @@ -1426,7 +1518,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*Metadata); i { + switch v := v.(*KmsStateKey); i { case 0: return &v.state case 1: @@ -1438,7 +1530,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*Role); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -1450,7 +1542,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*Network); i { + switch v := v.(*Role); i { case 0: return &v.state case 1: @@ -1462,7 +1554,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*Storage); i { + switch v := v.(*Network); i { case 0: return &v.state case 1: @@ -1474,7 +1566,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*Bootstrap); i { + switch v := v.(*Storage); i { case 0: return &v.state case 1: @@ -1486,7 +1578,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*Pki); i { + switch v := v.(*Bootstrap); i { case 0: return &v.state case 1: @@ -1498,7 +1590,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*Parent); i { + switch v := v.(*Pki); i { case 0: return &v.state case 1: @@ -1510,7 +1602,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*CertificateProfile); i { + switch v := v.(*Parent); i { case 0: return &v.state case 1: @@ -1522,7 +1614,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*BasicConstraints); i { + switch v := v.(*CertificateProfile); i { case 0: return &v.state case 1: @@ -1534,7 +1626,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*SubjectAltNames); i { + switch v := v.(*BasicConstraints); i { case 0: return &v.state case 1: @@ -1546,7 +1638,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*X509Extension); i { + switch v := v.(*SubjectAltNames); i { case 0: return &v.state case 1: @@ -1558,7 +1650,7 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*Install); i { + switch v := v.(*X509Extension); i { case 0: return &v.state case 1: @@ -1570,6 +1662,18 @@ func file_cryptos_v1_config_proto_init() { } } file_cryptos_v1_config_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*Install); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_v1_config_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*Subject); i { case 0: return &v.state @@ -1582,14 +1686,14 @@ func file_cryptos_v1_config_proto_init() { } } } - file_cryptos_v1_config_proto_msgTypes[11].OneofWrappers = []any{} + file_cryptos_v1_config_proto_msgTypes[12].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cryptos_v1_config_proto_rawDesc, NumEnums: 0, - NumMessages: 16, + NumMessages: 17, NumExtensions: 0, NumServices: 0, }, diff --git a/go/cryptos/v1/cryptosv1connect/node.connect.go b/go/cryptos/v1/cryptosv1connect/node.connect.go index 3c385ff..e1271f9 100644 --- a/go/cryptos/v1/cryptosv1connect/node.connect.go +++ b/go/cryptos/v1/cryptosv1connect/node.connect.go @@ -75,6 +75,8 @@ const ( NodeServiceCompleteKeyRotationProcedure = "/cryptos.v1.NodeService/CompleteKeyRotation" // NodeServiceResetProcedure is the fully-qualified name of the NodeService's Reset RPC. NodeServiceResetProcedure = "/cryptos.v1.NodeService/Reset" + // NodeServiceAttestProcedure is the fully-qualified name of the NodeService's Attest RPC. + NodeServiceAttestProcedure = "/cryptos.v1.NodeService/Attest" ) // NodeServiceClient is a client for the cryptos.v1.NodeService service. @@ -152,6 +154,10 @@ type NodeServiceClient interface { // maintenance mode. The caller must echo the current Root CA CN as // confirmation. Reset(context.Context, *connect.Request[v1.ResetRequest]) (*connect.Response[v1.ResetResponse], error) + // Attest signs the caller's nonce with the node's CA identity key so the + // Fleet Manager can verify possession of the node identity (challenge- + // response). ek_pub/ek_cert are reserved for future TPM EK attestation. + Attest(context.Context, *connect.Request[v1.AttestRequest]) (*connect.Response[v1.AttestResponse], error) } // NewNodeServiceClient constructs a client for the cryptos.v1.NodeService service. By default, it @@ -267,6 +273,12 @@ func NewNodeServiceClient(httpClient connect.HTTPClient, baseURL string, opts .. connect.WithSchema(nodeServiceMethods.ByName("Reset")), connect.WithClientOptions(opts...), ), + attest: connect.NewClient[v1.AttestRequest, v1.AttestResponse]( + httpClient, + baseURL+NodeServiceAttestProcedure, + connect.WithSchema(nodeServiceMethods.ByName("Attest")), + connect.WithClientOptions(opts...), + ), } } @@ -289,6 +301,7 @@ type nodeServiceClient struct { beginKeyRotation *connect.Client[v1.BeginKeyRotationRequest, v1.BeginKeyRotationResponse] completeKeyRotation *connect.Client[v1.CompleteKeyRotationRequest, v1.CompleteKeyRotationResponse] reset *connect.Client[v1.ResetRequest, v1.ResetResponse] + attest *connect.Client[v1.AttestRequest, v1.AttestResponse] } // ApplyConfig calls cryptos.v1.NodeService.ApplyConfig. @@ -376,6 +389,11 @@ func (c *nodeServiceClient) Reset(ctx context.Context, req *connect.Request[v1.R return c.reset.CallUnary(ctx, req) } +// Attest calls cryptos.v1.NodeService.Attest. +func (c *nodeServiceClient) Attest(ctx context.Context, req *connect.Request[v1.AttestRequest]) (*connect.Response[v1.AttestResponse], error) { + return c.attest.CallUnary(ctx, req) +} + // NodeServiceHandler is an implementation of the cryptos.v1.NodeService service. type NodeServiceHandler interface { // ApplyConfig sets the node's declarative machine configuration. @@ -451,6 +469,10 @@ type NodeServiceHandler interface { // maintenance mode. The caller must echo the current Root CA CN as // confirmation. Reset(context.Context, *connect.Request[v1.ResetRequest]) (*connect.Response[v1.ResetResponse], error) + // Attest signs the caller's nonce with the node's CA identity key so the + // Fleet Manager can verify possession of the node identity (challenge- + // response). ek_pub/ek_cert are reserved for future TPM EK attestation. + Attest(context.Context, *connect.Request[v1.AttestRequest]) (*connect.Response[v1.AttestResponse], error) } // NewNodeServiceHandler builds an HTTP handler from the service implementation. It returns the path @@ -562,6 +584,12 @@ func NewNodeServiceHandler(svc NodeServiceHandler, opts ...connect.HandlerOption connect.WithSchema(nodeServiceMethods.ByName("Reset")), connect.WithHandlerOptions(opts...), ) + nodeServiceAttestHandler := connect.NewUnaryHandler( + NodeServiceAttestProcedure, + svc.Attest, + connect.WithSchema(nodeServiceMethods.ByName("Attest")), + connect.WithHandlerOptions(opts...), + ) return "/cryptos.v1.NodeService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case NodeServiceApplyConfigProcedure: @@ -598,6 +626,8 @@ func NewNodeServiceHandler(svc NodeServiceHandler, opts ...connect.HandlerOption nodeServiceCompleteKeyRotationHandler.ServeHTTP(w, r) case NodeServiceResetProcedure: nodeServiceResetHandler.ServeHTTP(w, r) + case NodeServiceAttestProcedure: + nodeServiceAttestHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -674,3 +704,7 @@ func (UnimplementedNodeServiceHandler) CompleteKeyRotation(context.Context, *con func (UnimplementedNodeServiceHandler) Reset(context.Context, *connect.Request[v1.ResetRequest]) (*connect.Response[v1.ResetResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.v1.NodeService.Reset is not implemented")) } + +func (UnimplementedNodeServiceHandler) Attest(context.Context, *connect.Request[v1.AttestRequest]) (*connect.Response[v1.AttestResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.v1.NodeService.Attest is not implemented")) +} diff --git a/go/cryptos/v1/node.pb.go b/go/cryptos/v1/node.pb.go index 0f3ad43..c6e5194 100644 --- a/go/cryptos/v1/node.pb.go +++ b/go/cryptos/v1/node.pb.go @@ -601,6 +601,128 @@ func (*ResetResponse) Descriptor() ([]byte, []int) { return file_cryptos_v1_node_proto_rawDescGZIP(), []int{11} } +type AttestRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Random challenge from the manager; the node signs it with its identity key. + Nonce []byte `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"` +} + +func (x *AttestRequest) Reset() { + *x = AttestRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_v1_node_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttestRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttestRequest) ProtoMessage() {} + +func (x *AttestRequest) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_v1_node_proto_msgTypes[12] + 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 AttestRequest.ProtoReflect.Descriptor instead. +func (*AttestRequest) Descriptor() ([]byte, []int) { + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{12} +} + +func (x *AttestRequest) GetNonce() []byte { + if x != nil { + return x.Nonce + } + return nil +} + +type AttestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ECDSA signature (ASN.1 DER) over SHA-384 of the nonce. + Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` + // The node's CA identity public key, PKIX/DER encoded. + IdentityPubDer []byte `protobuf:"bytes,2,opt,name=identity_pub_der,json=identityPubDer,proto3" json:"identity_pub_der,omitempty"` + // Reserved for v1.1 TPM EK attestation (not populated in v1.0.0). + EkPub []byte `protobuf:"bytes,3,opt,name=ek_pub,json=ekPub,proto3" json:"ek_pub,omitempty"` + EkCert []byte `protobuf:"bytes,4,opt,name=ek_cert,json=ekCert,proto3" json:"ek_cert,omitempty"` +} + +func (x *AttestResponse) Reset() { + *x = AttestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_v1_node_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttestResponse) ProtoMessage() {} + +func (x *AttestResponse) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_v1_node_proto_msgTypes[13] + 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 AttestResponse.ProtoReflect.Descriptor instead. +func (*AttestResponse) Descriptor() ([]byte, []int) { + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{13} +} + +func (x *AttestResponse) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *AttestResponse) GetIdentityPubDer() []byte { + if x != nil { + return x.IdentityPubDer + } + return nil +} + +func (x *AttestResponse) GetEkPub() []byte { + if x != nil { + return x.EkPub + } + return nil +} + +func (x *AttestResponse) GetEkCert() []byte { + if x != nil { + return x.EkCert + } + return nil +} + // SignSubordinateCSRRequest carries a DER PKCS#10 CSR and the name of the // certificate profile the signer stamps (which sets CA:TRUE + pathLen). type SignSubordinateCSRRequest struct { @@ -615,7 +737,7 @@ type SignSubordinateCSRRequest struct { func (x *SignSubordinateCSRRequest) Reset() { *x = SignSubordinateCSRRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[12] + mi := &file_cryptos_v1_node_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -628,7 +750,7 @@ func (x *SignSubordinateCSRRequest) String() string { func (*SignSubordinateCSRRequest) ProtoMessage() {} func (x *SignSubordinateCSRRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[12] + mi := &file_cryptos_v1_node_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -641,7 +763,7 @@ func (x *SignSubordinateCSRRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SignSubordinateCSRRequest.ProtoReflect.Descriptor instead. func (*SignSubordinateCSRRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{12} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{14} } func (x *SignSubordinateCSRRequest) GetCsrDer() []byte { @@ -672,7 +794,7 @@ type SignSubordinateCSRResponse struct { func (x *SignSubordinateCSRResponse) Reset() { *x = SignSubordinateCSRResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[13] + mi := &file_cryptos_v1_node_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -685,7 +807,7 @@ func (x *SignSubordinateCSRResponse) String() string { func (*SignSubordinateCSRResponse) ProtoMessage() {} func (x *SignSubordinateCSRResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[13] + mi := &file_cryptos_v1_node_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -698,7 +820,7 @@ func (x *SignSubordinateCSRResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SignSubordinateCSRResponse.ProtoReflect.Descriptor instead. func (*SignSubordinateCSRResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{13} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{15} } func (x *SignSubordinateCSRResponse) GetChainDer() [][]byte { @@ -728,7 +850,7 @@ type IssueLeafRequest struct { func (x *IssueLeafRequest) Reset() { *x = IssueLeafRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[14] + mi := &file_cryptos_v1_node_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -741,7 +863,7 @@ func (x *IssueLeafRequest) String() string { func (*IssueLeafRequest) ProtoMessage() {} func (x *IssueLeafRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[14] + mi := &file_cryptos_v1_node_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -754,7 +876,7 @@ func (x *IssueLeafRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueLeafRequest.ProtoReflect.Descriptor instead. func (*IssueLeafRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{14} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{16} } func (x *IssueLeafRequest) GetCsrDer() []byte { @@ -782,7 +904,7 @@ type IssueLeafResponse struct { func (x *IssueLeafResponse) Reset() { *x = IssueLeafResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[15] + mi := &file_cryptos_v1_node_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -795,7 +917,7 @@ func (x *IssueLeafResponse) String() string { func (*IssueLeafResponse) ProtoMessage() {} func (x *IssueLeafResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[15] + mi := &file_cryptos_v1_node_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -808,7 +930,7 @@ func (x *IssueLeafResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueLeafResponse.ProtoReflect.Descriptor instead. func (*IssueLeafResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{15} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{17} } func (x *IssueLeafResponse) GetCertDer() []byte { @@ -827,7 +949,7 @@ type GetSubordinateCSRRequest struct { func (x *GetSubordinateCSRRequest) Reset() { *x = GetSubordinateCSRRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[16] + mi := &file_cryptos_v1_node_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -840,7 +962,7 @@ func (x *GetSubordinateCSRRequest) String() string { func (*GetSubordinateCSRRequest) ProtoMessage() {} func (x *GetSubordinateCSRRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[16] + mi := &file_cryptos_v1_node_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -853,7 +975,7 @@ func (x *GetSubordinateCSRRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSubordinateCSRRequest.ProtoReflect.Descriptor instead. func (*GetSubordinateCSRRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{16} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{18} } type GetSubordinateCSRResponse struct { @@ -867,7 +989,7 @@ type GetSubordinateCSRResponse struct { func (x *GetSubordinateCSRResponse) Reset() { *x = GetSubordinateCSRResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[17] + mi := &file_cryptos_v1_node_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -880,7 +1002,7 @@ func (x *GetSubordinateCSRResponse) String() string { func (*GetSubordinateCSRResponse) ProtoMessage() {} func (x *GetSubordinateCSRResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[17] + mi := &file_cryptos_v1_node_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -893,7 +1015,7 @@ func (x *GetSubordinateCSRResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSubordinateCSRResponse.ProtoReflect.Descriptor instead. func (*GetSubordinateCSRResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{17} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{19} } func (x *GetSubordinateCSRResponse) GetCsrDer() []byte { @@ -917,7 +1039,7 @@ type SubmitSubordinateCertificateRequest struct { func (x *SubmitSubordinateCertificateRequest) Reset() { *x = SubmitSubordinateCertificateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[18] + mi := &file_cryptos_v1_node_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -930,7 +1052,7 @@ func (x *SubmitSubordinateCertificateRequest) String() string { func (*SubmitSubordinateCertificateRequest) ProtoMessage() {} func (x *SubmitSubordinateCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[18] + mi := &file_cryptos_v1_node_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -943,7 +1065,7 @@ func (x *SubmitSubordinateCertificateRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use SubmitSubordinateCertificateRequest.ProtoReflect.Descriptor instead. func (*SubmitSubordinateCertificateRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{18} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{20} } func (x *SubmitSubordinateCertificateRequest) GetChainDer() [][]byte { @@ -971,7 +1093,7 @@ type SubmitSubordinateCertificateResponse struct { func (x *SubmitSubordinateCertificateResponse) Reset() { *x = SubmitSubordinateCertificateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[19] + mi := &file_cryptos_v1_node_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -984,7 +1106,7 @@ func (x *SubmitSubordinateCertificateResponse) String() string { func (*SubmitSubordinateCertificateResponse) ProtoMessage() {} func (x *SubmitSubordinateCertificateResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[19] + mi := &file_cryptos_v1_node_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -997,7 +1119,7 @@ func (x *SubmitSubordinateCertificateResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use SubmitSubordinateCertificateResponse.ProtoReflect.Descriptor instead. func (*SubmitSubordinateCertificateResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{19} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{21} } func (x *SubmitSubordinateCertificateResponse) GetIdentity() *Identity { @@ -1020,7 +1142,7 @@ type ExportCAKeyRequest struct { func (x *ExportCAKeyRequest) Reset() { *x = ExportCAKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[20] + mi := &file_cryptos_v1_node_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1033,7 +1155,7 @@ func (x *ExportCAKeyRequest) String() string { func (*ExportCAKeyRequest) ProtoMessage() {} func (x *ExportCAKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[20] + mi := &file_cryptos_v1_node_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1046,7 +1168,7 @@ func (x *ExportCAKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportCAKeyRequest.ProtoReflect.Descriptor instead. func (*ExportCAKeyRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{20} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{22} } func (x *ExportCAKeyRequest) GetPassphrase() []byte { @@ -1069,7 +1191,7 @@ type ExportCAKeyResponse struct { func (x *ExportCAKeyResponse) Reset() { *x = ExportCAKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[21] + mi := &file_cryptos_v1_node_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +1204,7 @@ func (x *ExportCAKeyResponse) String() string { func (*ExportCAKeyResponse) ProtoMessage() {} func (x *ExportCAKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[21] + mi := &file_cryptos_v1_node_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +1217,7 @@ func (x *ExportCAKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportCAKeyResponse.ProtoReflect.Descriptor instead. func (*ExportCAKeyResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{21} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{23} } func (x *ExportCAKeyResponse) GetEnvelope() []byte { @@ -1119,7 +1241,7 @@ type ImportCAKeyRequest struct { func (x *ImportCAKeyRequest) Reset() { *x = ImportCAKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[22] + mi := &file_cryptos_v1_node_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1132,7 +1254,7 @@ func (x *ImportCAKeyRequest) String() string { func (*ImportCAKeyRequest) ProtoMessage() {} func (x *ImportCAKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[22] + mi := &file_cryptos_v1_node_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1145,7 +1267,7 @@ func (x *ImportCAKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportCAKeyRequest.ProtoReflect.Descriptor instead. func (*ImportCAKeyRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{22} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{24} } func (x *ImportCAKeyRequest) GetEnvelope() []byte { @@ -1173,7 +1295,7 @@ type ImportCAKeyResponse struct { func (x *ImportCAKeyResponse) Reset() { *x = ImportCAKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[23] + mi := &file_cryptos_v1_node_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1186,7 +1308,7 @@ func (x *ImportCAKeyResponse) String() string { func (*ImportCAKeyResponse) ProtoMessage() {} func (x *ImportCAKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[23] + mi := &file_cryptos_v1_node_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1199,7 +1321,7 @@ func (x *ImportCAKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportCAKeyResponse.ProtoReflect.Descriptor instead. func (*ImportCAKeyResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{23} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{25} } func (x *ImportCAKeyResponse) GetIdentity() *Identity { @@ -1218,7 +1340,7 @@ type BeginKeyRotationRequest struct { func (x *BeginKeyRotationRequest) Reset() { *x = BeginKeyRotationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[24] + mi := &file_cryptos_v1_node_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1231,7 +1353,7 @@ func (x *BeginKeyRotationRequest) String() string { func (*BeginKeyRotationRequest) ProtoMessage() {} func (x *BeginKeyRotationRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[24] + mi := &file_cryptos_v1_node_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1244,7 +1366,7 @@ func (x *BeginKeyRotationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BeginKeyRotationRequest.ProtoReflect.Descriptor instead. func (*BeginKeyRotationRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{24} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{26} } // BeginKeyRotationResponse returns the DER CSR for the newly generated key, to @@ -1260,7 +1382,7 @@ type BeginKeyRotationResponse struct { func (x *BeginKeyRotationResponse) Reset() { *x = BeginKeyRotationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[25] + mi := &file_cryptos_v1_node_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1273,7 +1395,7 @@ func (x *BeginKeyRotationResponse) String() string { func (*BeginKeyRotationResponse) ProtoMessage() {} func (x *BeginKeyRotationResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[25] + mi := &file_cryptos_v1_node_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1286,7 +1408,7 @@ func (x *BeginKeyRotationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BeginKeyRotationResponse.ProtoReflect.Descriptor instead. func (*BeginKeyRotationResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{25} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{27} } func (x *BeginKeyRotationResponse) GetCsrDer() []byte { @@ -1310,7 +1432,7 @@ type CompleteKeyRotationRequest struct { func (x *CompleteKeyRotationRequest) Reset() { *x = CompleteKeyRotationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[26] + mi := &file_cryptos_v1_node_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1323,7 +1445,7 @@ func (x *CompleteKeyRotationRequest) String() string { func (*CompleteKeyRotationRequest) ProtoMessage() {} func (x *CompleteKeyRotationRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[26] + mi := &file_cryptos_v1_node_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1336,7 +1458,7 @@ func (x *CompleteKeyRotationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteKeyRotationRequest.ProtoReflect.Descriptor instead. func (*CompleteKeyRotationRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{26} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{28} } func (x *CompleteKeyRotationRequest) GetChainDer() [][]byte { @@ -1364,7 +1486,7 @@ type CompleteKeyRotationResponse struct { func (x *CompleteKeyRotationResponse) Reset() { *x = CompleteKeyRotationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[27] + mi := &file_cryptos_v1_node_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1377,7 +1499,7 @@ func (x *CompleteKeyRotationResponse) String() string { func (*CompleteKeyRotationResponse) ProtoMessage() {} func (x *CompleteKeyRotationResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[27] + mi := &file_cryptos_v1_node_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1390,7 +1512,7 @@ func (x *CompleteKeyRotationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteKeyRotationResponse.ProtoReflect.Descriptor instead. func (*CompleteKeyRotationResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{27} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{29} } func (x *CompleteKeyRotationResponse) GetIdentity() *Identity { @@ -1420,7 +1542,7 @@ type IssuedCert struct { func (x *IssuedCert) Reset() { *x = IssuedCert{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[28] + mi := &file_cryptos_v1_node_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1433,7 +1555,7 @@ func (x *IssuedCert) String() string { func (*IssuedCert) ProtoMessage() {} func (x *IssuedCert) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[28] + mi := &file_cryptos_v1_node_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1446,7 +1568,7 @@ func (x *IssuedCert) ProtoReflect() protoreflect.Message { // Deprecated: Use IssuedCert.ProtoReflect.Descriptor instead. func (*IssuedCert) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{28} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{30} } func (x *IssuedCert) GetSerialHex() string { @@ -1513,7 +1635,7 @@ type Revocation struct { func (x *Revocation) Reset() { *x = Revocation{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[29] + mi := &file_cryptos_v1_node_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1526,7 +1648,7 @@ func (x *Revocation) String() string { func (*Revocation) ProtoMessage() {} func (x *Revocation) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[29] + mi := &file_cryptos_v1_node_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1539,7 +1661,7 @@ func (x *Revocation) ProtoReflect() protoreflect.Message { // Deprecated: Use Revocation.ProtoReflect.Descriptor instead. func (*Revocation) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{29} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{31} } func (x *Revocation) GetSerialHex() string { @@ -1577,7 +1699,7 @@ type RevokeCertificateRequest struct { func (x *RevokeCertificateRequest) Reset() { *x = RevokeCertificateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[30] + mi := &file_cryptos_v1_node_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1590,7 +1712,7 @@ func (x *RevokeCertificateRequest) String() string { func (*RevokeCertificateRequest) ProtoMessage() {} func (x *RevokeCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[30] + mi := &file_cryptos_v1_node_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1603,7 +1725,7 @@ func (x *RevokeCertificateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeCertificateRequest.ProtoReflect.Descriptor instead. func (*RevokeCertificateRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{30} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{32} } func (x *RevokeCertificateRequest) GetSerialHex() string { @@ -1631,7 +1753,7 @@ type RevokeCertificateResponse struct { func (x *RevokeCertificateResponse) Reset() { *x = RevokeCertificateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[31] + mi := &file_cryptos_v1_node_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1644,7 +1766,7 @@ func (x *RevokeCertificateResponse) String() string { func (*RevokeCertificateResponse) ProtoMessage() {} func (x *RevokeCertificateResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[31] + mi := &file_cryptos_v1_node_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1657,7 +1779,7 @@ func (x *RevokeCertificateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeCertificateResponse.ProtoReflect.Descriptor instead. func (*RevokeCertificateResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{31} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{33} } func (x *RevokeCertificateResponse) GetRevocation() *Revocation { @@ -1676,7 +1798,7 @@ type ListIssuedRequest struct { func (x *ListIssuedRequest) Reset() { *x = ListIssuedRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[32] + mi := &file_cryptos_v1_node_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1689,7 +1811,7 @@ func (x *ListIssuedRequest) String() string { func (*ListIssuedRequest) ProtoMessage() {} func (x *ListIssuedRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[32] + mi := &file_cryptos_v1_node_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1702,7 +1824,7 @@ func (x *ListIssuedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListIssuedRequest.ProtoReflect.Descriptor instead. func (*ListIssuedRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{32} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{34} } type ListIssuedResponse struct { @@ -1716,7 +1838,7 @@ type ListIssuedResponse struct { func (x *ListIssuedResponse) Reset() { *x = ListIssuedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[33] + mi := &file_cryptos_v1_node_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1729,7 +1851,7 @@ func (x *ListIssuedResponse) String() string { func (*ListIssuedResponse) ProtoMessage() {} func (x *ListIssuedResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[33] + mi := &file_cryptos_v1_node_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1742,7 +1864,7 @@ func (x *ListIssuedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListIssuedResponse.ProtoReflect.Descriptor instead. func (*ListIssuedResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{33} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{35} } func (x *ListIssuedResponse) GetIssued() []*IssuedCert { @@ -1761,7 +1883,7 @@ type ListRevocationsRequest struct { func (x *ListRevocationsRequest) Reset() { *x = ListRevocationsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[34] + mi := &file_cryptos_v1_node_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1774,7 +1896,7 @@ func (x *ListRevocationsRequest) String() string { func (*ListRevocationsRequest) ProtoMessage() {} func (x *ListRevocationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[34] + mi := &file_cryptos_v1_node_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1787,7 +1909,7 @@ func (x *ListRevocationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRevocationsRequest.ProtoReflect.Descriptor instead. func (*ListRevocationsRequest) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{34} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{36} } type ListRevocationsResponse struct { @@ -1801,7 +1923,7 @@ type ListRevocationsResponse struct { func (x *ListRevocationsResponse) Reset() { *x = ListRevocationsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cryptos_v1_node_proto_msgTypes[35] + mi := &file_cryptos_v1_node_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1814,7 +1936,7 @@ func (x *ListRevocationsResponse) String() string { func (*ListRevocationsResponse) ProtoMessage() {} func (x *ListRevocationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_cryptos_v1_node_proto_msgTypes[35] + mi := &file_cryptos_v1_node_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1827,7 +1949,7 @@ func (x *ListRevocationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRevocationsResponse.ProtoReflect.Descriptor instead. func (*ListRevocationsResponse) Descriptor() ([]byte, []int) { - return file_cryptos_v1_node_proto_rawDescGZIP(), []int{35} + return file_cryptos_v1_node_proto_rawDescGZIP(), []int{37} } func (x *ListRevocationsResponse) GetRevocations() []*Revocation { @@ -1899,224 +2021,239 @@ var file_cryptos_v1_node_proto_rawDesc = []byte{ 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x0a, 0x19, 0x53, 0x69, 0x67, 0x6e, 0x53, - 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x12, 0x21, 0x0a, - 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x22, 0x56, 0x0a, 0x1a, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x65, 0x6d, 0x22, 0x4e, 0x0a, 0x10, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, - 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, - 0x73, 0x72, 0x44, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2e, 0x0a, 0x11, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x63, 0x65, 0x72, 0x74, 0x44, 0x65, 0x72, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x22, 0x5f, 0x0a, 0x23, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x72, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x65, 0x6d, 0x22, 0x58, 0x0a, 0x24, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x34, 0x0a, 0x12, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, - 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x22, 0x31, 0x0a, 0x13, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0x50, - 0x0a, 0x12, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, - 0x22, 0x47, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x19, 0x0a, 0x17, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x33, 0x0a, 0x18, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, 0x79, - 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x17, 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x22, 0x56, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x44, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x65, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x65, - 0x6d, 0x22, 0x4f, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x30, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x22, 0xb3, 0x02, 0x0a, 0x0a, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x43, 0x65, 0x72, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x48, 0x65, 0x78, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x6e, 0x12, - 0x39, 0x0a, 0x0a, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x6e, 0x6f, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x37, 0x0a, 0x09, 0x6e, 0x6f, - 0x74, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x41, 0x66, - 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6b, 0x69, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6b, 0x69, 0x48, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x37, 0x0a, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, - 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, - 0x6c, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x48, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x43, 0x6f, - 0x64, 0x65, 0x22, 0x5a, 0x0a, 0x18, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x48, 0x65, 0x78, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x53, - 0x0a, 0x19, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x72, - 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x13, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x44, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, - 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x22, 0x18, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0xd8, 0x0b, - 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4e, 0x0a, - 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, - 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x12, 0x20, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x65, 0x72, 0x65, 0x6d, - 0x6f, 0x6e, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x65, 0x72, - 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x42, 0x0a, 0x07, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x53, 0x52, 0x12, 0x1a, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x53, 0x52, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x12, 0x25, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x4c, 0x65, 0x61, 0x66, 0x12, 0x1c, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x12, 0x24, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, - 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x6f, - 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x88, + 0x01, 0x0a, 0x0e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x28, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x5f, + 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x50, 0x75, 0x62, 0x44, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6b, 0x5f, + 0x70, 0x75, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x65, 0x6b, 0x50, 0x75, 0x62, + 0x12, 0x17, 0x0a, 0x07, 0x65, 0x6b, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x65, 0x6b, 0x43, 0x65, 0x72, 0x74, 0x22, 0x57, 0x0a, 0x19, 0x53, 0x69, 0x67, + 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x12, + 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x56, 0x0a, 0x1a, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x72, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x65, 0x6d, 0x22, 0x4e, 0x0a, 0x10, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, + 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2e, 0x0a, 0x11, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x63, 0x65, 0x72, 0x74, 0x44, 0x65, 0x72, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x34, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x22, 0x5f, 0x0a, 0x23, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0a, 0x4c, 0x69, - 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, 0x1d, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, - 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, - 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x52, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x72, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x65, 0x6d, 0x22, 0x58, 0x0a, + 0x24, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x34, 0x0a, 0x12, 0x45, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x22, 0x31, 0x0a, + 0x13, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, + 0x22, 0x50, 0x0a, 0x12, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, + 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, + 0x73, 0x65, 0x22, 0x47, 0x0a, 0x13, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x19, 0x0a, 0x17, 0x42, + 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x33, 0x0a, 0x18, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, - 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x73, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x73, 0x72, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x73, 0x72, 0x44, 0x65, 0x72, 0x22, 0x56, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x52, 0x65, - 0x73, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x4f, 0x53, 0x2d, 0x50, - 0x4b, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, - 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x44, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x70, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x50, 0x65, 0x6d, 0x22, 0x4f, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x22, 0xb3, 0x02, 0x0a, 0x0a, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x43, + 0x65, 0x72, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, + 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x48, + 0x65, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, + 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x6e, 0x6f, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x37, 0x0a, 0x09, + 0x6e, 0x6f, 0x74, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6e, 0x6f, 0x74, + 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6b, 0x69, 0x5f, 0x68, 0x65, 0x78, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6b, 0x69, 0x48, 0x65, 0x78, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x08, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x0a, 0x52, + 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x48, 0x65, 0x78, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x43, 0x6f, 0x64, 0x65, 0x22, 0x5a, 0x0a, 0x18, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x68, 0x65, 0x78, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x48, 0x65, 0x78, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x22, 0x53, 0x0a, 0x19, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, + 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x13, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, + 0x75, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x44, 0x0a, 0x12, 0x4c, 0x69, + 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2e, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, + 0x22, 0x18, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x17, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, + 0x99, 0x0c, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x4e, 0x0a, 0x0b, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x47, 0x65, 0x74, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x12, 0x20, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x65, 0x72, + 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, + 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x42, 0x0a, 0x07, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x53, 0x52, 0x12, 0x1a, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x53, + 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x43, 0x53, 0x52, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x12, 0x25, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, + 0x53, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x12, 0x1c, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x12, 0x24, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x53, 0x52, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x75, 0x62, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, + 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, + 0x24, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, + 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0a, + 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, 0x1d, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, + 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x73, 0x73, 0x75, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x23, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x41, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x41, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x41, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, + 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x52, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x67, 0x69, + 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x05, + 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1a, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x34, 0x5a, 0x32, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x72, 0x79, 0x70, 0x74, 0x4f, + 0x53, 0x2d, 0x50, 0x4b, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2131,7 +2268,7 @@ func file_cryptos_v1_node_proto_rawDescGZIP() []byte { return file_cryptos_v1_node_proto_rawDescData } -var file_cryptos_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_cryptos_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 38) var file_cryptos_v1_node_proto_goTypes = []any{ (*ApplyConfigRequest)(nil), // 0: cryptos.v1.ApplyConfigRequest (*ApplyConfigResponse)(nil), // 1: cryptos.v1.ApplyConfigResponse @@ -2145,89 +2282,93 @@ var file_cryptos_v1_node_proto_goTypes = []any{ (*SignCSRResponse)(nil), // 9: cryptos.v1.SignCSRResponse (*ResetRequest)(nil), // 10: cryptos.v1.ResetRequest (*ResetResponse)(nil), // 11: cryptos.v1.ResetResponse - (*SignSubordinateCSRRequest)(nil), // 12: cryptos.v1.SignSubordinateCSRRequest - (*SignSubordinateCSRResponse)(nil), // 13: cryptos.v1.SignSubordinateCSRResponse - (*IssueLeafRequest)(nil), // 14: cryptos.v1.IssueLeafRequest - (*IssueLeafResponse)(nil), // 15: cryptos.v1.IssueLeafResponse - (*GetSubordinateCSRRequest)(nil), // 16: cryptos.v1.GetSubordinateCSRRequest - (*GetSubordinateCSRResponse)(nil), // 17: cryptos.v1.GetSubordinateCSRResponse - (*SubmitSubordinateCertificateRequest)(nil), // 18: cryptos.v1.SubmitSubordinateCertificateRequest - (*SubmitSubordinateCertificateResponse)(nil), // 19: cryptos.v1.SubmitSubordinateCertificateResponse - (*ExportCAKeyRequest)(nil), // 20: cryptos.v1.ExportCAKeyRequest - (*ExportCAKeyResponse)(nil), // 21: cryptos.v1.ExportCAKeyResponse - (*ImportCAKeyRequest)(nil), // 22: cryptos.v1.ImportCAKeyRequest - (*ImportCAKeyResponse)(nil), // 23: cryptos.v1.ImportCAKeyResponse - (*BeginKeyRotationRequest)(nil), // 24: cryptos.v1.BeginKeyRotationRequest - (*BeginKeyRotationResponse)(nil), // 25: cryptos.v1.BeginKeyRotationResponse - (*CompleteKeyRotationRequest)(nil), // 26: cryptos.v1.CompleteKeyRotationRequest - (*CompleteKeyRotationResponse)(nil), // 27: cryptos.v1.CompleteKeyRotationResponse - (*IssuedCert)(nil), // 28: cryptos.v1.IssuedCert - (*Revocation)(nil), // 29: cryptos.v1.Revocation - (*RevokeCertificateRequest)(nil), // 30: cryptos.v1.RevokeCertificateRequest - (*RevokeCertificateResponse)(nil), // 31: cryptos.v1.RevokeCertificateResponse - (*ListIssuedRequest)(nil), // 32: cryptos.v1.ListIssuedRequest - (*ListIssuedResponse)(nil), // 33: cryptos.v1.ListIssuedResponse - (*ListRevocationsRequest)(nil), // 34: cryptos.v1.ListRevocationsRequest - (*ListRevocationsResponse)(nil), // 35: cryptos.v1.ListRevocationsResponse - (*MachineConfig)(nil), // 36: cryptos.v1.MachineConfig - (*NodeStatus)(nil), // 37: cryptos.v1.NodeStatus - (*Identity)(nil), // 38: cryptos.v1.Identity - (CeremonyKind)(0), // 39: cryptos.v1.CeremonyKind - (*CeremonyEvent)(nil), // 40: cryptos.v1.CeremonyEvent - (*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp + (*AttestRequest)(nil), // 12: cryptos.v1.AttestRequest + (*AttestResponse)(nil), // 13: cryptos.v1.AttestResponse + (*SignSubordinateCSRRequest)(nil), // 14: cryptos.v1.SignSubordinateCSRRequest + (*SignSubordinateCSRResponse)(nil), // 15: cryptos.v1.SignSubordinateCSRResponse + (*IssueLeafRequest)(nil), // 16: cryptos.v1.IssueLeafRequest + (*IssueLeafResponse)(nil), // 17: cryptos.v1.IssueLeafResponse + (*GetSubordinateCSRRequest)(nil), // 18: cryptos.v1.GetSubordinateCSRRequest + (*GetSubordinateCSRResponse)(nil), // 19: cryptos.v1.GetSubordinateCSRResponse + (*SubmitSubordinateCertificateRequest)(nil), // 20: cryptos.v1.SubmitSubordinateCertificateRequest + (*SubmitSubordinateCertificateResponse)(nil), // 21: cryptos.v1.SubmitSubordinateCertificateResponse + (*ExportCAKeyRequest)(nil), // 22: cryptos.v1.ExportCAKeyRequest + (*ExportCAKeyResponse)(nil), // 23: cryptos.v1.ExportCAKeyResponse + (*ImportCAKeyRequest)(nil), // 24: cryptos.v1.ImportCAKeyRequest + (*ImportCAKeyResponse)(nil), // 25: cryptos.v1.ImportCAKeyResponse + (*BeginKeyRotationRequest)(nil), // 26: cryptos.v1.BeginKeyRotationRequest + (*BeginKeyRotationResponse)(nil), // 27: cryptos.v1.BeginKeyRotationResponse + (*CompleteKeyRotationRequest)(nil), // 28: cryptos.v1.CompleteKeyRotationRequest + (*CompleteKeyRotationResponse)(nil), // 29: cryptos.v1.CompleteKeyRotationResponse + (*IssuedCert)(nil), // 30: cryptos.v1.IssuedCert + (*Revocation)(nil), // 31: cryptos.v1.Revocation + (*RevokeCertificateRequest)(nil), // 32: cryptos.v1.RevokeCertificateRequest + (*RevokeCertificateResponse)(nil), // 33: cryptos.v1.RevokeCertificateResponse + (*ListIssuedRequest)(nil), // 34: cryptos.v1.ListIssuedRequest + (*ListIssuedResponse)(nil), // 35: cryptos.v1.ListIssuedResponse + (*ListRevocationsRequest)(nil), // 36: cryptos.v1.ListRevocationsRequest + (*ListRevocationsResponse)(nil), // 37: cryptos.v1.ListRevocationsResponse + (*MachineConfig)(nil), // 38: cryptos.v1.MachineConfig + (*NodeStatus)(nil), // 39: cryptos.v1.NodeStatus + (*Identity)(nil), // 40: cryptos.v1.Identity + (CeremonyKind)(0), // 41: cryptos.v1.CeremonyKind + (*CeremonyEvent)(nil), // 42: cryptos.v1.CeremonyEvent + (*timestamppb.Timestamp)(nil), // 43: google.protobuf.Timestamp } var file_cryptos_v1_node_proto_depIdxs = []int32{ - 36, // 0: cryptos.v1.ApplyConfigRequest.config:type_name -> cryptos.v1.MachineConfig - 37, // 1: cryptos.v1.GetStatusResponse.status:type_name -> cryptos.v1.NodeStatus - 38, // 2: cryptos.v1.GetIdentityResponse.identity:type_name -> cryptos.v1.Identity - 39, // 3: cryptos.v1.StartCeremonyRequest.kind:type_name -> cryptos.v1.CeremonyKind - 40, // 4: cryptos.v1.StartCeremonyResponse.event:type_name -> cryptos.v1.CeremonyEvent - 38, // 5: cryptos.v1.SubmitSubordinateCertificateResponse.identity:type_name -> cryptos.v1.Identity - 38, // 6: cryptos.v1.ImportCAKeyResponse.identity:type_name -> cryptos.v1.Identity - 38, // 7: cryptos.v1.CompleteKeyRotationResponse.identity:type_name -> cryptos.v1.Identity - 41, // 8: cryptos.v1.IssuedCert.not_before:type_name -> google.protobuf.Timestamp - 41, // 9: cryptos.v1.IssuedCert.not_after:type_name -> google.protobuf.Timestamp - 41, // 10: cryptos.v1.IssuedCert.issued_at:type_name -> google.protobuf.Timestamp - 41, // 11: cryptos.v1.Revocation.revoked_at:type_name -> google.protobuf.Timestamp - 29, // 12: cryptos.v1.RevokeCertificateResponse.revocation:type_name -> cryptos.v1.Revocation - 28, // 13: cryptos.v1.ListIssuedResponse.issued:type_name -> cryptos.v1.IssuedCert - 29, // 14: cryptos.v1.ListRevocationsResponse.revocations:type_name -> cryptos.v1.Revocation + 38, // 0: cryptos.v1.ApplyConfigRequest.config:type_name -> cryptos.v1.MachineConfig + 39, // 1: cryptos.v1.GetStatusResponse.status:type_name -> cryptos.v1.NodeStatus + 40, // 2: cryptos.v1.GetIdentityResponse.identity:type_name -> cryptos.v1.Identity + 41, // 3: cryptos.v1.StartCeremonyRequest.kind:type_name -> cryptos.v1.CeremonyKind + 42, // 4: cryptos.v1.StartCeremonyResponse.event:type_name -> cryptos.v1.CeremonyEvent + 40, // 5: cryptos.v1.SubmitSubordinateCertificateResponse.identity:type_name -> cryptos.v1.Identity + 40, // 6: cryptos.v1.ImportCAKeyResponse.identity:type_name -> cryptos.v1.Identity + 40, // 7: cryptos.v1.CompleteKeyRotationResponse.identity:type_name -> cryptos.v1.Identity + 43, // 8: cryptos.v1.IssuedCert.not_before:type_name -> google.protobuf.Timestamp + 43, // 9: cryptos.v1.IssuedCert.not_after:type_name -> google.protobuf.Timestamp + 43, // 10: cryptos.v1.IssuedCert.issued_at:type_name -> google.protobuf.Timestamp + 43, // 11: cryptos.v1.Revocation.revoked_at:type_name -> google.protobuf.Timestamp + 31, // 12: cryptos.v1.RevokeCertificateResponse.revocation:type_name -> cryptos.v1.Revocation + 30, // 13: cryptos.v1.ListIssuedResponse.issued:type_name -> cryptos.v1.IssuedCert + 31, // 14: cryptos.v1.ListRevocationsResponse.revocations:type_name -> cryptos.v1.Revocation 0, // 15: cryptos.v1.NodeService.ApplyConfig:input_type -> cryptos.v1.ApplyConfigRequest 2, // 16: cryptos.v1.NodeService.GetStatus:input_type -> cryptos.v1.GetStatusRequest 4, // 17: cryptos.v1.NodeService.GetIdentity:input_type -> cryptos.v1.GetIdentityRequest 6, // 18: cryptos.v1.NodeService.StartCeremony:input_type -> cryptos.v1.StartCeremonyRequest 8, // 19: cryptos.v1.NodeService.SignCSR:input_type -> cryptos.v1.SignCSRRequest - 12, // 20: cryptos.v1.NodeService.SignSubordinateCSR:input_type -> cryptos.v1.SignSubordinateCSRRequest - 14, // 21: cryptos.v1.NodeService.IssueLeaf:input_type -> cryptos.v1.IssueLeafRequest - 16, // 22: cryptos.v1.NodeService.GetSubordinateCSR:input_type -> cryptos.v1.GetSubordinateCSRRequest - 18, // 23: cryptos.v1.NodeService.SubmitSubordinateCertificate:input_type -> cryptos.v1.SubmitSubordinateCertificateRequest - 30, // 24: cryptos.v1.NodeService.RevokeCertificate:input_type -> cryptos.v1.RevokeCertificateRequest - 32, // 25: cryptos.v1.NodeService.ListIssued:input_type -> cryptos.v1.ListIssuedRequest - 34, // 26: cryptos.v1.NodeService.ListRevocations:input_type -> cryptos.v1.ListRevocationsRequest - 20, // 27: cryptos.v1.NodeService.ExportCAKey:input_type -> cryptos.v1.ExportCAKeyRequest - 22, // 28: cryptos.v1.NodeService.ImportCAKey:input_type -> cryptos.v1.ImportCAKeyRequest - 24, // 29: cryptos.v1.NodeService.BeginKeyRotation:input_type -> cryptos.v1.BeginKeyRotationRequest - 26, // 30: cryptos.v1.NodeService.CompleteKeyRotation:input_type -> cryptos.v1.CompleteKeyRotationRequest + 14, // 20: cryptos.v1.NodeService.SignSubordinateCSR:input_type -> cryptos.v1.SignSubordinateCSRRequest + 16, // 21: cryptos.v1.NodeService.IssueLeaf:input_type -> cryptos.v1.IssueLeafRequest + 18, // 22: cryptos.v1.NodeService.GetSubordinateCSR:input_type -> cryptos.v1.GetSubordinateCSRRequest + 20, // 23: cryptos.v1.NodeService.SubmitSubordinateCertificate:input_type -> cryptos.v1.SubmitSubordinateCertificateRequest + 32, // 24: cryptos.v1.NodeService.RevokeCertificate:input_type -> cryptos.v1.RevokeCertificateRequest + 34, // 25: cryptos.v1.NodeService.ListIssued:input_type -> cryptos.v1.ListIssuedRequest + 36, // 26: cryptos.v1.NodeService.ListRevocations:input_type -> cryptos.v1.ListRevocationsRequest + 22, // 27: cryptos.v1.NodeService.ExportCAKey:input_type -> cryptos.v1.ExportCAKeyRequest + 24, // 28: cryptos.v1.NodeService.ImportCAKey:input_type -> cryptos.v1.ImportCAKeyRequest + 26, // 29: cryptos.v1.NodeService.BeginKeyRotation:input_type -> cryptos.v1.BeginKeyRotationRequest + 28, // 30: cryptos.v1.NodeService.CompleteKeyRotation:input_type -> cryptos.v1.CompleteKeyRotationRequest 10, // 31: cryptos.v1.NodeService.Reset:input_type -> cryptos.v1.ResetRequest - 1, // 32: cryptos.v1.NodeService.ApplyConfig:output_type -> cryptos.v1.ApplyConfigResponse - 3, // 33: cryptos.v1.NodeService.GetStatus:output_type -> cryptos.v1.GetStatusResponse - 5, // 34: cryptos.v1.NodeService.GetIdentity:output_type -> cryptos.v1.GetIdentityResponse - 7, // 35: cryptos.v1.NodeService.StartCeremony:output_type -> cryptos.v1.StartCeremonyResponse - 9, // 36: cryptos.v1.NodeService.SignCSR:output_type -> cryptos.v1.SignCSRResponse - 13, // 37: cryptos.v1.NodeService.SignSubordinateCSR:output_type -> cryptos.v1.SignSubordinateCSRResponse - 15, // 38: cryptos.v1.NodeService.IssueLeaf:output_type -> cryptos.v1.IssueLeafResponse - 17, // 39: cryptos.v1.NodeService.GetSubordinateCSR:output_type -> cryptos.v1.GetSubordinateCSRResponse - 19, // 40: cryptos.v1.NodeService.SubmitSubordinateCertificate:output_type -> cryptos.v1.SubmitSubordinateCertificateResponse - 31, // 41: cryptos.v1.NodeService.RevokeCertificate:output_type -> cryptos.v1.RevokeCertificateResponse - 33, // 42: cryptos.v1.NodeService.ListIssued:output_type -> cryptos.v1.ListIssuedResponse - 35, // 43: cryptos.v1.NodeService.ListRevocations:output_type -> cryptos.v1.ListRevocationsResponse - 21, // 44: cryptos.v1.NodeService.ExportCAKey:output_type -> cryptos.v1.ExportCAKeyResponse - 23, // 45: cryptos.v1.NodeService.ImportCAKey:output_type -> cryptos.v1.ImportCAKeyResponse - 25, // 46: cryptos.v1.NodeService.BeginKeyRotation:output_type -> cryptos.v1.BeginKeyRotationResponse - 27, // 47: cryptos.v1.NodeService.CompleteKeyRotation:output_type -> cryptos.v1.CompleteKeyRotationResponse - 11, // 48: cryptos.v1.NodeService.Reset:output_type -> cryptos.v1.ResetResponse - 32, // [32:49] is the sub-list for method output_type - 15, // [15:32] is the sub-list for method input_type + 12, // 32: cryptos.v1.NodeService.Attest:input_type -> cryptos.v1.AttestRequest + 1, // 33: cryptos.v1.NodeService.ApplyConfig:output_type -> cryptos.v1.ApplyConfigResponse + 3, // 34: cryptos.v1.NodeService.GetStatus:output_type -> cryptos.v1.GetStatusResponse + 5, // 35: cryptos.v1.NodeService.GetIdentity:output_type -> cryptos.v1.GetIdentityResponse + 7, // 36: cryptos.v1.NodeService.StartCeremony:output_type -> cryptos.v1.StartCeremonyResponse + 9, // 37: cryptos.v1.NodeService.SignCSR:output_type -> cryptos.v1.SignCSRResponse + 15, // 38: cryptos.v1.NodeService.SignSubordinateCSR:output_type -> cryptos.v1.SignSubordinateCSRResponse + 17, // 39: cryptos.v1.NodeService.IssueLeaf:output_type -> cryptos.v1.IssueLeafResponse + 19, // 40: cryptos.v1.NodeService.GetSubordinateCSR:output_type -> cryptos.v1.GetSubordinateCSRResponse + 21, // 41: cryptos.v1.NodeService.SubmitSubordinateCertificate:output_type -> cryptos.v1.SubmitSubordinateCertificateResponse + 33, // 42: cryptos.v1.NodeService.RevokeCertificate:output_type -> cryptos.v1.RevokeCertificateResponse + 35, // 43: cryptos.v1.NodeService.ListIssued:output_type -> cryptos.v1.ListIssuedResponse + 37, // 44: cryptos.v1.NodeService.ListRevocations:output_type -> cryptos.v1.ListRevocationsResponse + 23, // 45: cryptos.v1.NodeService.ExportCAKey:output_type -> cryptos.v1.ExportCAKeyResponse + 25, // 46: cryptos.v1.NodeService.ImportCAKey:output_type -> cryptos.v1.ImportCAKeyResponse + 27, // 47: cryptos.v1.NodeService.BeginKeyRotation:output_type -> cryptos.v1.BeginKeyRotationResponse + 29, // 48: cryptos.v1.NodeService.CompleteKeyRotation:output_type -> cryptos.v1.CompleteKeyRotationResponse + 11, // 49: cryptos.v1.NodeService.Reset:output_type -> cryptos.v1.ResetResponse + 13, // 50: cryptos.v1.NodeService.Attest:output_type -> cryptos.v1.AttestResponse + 33, // [33:51] is the sub-list for method output_type + 15, // [15:33] is the sub-list for method input_type 15, // [15:15] is the sub-list for extension type_name 15, // [15:15] is the sub-list for extension extendee 0, // [0:15] is the sub-list for field type_name @@ -2388,7 +2529,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*SignSubordinateCSRRequest); i { + switch v := v.(*AttestRequest); i { case 0: return &v.state case 1: @@ -2400,7 +2541,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*SignSubordinateCSRResponse); i { + switch v := v.(*AttestResponse); i { case 0: return &v.state case 1: @@ -2412,7 +2553,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*IssueLeafRequest); i { + switch v := v.(*SignSubordinateCSRRequest); i { case 0: return &v.state case 1: @@ -2424,7 +2565,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*IssueLeafResponse); i { + switch v := v.(*SignSubordinateCSRResponse); i { case 0: return &v.state case 1: @@ -2436,7 +2577,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*GetSubordinateCSRRequest); i { + switch v := v.(*IssueLeafRequest); i { case 0: return &v.state case 1: @@ -2448,7 +2589,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*GetSubordinateCSRResponse); i { + switch v := v.(*IssueLeafResponse); i { case 0: return &v.state case 1: @@ -2460,7 +2601,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*SubmitSubordinateCertificateRequest); i { + switch v := v.(*GetSubordinateCSRRequest); i { case 0: return &v.state case 1: @@ -2472,7 +2613,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*SubmitSubordinateCertificateResponse); i { + switch v := v.(*GetSubordinateCSRResponse); i { case 0: return &v.state case 1: @@ -2484,7 +2625,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*ExportCAKeyRequest); i { + switch v := v.(*SubmitSubordinateCertificateRequest); i { case 0: return &v.state case 1: @@ -2496,7 +2637,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*ExportCAKeyResponse); i { + switch v := v.(*SubmitSubordinateCertificateResponse); i { case 0: return &v.state case 1: @@ -2508,7 +2649,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*ImportCAKeyRequest); i { + switch v := v.(*ExportCAKeyRequest); i { case 0: return &v.state case 1: @@ -2520,7 +2661,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*ImportCAKeyResponse); i { + switch v := v.(*ExportCAKeyResponse); i { case 0: return &v.state case 1: @@ -2532,7 +2673,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*BeginKeyRotationRequest); i { + switch v := v.(*ImportCAKeyRequest); i { case 0: return &v.state case 1: @@ -2544,7 +2685,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*BeginKeyRotationResponse); i { + switch v := v.(*ImportCAKeyResponse); i { case 0: return &v.state case 1: @@ -2556,7 +2697,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*CompleteKeyRotationRequest); i { + switch v := v.(*BeginKeyRotationRequest); i { case 0: return &v.state case 1: @@ -2568,7 +2709,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*CompleteKeyRotationResponse); i { + switch v := v.(*BeginKeyRotationResponse); i { case 0: return &v.state case 1: @@ -2580,7 +2721,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*IssuedCert); i { + switch v := v.(*CompleteKeyRotationRequest); i { case 0: return &v.state case 1: @@ -2592,7 +2733,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*Revocation); i { + switch v := v.(*CompleteKeyRotationResponse); i { case 0: return &v.state case 1: @@ -2604,7 +2745,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*RevokeCertificateRequest); i { + switch v := v.(*IssuedCert); i { case 0: return &v.state case 1: @@ -2616,7 +2757,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*RevokeCertificateResponse); i { + switch v := v.(*Revocation); i { case 0: return &v.state case 1: @@ -2628,7 +2769,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*ListIssuedRequest); i { + switch v := v.(*RevokeCertificateRequest); i { case 0: return &v.state case 1: @@ -2640,7 +2781,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*ListIssuedResponse); i { + switch v := v.(*RevokeCertificateResponse); i { case 0: return &v.state case 1: @@ -2652,7 +2793,7 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*ListRevocationsRequest); i { + switch v := v.(*ListIssuedRequest); i { case 0: return &v.state case 1: @@ -2664,6 +2805,30 @@ func file_cryptos_v1_node_proto_init() { } } file_cryptos_v1_node_proto_msgTypes[35].Exporter = func(v any, i int) any { + switch v := v.(*ListIssuedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_v1_node_proto_msgTypes[36].Exporter = func(v any, i int) any { + switch v := v.(*ListRevocationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cryptos_v1_node_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*ListRevocationsResponse); i { case 0: return &v.state @@ -2682,7 +2847,7 @@ func file_cryptos_v1_node_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cryptos_v1_node_proto_rawDesc, NumEnums: 0, - NumMessages: 36, + NumMessages: 38, NumExtensions: 0, NumServices: 1, }, diff --git a/go/cryptos/v1/node_grpc.pb.go b/go/cryptos/v1/node_grpc.pb.go index e6c8d0a..569d6d4 100644 --- a/go/cryptos/v1/node_grpc.pb.go +++ b/go/cryptos/v1/node_grpc.pb.go @@ -36,6 +36,7 @@ const ( NodeService_BeginKeyRotation_FullMethodName = "/cryptos.v1.NodeService/BeginKeyRotation" NodeService_CompleteKeyRotation_FullMethodName = "/cryptos.v1.NodeService/CompleteKeyRotation" NodeService_Reset_FullMethodName = "/cryptos.v1.NodeService/Reset" + NodeService_Attest_FullMethodName = "/cryptos.v1.NodeService/Attest" ) // NodeServiceClient is the client API for NodeService service. @@ -122,6 +123,10 @@ type NodeServiceClient interface { // maintenance mode. The caller must echo the current Root CA CN as // confirmation. Reset(ctx context.Context, in *ResetRequest, opts ...grpc.CallOption) (*ResetResponse, error) + // Attest signs the caller's nonce with the node's CA identity key so the + // Fleet Manager can verify possession of the node identity (challenge- + // response). ek_pub/ek_cert are reserved for future TPM EK attestation. + Attest(ctx context.Context, in *AttestRequest, opts ...grpc.CallOption) (*AttestResponse, error) } type nodeServiceClient struct { @@ -311,6 +316,16 @@ func (c *nodeServiceClient) Reset(ctx context.Context, in *ResetRequest, opts .. return out, nil } +func (c *nodeServiceClient) Attest(ctx context.Context, in *AttestRequest, opts ...grpc.CallOption) (*AttestResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AttestResponse) + err := c.cc.Invoke(ctx, NodeService_Attest_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // NodeServiceServer is the server API for NodeService service. // All implementations should embed UnimplementedNodeServiceServer // for forward compatibility. @@ -395,6 +410,10 @@ type NodeServiceServer interface { // maintenance mode. The caller must echo the current Root CA CN as // confirmation. Reset(context.Context, *ResetRequest) (*ResetResponse, error) + // Attest signs the caller's nonce with the node's CA identity key so the + // Fleet Manager can verify possession of the node identity (challenge- + // response). ek_pub/ek_cert are reserved for future TPM EK attestation. + Attest(context.Context, *AttestRequest) (*AttestResponse, error) } // UnimplementedNodeServiceServer should be embedded to have @@ -455,6 +474,9 @@ func (UnimplementedNodeServiceServer) CompleteKeyRotation(context.Context, *Comp func (UnimplementedNodeServiceServer) Reset(context.Context, *ResetRequest) (*ResetResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Reset not implemented") } +func (UnimplementedNodeServiceServer) Attest(context.Context, *AttestRequest) (*AttestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Attest not implemented") +} func (UnimplementedNodeServiceServer) testEmbeddedByValue() {} // UnsafeNodeServiceServer may be embedded to opt out of forward compatibility for this service. @@ -774,6 +796,24 @@ func _NodeService_Reset_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _NodeService_Attest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AttestRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodeServiceServer).Attest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: NodeService_Attest_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodeServiceServer).Attest(ctx, req.(*AttestRequest)) + } + return interceptor(ctx, in, info, handler) +} + // NodeService_ServiceDesc is the grpc.ServiceDesc for NodeService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -845,6 +885,10 @@ var NodeService_ServiceDesc = grpc.ServiceDesc{ MethodName: "Reset", Handler: _NodeService_Reset_Handler, }, + { + MethodName: "Attest", + Handler: _NodeService_Attest_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/proto/cryptos/fleet/v1/fleet.proto b/proto/cryptos/fleet/v1/fleet.proto index 5ad09e1..89d9141 100644 --- a/proto/cryptos/fleet/v1/fleet.proto +++ b/proto/cryptos/fleet/v1/fleet.proto @@ -21,9 +21,10 @@ package cryptos.fleet.v1; option go_package = "github.com/CryptOS-PKI/api/go/cryptos/fleet/v1;fleetv1"; -// FleetService is the Fleet Manager's read surface over a set of CryptOS -// nodes. It aggregates each node's status and identity behind a single -// Connect endpoint for the manager's web UI. +// FleetService is the Fleet Manager's surface over a set of CryptOS nodes: +// read aggregation (status, identity, certificates, catalog) plus the +// operator-driven enrollment writes. A single Connect endpoint for the +// manager's web UI. service FleetService { // ListNodes returns a summary for every node the manager knows about. rpc ListNodes(ListNodesRequest) returns (ListNodesResponse); @@ -50,6 +51,17 @@ service FleetService { // requests. rpc ListEnrollments(ListEnrollmentsRequest) returns (ListEnrollmentsResponse); + // CreateEnrollment opens a new enrollment request (LINK a node or provision a + // SUBORDINATE CA); the manager verifies attestation for LINK. + rpc CreateEnrollment(CreateEnrollmentRequest) returns (CreateEnrollmentResponse); + + // ApproveEnrollment approves a pending request (LINK -> ApplyConfig managed + // state; SUBORDINATE -> CSR-ferry). + rpc ApproveEnrollment(ApproveEnrollmentRequest) returns (ApproveEnrollmentResponse); + + // RejectEnrollment rejects a pending request with a reason. + rpc RejectEnrollment(RejectEnrollmentRequest) returns (RejectEnrollmentResponse); + // WhoAmI echoes the operator identity the manager verified from the // presented client certificate (subject CN, cert serial, access level). rpc WhoAmI(WhoAmIRequest) returns (WhoAmIResponse); @@ -221,6 +233,45 @@ message EnrollmentRequest { string requested_at = 11; string rejection_reason = 12; string admitted_node_name = 13; + // LINK|SUBORDINATE + string kind = 14; + // SPKI SHA-256 (hex) of the node identity pinned at first enroll (TOFU). + string pinned_key_sha256 = 15; +} + +message CreateEnrollmentRequest { + // LINK|SUBORDINATE + string kind = 1; + // LINK: how to reach + initially trust the node. + string node_endpoint = 2; + string admin_cert_pem = 3; + string admin_key_pem = 4; + string ca_pem = 5; + // SUBORDINATE: the child node, its parent CA, and the issuing profile. + string child_node = 6; + string parent_cn = 7; + string profile = 8; +} + +message CreateEnrollmentResponse { + EnrollmentRequest enrollment = 1; +} + +message ApproveEnrollmentRequest { + string id = 1; +} + +message ApproveEnrollmentResponse { + EnrollmentRequest enrollment = 1; +} + +message RejectEnrollmentRequest { + string id = 1; + string reason = 2; +} + +message RejectEnrollmentResponse { + EnrollmentRequest enrollment = 1; } message WhoAmIRequest {} diff --git a/proto/cryptos/v1/config.proto b/proto/cryptos/v1/config.proto index bf02009..0feeb28 100644 --- a/proto/cryptos/v1/config.proto +++ b/proto/cryptos/v1/config.proto @@ -41,6 +41,20 @@ message MachineConfig { // state_key selects how the LUKS state-partition key is protected. Empty // uses the node's build-time default (nodeid or tpm). StateKey state_key = 10; + // management carries FM-managed state pushed via ApplyConfig when a node is + // linked to a Fleet Manager (LINK enrollment). Empty on unmanaged nodes. + Management management = 11; +} + +// Management marks a node as Fleet-Manager-managed. Set by a LINK enrollment +// approval via ApplyConfig; takes effect on reboot. +message Management { + // Subject CN of the managing Fleet Manager operator identity. + string manager_cn = 1; + // PEM trust anchor (operator CA) the node adds to its authorized client CAs. + string trust_pem = 2; + // When true, the node's embedded operator surface is read-only. + bool operator_surface_readonly = 3; } // StateKey selects the protector for the encrypted state-partition key. diff --git a/proto/cryptos/v1/node.proto b/proto/cryptos/v1/node.proto index 1218cc4..cef03cf 100644 --- a/proto/cryptos/v1/node.proto +++ b/proto/cryptos/v1/node.proto @@ -123,6 +123,11 @@ service NodeService { // maintenance mode. The caller must echo the current Root CA CN as // confirmation. rpc Reset(ResetRequest) returns (ResetResponse); + + // Attest signs the caller's nonce with the node's CA identity key so the + // Fleet Manager can verify possession of the node identity (challenge- + // response). ek_pub/ek_cert are reserved for future TPM EK attestation. + rpc Attest(AttestRequest) returns (AttestResponse); } message ApplyConfigRequest { @@ -182,6 +187,21 @@ message ResetRequest { message ResetResponse {} +message AttestRequest { + // Random challenge from the manager; the node signs it with its identity key. + bytes nonce = 1; +} + +message AttestResponse { + // ECDSA signature (ASN.1 DER) over SHA-384 of the nonce. + bytes signature = 1; + // The node's CA identity public key, PKIX/DER encoded. + bytes identity_pub_der = 2; + // Reserved for v1.1 TPM EK attestation (not populated in v1.0.0). + bytes ek_pub = 3; + bytes ek_cert = 4; +} + // SignSubordinateCSRRequest carries a DER PKCS#10 CSR and the name of the // certificate profile the signer stamps (which sets CA:TRUE + pathLen). message SignSubordinateCSRRequest {