Skip to content

Commit b2581f0

Browse files
committed
bench update
1 parent 920666d commit b2581f0

File tree

5 files changed

+237
-27
lines changed

5 files changed

+237
-27
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.0"
3+
version = "0.2.1"
44
authors = [
55
66
@@ -72,5 +72,5 @@ criterion = "0.2"
7272

7373
[[bench]]
7474
name = "keygen"
75-
path = "benches/multi_party_ecdsa/gg18/keygen.rs"
75+
path = "benches/two_party_ecdsa/cclst_2019/keygen.rs"
7676
harness = false
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#[macro_use]
2+
extern crate criterion;
3+
extern crate curv;
4+
extern crate multi_party_ecdsa;
5+
6+
mod bench {
7+
use criterion::Criterion;
8+
use curv::arithmetic::traits::Samplable;
9+
use curv::elliptic::curves::traits::*;
10+
use curv::BigInt;
11+
use multi_party_ecdsa::protocols::two_party_ecdsa::cclst_2019::*;
12+
13+
pub fn bench_full_keygen_party_one_two(c: &mut Criterion) {
14+
c.bench_function("keygen", move |b| {
15+
b.iter(|| {
16+
let (party_one_first_message, comm_witness, ec_key_pair_party1) =
17+
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(
18+
ECScalar::from(&BigInt::sample(253)),
19+
);
20+
let (party_two_first_message, _ec_key_pair_party2) =
21+
party_two::KeyGenFirstMsg::create_with_fixed_secret_share(ECScalar::from(
22+
&BigInt::from(10),
23+
));
24+
let party_one_second_message = party_one::KeyGenSecondMsg::verify_and_decommit(
25+
comm_witness,
26+
&party_two_first_message.d_log_proof,
27+
)
28+
.expect("failed to verify and decommit");
29+
30+
let _party_two_second_message =
31+
party_two::KeyGenSecondMsg::verify_commitments_and_dlog_proof(
32+
&party_one_first_message,
33+
&party_one_second_message,
34+
)
35+
.expect("failed to verify commitments and DLog proof");
36+
37+
// init HSMCL keypair:
38+
let hsmcl_key_pair = party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(
39+
&ec_key_pair_party1,
40+
);
41+
42+
let party_one_private =
43+
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &hsmcl_key_pair);
44+
45+
let cldl_proof = party_one::HSMCLKeyPair::generate_zkcldl_proof(
46+
&hsmcl_key_pair,
47+
&party_one_private,
48+
);
49+
let _party_two_hsmcl_pub =
50+
party_two::HSMCLPublic::verify_zkcldl_proof(cldl_proof).expect("proof error");
51+
})
52+
});
53+
}
54+
55+
criterion_group! {
56+
name = keygen;
57+
config = Criterion::default().sample_size(10);
58+
targets =self::bench_full_keygen_party_one_two}
59+
}
60+
61+
criterion_main!(bench::keygen);
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#[macro_use]
2+
extern crate criterion;
3+
extern crate curv;
4+
extern crate multi_party_ecdsa;
5+
6+
mod bench {
7+
use criterion::Criterion;
8+
use curv::BigInt;
9+
use multi_party_ecdsa::protocols::two_party_ecdsa::cclst_2019::*;
10+
use multi_party_ecdsa::protocols::two_party_ecdsa::cclst_2019::party_two::HSMCLPublic;
11+
12+
pub fn bench_full_keygen_party_one_two(c: &mut Criterion) {
13+
c.bench_function("keygen", move |b| {
14+
b.iter(|| {
15+
let (_party_one_private_share_gen, _comm_witness, ec_key_pair_party1) =
16+
party_one::KeyGenFirstMsg::create_commitments();
17+
let (party_two_private_share_gen, ec_key_pair_party2) = party_two::KeyGenFirstMsg::create();
18+
19+
let party_one_hsmcl_key_pair =
20+
party_one::HSMCLKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1);
21+
22+
let party_two_hsmcl_public = HSMCLPublic {
23+
ek: party_one_hsmcl_key_pair.keypair.pk.clone(),
24+
encrypted_secret_share: party_one_hsmcl_key_pair.encrypted_share.clone(),
25+
};
26+
// creating the ephemeral private shares:
27+
28+
let (eph_party_two_first_message, eph_comm_witness, eph_ec_key_pair_party2) =
29+
party_two::EphKeyGenFirstMsg::create_commitments();
30+
let (eph_party_one_first_message, eph_ec_key_pair_party1) =
31+
party_one::EphKeyGenFirstMsg::create();
32+
let eph_party_two_second_message = party_two::EphKeyGenSecondMsg::verify_and_decommit(
33+
eph_comm_witness,
34+
&eph_party_one_first_message,
35+
)
36+
.expect("party1 DLog proof failed");
37+
38+
let _eph_party_one_second_message =
39+
party_one::EphKeyGenSecondMsg::verify_commitments_and_dlog_proof(
40+
&eph_party_two_first_message,
41+
&eph_party_two_second_message,
42+
)
43+
.expect("failed to verify commitments and DLog proof");
44+
let party2_private = party_two::Party2Private::set_private_key(&ec_key_pair_party2);
45+
let message = BigInt::from(1234);
46+
47+
let partial_sig = party_two::PartialSig::compute(
48+
party_two_hsmcl_public,
49+
&party2_private,
50+
&eph_ec_key_pair_party2,
51+
&eph_party_one_first_message.public_share,
52+
&message,
53+
);
54+
55+
let party1_private = party_one::Party1Private::set_private_key(
56+
&ec_key_pair_party1,
57+
&party_one_hsmcl_key_pair,
58+
);
59+
60+
let signature = party_one::Signature::compute(
61+
&party1_private,
62+
partial_sig.c3,
63+
&eph_ec_key_pair_party1,
64+
&eph_party_two_second_message.comm_witness.public_share,
65+
);
66+
67+
let pubkey =
68+
party_one::compute_pubkey(&party1_private, &party_two_private_share_gen.public_share);
69+
party_one::verify(&signature, &pubkey, &message).expect("Invalid signature")
70+
})
71+
});
72+
}
73+
74+
criterion_group! {
75+
name = keygen;
76+
config = Criterion::default().sample_size(10);
77+
targets =self::bench_full_keygen_party_one_two}
78+
}
79+
80+
criterion_main!(bench::keygen);

