diff --git a/gen/ts/cryptos/fleet/v1/fleet_pb.ts b/gen/ts/cryptos/fleet/v1/fleet_pb.ts index ec3a6d8..d7b7b78 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("ChxjcnlwdG9zL2ZsZWV0L3YxL2ZsZWV0LnByb3RvEhBjcnlwdG9zLmZsZWV0LnYxIhIKEExpc3ROb2Rlc1JlcXVlc3QiQQoRTGlzdE5vZGVzUmVzcG9uc2USLAoFbm9kZXMYASADKAsyHS5jcnlwdG9zLmZsZWV0LnYxLk5vZGVTdW1tYXJ5Ih4KDkdldE5vZGVSZXF1ZXN0EgwKBG5hbWUYASABKAkiPQoPR2V0Tm9kZVJlc3BvbnNlEioKBG5vZGUYASABKAsyHC5jcnlwdG9zLmZsZWV0LnYxLk5vZGVEZXRhaWwiJwoXTGlzdENlcnRpZmljYXRlc1JlcXVlc3QSDAoEbm9kZRgBIAEoCSJPChhMaXN0Q2VydGlmaWNhdGVzUmVzcG9uc2USMwoMY2VydGlmaWNhdGVzGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0aWZpY2F0ZSIVChNMaXN0UHJvZmlsZXNSZXF1ZXN0IkQKFExpc3RQcm9maWxlc1Jlc3BvbnNlEiwKBWl0ZW1zGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0UHJvZmlsZSIVChNMaXN0QWRhcHRlcnNSZXF1ZXN0IkoKFExpc3RBZGFwdGVyc1Jlc3BvbnNlEjIKBWl0ZW1zGAEgAygLMiMuY3J5cHRvcy5mbGVldC52MS5FbnJvbGxtZW50QWRhcHRlciISChBMaXN0QXVkaXRSZXF1ZXN0IkAKEUxpc3RBdWRpdFJlc3BvbnNlEisKBWl0ZW1zGAEgAygLMhwuY3J5cHRvcy5mbGVldC52MS5BdWRpdEV2ZW50IhgKFkxpc3RFbnJvbGxtZW50c1JlcXVlc3QiTQoXTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USMgoFaXRlbXMYASADKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0Iq8BCgtOb2RlU3VtbWFyeRIMCgRuYW1lGAEgASgJEg8KB2FkZHJlc3MYAiABKAkSDAoEcm9sZRgDIAEoCRIWCg5pZGVudGl0eV9zdGF0ZRgEIAEoCRIKCgJjbhgFIAEoCRIOCgZpc3N1ZXIYBiABKAkSKAoGaGVhbHRoGAcgASgOMhguY3J5cHRvcy5mbGVldC52MS5IZWFsdGgSFQoNaGVhbHRoX2RldGFpbBgIIAEoCSJJCgxOb2RlSWRlbnRpdHkSEQoJY2hhaW5fcGVtGAEgASgJEhEKCWNoYWluX2RlchgCIAMoDBITCgtsZWFmX3NoYTI1NhgDIAEoCSKpAQoKTm9kZURldGFpbBIuCgdzdW1tYXJ5GAEgASgLMh0uY3J5cHRvcy5mbGVldC52MS5Ob2RlU3VtbWFyeRIwCghpZGVudGl0eRgCIAEoCzIeLmNyeXB0b3MuZmxlZXQudjEuTm9kZUlkZW50aXR5EhUKDXRwbV9hdmFpbGFibGUYAyABKAgSEgoKYm9vdF9jb3VudBgEIAEoBBIOCgZ1cHRpbWUYBSABKAkiwAEKC0NlcnRpZmljYXRlEg4KBnNlcmlhbBgBIAEoCRISCgpzdWJqZWN0X2NuGAIgASgJEhMKC2lzc3Vlcl9ub2RlGAMgASgJEgwKBGtpbmQYBCABKAkSDgoGc3RhdHVzGAUgASgJEhIKCm5vdF9iZWZvcmUYBiABKAkSEQoJbm90X2FmdGVyGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkSEgoKcmV2b2tlZF9hdBgJIAEoCRIOCgZyZWFzb24YCiABKAkinAEKC0NlcnRQcm9maWxlEgwKBG5hbWUYASABKAkSDwoHa2V5X2FsZxgCIAEoCRIRCglrZXlfdXNhZ2UYAyADKAkSFQoNZXh0X2tleV91c2FnZRgEIAMoCRINCgVpc19jYRgFIAEoCBIQCghwYXRoX2xlbhgGIAEoBRIMCgRzYW5zGAcgAygJEhUKDXZhbGlkaXR5X2RheXMYCCABKAUijQEKEUVucm9sbG1lbnRBZGFwdGVyEgwKBGtpbmQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghlbmRwb2ludBgDIAEoCRIPCgdwcm9maWxlGAQgASgJEg8KB2VuYWJsZWQYBSABKAgSEgoKY2hhbGxlbmdlcxgGIAMoCRIUCgxncG9fdGVtcGxhdGUYByABKAkibQoKQXVkaXRFdmVudBIKCgJpZBgBIAEoCRIKCgJhdBgCIAEoCRIMCgRraW5kGAMgASgJEg8KB3N1bW1hcnkYBCABKAkSEwoLdGFyZ2V0X2tpbmQYBSABKAkSEwoLdGFyZ2V0X3BhdGgYBiABKAki1QIKEUVucm9sbG1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEhUKDXByb3Bvc2VkX25hbWUYAiABKAkSDAoEcm9sZRgDIAEoCRIRCglwYXJlbnRfY24YBCABKAkSDwoHYWRkcmVzcxgFIAEoCRIOCgZzdGF0dXMYBiABKAkSGwoTYXR0ZXN0YXRpb25fc3VtbWFyeRgHIAEoCRIbChNhdHRlc3RhdGlvbl9ub2RlX2lkGAggASgJEhQKDGNzcl9rZXlfdHlwZRgJIAEoCRIWCg5jc3Jfc3ViamVjdF9jbhgKIAEoCRIUCgxyZXF1ZXN0ZWRfYXQYCyABKAkSGAoQcmVqZWN0aW9uX3JlYXNvbhgMIAEoCRIaChJhZG1pdHRlZF9ub2RlX25hbWUYDSABKAkSDAoEa2luZBgOIAEoCRIZChFwaW5uZWRfa2V5X3NoYTI1NhgPIAEoCSK1AQoXQ3JlYXRlRW5yb2xsbWVudFJlcXVlc3QSDAoEa2luZBgBIAEoCRIVCg1ub2RlX2VuZHBvaW50GAIgASgJEhYKDmFkbWluX2NlcnRfcGVtGAMgASgJEhUKDWFkbWluX2tleV9wZW0YBCABKAkSDgoGY2FfcGVtGAUgASgJEhIKCmNoaWxkX25vZGUYBiABKAkSEQoJcGFyZW50X2NuGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkiUwoYQ3JlYXRlRW5yb2xsbWVudFJlc3BvbnNlEjcKCmVucm9sbG1lbnQYASABKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0InwKGEFwcHJvdmVFbnJvbGxtZW50UmVxdWVzdBIKCgJpZBgBIAEoCRIVCg1ub2RlX2VuZHBvaW50GAIgASgJEhYKDmFkbWluX2NlcnRfcGVtGAMgASgJEhUKDWFkbWluX2tleV9wZW0YBCABKAkSDgoGY2FfcGVtGAUgASgJIlQKGUFwcHJvdmVFbnJvbGxtZW50UmVzcG9uc2USNwoKZW5yb2xsbWVudBgBIAEoCzIjLmNyeXB0b3MuZmxlZXQudjEuRW5yb2xsbWVudFJlcXVlc3QiNQoXUmVqZWN0RW5yb2xsbWVudFJlcXVlc3QSCgoCaWQYASABKAkSDgoGcmVhc29uGAIgASgJIlMKGFJlamVjdEVucm9sbG1lbnRSZXNwb25zZRI3CgplbnJvbGxtZW50GAEgASgLMiMuY3J5cHRvcy5mbGVldC52MS5FbnJvbGxtZW50UmVxdWVzdCIPCg1XaG9BbUlSZXF1ZXN0Ij0KEE9wZXJhdG9ySWRlbnRpdHkSCgoCY24YASABKAkSDgoGc2VyaWFsGAIgASgJEg0KBWxldmVsGAMgASgJIkYKDldob0FtSVJlc3BvbnNlEjQKCG9wZXJhdG9yGAEgASgLMiIuY3J5cHRvcy5mbGVldC52MS5PcGVyYXRvcklkZW50aXR5IlYKGFJldm9rZUNlcnRpZmljYXRlUmVxdWVzdBIRCglub2RlX25hbWUYASABKAkSEgoKc2VyaWFsX2hleBgCIAEoCRITCgtyZWFzb25fY29kZRgDIAEoBSJYChlSZXZva2VDZXJ0aWZpY2F0ZVJlc3BvbnNlEhIKCnNlcmlhbF9oZXgYASABKAkSEgoKcmV2b2tlZF9hdBgCIAEoCRITCgtyZWFzb25fY29kZRgDIAEoBSJMChBJc3N1ZUxlYWZSZXF1ZXN0EhEKCW5vZGVfbmFtZRgBIAEoCRIPCgdjc3JfZGVyGAIgASgMEhQKDHByb2ZpbGVfbmFtZRgDIAEoCSIlChFJc3N1ZUxlYWZSZXNwb25zZRIQCghjZXJ0X2RlchgBIAEoDCpSCgZIZWFsdGgSFgoSSEVBTFRIX1VOU1BFQ0lGSUVEEAASDQoJSEVBTFRIX1VQEAESDwoLSEVBTFRIX0RPV04QAhIQCgxIRUFMVEhfRVJST1IQAzLwCQoMRmxlZXRTZXJ2aWNlElQKCUxpc3ROb2RlcxIiLmNyeXB0b3MuZmxlZXQudjEuTGlzdE5vZGVzUmVxdWVzdBojLmNyeXB0b3MuZmxlZXQudjEuTGlzdE5vZGVzUmVzcG9uc2USTgoHR2V0Tm9kZRIgLmNyeXB0b3MuZmxlZXQudjEuR2V0Tm9kZVJlcXVlc3QaIS5jcnlwdG9zLmZsZWV0LnYxLkdldE5vZGVSZXNwb25zZRJpChBMaXN0Q2VydGlmaWNhdGVzEikuY3J5cHRvcy5mbGVldC52MS5MaXN0Q2VydGlmaWNhdGVzUmVxdWVzdBoqLmNyeXB0b3MuZmxlZXQudjEuTGlzdENlcnRpZmljYXRlc1Jlc3BvbnNlEl0KDExpc3RQcm9maWxlcxIlLmNyeXB0b3MuZmxlZXQudjEuTGlzdFByb2ZpbGVzUmVxdWVzdBomLmNyeXB0b3MuZmxlZXQudjEuTGlzdFByb2ZpbGVzUmVzcG9uc2USXQoMTGlzdEFkYXB0ZXJzEiUuY3J5cHRvcy5mbGVldC52MS5MaXN0QWRhcHRlcnNSZXF1ZXN0GiYuY3J5cHRvcy5mbGVldC52MS5MaXN0QWRhcHRlcnNSZXNwb25zZRJUCglMaXN0QXVkaXQSIi5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBdWRpdFJlcXVlc3QaIy5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBdWRpdFJlc3BvbnNlEmYKD0xpc3RFbnJvbGxtZW50cxIoLmNyeXB0b3MuZmxlZXQudjEuTGlzdEVucm9sbG1lbnRzUmVxdWVzdBopLmNyeXB0b3MuZmxlZXQudjEuTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USaQoQQ3JlYXRlRW5yb2xsbWVudBIpLmNyeXB0b3MuZmxlZXQudjEuQ3JlYXRlRW5yb2xsbWVudFJlcXVlc3QaKi5jcnlwdG9zLmZsZWV0LnYxLkNyZWF0ZUVucm9sbG1lbnRSZXNwb25zZRJsChFBcHByb3ZlRW5yb2xsbWVudBIqLmNyeXB0b3MuZmxlZXQudjEuQXBwcm92ZUVucm9sbG1lbnRSZXF1ZXN0GisuY3J5cHRvcy5mbGVldC52MS5BcHByb3ZlRW5yb2xsbWVudFJlc3BvbnNlEmkKEFJlamVjdEVucm9sbG1lbnQSKS5jcnlwdG9zLmZsZWV0LnYxLlJlamVjdEVucm9sbG1lbnRSZXF1ZXN0GiouY3J5cHRvcy5mbGVldC52MS5SZWplY3RFbnJvbGxtZW50UmVzcG9uc2USSwoGV2hvQW1JEh8uY3J5cHRvcy5mbGVldC52MS5XaG9BbUlSZXF1ZXN0GiAuY3J5cHRvcy5mbGVldC52MS5XaG9BbUlSZXNwb25zZRJsChFSZXZva2VDZXJ0aWZpY2F0ZRIqLmNyeXB0b3MuZmxlZXQudjEuUmV2b2tlQ2VydGlmaWNhdGVSZXF1ZXN0GisuY3J5cHRvcy5mbGVldC52MS5SZXZva2VDZXJ0aWZpY2F0ZVJlc3BvbnNlElQKCUlzc3VlTGVhZhIiLmNyeXB0b3MuZmxlZXQudjEuSXNzdWVMZWFmUmVxdWVzdBojLmNyeXB0b3MuZmxlZXQudjEuSXNzdWVMZWFmUmVzcG9uc2VCOFo2Z2l0aHViLmNvbS9DcnlwdE9TLVBLSS9hcGkvZ28vY3J5cHRvcy9mbGVldC92MTtmbGVldHYxYgZwcm90bzM"); + fileDesc("ChxjcnlwdG9zL2ZsZWV0L3YxL2ZsZWV0LnByb3RvEhBjcnlwdG9zLmZsZWV0LnYxIhIKEExpc3ROb2Rlc1JlcXVlc3QiQQoRTGlzdE5vZGVzUmVzcG9uc2USLAoFbm9kZXMYASADKAsyHS5jcnlwdG9zLmZsZWV0LnYxLk5vZGVTdW1tYXJ5Ih4KDkdldE5vZGVSZXF1ZXN0EgwKBG5hbWUYASABKAkiPQoPR2V0Tm9kZVJlc3BvbnNlEioKBG5vZGUYASABKAsyHC5jcnlwdG9zLmZsZWV0LnYxLk5vZGVEZXRhaWwiJwoXTGlzdENlcnRpZmljYXRlc1JlcXVlc3QSDAoEbm9kZRgBIAEoCSJPChhMaXN0Q2VydGlmaWNhdGVzUmVzcG9uc2USMwoMY2VydGlmaWNhdGVzGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0aWZpY2F0ZSIVChNMaXN0UHJvZmlsZXNSZXF1ZXN0IkQKFExpc3RQcm9maWxlc1Jlc3BvbnNlEiwKBWl0ZW1zGAEgAygLMh0uY3J5cHRvcy5mbGVldC52MS5DZXJ0UHJvZmlsZSIVChNMaXN0QWRhcHRlcnNSZXF1ZXN0IkoKFExpc3RBZGFwdGVyc1Jlc3BvbnNlEjIKBWl0ZW1zGAEgAygLMiMuY3J5cHRvcy5mbGVldC52MS5FbnJvbGxtZW50QWRhcHRlciISChBMaXN0QXVkaXRSZXF1ZXN0IkAKEUxpc3RBdWRpdFJlc3BvbnNlEisKBWl0ZW1zGAEgAygLMhwuY3J5cHRvcy5mbGVldC52MS5BdWRpdEV2ZW50IhgKFkxpc3RFbnJvbGxtZW50c1JlcXVlc3QiTQoXTGlzdEVucm9sbG1lbnRzUmVzcG9uc2USMgoFaXRlbXMYASADKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0Iq8BCgtOb2RlU3VtbWFyeRIMCgRuYW1lGAEgASgJEg8KB2FkZHJlc3MYAiABKAkSDAoEcm9sZRgDIAEoCRIWCg5pZGVudGl0eV9zdGF0ZRgEIAEoCRIKCgJjbhgFIAEoCRIOCgZpc3N1ZXIYBiABKAkSKAoGaGVhbHRoGAcgASgOMhguY3J5cHRvcy5mbGVldC52MS5IZWFsdGgSFQoNaGVhbHRoX2RldGFpbBgIIAEoCSJJCgxOb2RlSWRlbnRpdHkSEQoJY2hhaW5fcGVtGAEgASgJEhEKCWNoYWluX2RlchgCIAMoDBITCgtsZWFmX3NoYTI1NhgDIAEoCSKpAQoKTm9kZURldGFpbBIuCgdzdW1tYXJ5GAEgASgLMh0uY3J5cHRvcy5mbGVldC52MS5Ob2RlU3VtbWFyeRIwCghpZGVudGl0eRgCIAEoCzIeLmNyeXB0b3MuZmxlZXQudjEuTm9kZUlkZW50aXR5EhUKDXRwbV9hdmFpbGFibGUYAyABKAgSEgoKYm9vdF9jb3VudBgEIAEoBBIOCgZ1cHRpbWUYBSABKAkiwAEKC0NlcnRpZmljYXRlEg4KBnNlcmlhbBgBIAEoCRISCgpzdWJqZWN0X2NuGAIgASgJEhMKC2lzc3Vlcl9ub2RlGAMgASgJEgwKBGtpbmQYBCABKAkSDgoGc3RhdHVzGAUgASgJEhIKCm5vdF9iZWZvcmUYBiABKAkSEQoJbm90X2FmdGVyGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkSEgoKcmV2b2tlZF9hdBgJIAEoCRIOCgZyZWFzb24YCiABKAkinAEKC0NlcnRQcm9maWxlEgwKBG5hbWUYASABKAkSDwoHa2V5X2FsZxgCIAEoCRIRCglrZXlfdXNhZ2UYAyADKAkSFQoNZXh0X2tleV91c2FnZRgEIAMoCRINCgVpc19jYRgFIAEoCBIQCghwYXRoX2xlbhgGIAEoBRIMCgRzYW5zGAcgAygJEhUKDXZhbGlkaXR5X2RheXMYCCABKAUijQEKEUVucm9sbG1lbnRBZGFwdGVyEgwKBGtpbmQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghlbmRwb2ludBgDIAEoCRIPCgdwcm9maWxlGAQgASgJEg8KB2VuYWJsZWQYBSABKAgSEgoKY2hhbGxlbmdlcxgGIAMoCRIUCgxncG9fdGVtcGxhdGUYByABKAkibQoKQXVkaXRFdmVudBIKCgJpZBgBIAEoCRIKCgJhdBgCIAEoCRIMCgRraW5kGAMgASgJEg8KB3N1bW1hcnkYBCABKAkSEwoLdGFyZ2V0X2tpbmQYBSABKAkSEwoLdGFyZ2V0X3BhdGgYBiABKAki1QIKEUVucm9sbG1lbnRSZXF1ZXN0EgoKAmlkGAEgASgJEhUKDXByb3Bvc2VkX25hbWUYAiABKAkSDAoEcm9sZRgDIAEoCRIRCglwYXJlbnRfY24YBCABKAkSDwoHYWRkcmVzcxgFIAEoCRIOCgZzdGF0dXMYBiABKAkSGwoTYXR0ZXN0YXRpb25fc3VtbWFyeRgHIAEoCRIbChNhdHRlc3RhdGlvbl9ub2RlX2lkGAggASgJEhQKDGNzcl9rZXlfdHlwZRgJIAEoCRIWCg5jc3Jfc3ViamVjdF9jbhgKIAEoCRIUCgxyZXF1ZXN0ZWRfYXQYCyABKAkSGAoQcmVqZWN0aW9uX3JlYXNvbhgMIAEoCRIaChJhZG1pdHRlZF9ub2RlX25hbWUYDSABKAkSDAoEa2luZBgOIAEoCRIZChFwaW5uZWRfa2V5X3NoYTI1NhgPIAEoCSK1AQoXQ3JlYXRlRW5yb2xsbWVudFJlcXVlc3QSDAoEa2luZBgBIAEoCRIVCg1ub2RlX2VuZHBvaW50GAIgASgJEhYKDmFkbWluX2NlcnRfcGVtGAMgASgJEhUKDWFkbWluX2tleV9wZW0YBCABKAkSDgoGY2FfcGVtGAUgASgJEhIKCmNoaWxkX25vZGUYBiABKAkSEQoJcGFyZW50X2NuGAcgASgJEg8KB3Byb2ZpbGUYCCABKAkiUwoYQ3JlYXRlRW5yb2xsbWVudFJlc3BvbnNlEjcKCmVucm9sbG1lbnQYASABKAsyIy5jcnlwdG9zLmZsZWV0LnYxLkVucm9sbG1lbnRSZXF1ZXN0InwKGEFwcHJvdmVFbnJvbGxtZW50UmVxdWVzdBIKCgJpZBgBIAEoCRIVCg1ub2RlX2VuZHBvaW50GAIgASgJEhYKDmFkbWluX2NlcnRfcGVtGAMgASgJEhUKDWFkbWluX2tleV9wZW0YBCABKAkSDgoGY2FfcGVtGAUgASgJIlQKGUFwcHJvdmVFbnJvbGxtZW50UmVzcG9uc2USNwoKZW5yb2xsbWVudBgBIAEoCzIjLmNyeXB0b3MuZmxlZXQudjEuRW5yb2xsbWVudFJlcXVlc3QiNQoXUmVqZWN0RW5yb2xsbWVudFJlcXVlc3QSCgoCaWQYASABKAkSDgoGcmVhc29uGAIgASgJIlMKGFJlamVjdEVucm9sbG1lbnRSZXNwb25zZRI3CgplbnJvbGxtZW50GAEgASgLMiMuY3J5cHRvcy5mbGVldC52MS5FbnJvbGxtZW50UmVxdWVzdCIPCg1XaG9BbUlSZXF1ZXN0Ij0KEE9wZXJhdG9ySWRlbnRpdHkSCgoCY24YASABKAkSDgoGc2VyaWFsGAIgASgJEg0KBWxldmVsGAMgASgJIkYKDldob0FtSVJlc3BvbnNlEjQKCG9wZXJhdG9yGAEgASgLMiIuY3J5cHRvcy5mbGVldC52MS5PcGVyYXRvcklkZW50aXR5IlYKGFJldm9rZUNlcnRpZmljYXRlUmVxdWVzdBIRCglub2RlX25hbWUYASABKAkSEgoKc2VyaWFsX2hleBgCIAEoCRITCgtyZWFzb25fY29kZRgDIAEoBSJYChlSZXZva2VDZXJ0aWZpY2F0ZVJlc3BvbnNlEhIKCnNlcmlhbF9oZXgYASABKAkSEgoKcmV2b2tlZF9hdBgCIAEoCRITCgtyZWFzb25fY29kZRgDIAEoBSJMChBJc3N1ZUxlYWZSZXF1ZXN0EhEKCW5vZGVfbmFtZRgBIAEoCRIPCgdjc3JfZGVyGAIgASgMEhQKDHByb2ZpbGVfbmFtZRgDIAEoCSIlChFJc3N1ZUxlYWZSZXNwb25zZRIQCghjZXJ0X2RlchgBIAEoDCI7ChBSZWtleU5vZGVSZXF1ZXN0EhEKCW5vZGVfbmFtZRgBIAEoCRIUCgxwcm9maWxlX25hbWUYAiABKAkiTQoRUmVrZXlOb2RlUmVzcG9uc2USEgoKc3ViamVjdF9jbhgBIAEoCRIRCglpc3N1ZXJfY24YAiABKAkSEQoJY2hhaW5fbGVuGAMgASgFKlIKBkhlYWx0aBIWChJIRUFMVEhfVU5TUEVDSUZJRUQQABINCglIRUFMVEhfVVAQARIPCgtIRUFMVEhfRE9XThACEhAKDEhFQUxUSF9FUlJPUhADMsYKCgxGbGVldFNlcnZpY2USVAoJTGlzdE5vZGVzEiIuY3J5cHRvcy5mbGVldC52MS5MaXN0Tm9kZXNSZXF1ZXN0GiMuY3J5cHRvcy5mbGVldC52MS5MaXN0Tm9kZXNSZXNwb25zZRJOCgdHZXROb2RlEiAuY3J5cHRvcy5mbGVldC52MS5HZXROb2RlUmVxdWVzdBohLmNyeXB0b3MuZmxlZXQudjEuR2V0Tm9kZVJlc3BvbnNlEmkKEExpc3RDZXJ0aWZpY2F0ZXMSKS5jcnlwdG9zLmZsZWV0LnYxLkxpc3RDZXJ0aWZpY2F0ZXNSZXF1ZXN0GiouY3J5cHRvcy5mbGVldC52MS5MaXN0Q2VydGlmaWNhdGVzUmVzcG9uc2USXQoMTGlzdFByb2ZpbGVzEiUuY3J5cHRvcy5mbGVldC52MS5MaXN0UHJvZmlsZXNSZXF1ZXN0GiYuY3J5cHRvcy5mbGVldC52MS5MaXN0UHJvZmlsZXNSZXNwb25zZRJdCgxMaXN0QWRhcHRlcnMSJS5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBZGFwdGVyc1JlcXVlc3QaJi5jcnlwdG9zLmZsZWV0LnYxLkxpc3RBZGFwdGVyc1Jlc3BvbnNlElQKCUxpc3RBdWRpdBIiLmNyeXB0b3MuZmxlZXQudjEuTGlzdEF1ZGl0UmVxdWVzdBojLmNyeXB0b3MuZmxlZXQudjEuTGlzdEF1ZGl0UmVzcG9uc2USZgoPTGlzdEVucm9sbG1lbnRzEiguY3J5cHRvcy5mbGVldC52MS5MaXN0RW5yb2xsbWVudHNSZXF1ZXN0GikuY3J5cHRvcy5mbGVldC52MS5MaXN0RW5yb2xsbWVudHNSZXNwb25zZRJpChBDcmVhdGVFbnJvbGxtZW50EikuY3J5cHRvcy5mbGVldC52MS5DcmVhdGVFbnJvbGxtZW50UmVxdWVzdBoqLmNyeXB0b3MuZmxlZXQudjEuQ3JlYXRlRW5yb2xsbWVudFJlc3BvbnNlEmwKEUFwcHJvdmVFbnJvbGxtZW50EiouY3J5cHRvcy5mbGVldC52MS5BcHByb3ZlRW5yb2xsbWVudFJlcXVlc3QaKy5jcnlwdG9zLmZsZWV0LnYxLkFwcHJvdmVFbnJvbGxtZW50UmVzcG9uc2USaQoQUmVqZWN0RW5yb2xsbWVudBIpLmNyeXB0b3MuZmxlZXQudjEuUmVqZWN0RW5yb2xsbWVudFJlcXVlc3QaKi5jcnlwdG9zLmZsZWV0LnYxLlJlamVjdEVucm9sbG1lbnRSZXNwb25zZRJLCgZXaG9BbUkSHy5jcnlwdG9zLmZsZWV0LnYxLldob0FtSVJlcXVlc3QaIC5jcnlwdG9zLmZsZWV0LnYxLldob0FtSVJlc3BvbnNlEmwKEVJldm9rZUNlcnRpZmljYXRlEiouY3J5cHRvcy5mbGVldC52MS5SZXZva2VDZXJ0aWZpY2F0ZVJlcXVlc3QaKy5jcnlwdG9zLmZsZWV0LnYxLlJldm9rZUNlcnRpZmljYXRlUmVzcG9uc2USVAoJSXNzdWVMZWFmEiIuY3J5cHRvcy5mbGVldC52MS5Jc3N1ZUxlYWZSZXF1ZXN0GiMuY3J5cHRvcy5mbGVldC52MS5Jc3N1ZUxlYWZSZXNwb25zZRJUCglSZWtleU5vZGUSIi5jcnlwdG9zLmZsZWV0LnYxLlJla2V5Tm9kZVJlcXVlc3QaIy5jcnlwdG9zLmZsZWV0LnYxLlJla2V5Tm9kZVJlc3BvbnNlQjhaNmdpdGh1Yi5jb20vQ3J5cHRPUy1QS0kvYXBpL2dvL2NyeXB0b3MvZmxlZXQvdjE7ZmxlZXR2MWIGcHJvdG8z"); /** * @generated from message cryptos.fleet.v1.ListNodesRequest @@ -1046,6 +1046,72 @@ export type IssueLeafResponse = Message<"cryptos.fleet.v1.IssueLeafResponse"> & export const IssueLeafResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_cryptos_fleet_v1_fleet, 34); +/** + * RekeyNodeRequest names the subordinate to re-key and the CA profile the + * parent signs the new key under. + * + * @generated from message cryptos.fleet.v1.RekeyNodeRequest + */ +export type RekeyNodeRequest = Message<"cryptos.fleet.v1.RekeyNodeRequest"> & { + /** + * node_name is the subordinate CA to re-key. + * + * @generated from field: string node_name = 1; + */ + nodeName: string; + + /** + * profile_name is the CA profile the parent signs the new CSR under (e.g. + * "sub-ca"). + * + * @generated from field: string profile_name = 2; + */ + profileName: string; +}; + +/** + * Describes the message cryptos.fleet.v1.RekeyNodeRequest. + * Use `create(RekeyNodeRequestSchema)` to create a new message. + */ +export const RekeyNodeRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 35); + +/** + * RekeyNodeResponse reports the re-keyed identity: the node's own subject CN, + * the parent that signed it, and the number of certificates in the new chain. + * + * @generated from message cryptos.fleet.v1.RekeyNodeResponse + */ +export type RekeyNodeResponse = Message<"cryptos.fleet.v1.RekeyNodeResponse"> & { + /** + * subject_cn is the re-keyed node's identity CN. + * + * @generated from field: string subject_cn = 1; + */ + subjectCn: string; + + /** + * issuer_cn is the parent CA that signed the new key. + * + * @generated from field: string issuer_cn = 2; + */ + issuerCn: string; + + /** + * chain_len is the number of certificates in the new chain. + * + * @generated from field: int32 chain_len = 3; + */ + chainLen: number; +}; + +/** + * Describes the message cryptos.fleet.v1.RekeyNodeResponse. + * Use `create(RekeyNodeResponseSchema)` to create a new message. + */ +export const RekeyNodeResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_cryptos_fleet_v1_fleet, 36); + /** * Health reports the manager's view of node reachability, independent of * the node's own reported identity state. @@ -1229,6 +1295,20 @@ export const FleetService: GenService<{ input: typeof IssueLeafRequestSchema; output: typeof IssueLeafResponseSchema; }, + /** + * RekeyNode re-keys a subordinate CA node in one orchestrated call: the + * manager has the child mint a new key + CSR, routes the CSR to the parent + * (resolved from the child's issuer CN) for signing under profile_name, and + * delivers the signed chain back to the child. The parent must be a node the + * manager already knows about. + * + * @generated from rpc cryptos.fleet.v1.FleetService.RekeyNode + */ + rekeyNode: { + methodKind: "unary"; + input: typeof RekeyNodeRequestSchema; + output: typeof RekeyNodeResponseSchema; + }, }> = /*@__PURE__*/ serviceDesc(file_cryptos_fleet_v1_fleet, 0); diff --git a/go/cryptos/fleet/v1/fleet.pb.go b/go/cryptos/fleet/v1/fleet.pb.go index d4c0733..6a0d5d8 100644 --- a/go/cryptos/fleet/v1/fleet.pb.go +++ b/go/cryptos/fleet/v1/fleet.pb.go @@ -2310,6 +2310,134 @@ func (x *IssueLeafResponse) GetCertDer() []byte { return nil } +// RekeyNodeRequest names the subordinate to re-key and the CA profile the +// parent signs the new key under. +type RekeyNodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // node_name is the subordinate CA to re-key. + NodeName string `protobuf:"bytes,1,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` + // profile_name is the CA profile the parent signs the new CSR under (e.g. + // "sub-ca"). + ProfileName string `protobuf:"bytes,2,opt,name=profile_name,json=profileName,proto3" json:"profile_name,omitempty"` +} + +func (x *RekeyNodeRequest) Reset() { + *x = RekeyNodeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RekeyNodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RekeyNodeRequest) ProtoMessage() {} + +func (x *RekeyNodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[35] + 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 RekeyNodeRequest.ProtoReflect.Descriptor instead. +func (*RekeyNodeRequest) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{35} +} + +func (x *RekeyNodeRequest) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + +func (x *RekeyNodeRequest) GetProfileName() string { + if x != nil { + return x.ProfileName + } + return "" +} + +// RekeyNodeResponse reports the re-keyed identity: the node's own subject CN, +// the parent that signed it, and the number of certificates in the new chain. +type RekeyNodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // subject_cn is the re-keyed node's identity CN. + SubjectCn string `protobuf:"bytes,1,opt,name=subject_cn,json=subjectCn,proto3" json:"subject_cn,omitempty"` + // issuer_cn is the parent CA that signed the new key. + IssuerCn string `protobuf:"bytes,2,opt,name=issuer_cn,json=issuerCn,proto3" json:"issuer_cn,omitempty"` + // chain_len is the number of certificates in the new chain. + ChainLen int32 `protobuf:"varint,3,opt,name=chain_len,json=chainLen,proto3" json:"chain_len,omitempty"` +} + +func (x *RekeyNodeResponse) Reset() { + *x = RekeyNodeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RekeyNodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RekeyNodeResponse) ProtoMessage() {} + +func (x *RekeyNodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_cryptos_fleet_v1_fleet_proto_msgTypes[36] + 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 RekeyNodeResponse.ProtoReflect.Descriptor instead. +func (*RekeyNodeResponse) Descriptor() ([]byte, []int) { + return file_cryptos_fleet_v1_fleet_proto_rawDescGZIP(), []int{36} +} + +func (x *RekeyNodeResponse) GetSubjectCn() string { + if x != nil { + return x.SubjectCn + } + return "" +} + +func (x *RekeyNodeResponse) GetIssuerCn() string { + if x != nil { + return x.IssuerCn + } + return "" +} + +func (x *RekeyNodeResponse) GetChainLen() int32 { + if x != nil { + return x.ChainLen + } + return 0 +} + var File_cryptos_fleet_v1_fleet_proto protoreflect.FileDescriptor var file_cryptos_fleet_v1_fleet_proto_rawDesc = []byte{ @@ -2574,96 +2702,113 @@ var file_cryptos_fleet_v1_fleet_proto_rawDesc = []byte{ 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, 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, 0xf0, 0x09, 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, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x65, 0x72, 0x74, 0x44, 0x65, 0x72, 0x22, 0x52, 0x0a, + 0x10, 0x52, 0x65, 0x6b, 0x65, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 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, 0x6c, 0x0a, 0x11, 0x52, 0x65, 0x6b, 0x65, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x63, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, + 0x63, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, + 0x43, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 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, 0xc6, 0x0a, 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, 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, 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, + 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, 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, + 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, 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, - 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, + 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, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 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, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6c, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, - 0x66, 0x6c, 0x65, 0x65, 0x74, 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, 0x2b, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, - 0x74, 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, 0x54, - 0x0a, 0x09, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x12, 0x22, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 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, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 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, + 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, 0x12, 0x6c, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 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, 0x2b, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, + 0x65, 0x65, 0x74, 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, 0x54, 0x0a, 0x09, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x12, 0x22, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 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, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x52, 0x65, 0x6b, 0x65, 0x79, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x22, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x73, 0x2e, 0x66, 0x6c, + 0x65, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6b, 0x65, 0x79, 0x4e, 0x6f, 0x64, 0x65, + 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, 0x52, 0x65, 0x6b, 0x65, 0x79, + 0x4e, 0x6f, 0x64, 0x65, 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 ( @@ -2679,7 +2824,7 @@ 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, 35) +var file_cryptos_fleet_v1_fleet_proto_msgTypes = make([]protoimpl.MessageInfo, 37) var file_cryptos_fleet_v1_fleet_proto_goTypes = []any{ (Health)(0), // 0: cryptos.fleet.v1.Health (*ListNodesRequest)(nil), // 1: cryptos.fleet.v1.ListNodesRequest @@ -2717,6 +2862,8 @@ var file_cryptos_fleet_v1_fleet_proto_goTypes = []any{ (*RevokeCertificateResponse)(nil), // 33: cryptos.fleet.v1.RevokeCertificateResponse (*IssueLeafRequest)(nil), // 34: cryptos.fleet.v1.IssueLeafRequest (*IssueLeafResponse)(nil), // 35: cryptos.fleet.v1.IssueLeafResponse + (*RekeyNodeRequest)(nil), // 36: cryptos.fleet.v1.RekeyNodeRequest + (*RekeyNodeResponse)(nil), // 37: cryptos.fleet.v1.RekeyNodeResponse } var file_cryptos_fleet_v1_fleet_proto_depIdxs = []int32{ 15, // 0: cryptos.fleet.v1.ListNodesResponse.nodes:type_name -> cryptos.fleet.v1.NodeSummary @@ -2746,21 +2893,23 @@ var file_cryptos_fleet_v1_fleet_proto_depIdxs = []int32{ 29, // 24: cryptos.fleet.v1.FleetService.WhoAmI:input_type -> cryptos.fleet.v1.WhoAmIRequest 32, // 25: cryptos.fleet.v1.FleetService.RevokeCertificate:input_type -> cryptos.fleet.v1.RevokeCertificateRequest 34, // 26: cryptos.fleet.v1.FleetService.IssueLeaf:input_type -> cryptos.fleet.v1.IssueLeafRequest - 2, // 27: cryptos.fleet.v1.FleetService.ListNodes:output_type -> cryptos.fleet.v1.ListNodesResponse - 4, // 28: cryptos.fleet.v1.FleetService.GetNode:output_type -> cryptos.fleet.v1.GetNodeResponse - 6, // 29: cryptos.fleet.v1.FleetService.ListCertificates:output_type -> cryptos.fleet.v1.ListCertificatesResponse - 8, // 30: cryptos.fleet.v1.FleetService.ListProfiles:output_type -> cryptos.fleet.v1.ListProfilesResponse - 10, // 31: cryptos.fleet.v1.FleetService.ListAdapters:output_type -> cryptos.fleet.v1.ListAdaptersResponse - 12, // 32: cryptos.fleet.v1.FleetService.ListAudit:output_type -> cryptos.fleet.v1.ListAuditResponse - 14, // 33: cryptos.fleet.v1.FleetService.ListEnrollments:output_type -> cryptos.fleet.v1.ListEnrollmentsResponse - 24, // 34: cryptos.fleet.v1.FleetService.CreateEnrollment:output_type -> cryptos.fleet.v1.CreateEnrollmentResponse - 26, // 35: cryptos.fleet.v1.FleetService.ApproveEnrollment:output_type -> cryptos.fleet.v1.ApproveEnrollmentResponse - 28, // 36: cryptos.fleet.v1.FleetService.RejectEnrollment:output_type -> cryptos.fleet.v1.RejectEnrollmentResponse - 31, // 37: cryptos.fleet.v1.FleetService.WhoAmI:output_type -> cryptos.fleet.v1.WhoAmIResponse - 33, // 38: cryptos.fleet.v1.FleetService.RevokeCertificate:output_type -> cryptos.fleet.v1.RevokeCertificateResponse - 35, // 39: cryptos.fleet.v1.FleetService.IssueLeaf:output_type -> cryptos.fleet.v1.IssueLeafResponse - 27, // [27:40] is the sub-list for method output_type - 14, // [14:27] is the sub-list for method input_type + 36, // 27: cryptos.fleet.v1.FleetService.RekeyNode:input_type -> cryptos.fleet.v1.RekeyNodeRequest + 2, // 28: cryptos.fleet.v1.FleetService.ListNodes:output_type -> cryptos.fleet.v1.ListNodesResponse + 4, // 29: cryptos.fleet.v1.FleetService.GetNode:output_type -> cryptos.fleet.v1.GetNodeResponse + 6, // 30: cryptos.fleet.v1.FleetService.ListCertificates:output_type -> cryptos.fleet.v1.ListCertificatesResponse + 8, // 31: cryptos.fleet.v1.FleetService.ListProfiles:output_type -> cryptos.fleet.v1.ListProfilesResponse + 10, // 32: cryptos.fleet.v1.FleetService.ListAdapters:output_type -> cryptos.fleet.v1.ListAdaptersResponse + 12, // 33: cryptos.fleet.v1.FleetService.ListAudit:output_type -> cryptos.fleet.v1.ListAuditResponse + 14, // 34: cryptos.fleet.v1.FleetService.ListEnrollments:output_type -> cryptos.fleet.v1.ListEnrollmentsResponse + 24, // 35: cryptos.fleet.v1.FleetService.CreateEnrollment:output_type -> cryptos.fleet.v1.CreateEnrollmentResponse + 26, // 36: cryptos.fleet.v1.FleetService.ApproveEnrollment:output_type -> cryptos.fleet.v1.ApproveEnrollmentResponse + 28, // 37: cryptos.fleet.v1.FleetService.RejectEnrollment:output_type -> cryptos.fleet.v1.RejectEnrollmentResponse + 31, // 38: cryptos.fleet.v1.FleetService.WhoAmI:output_type -> cryptos.fleet.v1.WhoAmIResponse + 33, // 39: cryptos.fleet.v1.FleetService.RevokeCertificate:output_type -> cryptos.fleet.v1.RevokeCertificateResponse + 35, // 40: cryptos.fleet.v1.FleetService.IssueLeaf:output_type -> cryptos.fleet.v1.IssueLeafResponse + 37, // 41: cryptos.fleet.v1.FleetService.RekeyNode:output_type -> cryptos.fleet.v1.RekeyNodeResponse + 28, // [28:42] is the sub-list for method output_type + 14, // [14:28] 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 @@ -3192,6 +3341,30 @@ func file_cryptos_fleet_v1_fleet_proto_init() { return nil } } + file_cryptos_fleet_v1_fleet_proto_msgTypes[35].Exporter = func(v any, i int) any { + switch v := v.(*RekeyNodeRequest); 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[36].Exporter = func(v any, i int) any { + switch v := v.(*RekeyNodeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3199,7 +3372,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: 35, + NumMessages: 37, 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 04ad297..5967d62 100644 --- a/go/cryptos/fleet/v1/fleet_grpc.pb.go +++ b/go/cryptos/fleet/v1/fleet_grpc.pb.go @@ -32,6 +32,7 @@ const ( FleetService_WhoAmI_FullMethodName = "/cryptos.fleet.v1.FleetService/WhoAmI" FleetService_RevokeCertificate_FullMethodName = "/cryptos.fleet.v1.FleetService/RevokeCertificate" FleetService_IssueLeaf_FullMethodName = "/cryptos.fleet.v1.FleetService/IssueLeaf" + FleetService_RekeyNode_FullMethodName = "/cryptos.fleet.v1.FleetService/RekeyNode" ) // FleetServiceClient is the client API for FleetService service. @@ -79,6 +80,12 @@ type FleetServiceClient interface { // browser-generated PKCS#10 CSR under a named issuance profile. Only the // CSR crosses the wire; the leaf private key stays in the browser. IssueLeaf(ctx context.Context, in *IssueLeafRequest, opts ...grpc.CallOption) (*IssueLeafResponse, error) + // RekeyNode re-keys a subordinate CA node in one orchestrated call: the + // manager has the child mint a new key + CSR, routes the CSR to the parent + // (resolved from the child's issuer CN) for signing under profile_name, and + // delivers the signed chain back to the child. The parent must be a node the + // manager already knows about. + RekeyNode(ctx context.Context, in *RekeyNodeRequest, opts ...grpc.CallOption) (*RekeyNodeResponse, error) } type fleetServiceClient struct { @@ -219,6 +226,16 @@ func (c *fleetServiceClient) IssueLeaf(ctx context.Context, in *IssueLeafRequest return out, nil } +func (c *fleetServiceClient) RekeyNode(ctx context.Context, in *RekeyNodeRequest, opts ...grpc.CallOption) (*RekeyNodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RekeyNodeResponse) + err := c.cc.Invoke(ctx, FleetService_RekeyNode_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // FleetServiceServer is the server API for FleetService service. // All implementations should embed UnimplementedFleetServiceServer // for forward compatibility. @@ -264,6 +281,12 @@ type FleetServiceServer interface { // browser-generated PKCS#10 CSR under a named issuance profile. Only the // CSR crosses the wire; the leaf private key stays in the browser. IssueLeaf(context.Context, *IssueLeafRequest) (*IssueLeafResponse, error) + // RekeyNode re-keys a subordinate CA node in one orchestrated call: the + // manager has the child mint a new key + CSR, routes the CSR to the parent + // (resolved from the child's issuer CN) for signing under profile_name, and + // delivers the signed chain back to the child. The parent must be a node the + // manager already knows about. + RekeyNode(context.Context, *RekeyNodeRequest) (*RekeyNodeResponse, error) } // UnimplementedFleetServiceServer should be embedded to have @@ -312,6 +335,9 @@ func (UnimplementedFleetServiceServer) RevokeCertificate(context.Context, *Revok func (UnimplementedFleetServiceServer) IssueLeaf(context.Context, *IssueLeafRequest) (*IssueLeafResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method IssueLeaf not implemented") } +func (UnimplementedFleetServiceServer) RekeyNode(context.Context, *RekeyNodeRequest) (*RekeyNodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RekeyNode not implemented") +} func (UnimplementedFleetServiceServer) testEmbeddedByValue() {} // UnsafeFleetServiceServer may be embedded to opt out of forward compatibility for this service. @@ -566,6 +592,24 @@ func _FleetService_IssueLeaf_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _FleetService_RekeyNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RekeyNodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FleetServiceServer).RekeyNode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: FleetService_RekeyNode_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FleetServiceServer).RekeyNode(ctx, req.(*RekeyNodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + // FleetService_ServiceDesc is the grpc.ServiceDesc for FleetService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -625,6 +669,10 @@ var FleetService_ServiceDesc = grpc.ServiceDesc{ MethodName: "IssueLeaf", Handler: _FleetService_IssueLeaf_Handler, }, + { + MethodName: "RekeyNode", + Handler: _FleetService_RekeyNode_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cryptos/fleet/v1/fleet.proto", diff --git a/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go b/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go index 46bce14..c012a1d 100644 --- a/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go +++ b/go/cryptos/fleet/v1/fleetv1connect/fleet.connect.go @@ -67,6 +67,8 @@ const ( FleetServiceRevokeCertificateProcedure = "/cryptos.fleet.v1.FleetService/RevokeCertificate" // FleetServiceIssueLeafProcedure is the fully-qualified name of the FleetService's IssueLeaf RPC. FleetServiceIssueLeafProcedure = "/cryptos.fleet.v1.FleetService/IssueLeaf" + // FleetServiceRekeyNodeProcedure is the fully-qualified name of the FleetService's RekeyNode RPC. + FleetServiceRekeyNodeProcedure = "/cryptos.fleet.v1.FleetService/RekeyNode" ) // FleetServiceClient is a client for the cryptos.fleet.v1.FleetService service. @@ -107,6 +109,12 @@ type FleetServiceClient interface { // browser-generated PKCS#10 CSR under a named issuance profile. Only the // CSR crosses the wire; the leaf private key stays in the browser. IssueLeaf(context.Context, *connect.Request[v1.IssueLeafRequest]) (*connect.Response[v1.IssueLeafResponse], error) + // RekeyNode re-keys a subordinate CA node in one orchestrated call: the + // manager has the child mint a new key + CSR, routes the CSR to the parent + // (resolved from the child's issuer CN) for signing under profile_name, and + // delivers the signed chain back to the child. The parent must be a node the + // manager already knows about. + RekeyNode(context.Context, *connect.Request[v1.RekeyNodeRequest]) (*connect.Response[v1.RekeyNodeResponse], error) } // NewFleetServiceClient constructs a client for the cryptos.fleet.v1.FleetService service. By @@ -198,6 +206,12 @@ func NewFleetServiceClient(httpClient connect.HTTPClient, baseURL string, opts . connect.WithSchema(fleetServiceMethods.ByName("IssueLeaf")), connect.WithClientOptions(opts...), ), + rekeyNode: connect.NewClient[v1.RekeyNodeRequest, v1.RekeyNodeResponse]( + httpClient, + baseURL+FleetServiceRekeyNodeProcedure, + connect.WithSchema(fleetServiceMethods.ByName("RekeyNode")), + connect.WithClientOptions(opts...), + ), } } @@ -216,6 +230,7 @@ type fleetServiceClient struct { whoAmI *connect.Client[v1.WhoAmIRequest, v1.WhoAmIResponse] revokeCertificate *connect.Client[v1.RevokeCertificateRequest, v1.RevokeCertificateResponse] issueLeaf *connect.Client[v1.IssueLeafRequest, v1.IssueLeafResponse] + rekeyNode *connect.Client[v1.RekeyNodeRequest, v1.RekeyNodeResponse] } // ListNodes calls cryptos.fleet.v1.FleetService.ListNodes. @@ -283,6 +298,11 @@ func (c *fleetServiceClient) IssueLeaf(ctx context.Context, req *connect.Request return c.issueLeaf.CallUnary(ctx, req) } +// RekeyNode calls cryptos.fleet.v1.FleetService.RekeyNode. +func (c *fleetServiceClient) RekeyNode(ctx context.Context, req *connect.Request[v1.RekeyNodeRequest]) (*connect.Response[v1.RekeyNodeResponse], error) { + return c.rekeyNode.CallUnary(ctx, req) +} + // FleetServiceHandler is an implementation of the cryptos.fleet.v1.FleetService service. type FleetServiceHandler interface { // ListNodes returns a summary for every node the manager knows about. @@ -321,6 +341,12 @@ type FleetServiceHandler interface { // browser-generated PKCS#10 CSR under a named issuance profile. Only the // CSR crosses the wire; the leaf private key stays in the browser. IssueLeaf(context.Context, *connect.Request[v1.IssueLeafRequest]) (*connect.Response[v1.IssueLeafResponse], error) + // RekeyNode re-keys a subordinate CA node in one orchestrated call: the + // manager has the child mint a new key + CSR, routes the CSR to the parent + // (resolved from the child's issuer CN) for signing under profile_name, and + // delivers the signed chain back to the child. The parent must be a node the + // manager already knows about. + RekeyNode(context.Context, *connect.Request[v1.RekeyNodeRequest]) (*connect.Response[v1.RekeyNodeResponse], error) } // NewFleetServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -408,6 +434,12 @@ func NewFleetServiceHandler(svc FleetServiceHandler, opts ...connect.HandlerOpti connect.WithSchema(fleetServiceMethods.ByName("IssueLeaf")), connect.WithHandlerOptions(opts...), ) + fleetServiceRekeyNodeHandler := connect.NewUnaryHandler( + FleetServiceRekeyNodeProcedure, + svc.RekeyNode, + connect.WithSchema(fleetServiceMethods.ByName("RekeyNode")), + connect.WithHandlerOptions(opts...), + ) return "/cryptos.fleet.v1.FleetService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case FleetServiceListNodesProcedure: @@ -436,6 +468,8 @@ func NewFleetServiceHandler(svc FleetServiceHandler, opts ...connect.HandlerOpti fleetServiceRevokeCertificateHandler.ServeHTTP(w, r) case FleetServiceIssueLeafProcedure: fleetServiceIssueLeafHandler.ServeHTTP(w, r) + case FleetServiceRekeyNodeProcedure: + fleetServiceRekeyNodeHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -496,3 +530,7 @@ func (UnimplementedFleetServiceHandler) RevokeCertificate(context.Context, *conn func (UnimplementedFleetServiceHandler) IssueLeaf(context.Context, *connect.Request[v1.IssueLeafRequest]) (*connect.Response[v1.IssueLeafResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.IssueLeaf is not implemented")) } + +func (UnimplementedFleetServiceHandler) RekeyNode(context.Context, *connect.Request[v1.RekeyNodeRequest]) (*connect.Response[v1.RekeyNodeResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("cryptos.fleet.v1.FleetService.RekeyNode is not implemented")) +} diff --git a/proto/cryptos/fleet/v1/fleet.proto b/proto/cryptos/fleet/v1/fleet.proto index 48fa289..cd35fe5 100644 --- a/proto/cryptos/fleet/v1/fleet.proto +++ b/proto/cryptos/fleet/v1/fleet.proto @@ -74,6 +74,13 @@ service FleetService { // browser-generated PKCS#10 CSR under a named issuance profile. Only the // CSR crosses the wire; the leaf private key stays in the browser. rpc IssueLeaf(IssueLeafRequest) returns (IssueLeafResponse); + + // RekeyNode re-keys a subordinate CA node in one orchestrated call: the + // manager has the child mint a new key + CSR, routes the CSR to the parent + // (resolved from the child's issuer CN) for signing under profile_name, and + // delivers the signed chain back to the child. The parent must be a node the + // manager already knows about. + rpc RekeyNode(RekeyNodeRequest) returns (RekeyNodeResponse); } message ListNodesRequest {} @@ -339,3 +346,24 @@ message IssueLeafResponse { // cert_der is the signed leaf certificate, DER-encoded. bytes cert_der = 1; } + +// RekeyNodeRequest names the subordinate to re-key and the CA profile the +// parent signs the new key under. +message RekeyNodeRequest { + // node_name is the subordinate CA to re-key. + string node_name = 1; + // profile_name is the CA profile the parent signs the new CSR under (e.g. + // "sub-ca"). + string profile_name = 2; +} + +// RekeyNodeResponse reports the re-keyed identity: the node's own subject CN, +// the parent that signed it, and the number of certificates in the new chain. +message RekeyNodeResponse { + // subject_cn is the re-keyed node's identity CN. + string subject_cn = 1; + // issuer_cn is the parent CA that signed the new key. + string issuer_cn = 2; + // chain_len is the number of certificates in the new chain. + int32 chain_len = 3; +}