Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update FulfillRequisitionRequest and ProtocolConfig for ShuffleBasedSecretSharing protocol #191

Merged
merged 11 commits into from
Nov 28, 2023
1 change: 1 addition & 0 deletions src/main/proto/wfa/measurement/api/v2alpha/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,7 @@ proto_library(
srcs = ["requisition_fulfillment_service.proto"],
strip_import_prefix = IMPORT_PREFIX,
deps = [
":protocol_config_proto",
":requisition_proto",
"@com_google_googleapis//google/api:client_proto",
"@com_google_googleapis//google/api:field_behavior_proto",
Expand Down
25 changes: 25 additions & 0 deletions src/main/proto/wfa/measurement/api/v2alpha/protocol_config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,16 @@ message ProtocolConfig {
NoiseMechanism noise_mechanism = 4;
}

// Configuration for the Shuffle Based Secret Sharing Protocol.
message ShuffleBasedSecretSharing {
// Parameters for secret sharing sketches.
SecretSharingSketchParams sketch_params = 1
[(google.api.field_behavior) = REQUIRED];

// The mechanism to generate noise by workers during the computation.
NoiseMechanism noise_mechanism = 2;
}

// Configuration for a specific protocol.
message Protocol {
// Configuration for the specific protocol.
Expand All @@ -224,6 +234,11 @@ message ProtocolConfig {
// using this protocol can be fulfilled by calling
// RequisitionFulfillment/FulfillRequisition with an encrypted sketch.
ReachOnlyLiquidLegionsV2 reach_only_liquid_legions_v2 = 3;

// Shuffle Based Secret Sharing protocol.
//
// Using honest-majority setting.
ShuffleBasedSecretSharing shuffle_based_secret_sharing = 4;
}
}

Expand Down Expand Up @@ -264,3 +279,13 @@ message ReachOnlyLiquidLegionsSketchParams {
// The maximum size of the Liquid Legions sketch.
int64 max_size = 2 [(google.api.field_behavior) = REQUIRED];
}

// Parameters for a Shuffle Based Secret Sharing sketch.
message SecretSharingSketchParams {
// The number of registers in the sketch.
int64 register_count = 1;

// Length of each item in bytes. #_EDPs * max_frequency should be no more than
// 2^(byte_per_item*8).
int32 byte_per_item = 2;
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package wfa.measurement.api.v2alpha;

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "wfa/measurement/api/v2alpha/protocol_config.proto";
import "wfa/measurement/api/v2alpha/requisition.proto";

option java_package = "org.wfanet.measurement.api.v2alpha";
Expand Down Expand Up @@ -55,6 +56,27 @@ message FulfillRequisitionRequest {
// (-- api-linter: core::0141::forbidden-types=disabled
// aip.dev/not-precedent: This is a random 64-bit value. --)
fixed64 nonce = 3 [(google.api.field_behavior) = REQUIRED];

// The protocol config of the Computation. This is used to validate that
// EDPs and the MPC are using the same protocol config.
// NOT required for LiquidLegionV2 protocol.
ProtocolConfig protocol_config = 4;

// Requisitions of ShuffleBasedSecretSharing protocol is fulfilled by either
// a blob or a seed.
message ShuffleBasedSecretSharing {
// The seed can be expanded into a deterministic blob using the same PRNG.
//
// If the seed is not specified or empty, it means the requisition is
// fulfilled by a blob of chunks.
bytes seed = 1;
}
// Protocol specified values.
oneof protocol {
// Shuffle based secret sharing protocol. Fulfilled by either chunks (a
// blob), or a seed.
ShuffleBasedSecretSharing shuffle_based_secret_sharing = 5;
}
}

// The chunk message for this streaming request.
Expand Down
Loading