benches/two_party_ecdsa/lindell_2017/keygen.rs

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ mod bench {
1414
c.bench_function("keygen", move |b| {
1515
b.iter(|| {
1616
let (party_one_first_message, comm_witness, ec_key_pair_party1) =
17-
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(
18-
ECScalar::from(&BigInt::sample(253)),
19-
);
17+
party_one::KeyGenFirstMsg::create_commitments_with_fixed_secret_share(ECScalar::from(
18+
&BigInt::sample(253),
19+
));
2020
let (party_two_first_message, _ec_key_pair_party2) =
2121
party_two::KeyGenFirstMsg::create_with_fixed_secret_share(ECScalar::from(
2222
&BigInt::from(10),
@@ -25,25 +25,21 @@ mod bench {
2525
comm_witness,
2626
&party_two_first_message.d_log_proof,
2727
)
28-
.expect("failed to verify and decommit");
28+
.expect("failed to verify and decommit");
2929

3030
let _party_two_second_message =
3131
party_two::KeyGenSecondMsg::verify_commitments_and_dlog_proof(
3232
&party_one_first_message,
3333
&party_one_second_message,
3434
)
35-
.expect("failed to verify commitments and DLog proof");
35+
.expect("failed to verify commitments and DLog proof");
3636

3737
// init paillier keypair:
3838
let paillier_key_pair =
39-
party_one::PaillierKeyPair::generate_keypair_and_encrypted_share(
40-
&ec_key_pair_party1,
41-
);
39+
party_one::PaillierKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1);
4240

43-
let party_one_private = party_one::Party1Private::set_private_key(
44-
&ec_key_pair_party1,
45-
&paillier_key_pair,
46-
);
41+
let party_one_private =
42+
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &paillier_key_pair);
4743

4844
let party_two_paillier = party_two::PaillierPublic {
4945
ek: paillier_key_pair.ek.clone(),
@@ -56,26 +52,23 @@ mod bench {
5652
correct_key_proof,
5753
&party_two_paillier.ek,
5854
)
59-
.expect("bad paillier key");
55+
.expect("bad paillier key");
6056
// zk proof of correct paillier key
6157

6258
// zk range proof
6359
let range_proof = party_one::PaillierKeyPair::generate_range_proof(
6460
&paillier_key_pair,
6561
&party_one_private,
6662
);
67-
68-
let _result = party_two::PaillierPublic::verify_range_proof(
69-
&party_two_paillier,
70-
&range_proof,
71-
)
72-
.expect("range proof error");
63+
let _result =
64+
party_two::PaillierPublic::verify_range_proof(&party_two_paillier, &range_proof)
65+
.expect("range proof error");
7366

7467
// pdl proof minus range proof
75-
let (party_two_pdl_first_message, pdl_chal_party2) = party_two_paillier
76-
.pdl_challenge(&party_one_second_message.comm_witness.public_share);
68+
let (party_two_pdl_first_message, pdl_chal_party2) =
69+
party_two_paillier.pdl_challenge(&party_one_second_message.comm_witness.public_share);
7770

78-
let (party_one_pdl_first_message, pdl_decommit_party1) =
71+
let (party_one_pdl_first_message, pdl_decommit_party1, alpha) =
7972
party_one::PaillierKeyPair::pdl_first_stage(
8073
&party_one_private,
8174
&party_two_pdl_first_message,
@@ -84,20 +77,20 @@ mod bench {
8477
let party_two_pdl_second_message =
8578
party_two::PaillierPublic::pdl_decommit_c_tag_tag(&pdl_chal_party2);
8679
let party_one_pdl_second_message = party_one::PaillierKeyPair::pdl_second_stage(
87-
&party_one_pdl_first_message,
8880
&party_two_pdl_first_message,
8981
&party_two_pdl_second_message,
9082
party_one_private,
9183
pdl_decommit_party1,
84+
alpha,
9285
)
93-
.expect("pdl error party2");
86+
.expect("pdl error party2");
9487

9588
party_two::PaillierPublic::verify_pdl(
9689
&pdl_chal_party2,
9790
&party_one_pdl_first_message,
9891
&party_one_pdl_second_message,
9992
)
100-
.expect("pdl error party1")
93+
.expect("pdl error party1")
10194
})
10295
});
10396
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#[macro_use]
2+
extern crate criterion;
3+
extern crate curv;
4+
extern crate multi_party_ecdsa;
5+
6+
mod bench {
7+
use criterion::Criterion;
8+
use curv::arithmetic::traits::Samplable;
9+
use curv::elliptic::curves::traits::*;
10+
use curv::BigInt;
11+
use multi_party_ecdsa::protocols::two_party_ecdsa::lindell_2017::*;
12+
13+
pub fn bench_full_keygen_party_one_two(c: &mut Criterion) {
14+
c.bench_function("keygen", move |b| {
15+
b.iter(|| {
16+
let (_party_one_private_share_gen, _comm_witness, ec_key_pair_party1) =
17+
party_one::KeyGenFirstMsg::create_commitments();
18+
let (party_two_private_share_gen, ec_key_pair_party2) = party_two::KeyGenFirstMsg::create();
19+
20+
let keypair =
21+
party_one::PaillierKeyPair::generate_keypair_and_encrypted_share(&ec_key_pair_party1);
22+
23+
// creating the ephemeral private shares:
24+
25+
let (eph_party_two_first_message, eph_comm_witness, eph_ec_key_pair_party2) =
26+
party_two::EphKeyGenFirstMsg::create_commitments();
27+
let (eph_party_one_first_message, eph_ec_key_pair_party1) =
28+
party_one::EphKeyGenFirstMsg::create();
29+
let eph_party_two_second_message = party_two::EphKeyGenSecondMsg::verify_and_decommit(
30+
eph_comm_witness,
31+
&eph_party_one_first_message,
32+
)
33+
.expect("party1 DLog proof failed");
34+
35+
let _eph_party_one_second_message =
36+
party_one::EphKeyGenSecondMsg::verify_commitments_and_dlog_proof(
37+
&eph_party_two_first_message,
38+
&eph_party_two_second_message,
39+
)
40+
.expect("failed to verify commitments and DLog proof");
41+
let party2_private = party_two::Party2Private::set_private_key(&ec_key_pair_party2);
42+
let message = BigInt::from(1234);
43+
let partial_sig = party_two::PartialSig::compute(
44+
&keypair.ek,
45+
&keypair.encrypted_share,
46+
&party2_private,
47+
&eph_ec_key_pair_party2,
48+
&eph_party_one_first_message.public_share,
49+
&message,
50+
);
51+
52+
let party1_private =
53+
party_one::Party1Private::set_private_key(&ec_key_pair_party1, &keypair);
54+
55+
let signature = party_one::Signature::compute(
56+
&party1_private,
57+
&partial_sig.c3,
58+
&eph_ec_key_pair_party1,
59+
&eph_party_two_second_message.comm_witness.public_share,
60+
);
61+
62+
let pubkey =
63+
party_one::compute_pubkey(&party1_private, &party_two_private_share_gen.public_share);
64+
party_one::verify(&signature, &pubkey, &message).expect("Invalid signature")
65+
66+
})
67+
});
68+
}
69+
70+
criterion_group! {
71+
name = keygen;
72+
config = Criterion::default().sample_size(10);
73+
targets =self::bench_full_keygen_party_one_two}
74+
}
75+
76+
criterion_main!(bench::keygen);

0 commit comments

Comments
 (0)