Skip to content

Commit 674fc63

Browse files
committed
cl_dl proof with setup'
1 parent 67d7591 commit 674fc63

File tree

6 files changed

+96
-94
lines changed

6 files changed

+96
-94
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "multi-party-ecdsa"
3-
version = "0.2.7"
3+
version = "0.2.8"
44
edition = "2018"
55
authors = [
66
@@ -46,7 +46,7 @@ tag = "v0.2.1"
4646

4747
[dependencies.class_group]
4848
git = "https://github.com/KZen-networks/class"
49-
tag = "v0.3.0"
49+
tag = "v0.4.2"
5050
optional = true
5151

5252
[dev-dependencies]

benches/two_party_ecdsa/cclst_2019/keygen.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,41 +10,43 @@ mod bench {
1010
pub fn bench_full_keygen_party_one_two(c: &mut Criterion) {
1111
c.bench_function("keygen", move |b| {
1212
b.iter(|| {
13+
1314
let (party_one_first_message, comm_witness, ec_key_pair_party1) =
14-
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(
15-
ECScalar::from(&BigInt::sample(253)),
16-
);
17-
let (party_two_first_message, _ec_key_pair_party2) =
18-
party_two::KeyGenFirstMsg::create_with_fixed_secret_share(ECScalar::from(
19-
&BigInt::from(10),
15+
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(ECScalar::from(
16+
&BigInt::sample(253),
2017
));
18+
let (party_two_first_message, _ec_key_pair_party2) =
19+
party_two::KeyGenFirstMsg::create_with_fixed_secret_share(ECScalar::from(&BigInt::from(
20+
10,
21+
)));
2122
let party_one_second_message = party_one::KeyGenSecondMsg::verify_and_decommit(
2223
comm_witness,
2324
&party_two_first_message.d_log_proof,
2425
)
25-
.expect("failed to verify and decommit");
26+
.expect("failed to verify and decommit");
2627

27-
let _party_two_second_message =
28-
party_two::KeyGenSecondMsg::verify_commitments_and_dlog_proof(
29-
&party_one_first_message,
30-
&party_one_second_message,
31-
)
28+
let _party_two_second_message = party_two::KeyGenSecondMsg::verify_commitments_and_dlog_proof(
29+
&party_one_first_message,
30+
&party_one_second_message,
31+
)
3232
.expect("failed to verify commitments and DLog proof");
3333

3434
// init HSMCL keypair:
35-
let hsmcl_key_pair = party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(
36-
&ec_key_pair_party1,
37-
);
35+
let seed :BigInt = str::parse(
36+
"314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848"
37+
).unwrap();
38+
let hsmcl_key_pair =
39+
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1, seed.clone());
3840

3941
let party_one_private =
4042
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &hsmcl_key_pair);
4143

42-
let cldl_proof = party_one::HSMCLKeyPair::generate_zkcldl_proof(
43-
&hsmcl_key_pair,
44-
&party_one_private,
45-
);
44+
let cldl_proof =
45+
party_one::HSMCLKeyPair::generate_zkcldl_proof(&hsmcl_key_pair, &party_one_private, seed.clone());
4646
let _party_two_hsmcl_pub =
4747
party_two::HSMCLPublic::verify_zkcldl_proof(cldl_proof).expect("proof error");
48+
49+
4850
})
4951
});
5052
}

benches/two_party_ecdsa/cclst_2019/sign.rs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,17 @@ mod bench {
1414
// party2 owning private share and HSMCL encryption of party1 share
1515
let (_party_one_private_share_gen, _comm_witness, ec_key_pair_party1) =
1616
party_one::KeyGenFirstMsg::create_commitments();
17-
let (party_two_private_share_gen, ec_key_pair_party2) =
18-
party_two::KeyGenFirstMsg::create();
17+
let (party_two_private_share_gen, ec_key_pair_party2) = party_two::KeyGenFirstMsg::create();
18+
19+
let seed: BigInt = str::parse(
20+
"314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848"
21+
).unwrap();
1922

2023
let party_one_hsmcl_key_pair =
21-
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(
22-
&ec_key_pair_party1,
23-
);
24+
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1, seed);
2425

25-
let party1_private = party_one::Party1Private::set_private_key(
26-
&ec_key_pair_party1,
27-
&party_one_hsmcl_key_pair,
28-
);
26+
let party1_private =
27+
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &party_one_hsmcl_key_pair);
2928

3029
let party_two_hsmcl_public = HSMCLPublic::set(
3130
&party_one_hsmcl_key_pair.keypair.pk,
@@ -37,19 +36,18 @@ mod bench {
3736
party_two::EphKeyGenFirstMsg::create_commitments();
3837
let (eph_party_one_first_message, eph_ec_key_pair_party1) =
3938
party_one::EphKeyGenFirstMsg::create();
40-
let eph_party_two_second_message =
41-
party_two::EphKeyGenSecondMsg::verify_and_decommit(
42-
eph_comm_witness,
43-
&eph_party_one_first_message,
44-
)
39+
let eph_party_two_second_message = party_two::EphKeyGenSecondMsg::verify_and_decommit(
40+
eph_comm_witness,
41+
&eph_party_one_first_message,
42+
)
4543
.expect("party1 DLog proof failed");
4644

4745
let _eph_party_one_second_message =
4846
party_one::EphKeyGenSecondMsg::verify_commitments_and_dlog_proof(
4947
&eph_party_two_first_message,
5048
&eph_party_two_second_message,
5149
)
52-
.expect("failed to verify commitments and DLog proof");
50+
.expect("failed to verify commitments and DLog proof");
5351
let party2_private = party_two::Party2Private::set_private_key(&ec_key_pair_party2);
5452
let message = BigInt::from(1234);
5553

@@ -68,10 +66,8 @@ mod bench {
6866
&eph_party_two_second_message.comm_witness.public_share,
6967
);
7068

71-
let pubkey = party_one::compute_pubkey(
72-
&party1_private,
73-
&party_two_private_share_gen.public_share,
74-
);
69+
let pubkey =
70+
party_one::compute_pubkey(&party1_private, &party_two_private_share_gen.public_share);
7571
party_one::verify(&signature, &pubkey, &message).expect("Invalid signature")
7672
})
7773
});

