Skip to content

Commit fa42458

Browse files
authored
feat: benchmarks
feat: benchmarks
1 parent c769746 commit fa42458

File tree

3 files changed

+131
-106
lines changed

3 files changed

+131
-106
lines changed

gotham-server/Cargo.toml

+5
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ time-test = "0.2.1"
4545
floating-duration.workspace = true
4646
criterion = "0.4.0"
4747
pprof = { version = "0.11", features = ["flamegraph", "frame-pointer", "criterion"] }
48+
rand = "0.8"
4849

4950
[[bench]]
5051
name = "keygen_bench"
5152
harness = false
5253

54+
[[bench]]
55+
name = "sign_bench"
56+
harness = false
57+

gotham-server/benches/keygen_bench.rs

+20-106
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,54 @@
11
use std::collections::HashMap;
2-
use std::env;
32
use std::time::Instant;
43
use time_test::time_test;
5-
use rocket::{http::ContentType, http::{Header, Status}, local::blocking::Client};
6-
use two_party_ecdsa::curv::arithmetic::traits::Converter;
4+
use rocket::{http::ContentType, http::{Status}, local::blocking::Client};
75
use two_party_ecdsa::curv::cryptographic_primitives::twoparty::dh_key_exchange_variant_with_pok_comm::*;
8-
use two_party_ecdsa::{party_one, party_two, curv::BigInt};
6+
use two_party_ecdsa::{party_one};
97
use floating_duration::TimeFormat;
108
use kms::chain_code::two_party as chain_code;
119
use kms::ecdsa::two_party::{MasterKey2, party1};
12-
use crate::routes::ecdsa::SignSecondMsgRequest;
13-
use criterion::{criterion_group, criterion_main, Criterion};
10+
use criterion::{criterion_group, criterion_main, Criterion, BenchmarkId};
1411
use pprof::criterion::{Output, PProfProfiler};
1512
use server_lib::*;
1613

