1*14675a02SAndroid Build Coastguard Worker// Copyright 2022 Google LLC 2*14675a02SAndroid Build Coastguard Worker// 3*14675a02SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*14675a02SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*14675a02SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*14675a02SAndroid Build Coastguard Worker// 7*14675a02SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*14675a02SAndroid Build Coastguard Worker// 9*14675a02SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*14675a02SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*14675a02SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*14675a02SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*14675a02SAndroid Build Coastguard Worker// limitations under the License. 14*14675a02SAndroid Build Coastguard Worker 15*14675a02SAndroid Build Coastguard Workersyntax = "proto3"; 16*14675a02SAndroid Build Coastguard Worker 17*14675a02SAndroid Build Coastguard Workerpackage google.internal.federatedcompute.v1; 18*14675a02SAndroid Build Coastguard Worker 19*14675a02SAndroid Build Coastguard Workerimport "fcp/protos/federatedcompute/common.proto"; 20*14675a02SAndroid Build Coastguard Workerimport "fcp/secagg/shared/secagg_messages.proto"; 21*14675a02SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto"; 22*14675a02SAndroid Build Coastguard Worker 23*14675a02SAndroid Build Coastguard Workeroption java_package = "com.google.internal.federatedcompute.v1"; 24*14675a02SAndroid Build Coastguard Workeroption java_multiple_files = true; 25*14675a02SAndroid Build Coastguard Worker 26*14675a02SAndroid Build Coastguard Workerservice SecureAggregations { 27*14675a02SAndroid Build Coastguard Worker // A request sent by the client after completing local (on-device) task 28*14675a02SAndroid Build Coastguard Worker // computation to notify the server that the client has Aggregation data to 29*14675a02SAndroid Build Coastguard Worker // upload via the Secure Aggregation protocol. If a client's result is no 30*14675a02SAndroid Build Coastguard Worker // longer needed (e.g. the reporting goal was already reached for the task), 31*14675a02SAndroid Build Coastguard Worker // the server will respond with an ABORTED error in the operation status. The 32*14675a02SAndroid Build Coastguard Worker // operation is completed successfully when the Secure Aggregation protocol is 33*14675a02SAndroid Build Coastguard Worker // ready to begin. 34*14675a02SAndroid Build Coastguard Worker rpc StartSecureAggregation(StartSecureAggregationRequest) 35*14675a02SAndroid Build Coastguard Worker returns (StartSecureAggregationResponse) {} 36*14675a02SAndroid Build Coastguard Worker 37*14675a02SAndroid Build Coastguard Worker // A request sent by the client indicating the client is ending its 38*14675a02SAndroid Build Coastguard Worker // participation in the Secure Aggregation protocol. 39*14675a02SAndroid Build Coastguard Worker // 40*14675a02SAndroid Build Coastguard Worker // Clients must only call this if they've previously called 41*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregation`. 42*14675a02SAndroid Build Coastguard Worker // 43*14675a02SAndroid Build Coastguard Worker // If clients have already received a `StartSecureAggregationResponse` 44*14675a02SAndroid Build Coastguard Worker // they should use the `ForwardingInfo` from the 45*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregationResponse.secagg_protocol_forwarding_info` 46*14675a02SAndroid Build Coastguard Worker // response field to construct the URI for this request. Otherwise, clients 47*14675a02SAndroid Build Coastguard Worker // should use the same `ForwardingInfo` as was used to construct the 48*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregation` request URI. 49*14675a02SAndroid Build Coastguard Worker rpc AbortSecureAggregation(AbortSecureAggregationRequest) 50*14675a02SAndroid Build Coastguard Worker returns (AbortSecureAggregationResponse) { 51*14675a02SAndroid Build Coastguard Worker } 52*14675a02SAndroid Build Coastguard Worker 53*14675a02SAndroid Build Coastguard Worker // A request sent by the client to advertise its pair of public keys. The 54*14675a02SAndroid Build Coastguard Worker // server responds with a list of the (pairs of) public keys of all other 55*14675a02SAndroid Build Coastguard Worker // participating clients. 56*14675a02SAndroid Build Coastguard Worker // 57*14675a02SAndroid Build Coastguard Worker // Clients should use the `ForwardingInfo` from the 58*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregationResponse.secagg_protocol_forwarding_info` 59*14675a02SAndroid Build Coastguard Worker // response field to construct the URI for this request. 60*14675a02SAndroid Build Coastguard Worker // 61*14675a02SAndroid Build Coastguard Worker // If the returned operation is not complete, clients should poll for status 62*14675a02SAndroid Build Coastguard Worker // at the rate specified in the AdvertiseKeysMetadata. 63*14675a02SAndroid Build Coastguard Worker rpc AdvertiseKeys(AdvertiseKeysRequest) 64*14675a02SAndroid Build Coastguard Worker returns (AdvertiseKeysResponse) { 65*14675a02SAndroid Build Coastguard Worker } 66*14675a02SAndroid Build Coastguard Worker 67*14675a02SAndroid Build Coastguard Worker // A request sent by the client to secret-share its 68*14675a02SAndroid Build Coastguard Worker // own noise_sk and prf_sk with all the other clients (encrypting shares for 69*14675a02SAndroid Build Coastguard Worker // client j with their own enc_pk). The server responds with the client's 70*14675a02SAndroid Build Coastguard Worker // shares of the keys of each other client that sent a ShareKeysRequest. 71*14675a02SAndroid Build Coastguard Worker // 72*14675a02SAndroid Build Coastguard Worker // Clients should use the `ForwardingInfo` from the 73*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregationResponse.secagg_protocol_forwarding_info` 74*14675a02SAndroid Build Coastguard Worker // response field to construct the URI for this request. 75*14675a02SAndroid Build Coastguard Worker // 76*14675a02SAndroid Build Coastguard Worker // If the returned operation is not complete, clients should poll for status 77*14675a02SAndroid Build Coastguard Worker // at the rate specified in the ShareKeysMetadata. 78*14675a02SAndroid Build Coastguard Worker rpc ShareKeys(ShareKeysRequest) returns (ShareKeysResponse) { 79*14675a02SAndroid Build Coastguard Worker } 80*14675a02SAndroid Build Coastguard Worker 81*14675a02SAndroid Build Coastguard Worker // A request sent by the client indicating the successful upload of the 82*14675a02SAndroid Build Coastguard Worker // client's masked and unmasked results. The server responds with a list of 83*14675a02SAndroid Build Coastguard Worker // clients that did not successfully upload their results (and therefore are 84*14675a02SAndroid Build Coastguard Worker // considered dead). 85*14675a02SAndroid Build Coastguard Worker // 86*14675a02SAndroid Build Coastguard Worker // Clients should use the `ForwardingInfo` from the 87*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregationResponse.secagg_protocol_forwarding_info` 88*14675a02SAndroid Build Coastguard Worker // response field to construct the URI for this request. 89*14675a02SAndroid Build Coastguard Worker // 90*14675a02SAndroid Build Coastguard Worker // If the returned operation is not complete, clients should poll for status 91*14675a02SAndroid Build Coastguard Worker // at the rate specified in the SubmitSecureAggregationResultMetadata. 92*14675a02SAndroid Build Coastguard Worker rpc SubmitSecureAggregationResult(SubmitSecureAggregationResultRequest) 93*14675a02SAndroid Build Coastguard Worker returns (SubmitSecureAggregationResultResponse) { 94*14675a02SAndroid Build Coastguard Worker } 95*14675a02SAndroid Build Coastguard Worker 96*14675a02SAndroid Build Coastguard Worker // A request sent by the client containing information for each other client 97*14675a02SAndroid Build Coastguard Worker // j. For each client j, The client provides either the share of noise_sk (if 98*14675a02SAndroid Build Coastguard Worker // client j is dead) OR share of prf_sk (if client j is still alive). 99*14675a02SAndroid Build Coastguard Worker // 100*14675a02SAndroid Build Coastguard Worker // If a client's aggregation result is no longer needed for the aggregation 101*14675a02SAndroid Build Coastguard Worker // (e.g. the reporting goal was already reached for the task), the server will 102*14675a02SAndroid Build Coastguard Worker // respond with an ABORTED error. 103*14675a02SAndroid Build Coastguard Worker // 104*14675a02SAndroid Build Coastguard Worker // Clients should use the `ForwardingInfo` from the 105*14675a02SAndroid Build Coastguard Worker // `StartSecureAggregationResponse.secagg_protocol_forwarding_info` 106*14675a02SAndroid Build Coastguard Worker // response field to construct the URI for this request. 107*14675a02SAndroid Build Coastguard Worker rpc Unmask(UnmaskRequest) returns (UnmaskResponse) { 108*14675a02SAndroid Build Coastguard Worker } 109*14675a02SAndroid Build Coastguard Worker} 110*14675a02SAndroid Build Coastguard Worker 111*14675a02SAndroid Build Coastguard Worker// --- StartSecureAggregation --- 112*14675a02SAndroid Build Coastguard Workermessage StartSecureAggregationRequest { 113*14675a02SAndroid Build Coastguard Worker // The id of the aggregation session this client participates in. This value 114*14675a02SAndroid Build Coastguard Worker // was returned by the server when the client was assigned a task. 115*14675a02SAndroid Build Coastguard Worker // 116*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 117*14675a02SAndroid Build Coastguard Worker // request body. 118*14675a02SAndroid Build Coastguard Worker string aggregation_id = 1 119*14675a02SAndroid Build Coastguard Worker ; 120*14675a02SAndroid Build Coastguard Worker 121*14675a02SAndroid Build Coastguard Worker // The authorization token returned by the server when the client was assigned 122*14675a02SAndroid Build Coastguard Worker // a task. 123*14675a02SAndroid Build Coastguard Worker // 124*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 125*14675a02SAndroid Build Coastguard Worker // request body. 126*14675a02SAndroid Build Coastguard Worker string authorization_token = 2 127*14675a02SAndroid Build Coastguard Worker ; 128*14675a02SAndroid Build Coastguard Worker} 129*14675a02SAndroid Build Coastguard Worker 130*14675a02SAndroid Build Coastguard Workermessage StartSecureAggregationMetadata {} 131*14675a02SAndroid Build Coastguard Worker 132*14675a02SAndroid Build Coastguard Workermessage StartSecureAggregationResponse { 133*14675a02SAndroid Build Coastguard Worker // Information to construct the URI to use for continuing the secure 134*14675a02SAndroid Build Coastguard Worker // aggregation protocol. 135*14675a02SAndroid Build Coastguard Worker ForwardingInfo secagg_protocol_forwarding_info = 1; 136*14675a02SAndroid Build Coastguard Worker 137*14675a02SAndroid Build Coastguard Worker // Per-aggregand information. 138*14675a02SAndroid Build Coastguard Worker map<string, SecureAggregandExecutionInfo> secure_aggregands = 2; 139*14675a02SAndroid Build Coastguard Worker 140*14675a02SAndroid Build Coastguard Worker // Protocol execution information. 141*14675a02SAndroid Build Coastguard Worker SecureAggregationProtocolExecutionInfo protocol_execution_info = 3; 142*14675a02SAndroid Build Coastguard Worker 143*14675a02SAndroid Build Coastguard Worker // Information about where to upload masked result. 144*14675a02SAndroid Build Coastguard Worker ByteStreamResource masked_result_resource = 4; 145*14675a02SAndroid Build Coastguard Worker 146*14675a02SAndroid Build Coastguard Worker // Information about where to upload unmasked result (e.g. metrics). 147*14675a02SAndroid Build Coastguard Worker ByteStreamResource nonmasked_result_resource = 5; 148*14675a02SAndroid Build Coastguard Worker 149*14675a02SAndroid Build Coastguard Worker // Unique token that the client must include in the subsequent protocol 150*14675a02SAndroid Build Coastguard Worker // requests. 151*14675a02SAndroid Build Coastguard Worker string client_token = 6; 152*14675a02SAndroid Build Coastguard Worker} 153*14675a02SAndroid Build Coastguard Worker 154*14675a02SAndroid Build Coastguard Worker// Per-aggregand configuration information. 155*14675a02SAndroid Build Coastguard Workermessage SecureAggregandExecutionInfo { 156*14675a02SAndroid Build Coastguard Worker // Modulus for secure aggregation. 157*14675a02SAndroid Build Coastguard Worker // 158*14675a02SAndroid Build Coastguard Worker // The secure aggregation protocol will compute the sum modulo this modulus. 159*14675a02SAndroid Build Coastguard Worker // 160*14675a02SAndroid Build Coastguard Worker // To achieve equivalence with non-modular summation, the modulus must be 161*14675a02SAndroid Build Coastguard Worker // larger than the sum of all client inputs, given the number of clients 162*14675a02SAndroid Build Coastguard Worker // participating in the aggregation shard. 163*14675a02SAndroid Build Coastguard Worker uint64 modulus = 1; 164*14675a02SAndroid Build Coastguard Worker} 165*14675a02SAndroid Build Coastguard Worker 166*14675a02SAndroid Build Coastguard Worker// Dynamic configuration of the Secure Aggregation protocol. 167*14675a02SAndroid Build Coastguard Workermessage SecureAggregationProtocolExecutionInfo { 168*14675a02SAndroid Build Coastguard Worker // Number of clients that a client may exchange data with while running 169*14675a02SAndroid Build Coastguard Worker // Secure Aggregation protocol. In the case of a full graph SecAgg protocol 170*14675a02SAndroid Build Coastguard Worker // this is a total number of clients that started the protocol. 171*14675a02SAndroid Build Coastguard Worker // In the case of subgraph SecAgg protocol this is a number of neighbours 172*14675a02SAndroid Build Coastguard Worker // that each client has. 173*14675a02SAndroid Build Coastguard Worker int32 expected_number_of_clients = 1; 174*14675a02SAndroid Build Coastguard Worker 175*14675a02SAndroid Build Coastguard Worker // Secure Aggregation client completion threshold. This is a parameter 176*14675a02SAndroid Build Coastguard Worker // communicated by the server side of Secure Aggregation protocol to each 177*14675a02SAndroid Build Coastguard Worker // client to establish Shamir sharing of secrets. 178*14675a02SAndroid Build Coastguard Worker // Additionally, at least `minimum_surviving_clients_for_reconstruction` out 179*14675a02SAndroid Build Coastguard Worker // of the initial `expected_number_of_clients` must 'survive' in order for 180*14675a02SAndroid Build Coastguard Worker // the protocol to continue on the client side; otherwise the client will 181*14675a02SAndroid Build Coastguard Worker // abort its connection. 182*14675a02SAndroid Build Coastguard Worker int32 minimum_surviving_clients_for_reconstruction = 2; 183*14675a02SAndroid Build Coastguard Worker} 184*14675a02SAndroid Build Coastguard Worker 185*14675a02SAndroid Build Coastguard Worker// --- AbortSecureAggregation --- 186*14675a02SAndroid Build Coastguard Workermessage AbortSecureAggregationRequest { 187*14675a02SAndroid Build Coastguard Worker // The id of the aggregation session this client participates in. This value 188*14675a02SAndroid Build Coastguard Worker // was returned by the server when the client was assigned a task. 189*14675a02SAndroid Build Coastguard Worker // 190*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 191*14675a02SAndroid Build Coastguard Worker // request body. 192*14675a02SAndroid Build Coastguard Worker string aggregation_id = 1 193*14675a02SAndroid Build Coastguard Worker ; 194*14675a02SAndroid Build Coastguard Worker 195*14675a02SAndroid Build Coastguard Worker // The client token returned by the server when the client was assigned a 196*14675a02SAndroid Build Coastguard Worker // task. 197*14675a02SAndroid Build Coastguard Worker // 198*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 199*14675a02SAndroid Build Coastguard Worker // request body. 200*14675a02SAndroid Build Coastguard Worker string client_token = 2 201*14675a02SAndroid Build Coastguard Worker ; 202*14675a02SAndroid Build Coastguard Worker 203*14675a02SAndroid Build Coastguard Worker // Status code and optional message for why the secure aggregation protocol 204*14675a02SAndroid Build Coastguard Worker // was aborted. 205*14675a02SAndroid Build Coastguard Worker Status status = 3; 206*14675a02SAndroid Build Coastguard Worker} 207*14675a02SAndroid Build Coastguard Worker 208*14675a02SAndroid Build Coastguard Workermessage AbortSecureAggregationResponse {} 209*14675a02SAndroid Build Coastguard Worker 210*14675a02SAndroid Build Coastguard Worker// --- AdvertiseKeys --- 211*14675a02SAndroid Build Coastguard Workermessage AdvertiseKeysRequest { 212*14675a02SAndroid Build Coastguard Worker // The id of the aggregation session this client participates in. This value 213*14675a02SAndroid Build Coastguard Worker // was returned by the server when the client was assigned a task. 214*14675a02SAndroid Build Coastguard Worker // 215*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 216*14675a02SAndroid Build Coastguard Worker // request body. 217*14675a02SAndroid Build Coastguard Worker string aggregation_id = 1 218*14675a02SAndroid Build Coastguard Worker ; 219*14675a02SAndroid Build Coastguard Worker 220*14675a02SAndroid Build Coastguard Worker // The client token returned by the server when the client was assigned a 221*14675a02SAndroid Build Coastguard Worker // task. 222*14675a02SAndroid Build Coastguard Worker // 223*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 224*14675a02SAndroid Build Coastguard Worker // request body. 225*14675a02SAndroid Build Coastguard Worker string client_token = 2 226*14675a02SAndroid Build Coastguard Worker ; 227*14675a02SAndroid Build Coastguard Worker 228*14675a02SAndroid Build Coastguard Worker // A pair of public keys for this client. 229*14675a02SAndroid Build Coastguard Worker fcp.secagg.AdvertiseKeys advertise_keys = 3; 230*14675a02SAndroid Build Coastguard Worker} 231*14675a02SAndroid Build Coastguard Worker 232*14675a02SAndroid Build Coastguard Workermessage AdvertiseKeysMetadata { 233*14675a02SAndroid Build Coastguard Worker // The suggested duration between instances of polling the AdvertiseKeys LRO. 234*14675a02SAndroid Build Coastguard Worker google.protobuf.Duration polling_interval = 1; 235*14675a02SAndroid Build Coastguard Worker} 236*14675a02SAndroid Build Coastguard Worker 237*14675a02SAndroid Build Coastguard Workermessage AdvertiseKeysResponse { 238*14675a02SAndroid Build Coastguard Worker // Information from the server so that the client can participate in the 239*14675a02SAndroid Build Coastguard Worker // ShareKeys protocol stage. Contains a list of pairs of public keys, as well 240*14675a02SAndroid Build Coastguard Worker // as the logging ID for the SecAgg execution. 241*14675a02SAndroid Build Coastguard Worker fcp.secagg.ShareKeysRequest share_keys_server_request = 1; 242*14675a02SAndroid Build Coastguard Worker} 243*14675a02SAndroid Build Coastguard Worker 244*14675a02SAndroid Build Coastguard Worker// --- ShareKeys --- 245*14675a02SAndroid Build Coastguard Workermessage ShareKeysRequest { 246*14675a02SAndroid Build Coastguard Worker // The id of the aggregation session this client participates in. This value 247*14675a02SAndroid Build Coastguard Worker // was returned by the server when the client was assigned a task. 248*14675a02SAndroid Build Coastguard Worker // 249*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 250*14675a02SAndroid Build Coastguard Worker // request body. 251*14675a02SAndroid Build Coastguard Worker string aggregation_id = 1 252*14675a02SAndroid Build Coastguard Worker ; 253*14675a02SAndroid Build Coastguard Worker 254*14675a02SAndroid Build Coastguard Worker // The client token returned by the server when the client was assigned a 255*14675a02SAndroid Build Coastguard Worker // task. 256*14675a02SAndroid Build Coastguard Worker // 257*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 258*14675a02SAndroid Build Coastguard Worker // request body. 259*14675a02SAndroid Build Coastguard Worker string client_token = 2 260*14675a02SAndroid Build Coastguard Worker ; 261*14675a02SAndroid Build Coastguard Worker 262*14675a02SAndroid Build Coastguard Worker // Information about the client's participation in the ShareKeys protocol 263*14675a02SAndroid Build Coastguard Worker // stage. Contains a list of encrypted pairs of key shares (one for each other 264*14675a02SAndroid Build Coastguard Worker // client). 265*14675a02SAndroid Build Coastguard Worker fcp.secagg.ShareKeysResponse share_keys_client_response = 3; 266*14675a02SAndroid Build Coastguard Worker} 267*14675a02SAndroid Build Coastguard Worker 268*14675a02SAndroid Build Coastguard Workermessage ShareKeysMetadata { 269*14675a02SAndroid Build Coastguard Worker // The suggested duration between instances of polling the ShareKeys LRO. 270*14675a02SAndroid Build Coastguard Worker google.protobuf.Duration polling_interval = 1; 271*14675a02SAndroid Build Coastguard Worker} 272*14675a02SAndroid Build Coastguard Worker 273*14675a02SAndroid Build Coastguard Workermessage ShareKeysResponse { 274*14675a02SAndroid Build Coastguard Worker // Information from the server so that the client can submit its masked 275*14675a02SAndroid Build Coastguard Worker // result. Contains a list of shares of other clients' keys encrypted and 276*14675a02SAndroid Build Coastguard Worker // intended for the client who receives this message. 277*14675a02SAndroid Build Coastguard Worker fcp.secagg.MaskedInputCollectionRequest 278*14675a02SAndroid Build Coastguard Worker masked_input_collection_server_request = 1; 279*14675a02SAndroid Build Coastguard Worker} 280*14675a02SAndroid Build Coastguard Worker 281*14675a02SAndroid Build Coastguard Worker// --- SubmitSecureAggregationResult --- 282*14675a02SAndroid Build Coastguard Workermessage SubmitSecureAggregationResultRequest { 283*14675a02SAndroid Build Coastguard Worker // The id of the aggregation session this client participates in. This value 284*14675a02SAndroid Build Coastguard Worker // was returned by the server when the client was assigned a task. 285*14675a02SAndroid Build Coastguard Worker // 286*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 287*14675a02SAndroid Build Coastguard Worker // request body. 288*14675a02SAndroid Build Coastguard Worker string aggregation_id = 1 289*14675a02SAndroid Build Coastguard Worker ; 290*14675a02SAndroid Build Coastguard Worker 291*14675a02SAndroid Build Coastguard Worker // The client token returned by the server when the client was assigned a 292*14675a02SAndroid Build Coastguard Worker // task. 293*14675a02SAndroid Build Coastguard Worker // 294*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 295*14675a02SAndroid Build Coastguard Worker // request body. 296*14675a02SAndroid Build Coastguard Worker string client_token = 2 297*14675a02SAndroid Build Coastguard Worker ; 298*14675a02SAndroid Build Coastguard Worker 299*14675a02SAndroid Build Coastguard Worker // Name of the resource to which the masked result was uploaded. The blob 300*14675a02SAndroid Build Coastguard Worker // uploaded at masked_input_resource name must contain a serialized 301*14675a02SAndroid Build Coastguard Worker // fcp.secagg.MaskedInputCollectionResponse message. 302*14675a02SAndroid Build Coastguard Worker string masked_result_resource_name = 3; 303*14675a02SAndroid Build Coastguard Worker 304*14675a02SAndroid Build Coastguard Worker // Name of the resource to which the nonmasked result was uploaded. 305*14675a02SAndroid Build Coastguard Worker string nonmasked_result_resource_name = 4; 306*14675a02SAndroid Build Coastguard Worker} 307*14675a02SAndroid Build Coastguard Worker 308*14675a02SAndroid Build Coastguard Workermessage SubmitSecureAggregationResultMetadata { 309*14675a02SAndroid Build Coastguard Worker // The suggested duration between instances of polling the 310*14675a02SAndroid Build Coastguard Worker // SubmitSecureAggregationResult LRO. 311*14675a02SAndroid Build Coastguard Worker google.protobuf.Duration polling_interval = 1; 312*14675a02SAndroid Build Coastguard Worker} 313*14675a02SAndroid Build Coastguard Worker 314*14675a02SAndroid Build Coastguard Workermessage SubmitSecureAggregationResultResponse { 315*14675a02SAndroid Build Coastguard Worker // Information from the server so that the client can participate in the 316*14675a02SAndroid Build Coastguard Worker // Unmasking protocol stage. 317*14675a02SAndroid Build Coastguard Worker fcp.secagg.UnmaskingRequest unmasking_server_request = 1; 318*14675a02SAndroid Build Coastguard Worker} 319*14675a02SAndroid Build Coastguard Worker 320*14675a02SAndroid Build Coastguard Worker// --- Unmask --- 321*14675a02SAndroid Build Coastguard Workermessage UnmaskRequest { 322*14675a02SAndroid Build Coastguard Worker // The id of the aggregation session this client participates in. This value 323*14675a02SAndroid Build Coastguard Worker // was returned by the server when the client was assigned a task. 324*14675a02SAndroid Build Coastguard Worker // 325*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 326*14675a02SAndroid Build Coastguard Worker // request body. 327*14675a02SAndroid Build Coastguard Worker string aggregation_id = 1 328*14675a02SAndroid Build Coastguard Worker ; 329*14675a02SAndroid Build Coastguard Worker 330*14675a02SAndroid Build Coastguard Worker // The client token returned by the server when the client was assigned a 331*14675a02SAndroid Build Coastguard Worker // task. 332*14675a02SAndroid Build Coastguard Worker // 333*14675a02SAndroid Build Coastguard Worker // Note that HTTP clients set this value in the request URL instead of the 334*14675a02SAndroid Build Coastguard Worker // request body. 335*14675a02SAndroid Build Coastguard Worker string client_token = 2 336*14675a02SAndroid Build Coastguard Worker ; 337*14675a02SAndroid Build Coastguard Worker 338*14675a02SAndroid Build Coastguard Worker // Information about the client's participation in the Unmasking protocol 339*14675a02SAndroid Build Coastguard Worker // stage. 340*14675a02SAndroid Build Coastguard Worker fcp.secagg.UnmaskingResponse unmasking_client_response = 3; 341*14675a02SAndroid Build Coastguard Worker} 342*14675a02SAndroid Build Coastguard Worker 343*14675a02SAndroid Build Coastguard Workermessage UnmaskResponse {} 344