src/protocols/two_party_ecdsa/cclst_2019/party_one.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use std::cmp;
1717

1818
use class_group::primitives::cl_dl_lcm::Ciphertext;
1919
use class_group::primitives::cl_dl_lcm::Witness;
20-
use class_group::primitives::cl_dl_lcm::{CLDLProof, HSMCL};
20+
use class_group::primitives::cl_dl_lcm::{CLDLProofPublicSetup, HSMCL};
2121
use curv::arithmetic::traits::*;
2222
use curv::cryptographic_primitives::commitments::hash_commitment::HashCommitment;
2323
use curv::cryptographic_primitives::commitments::traits::Commitment;
@@ -241,8 +241,8 @@ impl Party1Private {
241241
}
242242

243243
impl HSMCLKeyPair {
244-
pub fn generate_keypair_and_encrypted_share(keygen: &EcKeyPair) -> HSMCLKeyPair {
245-
let hsmcl = HSMCL::keygen(&FE::q(), &516);
244+
pub fn generate_keypair_and_encrypted_share(keygen: &EcKeyPair, seed: BigInt) -> HSMCLKeyPair {
245+
let hsmcl = HSMCL::keygen_with_setup(&FE::q(), &1348, &seed);
246246
let ek = hsmcl.pk.clone();
247247
let randomness = BigInt::sample_below(&(&ek.stilde * BigInt::from(2).pow(40)));
248248

@@ -262,16 +262,18 @@ impl HSMCLKeyPair {
262262
pub fn generate_zkcldl_proof(
263263
context: &HSMCLKeyPair,
264264
party_one_private: &Party1Private,
265-
) -> CLDLProof {
265+
seed: BigInt,
266+
) -> CLDLProofPublicSetup {
266267
let witness = Witness {
267268
x: party_one_private.x1.to_big_int(),
268269
r: party_one_private.c_key_randomness.clone(),
269270
};
270-
let proof = CLDLProof::prove(
271+
let proof = CLDLProofPublicSetup::prove(
271272
witness,
272273
context.keypair.pk.clone(),
273274
context.encrypted_share.clone(),
274275
GE::generator() * &party_one_private.x1,
276+
seed,
275277
);
276278

277279
proof
@@ -364,9 +366,6 @@ impl Signature {
364366
ephemeral_local_share: &EphEcKeyPair,
365367
ephemeral_other_public_share: &GE,
366368
) -> Signature {
367-
let y_lcm_2_10 : BigInt = str::parse(
368-
"15161806181366890704755537519628428221282838501257142250824360639698299050776571382489681778825684381429314058890905101687022024744606800532531764952734582389201393752832486383043169059475949454418063248428056646723694341952991408637386677631205400831455008554143754794994126167401137152222379676492247471515691285702536834646805381995650206229354446213284302569283840180834930263739794772017863585682362821412785936104792844891075228278568320000",
369-
).unwrap();
370369
//compute r = k2* R1
371370
let mut r = ephemeral_other_public_share.clone();
372371
r = r.scalar_mul(&ephemeral_local_share.secret_share.get_element());
@@ -378,7 +377,6 @@ impl Signature {
378377
.invert(&FE::q())
379378
.unwrap();
380379
let s_tag = party_one_private.keypair.decrypt(&partial_sig_c3);
381-
let s_tag = BigInt::mod_mul(&s_tag, &(y_lcm_2_10.invert(&FE::q()).unwrap()), &FE::q());
382380
let s_tag_tag = BigInt::mod_mul(&k1_inv, &s_tag, &FE::q());
383381
let s = cmp::min(s_tag_tag.clone(), FE::q().clone() - s_tag_tag.clone());
384382
Signature { s, r: rx }

src/protocols/two_party_ecdsa/cclst_2019/party_two.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@license GPL-3.0+ <https://github.com/KZen-networks/multi-party-ecdsa/blob/master/LICENSE>
1515
*/
1616

17-
use class_group::primitives::cl_dl_lcm::CLDLProof;
17+
use class_group::primitives::cl_dl_lcm::CLDLProofPublicSetup;
1818
use class_group::primitives::cl_dl_lcm::Ciphertext;
1919
use class_group::primitives::cl_dl_lcm::HSMCL;
2020
use class_group::primitives::cl_dl_lcm::PK as HSMCLPK;
@@ -203,14 +203,9 @@ impl KeyGenSecondMsg {
203203

204204
impl HSMCLPublic {
205205
pub fn set(ek: &HSMCLPK, encrypted_secret_share: &Ciphertext) -> HSMCLPublic {
206-
let y_lcm_2_10 : BigInt = str::parse(
207-
"15161806181366890704755537519628428221282838501257142250824360639698299050776571382489681778825684381429314058890905101687022024744606800532531764952734582389201393752832486383043169059475949454418063248428056646723694341952991408637386677631205400831455008554143754794994126167401137152222379676492247471515691285702536834646805381995650206229354446213284302569283840180834930263739794772017863585682362821412785936104792844891075228278568320000",
208-
).unwrap();
209-
let encrypted_share_y = HSMCL::eval_scal(encrypted_secret_share, &y_lcm_2_10);
210-
211206
HSMCLPublic {
212207
ek: ek.clone(),
213-
encrypted_secret_share: encrypted_share_y,
208+
encrypted_secret_share: encrypted_secret_share.clone(),
214209
}
215210
}
216211
}
@@ -229,7 +224,7 @@ impl Party2Private {
229224
}
230225

231226
impl HSMCLPublic {
232-
pub fn verify_zkcldl_proof(proof: CLDLProof) -> Result<Self, ()> {
227+
pub fn verify_zkcldl_proof(proof: CLDLProofPublicSetup) -> Result<Self, ()> {
233228
let res = proof.verify();
234229
match res {
235230
Ok(_) => Ok(HSMCLPublic {
@@ -320,9 +315,6 @@ impl PartialSig {
320315
ephemeral_other_public_share: &GE,
321316
message: &BigInt,
322317
) -> PartialSig {
323-
let y_lcm_2_10 : BigInt = str::parse(
324-
"15161806181366890704755537519628428221282838501257142250824360639698299050776571382489681778825684381429314058890905101687022024744606800532531764952734582389201393752832486383043169059475949454418063248428056646723694341952991408637386677631205400831455008554143754794994126167401137152222379676492247471515691285702536834646805381995650206229354446213284302569283840180834930263739794772017863585682362821412785936104792844891075228278568320000",
325-
).unwrap();
326318
let q = FE::q();
327319
//compute r = k2* R1
328320
let mut r: GE = ephemeral_other_public_share.clone();
@@ -335,8 +327,7 @@ impl PartialSig {
335327
.invert(&q)
336328
.unwrap();
337329
let k2_inv_m = BigInt::mod_mul(&k2_inv, message, &q);
338-
let k2_inv_m_y_lcm_2_10 = BigInt::mod_mul(&k2_inv_m, &y_lcm_2_10, &q);
339-
let c1 = HSMCL::encrypt(&party_two_public.ek, &k2_inv_m_y_lcm_2_10);
330+
let c1 = HSMCL::encrypt(&party_two_public.ek, &k2_inv_m);
340331
let v = BigInt::mod_mul(&k2_inv, &local_share.x2.to_big_int(), &q);
341332
let v = BigInt::mod_mul(&v, &rx, &q);
342333

src/protocols/two_party_ecdsa/cclst_2019/test.rs

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,37 +26,48 @@ fn test_d_log_proof_party_two_party_one() {
2626

2727
#[test]
2828
fn test_full_key_gen() {
29-
let (party_one_first_message, comm_witness, ec_key_pair_party1) =
30-
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(ECScalar::from(
31-
&BigInt::sample(253),
32-
));
33-
let (party_two_first_message, _ec_key_pair_party2) =
34-
party_two::KeyGenFirstMsg::create_with_fixed_secret_share(ECScalar::from(&BigInt::from(
35-
10,
36-
)));
37-
let party_one_second_message = party_one::KeyGenSecondMsg::verify_and_decommit(
38-
comm_witness,
39-
&party_two_first_message.d_log_proof,
40-
)
41-
.expect("failed to verify and decommit");
42-
43-
let _party_two_second_message = party_two::KeyGenSecondMsg::verify_commitments_and_dlog_proof(
44-
&party_one_first_message,
45-
&party_one_second_message,
46-
)
47-
.expect("failed to verify commitments and DLog proof");
48-
49-
// init HSMCL keypair:
50-
let hsmcl_key_pair =
51-
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1);
52-
53-
let party_one_private =
54-
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &hsmcl_key_pair);
55-
56-
let cldl_proof =
57-
party_one::HSMCLKeyPair::generate_zkcldl_proof(&hsmcl_key_pair, &party_one_private);
58-
let _party_two_hsmcl_pub =
59-
party_two::HSMCLPublic::verify_zkcldl_proof(cldl_proof).expect("proof error");
29+
for i in 0..20 {
30+
let (party_one_first_message, comm_witness, ec_key_pair_party1) =
31+
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(ECScalar::from(
32+
&BigInt::sample(253),
33+
));
34+
let (party_two_first_message, _ec_key_pair_party2) =
35+
party_two::KeyGenFirstMsg::create_with_fixed_secret_share(ECScalar::from(
36+
&BigInt::from(10),
37+
));
38+
let party_one_second_message = party_one::KeyGenSecondMsg::verify_and_decommit(
39+
comm_witness,
40+
&party_two_first_message.d_log_proof,
41+
)
42+
.expect("failed to verify and decommit");
43+
44+
let _party_two_second_message =
45+
party_two::KeyGenSecondMsg::verify_commitments_and_dlog_proof(
46+
&party_one_first_message,
47+
&party_one_second_message,
48+
)
49+
.expect("failed to verify commitments and DLog proof");
50+
51+
// init HSMCL keypair:
52+
let seed: BigInt = str::parse(
53+
"314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848"
54+
).unwrap();
55+
let hsmcl_key_pair = party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(
56+
&ec_key_pair_party1,
57+
seed.clone(),
58+
);
59+
60+
let party_one_private =
61+
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &hsmcl_key_pair);
62+
63+
let cldl_proof = party_one::HSMCLKeyPair::generate_zkcldl_proof(
64+
&hsmcl_key_pair,
65+
&party_one_private,
66+
seed.clone(),
67+
);
68+
let _party_two_hsmcl_pub =
69+
party_two::HSMCLPublic::verify_zkcldl_proof(cldl_proof).expect("proof error");
70+
}
6071
}
6172

6273
#[test]
@@ -68,8 +79,12 @@ fn test_two_party_sign() {
6879
party_one::KeyGenFirstMsg::create_commitments();
6980
let (party_two_private_share_gen, ec_key_pair_party2) = party_two::KeyGenFirstMsg::create();
7081

82+
let seed: BigInt = str::parse(
83+
"314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848"
84+
).unwrap();
85+
7186
let party_one_hsmcl_key_pair =
72-
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1);
87+
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1, seed);
7388

7489
let party1_private =
7590
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &party_one_hsmcl_key_pair);

0 commit comments

Comments
 (0)