17-
fn key_gen(client: &Client) -> (String, MasterKey2) {
18-
time_test!();
19-
14+
pub fn keygen(client: &Client) -> (String, MasterKey2) {
2015
/*************** START: FIRST MESSAGE ***************/
21-
let start = Instant::now();
2216

2317
let response = client
2418
.post("/ecdsa/keygen/first")
2519
.header(ContentType::JSON)
2620
.dispatch();
2721
assert_eq!(response.status(), Status::Ok);
2822

29-
println!(
30-
"{} Network/Server: party1 first message",
31-
TimeFormat(start.elapsed())
32-
);
3323
let res_body = response.into_string().unwrap();
3424

3525
let (id, kg_party_one_first_message): (String, party_one::KeyGenFirstMsg) =
3626
serde_json::from_str(&res_body).unwrap();
3727

38-
let start = Instant::now();
39-
4028
let (kg_party_two_first_message, kg_ec_key_pair_party2) = MasterKey2::key_gen_first_message();
4129

42-
println!(
43-
"{} Client: party2 first message",
44-
TimeFormat(start.elapsed())
45-
);
4630
/*************** END: FIRST MESSAGE ***************/
4731

4832
/*************** START: SECOND MESSAGE ***************/
4933
let body = serde_json::to_string(&kg_party_two_first_message.d_log_proof).unwrap();
5034

51-
let start = Instant::now();
52-
5335
let response = client
5436
.post(format!("/ecdsa/keygen/{}/second", id))
5537
.body(body)
5638
.header(ContentType::JSON)
5739
.dispatch();
5840
assert_eq!(response.status(), Status::Ok);
5941

60-
println!(
61-
"{} Network/Server: party1 second message",
62-
TimeFormat(start.elapsed())
63-
);
64-
6542
let res_body = response.into_string().unwrap();
6643
let kg_party_one_second_message: party1::KeyGenParty1Message2 =
6744
serde_json::from_str(&res_body).unwrap();
6845

69-
let start = Instant::now();
70-
7146
let key_gen_second_message = MasterKey2::key_gen_second_message(
7247
&kg_party_one_first_message,
7348
&kg_party_one_second_message,
7449
);
7550
assert!(key_gen_second_message.is_ok());
7651

77-
println!(
78-
"{} Client: party2 second message",
79-
TimeFormat(start.elapsed())
80-
);
81-
8252
let (party_two_second_message, party_two_paillier, party_two_pdl_chal) =
8353
key_gen_second_message.unwrap();
8454

@@ -87,32 +57,19 @@ fn key_gen(client: &Client) -> (String, MasterKey2) {
8757
/*************** START: THIRD MESSAGE ***************/
8858
let body = serde_json::to_string(&party_two_second_message.pdl_first_message).unwrap();
8959

90-
let start = Instant::now();
91-
9260
let response = client
9361
.post(format!("/ecdsa/keygen/{}/third", id))
9462
.body(body)
9563
.header(ContentType::JSON)
9664
.dispatch();
9765
assert_eq!(response.status(), Status::Ok);
9866

99-
println!(
100-
"{} Network/Server: party1 third message",
101-
TimeFormat(start.elapsed())
102-
);
103-
10467
let res_body = response.into_string().unwrap();
10568
let party_one_third_message: party_one::PDLFirstMessage =
10669
serde_json::from_str(&res_body).unwrap();
10770

108-
let start = Instant::now();
109-
11071
let pdl_decom_party2 = MasterKey2::key_gen_third_message(&party_two_pdl_chal);
11172

112-
println!(
113-
"{} Client: party2 third message",
114-
TimeFormat(start.elapsed())
115-
);
11673
/*************** END: THIRD MESSAGE ***************/
11774

11875
/*************** START: FOURTH MESSAGE ***************/
@@ -121,117 +78,70 @@ fn key_gen(client: &Client) -> (String, MasterKey2) {
12178
let request = party_2_pdl_second_message;
12279
let body = serde_json::to_string(&request).unwrap();
12380

124-
let start = Instant::now();
125-
12681
let response = client
12782
.post(format!("/ecdsa/keygen/{}/fourth", id))
12883
.body(body)
12984
.header(ContentType::JSON)
13085
.dispatch();
13186
assert_eq!(response.status(), Status::Ok);
13287

133-
println!(
134-
"{} Network/Server: party1 fourth message",
135-
TimeFormat(start.elapsed())
136-
);
137-
13888
let res_body = response.into_string().unwrap();
13989
let party_one_pdl_second_message: party_one::PDLSecondMessage =
14090
serde_json::from_str(&res_body).unwrap();
14191

142-
let start = Instant::now();
143-
14492
MasterKey2::key_gen_fourth_message(
14593
&party_two_pdl_chal,
14694
&party_one_third_message,
14795
&party_one_pdl_second_message,
14896
)
14997
.expect("pdl error party1");
15098

151-
println!(
152-
"{} Client: party2 fourth message",
153-
TimeFormat(start.elapsed())
154-
);
15599
/*************** END: FOURTH MESSAGE ***************/
156100

157101
/*************** START: CHAINCODE FIRST MESSAGE ***************/
158-
let start = Instant::now();
159102

160103
let response = client
161104
.post(format!("/ecdsa/keygen/{}/chaincode/first", id))
162105
.header(ContentType::JSON)
163106
.dispatch();
164107
assert_eq!(response.status(), Status::Ok);
165108

166-
println!(
167-
"{} Network/Server: party1 chain code first message",
168-
TimeFormat(start.elapsed())
169-
);
170-
171109
let res_body = response.into_string().unwrap();
172110
let cc_party_one_first_message: Party1FirstMessage = serde_json::from_str(&res_body).unwrap();
173111

174-
let start = Instant::now();
175112
let (cc_party_two_first_message, cc_ec_key_pair2) =
176113
chain_code::party2::ChainCode2::chain_code_first_message();
177114

178-
println!(
179-
"{} Client: party2 chain code first message",
180-
TimeFormat(start.elapsed())
181-
);
182115
/*************** END: CHAINCODE FIRST MESSAGE ***************/
183116

184117
/*************** START: CHAINCODE SECOND MESSAGE ***************/
185118
let body = serde_json::to_string(&cc_party_two_first_message.d_log_proof).unwrap();
186119

187-
let start = Instant::now();
188-
189120
let response = client
190121
.post(format!("/ecdsa/keygen/{}/chaincode/second", id))
191122
.body(body)
192123
.header(ContentType::JSON)
193124
.dispatch();
194125
assert_eq!(response.status(), Status::Ok);
195126

196-
println!(
197-
"{} Network/Server: party1 chain code second message",
198-
TimeFormat(start.elapsed())
199-
);
200-
201127
let res_body = response.into_string().unwrap();
202128
let cc_party_one_second_message: Party1SecondMessage = serde_json::from_str(&res_body).unwrap();
203129

204-
let start = Instant::now();
205130
let _cc_party_two_second_message = chain_code::party2::ChainCode2::chain_code_second_message(
206131
&cc_party_one_first_message,
207132
&cc_party_one_second_message,
208133
);
209134

210-
println!(
211-
"{} Client: party2 chain code second message",
212-
TimeFormat(start.elapsed())
213-
);
214135
/*************** END: CHAINCODE SECOND MESSAGE ***************/
215136

216-
let start = Instant::now();
217137
let party2_cc = chain_code::party2::ChainCode2::compute_chain_code(
218138
&cc_ec_key_pair2,
219139
&cc_party_one_second_message.comm_witness.public_share,
220140
)
221141
.chain_code;
222142

223-
println!(
224-
"{} Client: party2 chain code second message",
225-
TimeFormat(start.elapsed())
226-
);
227143
/*************** END: CHAINCODE COMPUTE MESSAGE ***************/
228144

229-
println!(
230-
"{} Network/Server: party1 master key",
231-
TimeFormat(start.elapsed())
232-
);
233-
234-
let start = Instant::now();
235145
let party_two_master_key = MasterKey2::set_master_key(
236146
&party2_cc,
237147
&kg_ec_key_pair_party2,
@@ -242,25 +152,29 @@ fn key_gen(client: &Client) -> (String, MasterKey2) {
242152
&party_two_paillier,
243153
);
244154

245-
println!("{} Client: party2 master_key", TimeFormat(start.elapsed()));
246155
/*************** END: MASTER KEYS MESSAGE ***************/
247156

248157
(id, party_two_master_key)
249158
}
250159

251160
/// Benchmarks keygen phase from client side invoking gotham server endpoints
252161
pub fn criterion_benchmark(c: &mut Criterion) {
253-
c.bench_function("keygen benchmarking", |b| {
254-
b.iter(|| {
255-
let settings = HashMap::<String, String>::from([
256-
("db".to_string(), "local".to_string()),
257-
("db_name".to_string(), "KeyGenAndSign".to_string()),
258-
]);
259-
let server = server::get_server(settings);
260-
let client = Client::tracked(server).expect("valid rocket instance");
261-
let (_, _): (String, MasterKey2) = key_gen(&client);
262-
})
263-
});
162+
let settings = HashMap::<String, String>::from([
163+
("db".to_string(), "local".to_string()),
164+
("db_name".to_string(), "KeyGenAndSign".to_string()),
165+
]);
166+
let server = server::get_server(settings);
167+
let client = Client::tracked(server).expect("valid rocket instance");
168+
169+
c.bench_with_input(
170+
BenchmarkId::new("keygen_benchmark", 1),
171+
&client,
172+
|b, client| {
173+
b.iter(|| {
174+
let (_, _): (String, MasterKey2) = keygen(&client);
175+
})
176+
},
177+
);
264178
}
265179

266180
criterion_group! {

0 commit comments

Comments
 (0)