Skip to content

Commit

Permalink
chore(crypto): CRP-1452 fix mistakes in IDKG benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
altkdf committed Feb 14, 2024
1 parent 1b4fcf4 commit 579b554
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 77 deletions.
8 changes: 4 additions & 4 deletions rs/crypto/benches/idkg.rs
Expand Up @@ -484,7 +484,7 @@ fn bench_verify_complaint<M: Measurement, R: RngCore + CryptoRng>(
|| {
let (env, context) = bench_context.get_or_init(|| {
let env = test_case.new_test_environment(vault_type, rng);
let context = IDkgModeTestContext::new_for_complaint(mode, &env, rng);
let context = IDkgModeTestContext::new(mode, &env, rng);
(env, context)
});
context.setup_outputs_for_complaint(env, test_case.alg, rng)
Expand Down Expand Up @@ -519,7 +519,7 @@ fn bench_open_transcript<M: Measurement, R: RngCore + CryptoRng>(
|| {
let (env, context) = bench_context.get_or_init(|| {
let env = test_case.new_test_environment(vault_type, rng);
let context = IDkgModeTestContext::new_for_complaint(mode, &env, rng);
let context = IDkgModeTestContext::new(mode, &env, rng);
(env, context)
});
let complaint_context =
Expand Down Expand Up @@ -563,7 +563,7 @@ fn bench_verify_opening<M: Measurement, R: RngCore + CryptoRng>(
|| {
let (env, context) = bench_context.get_or_init(|| {
let env = test_case.new_test_environment(vault_type, rng);
let context = IDkgModeTestContext::new_for_complaint(mode, &env, rng);
let context = IDkgModeTestContext::new(mode, &env, rng);
(env, context)
});
let complaint_context =
Expand Down Expand Up @@ -608,7 +608,7 @@ fn bench_load_transcript_with_openings<M: Measurement, R: RngCore + CryptoRng>(
|| {
let (env, context) = bench_context.get_or_init(|| {
let env = test_case.new_test_environment(vault_type, rng);
let context = IDkgModeTestContext::new_for_complaint(mode, &env, rng);
let context = IDkgModeTestContext::new(mode, &env, rng);
(env, context)
});
let complaint_context =
Expand Down
106 changes: 34 additions & 72 deletions rs/crypto/test_utils/canister_threshold_sigs/src/lib.rs
Expand Up @@ -1483,76 +1483,37 @@ impl IDkgMode {
}

#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum IDkgModeTestContext {
RandomUnmasked {
dealers: IDkgDealers,
receivers: IDkgReceivers,
},
Random {
dealers: IDkgDealers,
receivers: IDkgReceivers,
},
ReshareOfMasked {
dealers: IDkgDealers,
receivers: IDkgReceivers,
},
ReshareOfUnmasked {
dealers: IDkgDealers,
receivers: IDkgReceivers,
},
UnmaskedTimesMasked {
dealers: IDkgDealers,
receivers: IDkgReceivers,
},
pub struct IDkgModeTestContext {
mode: IDkgMode,
dealers: IDkgDealers,
receivers: IDkgReceivers,
}

impl IDkgModeTestContext {
/// Generates dealers and receivers from `env` for the IDKG mode chosen in `mode`.
/// Generates a new test context, where all nodes are acting as both dealers and receivers.
pub fn new<R: RngCore + CryptoRng>(
mode: IDkgMode,
env: &CanisterThresholdSigTestEnvironment,
rng: &mut R,
) -> Self {
match mode {
IDkgMode::RandomUnmasked => {
let (dealers, receivers) =
env.choose_dealers_and_receivers(&IDkgParticipants::Random, rng);
Self::RandomUnmasked { dealers, receivers }
}
IDkgMode::Random => {
let (dealers, receivers) =
env.choose_dealers_and_receivers(&IDkgParticipants::Random, rng);
Self::Random { dealers, receivers }
}
IDkgMode::ReshareOfUnmasked => {
let (dealers, receivers) = env.choose_dealers_and_receivers(
&IDkgParticipants::AllNodesAsDealersAndReceivers,
rng,
);
Self::UnmaskedTimesMasked { dealers, receivers }
}
IDkgMode::ReshareOfMasked => {
let (dealers, receivers) = env.choose_dealers_and_receivers(
&IDkgParticipants::AllNodesAsDealersAndReceivers,
rng,
);
Self::ReshareOfMasked { dealers, receivers }
}
IDkgMode::UnmaskedTimesMasked => {
let (dealers, receivers) = env.choose_dealers_and_receivers(
&IDkgParticipants::AllNodesAsDealersAndReceivers,
rng,
);
Self::UnmaskedTimesMasked { dealers, receivers }
}
let (dealers, receivers) =
env.choose_dealers_and_receivers(&IDkgParticipants::AllNodesAsDealersAndReceivers, rng);

Self {
mode,
dealers,
receivers,
}
}

/// Generates dealers and receivers from `env` for the IDKG mode chosen in
/// `mode`. Since `Self::new` can return a setting with only 1 node, this
/// function modifies that setting to always return at least two receivers
/// s.t. complaints always work.
pub fn new_for_complaint<R: RngCore + CryptoRng>(
///
/// Note that this function returns random dealers and receivers with some
/// constraints, so this method is not very useful for benchmarks.
pub fn new_for_testing_complaint<R: RngCore + CryptoRng>(
mode: IDkgMode,
env: &CanisterThresholdSigTestEnvironment,
rng: &mut R,
Expand All @@ -1567,7 +1528,11 @@ impl IDkgModeTestContext {
},
rng,
);
Self::Random { dealers, receivers }
Self {
mode: IDkgMode::Random,
dealers,
receivers,
}
}
_ => Self::new(mode, env, rng),
}
Expand All @@ -1580,20 +1545,23 @@ impl IDkgModeTestContext {
alg: AlgorithmId,
rng: &mut R,
) -> IDkgTranscriptParams {
match self {
IDkgModeTestContext::RandomUnmasked { dealers, receivers } => {
let IDkgModeTestContext {
mode,
dealers,
receivers,
} = self;
match mode {
IDkgMode::RandomUnmasked => {
setup_unmasked_random_params(env, alg, dealers, receivers, rng)
}
IDkgModeTestContext::Random { dealers, receivers } => {
setup_masked_random_params(env, alg, dealers, receivers, rng)
}
IDkgModeTestContext::ReshareOfMasked { dealers, receivers } => {
IDkgMode::Random => setup_masked_random_params(env, alg, dealers, receivers, rng),
IDkgMode::ReshareOfMasked => {
setup_reshare_of_masked_params(env, alg, dealers, receivers, rng)
}
IDkgModeTestContext::ReshareOfUnmasked { dealers, receivers } => {
IDkgMode::ReshareOfUnmasked => {
setup_reshare_of_unmasked_params(env, alg, dealers, receivers, rng)
}
IDkgModeTestContext::UnmaskedTimesMasked { dealers, receivers } => {
IDkgMode::UnmaskedTimesMasked => {
setup_unmasked_times_masked_params(env, alg, dealers, receivers, rng)
}
}
Expand Down Expand Up @@ -1626,13 +1594,7 @@ impl IDkgModeTestContext {
}

fn receivers(&self) -> &IDkgReceivers {
match self {
IDkgModeTestContext::RandomUnmasked { receivers, .. }
| IDkgModeTestContext::Random { receivers, .. }
| IDkgModeTestContext::ReshareOfMasked { receivers, .. }
| IDkgModeTestContext::ReshareOfUnmasked { receivers, .. }
| IDkgModeTestContext::UnmaskedTimesMasked { receivers, .. } => receivers,
}
&self.receivers
}
}

Expand Down Expand Up @@ -1721,7 +1683,7 @@ pub fn setup_reshare_of_unmasked_params<R: Rng + CryptoRng>(
let unmasked_transcript = run_idkg_without_complaint(&unmasked_params, &env.nodes, rng);
let reshare_params = build_params_from_previous(
unmasked_params,
IDkgTranscriptOperation::ReshareOfMasked(unmasked_transcript),
IDkgTranscriptOperation::ReshareOfUnmasked(unmasked_transcript),
rng,
);
load_previous_transcripts_for_all_dealers(&reshare_params, &env.nodes);
Expand Down
2 changes: 1 addition & 1 deletion rs/crypto/tests/canister_threshold_sigs.rs
Expand Up @@ -949,7 +949,7 @@ mod verify_complaint {
let subnet_size = mode.subnet_size_for_complaint(6, rng);
let env = CanisterThresholdSigTestEnvironment::new(subnet_size, rng);
for alg in AlgorithmId::all_threshold_ecdsa_algorithms() {
let context = IDkgModeTestContext::new_for_complaint(mode, &env, rng);
let context = IDkgModeTestContext::new_for_testing_complaint(mode, &env, rng);
let IDkgTestContextForComplaint {
transcript,
complaint,
Expand Down

0 comments on commit 579b554

Please sign in to comment.