Skip to content

Commit 27e0d68

Browse files
committed
test(crypto): CRP-2311 use clib functions to corrupt dealings
1 parent 26f1e16 commit 27e0d68

File tree

2 files changed

+19
-31
lines changed

2 files changed

+19
-31
lines changed

rs/crypto/test_utils/canister_threshold_sigs/src/lib.rs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use crate::node::{Node, Nodes};
44
use ic_crypto_internal_threshold_sig_ecdsa::test_utils::{corrupt_dealing, ComplaintCorrupter};
55
use ic_crypto_internal_threshold_sig_ecdsa::{
6-
EccScalar, IDkgComplaintInternal, IDkgDealingInternal, MEGaCiphertext, NodeIndex, Seed,
6+
IDkgComplaintInternal, IDkgDealingInternal, NodeIndex, Seed,
77
};
88
use ic_crypto_temp_crypto::{TempCryptoComponent, TempCryptoComponentGeneric};
99
use ic_interfaces::crypto::IDkgProtocol;
@@ -2124,6 +2124,7 @@ pub fn corrupt_dealings_and_generate_complaints<'a, R: RngCore + CryptoRng>(
21242124
*index_to_corrupt,
21252125
&mut transcript.verified_dealings,
21262126
complainer_index,
2127+
rng,
21272128
)
21282129
});
21292130

@@ -2179,38 +2180,30 @@ fn generate_and_verify_opening(
21792180
opening
21802181
}
21812182

2182-
fn corrupt_signed_dealing_for_one_receiver(
2183+
fn corrupt_signed_dealing_for_one_receiver<R: Rng + CryptoRng>(
21832184
dealing_index_to_corrupt: NodeIndex,
21842185
dealings: &mut BTreeMap<NodeIndex, BatchSignedIDkgDealing>,
21852186
receiver_index: NodeIndex,
2187+
rng: &mut R,
21862188
) {
21872189
let signed_dealing = dealings
21882190
.get_mut(&dealing_index_to_corrupt)
21892191
.unwrap_or_else(|| panic!("Missing dealing at index {:?}", dealing_index_to_corrupt));
21902192
let invalidated_internal_dealing_raw = {
2191-
let mut internal_dealing =
2193+
let internal_dealing =
21922194
IDkgDealingInternal::deserialize(&signed_dealing.idkg_dealing().internal_dealing_raw)
21932195
.expect("failed to deserialize internal dealing");
2194-
match internal_dealing.ciphertext {
2195-
MEGaCiphertext::Single(ref mut ctext) => {
2196-
let corrupted_ctext = corrupt_ecc_scalar(&ctext.ctexts[receiver_index as usize]);
2197-
ctext.ctexts[receiver_index as usize] = corrupted_ctext;
2198-
}
2199-
MEGaCiphertext::Pairs(ref mut ctext) => {
2200-
let (ctext_1, ctext_2) = ctext.ctexts[receiver_index as usize].clone();
2201-
let corrupted_ctext_1 = corrupt_ecc_scalar(&ctext_1);
2202-
ctext.ctexts[receiver_index as usize] = (corrupted_ctext_1, ctext_2);
2203-
}
2204-
};
2205-
internal_dealing
2196+
2197+
let corrupted_internal_dealing =
2198+
ic_crypto_internal_threshold_sig_ecdsa::test_utils::corrupt_dealing(
2199+
&internal_dealing,
2200+
&[receiver_index],
2201+
Seed::from_rng(rng),
2202+
)
2203+
.expect("failed to corrupt dealing");
2204+
corrupted_internal_dealing
22062205
.serialize()
22072206
.expect("failed to serialize internal dealing")
22082207
};
22092208
signed_dealing.content.content.internal_dealing_raw = invalidated_internal_dealing_raw;
22102209
}
2211-
2212-
fn corrupt_ecc_scalar(value: &EccScalar) -> EccScalar {
2213-
value
2214-
.add(&EccScalar::one(value.curve_type()))
2215-
.expect("Corruption for testing failed")
2216-
}

rs/crypto/tests/canister_threshold_sigs.rs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use ic_types::crypto::canister_threshold_sig::idkg::{
3030
InitialIDkgDealings, SignedIDkgDealing,
3131
};
3232
use ic_types::crypto::canister_threshold_sig::{ExtendedDerivationPath, ThresholdEcdsaSigInputs};
33-
use ic_types::crypto::{AlgorithmId, BasicSigOf, CryptoError};
33+
use ic_types::crypto::{AlgorithmId, CryptoError};
3434
use ic_types::{NodeId, Randomness};
3535
use maplit::hashset;
3636
use rand::distributions::uniform::SampleRange;
@@ -3496,15 +3496,10 @@ mod verify_initial_dealings {
34963496
.load_previous_transcripts_and_create_signed_dealings(&reshare_params);
34973497
let mut signed_dealings_vec = signed_dealings.into_values().collect::<Vec<_>>();
34983498
if corrupt_first_dealing {
3499-
if let Some(first_signed_dealing) = signed_dealings_vec.first_mut() {
3500-
let corrupted_sig = {
3501-
let mut sig_clone =
3502-
first_signed_dealing.signature.signature.get_ref().clone();
3503-
sig_clone.0.push(0xff);
3504-
BasicSigOf::new(sig_clone)
3505-
};
3506-
first_signed_dealing.signature.signature = corrupted_sig;
3507-
}
3499+
signed_dealings_vec
3500+
.first_mut()
3501+
.map(|sd| *sd = sd.clone().into_builder().corrupt_signature().build())
3502+
.expect("no dealings");
35083503
}
35093504

35103505
InitialIDkgDealings::new(reshare_params.clone(), signed_dealings_vec)

0 commit comments

Comments
 (0)