Skip to content

Commit f25001a

Browse files
committed
Fix bench
Signed-off-by: lovesh <lovesh.bond@gmail.com>
1 parent 31b8999 commit f25001a

File tree

15 files changed

+390
-54
lines changed

15 files changed

+390
-54
lines changed

bbs_plus/src/threshold/threshold_bbs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub struct Phase1Output<F: PrimeField> {
3434
pub others: Vec<ParticipantId>,
3535
}
3636

37+
#[derive(Clone, Debug, PartialEq, CanonicalSerialize, CanonicalDeserialize)]
3738
pub struct BBSSignatureShare<E: Pairing> {
3839
pub id: ParticipantId,
3940
pub e: E::ScalarField,

bbs_plus/src/threshold/threshold_bbs_plus.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ impl<F: PrimeField> Phase1<F> {
9090
}
9191
}
9292

93+
#[derive(Clone, Debug, PartialEq, CanonicalSerialize, CanonicalDeserialize)]
9394
pub struct BBSPlusSignatureShare<E: Pairing> {
9495
pub id: ParticipantId,
9596
pub e: E::ScalarField,

benches/Cargo.toml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ serde_with.workspace = true
1919
blake2 = { version = "0.10", default-features = false }
2020
itertools = "0.10.5"
2121
coconut-crypto = { version = "0.3.0", default-features = false, path = "../coconut" }
22+
oblivious_transfer_protocols = { version = "0.1.0", default-features = false, path = "../oblivious_transfer" }
2223
dock_crypto_utils = { default-features = false, path = "../utils" }
2324
zeroize.workspace = true
2425

2526
[dev-dependencies]
26-
criterion = "0.3"
27+
criterion = "0.4.0"
2728
ark-serialize = { version = "^0.4.1", default-features = false, features = [ "derive" ] }
2829

2930
[[bench]]
@@ -74,4 +75,14 @@ harness = false
7475
[[bench]]
7576
name = "bbs_proof"
7677
path = "benches/bbs_proof.rs"
78+
harness = false
79+
80+
[[bench]]
81+
name = "kos_ote"
82+
path = "benches/kos_ote.rs"
83+
harness = false
84+
85+
[[bench]]
86+
name = "dkls19_batch_mul_2p"
87+
path = "benches/dkls19_batch_mul_2p.rs"
7788
harness = false
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
use ark_bls12_381::{Bls12_381, Fr};
2+
use ark_ec::pairing::Pairing;
3+
use ark_std::{
4+
rand::{prelude::StdRng, SeedableRng},
5+
UniformRand,
6+
};
7+
use benches::ot::do_1_of_2_base_ot;
8+
use blake2::Blake2b512;
9+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
10+
use dock_crypto_utils::transcript::new_merlin_transcript;
11+
use oblivious_transfer_protocols::ot_based_multiplication::{
12+
dkls18_mul_2p::MultiplicationOTEParams,
13+
dkls19_batch_mul_2p::{GadgetVector, Party1, Party2},
14+
};
15+
16+
fn batch_multiplication(c: &mut Criterion) {
17+
let mut rng = StdRng::seed_from_u64(0u64);
18+
let b = <Bls12_381 as Pairing>::G1Affine::rand(&mut rng);
19+
20+
const KEY_SIZE: u16 = 128;
21+
const KAPPA: u16 = 256;
22+
const SSP: u16 = 80;
23+
let ote_params = MultiplicationOTEParams::<KAPPA, SSP> {};
24+
let gadget_vector =
25+
GadgetVector::<Fr, KAPPA, SSP>::new::<Blake2b512>(ote_params, b"test-gadget-vector");
26+
27+
let (base_ot_choices, base_ot_sender_keys, base_ot_receiver_keys) =
28+
do_1_of_2_base_ot::<KEY_SIZE>(&mut rng, ote_params.num_base_ot(), &b);
29+
let base_ot_choices = base_ot_choices
30+
.into_iter()
31+
.map(|b| b % 2 != 0)
32+
.collect::<Vec<_>>();
33+
34+
let batch_sizes = [2, 4, 8, 16, 32];
35+
36+
for batch_size in batch_sizes {
37+
let alpha = (0..batch_size)
38+
.map(|_| Fr::rand(&mut rng))
39+
.collect::<Vec<_>>();
40+
let beta = (0..batch_size)
41+
.map(|_| Fr::rand(&mut rng))
42+
.collect::<Vec<_>>();
43+
44+
let otc = format!("for batch size {}", batch_size);
45+
46+
let mut party1_transcript = new_merlin_transcript(b"test-multiplication");
47+
let mut party2_transcript = new_merlin_transcript(b"test-multiplication");
48+
49+
c.bench_function(format!("Party1 init {}", otc).as_str(), |b| {
50+
b.iter(|| {
51+
Party1::new::<StdRng>(
52+
&mut rng,
53+
black_box(alpha.clone()),
54+
black_box(base_ot_choices.clone()),
55+
black_box(base_ot_receiver_keys.clone()),
56+
black_box(ote_params),
57+
)
58+
.unwrap()
59+
})
60+
});
61+
62+
c.bench_function(format!("Party2 init {}", otc).as_str(), |b| {
63+
b.iter(|| {
64+
Party2::new(
65+
&mut rng,
66+
black_box(beta.clone()),
67+
black_box(base_ot_sender_keys.clone()),
68+
&mut party2_transcript,
69+
black_box(ote_params),
70+
&gadget_vector,
71+
)
72+
.unwrap()
73+
})
74+
});
75+
76+
let party1 = Party1::new::<StdRng>(
77+
&mut rng,
78+
alpha,
79+
base_ot_choices.clone(),
80+
base_ot_receiver_keys.clone(),
81+
ote_params,
82+
)
83+
.unwrap();
84+
85+
let (party2, U, kos_rlc, gamma_b) = Party2::new(
86+
&mut rng,
87+
beta.clone(),
88+
base_ot_sender_keys.clone(),
89+
&mut party2_transcript,
90+
ote_params,
91+
&gadget_vector,
92+
)
93+
.unwrap();
94+
95+
c.bench_function(format!("Party1 creates shares for {}", otc).as_str(), |b| {
96+
b.iter(|| {
97+
party1
98+
.clone()
99+
.receive::<Blake2b512>(
100+
black_box(U.clone()),
101+
black_box(kos_rlc.clone()),
102+
black_box(gamma_b.clone()),
103+
&mut party1_transcript,
104+
&gadget_vector,
105+
)
106+
.unwrap()
107+
})
108+
});
109+
110+
let (_, tau, rlc, gamma_a) = party1
111+
.receive::<Blake2b512>(U, kos_rlc, gamma_b, &mut party1_transcript, &gadget_vector)
112+
.unwrap();
113+
114+
c.bench_function(format!("Party2 creates shares for {}", otc).as_str(), |b| {
115+
b.iter(|| {
116+
party2
117+
.clone()
118+
.receive::<Blake2b512>(
119+
black_box(tau.clone()),
120+
black_box(rlc.clone()),
121+
black_box(gamma_a.clone()),
122+
&mut party2_transcript,
123+
&gadget_vector,
124+
)
125+
.unwrap()
126+
})
127+
});
128+
}
129+
}
130+
131+
criterion_group!(benches, batch_multiplication);
132+
criterion_main!(benches);

benches/benches/kos_ote.rs

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
use ark_bls12_381::{Bls12_381, Fr};
2+
use ark_ec::pairing::Pairing;
3+
use ark_std::{
4+
rand::{prelude::StdRng, RngCore, SeedableRng},
5+
UniformRand,
6+
};
7+
use benches::ot::do_1_of_2_base_ot;
8+
use blake2::Blake2b512;
9+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
10+
use oblivious_transfer_protocols::{
11+
configs::OTEConfig,
12+
ot_extensions::kos_ote::{OTExtensionReceiverSetup, OTExtensionSenderSetup},
13+
};
14+
15+
fn kos_ote(c: &mut Criterion) {
16+
let mut rng = StdRng::seed_from_u64(0u64);
17+
let b = <Bls12_381 as Pairing>::G1Affine::rand(&mut rng);
18+
let ot_counts = [(128, 1024), (192, 4096), (200, 8192)];
19+
let message_size = 512;
20+
const KEY_SIZE: u16 = 128;
21+
const SSP: u16 = 80;
22+
23+
for (base_ot_count, extended_ot_count) in ot_counts {
24+
let (base_ot_choices, base_ot_sender_keys, base_ot_receiver_keys) =
25+
do_1_of_2_base_ot::<KEY_SIZE>(&mut rng, base_ot_count, &b);
26+
let ot_ext_choices = (0..extended_ot_count)
27+
.map(|_| u8::rand(&mut rng) % 2 != 0)
28+
.collect::<Vec<_>>();
29+
let messages = (0..extended_ot_count)
30+
.map(|_| {
31+
(
32+
{
33+
let mut bytes = vec![0u8; message_size];
34+
rng.fill_bytes(&mut bytes);
35+
bytes
36+
},
37+
{
38+
let mut bytes = vec![0u8; message_size];
39+
rng.fill_bytes(&mut bytes);
40+
bytes
41+
},
42+
)
43+
})
44+
.collect::<Vec<_>>();
45+
46+
let ote_config = OTEConfig::new(base_ot_count, extended_ot_count).unwrap();
47+
48+
let otc = format!(
49+
"for base {} OTs and {} extended OTs",
50+
base_ot_count, extended_ot_count
51+
);
52+
53+
c.bench_function(
54+
format!("OT extension receiver setup {}", otc).as_str(),
55+
|b| {
56+
b.iter(|| {
57+
OTExtensionReceiverSetup::new::<_, SSP>(
58+
&mut rng,
59+
black_box(ote_config),
60+
black_box(ot_ext_choices.clone()),
61+
black_box(base_ot_sender_keys.clone()),
62+
)
63+
.unwrap();
64+
})
65+
},
66+
);
67+
68+
let (ext_receiver_setup, u, rlc) = OTExtensionReceiverSetup::new::<_, SSP>(
69+
&mut rng,
70+
ote_config,
71+
ot_ext_choices.clone(),
72+
base_ot_sender_keys,
73+
)
74+
.unwrap();
75+
let base_ot_choices = base_ot_choices
76+
.into_iter()
77+
.map(|b| b % 2 != 0)
78+
.collect::<Vec<_>>();
79+
80+
c.bench_function(
81+
format!("OT extension receiver setup {}", otc).as_str(),
82+
|b| {
83+
b.iter(|| {
84+
OTExtensionSenderSetup::new::<SSP>(
85+
black_box(ote_config),
86+
black_box(u.clone()),
87+
black_box(rlc.clone()),
88+
black_box(base_ot_choices.clone()),
89+
black_box(base_ot_receiver_keys.clone()),
90+
)
91+
.unwrap()
92+
})
93+
},
94+
);
95+
96+
let ext_sender_setup = OTExtensionSenderSetup::new::<SSP>(
97+
ote_config,
98+
u,
99+
rlc,
100+
base_ot_choices,
101+
base_ot_receiver_keys,
102+
)
103+
.unwrap();
104+
105+
c.bench_function(format!("Encrypt chosen messages {}", otc).as_str(), |b| {
106+
b.iter(|| {
107+
ext_sender_setup
108+
.clone()
109+
.encrypt(black_box(messages.clone()), black_box(message_size))
110+
.unwrap()
111+
})
112+
});
113+
114+
let encryptions = ext_sender_setup
115+
.encrypt(messages.clone(), message_size)
116+
.unwrap();
117+
118+
c.bench_function(format!("Decrypt chosen messages {}", otc).as_str(), |b| {
119+
b.iter(|| {
120+
ext_receiver_setup
121+
.clone()
122+
.decrypt(black_box(encryptions.clone()), black_box(message_size))
123+
.unwrap()
124+
})
125+
});
126+
127+
let alpha = (0..extended_ot_count)
128+
.map(|_| (Fr::rand(&mut rng), Fr::rand(&mut rng)))
129+
.collect::<Vec<_>>();
130+
131+
c.bench_function(format!("Encrypt correlations {}", otc).as_str(), |b| {
132+
b.iter(|| {
133+
ext_sender_setup
134+
.transfer::<Fr, Blake2b512>(alpha.clone())
135+
.unwrap()
136+
})
137+
});
138+
139+
let (_, tau) = ext_sender_setup
140+
.transfer::<Fr, Blake2b512>(alpha.clone())
141+
.unwrap();
142+
143+
c.bench_function(format!("Decrypt correlations {}", otc).as_str(), |b| {
144+
b.iter(|| {
145+
ext_receiver_setup
146+
.receive::<Fr, Blake2b512>(black_box(tau.clone()))
147+
.unwrap()
148+
})
149+
});
150+
}
151+
}
152+
153+
criterion_group!(benches, kos_ote);
154+
criterion_main!(benches);

benches/src/lib.rs

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,3 @@
1-
#[macro_export]
2-
macro_rules! setup_bbs_plus {
3-
($sig_params:ident, $keypair: ident, $rng: ident, $message_count_range: ident, $messages_range: ident, $params_range: ident, $keypair_range: ident, $kp_gen_func: ident) => {
4-
// Hardcoding multi-message sizes. This should ideally be taken/updated from command line input
5-
let $message_count_range = [2, 4, 8, 15, 20, 30, 40, 60];
6-
let $messages_range = $message_count_range
7-
.iter()
8-
.map(|c| {
9-
(0..*c)
10-
.into_iter()
11-
.map(|_| Fr::rand(&mut $rng))
12-
.collect::<Vec<_>>()
13-
})
14-
.collect::<Vec<_>>();
15-
let $params_range = $message_count_range
16-
.iter()
17-
.map(|c| $sig_params::<Bls12_381>::generate_using_rng(&mut $rng, *c))
18-
.collect::<Vec<_>>();
19-
let $keypair_range = $params_range
20-
.iter()
21-
.map(|p| $keypair::<Bls12_381>::$kp_gen_func(&mut $rng, p))
22-
.collect::<Vec<_>>();
23-
};
24-
}
25-
26-
#[macro_export]
27-
macro_rules! setup_ps {
28-
($sig_params:ident, $secret: ident, $rng: ident, $message_count_range: ident, $messages_range: ident, $params_range: ident, $secret_range: ident) => {
29-
// Hardcoding multi-message sizes. This should ideally be taken/updated from command line input
30-
let $message_count_range = [2, 4, 8, 15, 20, 30, 40, 60];
31-
let $messages_range = $message_count_range
32-
.iter()
33-
.map(|c| {
34-
(0..*c)
35-
.into_iter()
36-
.map(|_| Fr::rand(&mut $rng))
37-
.collect::<Vec<_>>()
38-
})
39-
.collect::<Vec<_>>();
40-
let $params_range = $message_count_range
41-
.iter()
42-
.map(|c| $sig_params::<Bls12_381>::new::<blake2::Blake2b512>(b"test", *c))
43-
.collect::<Vec<_>>();
44-
let $secret_range = $message_count_range
45-
.iter()
46-
.map(|c| $secret::<Fr>::rand(&mut $rng, *c))
47-
.collect::<Vec<_>>();
48-
};
49-
}
1+
pub mod ot;
2+
#[macro_use]
3+
pub mod sig;

0 commit comments

Comments
 (0)