Skip to content

Commit 4c0678d

Browse files
committed
rename functions
1 parent b6fb6c2 commit 4c0678d

File tree

23 files changed

+607
-233
lines changed

23 files changed

+607
-233
lines changed

mithril-stm/benches/size_benches.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,28 @@ where
3030

3131
let mut key_reg = KeyRegistration::init();
3232
for stake in parties {
33-
let p = Initializer::setup(params, stake, &mut rng);
34-
key_reg.register(stake, p.verification_key()).unwrap();
33+
let p = Initializer::new(params, stake, &mut rng);
34+
key_reg
35+
.register(stake, p.get_verification_key_proof_of_possession())
36+
.unwrap();
3537
ps.push(p);
3638
}
3739

3840
let closed_reg = key_reg.close::<H>();
3941

4042
let ps = ps
4143
.into_par_iter()
42-
.map(|p| p.new_signer(closed_reg.clone()).unwrap())
44+
.map(|p| p.create_signer(closed_reg.clone()).unwrap())
4345
.collect::<Vec<Signer<H>>>();
4446

4547
let sigs = ps
4648
.par_iter()
4749
.filter_map(|p| p.sign(&msg))
4850
.collect::<Vec<SingleSignature>>();
49-
let clerk = Clerk::from_signer(&ps[0]);
51+
let clerk = Clerk::new_clerk_from_signer(&ps[0]);
5052

5153
// Aggregate with random parties
52-
let aggr = clerk.aggregate(&sigs, &msg).unwrap();
54+
let aggr = clerk.aggregate_signatures(&sigs, &msg).unwrap();
5355

5456
println!(
5557
"k = {} | m = {} | nr parties = {}; {} bytes",
@@ -76,21 +78,24 @@ where
7678
let params = Parameters { k, m, phi_f: 0.2 };
7779

7880
for stake in parties {
79-
let initializer = Initializer::setup(params, stake, &mut rng);
81+
let initializer = Initializer::new(params, stake, &mut rng);
8082
initializers.push(initializer.clone());
81-
public_signers.push((initializer.verification_key().vk, initializer.stake));
83+
public_signers.push((
84+
initializer.get_verification_key_proof_of_possession().vk,
85+
initializer.stake,
86+
));
8287
}
8388

84-
let core_verifier = BasicVerifier::setup(&public_signers);
89+
let core_verifier = BasicVerifier::new(&public_signers);
8590

8691
let signers: Vec<Signer<H>> = initializers
8792
.into_iter()
88-
.filter_map(|s| s.new_core_signer(&core_verifier.eligible_parties))
93+
.filter_map(|s| s.create_basic_signer(&core_verifier.eligible_parties))
8994
.collect();
9095

9196
let mut signatures: Vec<SingleSignature> = Vec::with_capacity(nparties);
9297
for s in signers {
93-
if let Some(sig) = s.core_sign(&msg, core_verifier.total_stake) {
98+
if let Some(sig) = s.basic_sign(&msg, core_verifier.total_stake) {
9499
signatures.push(sig);
95100
}
96101
}
@@ -103,7 +108,7 @@ where
103108
})
104109
.collect::<Vec<SingleSignatureWithRegisteredParty>>();
105110

106-
let dedup_sigs = BasicVerifier::dedup_sigs_for_indices(
111+
let dedup_sigs = BasicVerifier::select_valid_signatures_for_k_indices(
107112
&core_verifier.total_stake,
108113
&params,
109114
&msg,

mithril-stm/benches/stm.rs

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ where
3535

3636
let mut initializers: Vec<Initializer> = Vec::with_capacity(nr_parties);
3737
for stake in stakes {
38-
initializers.push(Initializer::setup(params, stake, &mut rng));
38+
initializers.push(Initializer::new(params, stake, &mut rng));
3939
}
4040
let mut key_reg = KeyRegistration::init();
4141

@@ -44,7 +44,9 @@ where
4444
// We need to initialise the key_reg at each iteration
4545
key_reg = KeyRegistration::init();
4646
for p in initializers.iter() {
47-
key_reg.register(p.stake, p.verification_key()).unwrap();
47+
key_reg
48+
.register(p.stake, p.get_verification_key_proof_of_possession())
49+
.unwrap();
4850
}
4951
})
5052
});
@@ -53,7 +55,7 @@ where
5355

5456
let signers = initializers
5557
.into_par_iter()
56-
.map(|p| p.new_signer(closed_reg.clone()).unwrap())
58+
.map(|p| p.create_signer(closed_reg.clone()).unwrap())
5759
.collect::<Vec<Signer<H>>>();
5860

5961
group.bench_function(BenchmarkId::new("Play all lotteries", &param_string), |b| {
@@ -64,10 +66,10 @@ where
6466

6567
let sigs = signers.par_iter().filter_map(|p| p.sign(&msg)).collect::<Vec<_>>();
6668

67-
let clerk = Clerk::from_signer(&signers[0]);
69+
let clerk = Clerk::new_clerk_from_signer(&signers[0]);
6870

6971
group.bench_function(BenchmarkId::new("Aggregation", &param_string), |b| {
70-
b.iter(|| clerk.aggregate(&sigs, &msg))
72+
b.iter(|| clerk.aggregate_signatures(&sigs, &msg))
7173
});
7274
}
7375

@@ -108,26 +110,28 @@ fn batch_benches<H>(
108110

109111
let mut initializers: Vec<Initializer> = Vec::with_capacity(nr_parties);
110112
for stake in stakes {
111-
initializers.push(Initializer::setup(params, stake, &mut rng));
113+
initializers.push(Initializer::new(params, stake, &mut rng));
112114
}
113115
let mut key_reg = KeyRegistration::init();
114116
for p in initializers.iter() {
115-
key_reg.register(p.stake, p.verification_key()).unwrap();
117+
key_reg
118+
.register(p.stake, p.get_verification_key_proof_of_possession())
119+
.unwrap();
116120
}
117121

118122
let closed_reg = key_reg.close();
119123

120124
let signers = initializers
121125
.into_par_iter()
122-
.map(|p| p.new_signer(closed_reg.clone()).unwrap())
126+
.map(|p| p.create_signer(closed_reg.clone()).unwrap())
123127
.collect::<Vec<Signer<H>>>();
124128

125129
let sigs = signers.par_iter().filter_map(|p| p.sign(&msg)).collect::<Vec<_>>();
126130

127-
let clerk = Clerk::from_signer(&signers[0]);
128-
let msig = clerk.aggregate(&sigs, &msg).unwrap();
131+
let clerk = Clerk::new_clerk_from_signer(&signers[0]);
132+
let msig = clerk.aggregate_signatures(&sigs, &msg).unwrap();
129133

130-
batch_avks.push(clerk.compute_avk());
134+
batch_avks.push(clerk.compute_aggregate_verification_key());
131135
batch_stms.push(msig);
132136
}
133137

@@ -167,27 +171,30 @@ where
167171
.collect::<Vec<_>>();
168172

169173
for stake in stakes {
170-
let initializer = Initializer::setup(params, stake, &mut rng);
174+
let initializer = Initializer::new(params, stake, &mut rng);
171175
initializers.push(initializer.clone());
172-
public_signers.push((initializer.verification_key().vk, initializer.stake));
176+
public_signers.push((
177+
initializer.get_verification_key_proof_of_possession().vk,
178+
initializer.stake,
179+
));
173180
}
174181

175-
let core_verifier = BasicVerifier::setup(&public_signers);
182+
let core_verifier = BasicVerifier::new(&public_signers);
176183

177184
let signers: Vec<Signer<H>> = initializers
178185
.into_iter()
179-
.filter_map(|s| s.new_core_signer(&core_verifier.eligible_parties))
186+
.filter_map(|s| s.create_basic_signer(&core_verifier.eligible_parties))
180187
.collect();
181188

182189
group.bench_function(BenchmarkId::new("Play all lotteries", &param_string), |b| {
183190
b.iter(|| {
184-
signers[0].core_sign(&msg, core_verifier.total_stake);
191+
signers[0].basic_sign(&msg, core_verifier.total_stake);
185192
})
186193
});
187194

188195
let signatures = signers
189196
.par_iter()
190-
.filter_map(|p| p.core_sign(&msg, core_verifier.total_stake))
197+
.filter_map(|p| p.basic_sign(&msg, core_verifier.total_stake))
191198
.collect::<Vec<_>>();
192199

193200
group.bench_function(BenchmarkId::new("Core verification", &param_string), |b| {

mithril-stm/examples/key_registration.rs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ fn main() {
3838
.collect::<Vec<_>>();
3939

4040
// Each party generates their Stm keys
41-
let party_0_init = Initializer::setup(params, stakes[0], &mut rng);
42-
let party_1_init = Initializer::setup(params, stakes[1], &mut rng);
43-
let party_2_init = Initializer::setup(params, stakes[2], &mut rng);
44-
let party_3_init = Initializer::setup(params, stakes[3], &mut rng);
41+
let party_0_init = Initializer::new(params, stakes[0], &mut rng);
42+
let party_1_init = Initializer::new(params, stakes[1], &mut rng);
43+
let party_2_init = Initializer::new(params, stakes[2], &mut rng);
44+
let party_3_init = Initializer::new(params, stakes[3], &mut rng);
4545

4646
// The public keys are broadcast. All participants will have the same keys.
4747
let parties_pks: Vec<VerificationKeyProofOfPossession> = vec![
48-
party_0_init.verification_key(),
49-
party_1_init.verification_key(),
50-
party_2_init.verification_key(),
51-
party_3_init.verification_key(),
48+
party_0_init.get_verification_key_proof_of_possession(),
49+
party_1_init.get_verification_key_proof_of_possession(),
50+
party_2_init.get_verification_key_proof_of_possession(),
51+
party_3_init.get_verification_key_proof_of_possession(),
5252
];
5353

5454
// Now, each party generates their own KeyReg instance, and registers all other participating
@@ -60,10 +60,10 @@ fn main() {
6060

6161
// Now, with information of all participating parties (we can create the Merkle Tree), the
6262
// signers can be initialised.
63-
let party_0 = party_0_init.new_signer(key_reg_0).unwrap();
64-
let party_1 = party_1_init.new_signer(key_reg_1).unwrap();
65-
let party_2 = party_2_init.new_signer(key_reg_2).unwrap();
66-
let party_3 = party_3_init.new_signer(key_reg_3).unwrap();
63+
let party_0 = party_0_init.create_signer(key_reg_0).unwrap();
64+
let party_1 = party_1_init.create_signer(key_reg_1).unwrap();
65+
let party_2 = party_2_init.create_signer(key_reg_2).unwrap();
66+
let party_3 = party_3_init.create_signer(key_reg_3).unwrap();
6767

6868
/////////////////////
6969
// operation phase //
@@ -110,26 +110,34 @@ fn main() {
110110
let incomplete_sigs_3 = vec![party_0_sigs, party_1_sigs, party_2_sigs, party_3_sigs];
111111

112112
let closed_registration = local_reg(&stakes, &parties_pks);
113-
let clerk = Clerk::from_registration(&params, &closed_registration);
113+
let clerk = Clerk::new_clerk_from_closed_key_registration(&params, &closed_registration);
114114

115115
// Now we aggregate the signatures
116-
let msig_1 = match clerk.aggregate(&complete_sigs_1, &msg) {
116+
let msig_1 = match clerk.aggregate_signatures(&complete_sigs_1, &msg) {
117117
Ok(s) => s,
118118
Err(e) => {
119119
panic!("Aggregation failed: {e:?}")
120120
}
121121
};
122-
assert!(msig_1.verify(&msg, &clerk.compute_avk(), &params).is_ok());
122+
assert!(
123+
msig_1
124+
.verify(&msg, &clerk.compute_aggregate_verification_key(), &params)
125+
.is_ok()
126+
);
123127

124-
let msig_2 = match clerk.aggregate(&complete_sigs_2, &msg) {
128+
let msig_2 = match clerk.aggregate_signatures(&complete_sigs_2, &msg) {
125129
Ok(s) => s,
126130
Err(e) => {
127131
panic!("Aggregation failed: {e:?}")
128132
}
129133
};
130-
assert!(msig_2.verify(&msg, &clerk.compute_avk(), &params).is_ok());
134+
assert!(
135+
msig_2
136+
.verify(&msg, &clerk.compute_aggregate_verification_key(), &params)
137+
.is_ok()
138+
);
131139

132-
let msig_3 = clerk.aggregate(&incomplete_sigs_3, &msg);
140+
let msig_3 = clerk.aggregate_signatures(&incomplete_sigs_3, &msg);
133141
assert!(msig_3.is_err());
134142
}
135143

mithril-stm/src/aggregate_signature/aggregate_key.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,18 @@ pub struct AggregateVerificationKey<D: Clone + Digest + FixedOutput> {
1717
}
1818

1919
impl<D: Digest + Clone + FixedOutput> AggregateVerificationKey<D> {
20-
pub fn get_mt_commitment(&self) -> MerkleTreeBatchCommitment<D> {
20+
pub(crate) fn get_merkle_tree_batch_commitment(&self) -> MerkleTreeBatchCommitment<D> {
2121
self.mt_commitment.clone()
2222
}
2323

24+
#[deprecated(
25+
since = "0.4.9",
26+
note = "Use `get_merkle_tree_batch_commitment` instead"
27+
)]
28+
pub fn get_mt_commitment(&self) -> MerkleTreeBatchCommitment<D> {
29+
Self::get_merkle_tree_batch_commitment(self)
30+
}
31+
2432
pub fn get_total_stake(&self) -> Stake {
2533
self.total_stake
2634
}
@@ -39,7 +47,7 @@ impl<D: Clone + Digest + FixedOutput> From<&ClosedKeyRegistration<D>>
3947
{
4048
fn from(reg: &ClosedKeyRegistration<D>) -> Self {
4149
Self {
42-
mt_commitment: reg.merkle_tree.to_commitment_batch_compat(),
50+
mt_commitment: reg.merkle_tree.to_merkle_tree_batch_commitment(),
4351
total_stake: reg.total_stake,
4452
}
4553
}

mithril-stm/src/aggregate_signature/basic_verifier.rs

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ impl BasicVerifier {
2121
/// * Collect the unique signers in a hash set,
2222
/// * Calculate the total stake of the eligible signers,
2323
/// * Sort the eligible signers.
24-
pub fn setup(public_signers: &[(BlsVerificationKey, Stake)]) -> Self {
24+
pub fn new(public_signers: &[(BlsVerificationKey, Stake)]) -> Self {
2525
let mut total_stake: Stake = 0;
2626
let mut unique_parties = HashSet::new();
2727
for signer in public_signers.iter() {
@@ -41,6 +41,15 @@ impl BasicVerifier {
4141
}
4242
}
4343

44+
/// Setup a basic verifier for given list of signers.
45+
/// * Collect the unique signers in a hash set,
46+
/// * Calculate the total stake of the eligible signers,
47+
/// * Sort the eligible signers.
48+
#[deprecated(since = "0.4.9", note = "Use `new` instead")]
49+
pub fn setup(public_signers: &[(BlsVerificationKey, Stake)]) -> Self {
50+
Self::new(public_signers)
51+
}
52+
4453
/// Preliminary verification that checks whether indices are unique and the quorum is achieved.
4554
pub(crate) fn preliminary_verify(
4655
total_stake: &Stake,
@@ -79,7 +88,7 @@ impl BasicVerifier {
7988
/// If there is no sufficient signatures, then the function fails.
8089
// todo: We need to agree on a criteria to dedup (by default we use a BTreeMap that guarantees keys order)
8190
// todo: not good, because it only removes index if there is a conflict (see benches)
82-
pub fn dedup_sigs_for_indices(
91+
pub fn select_valid_signatures_for_k_indices(
8392
total_stake: &Stake,
8493
params: &Parameters,
8594
msg: &[u8],
@@ -93,7 +102,7 @@ impl BasicVerifier {
93102
for sig_reg in sigs.iter() {
94103
if sig_reg
95104
.sig
96-
.verify_core(
105+
.basic_verify(
97106
params,
98107
&sig_reg.reg_party.0,
99108
&sig_reg.reg_party.1,
@@ -160,13 +169,33 @@ impl BasicVerifier {
160169
}
161170
}
162171
}
163-
164172
Err(AggregationError::NotEnoughSignatures(count, params.k))
165173
}
166174

175+
/// Given a slice of `sig_reg_list`, this function returns a new list of `sig_reg_list` with only valid indices.
176+
/// In case of conflict (having several signatures for the same index)
177+
/// it selects the smallest signature (i.e. takes the signature with the smallest scalar).
178+
/// The function selects at least `self.k` indexes.
179+
/// # Error
180+
/// If there is no sufficient signatures, then the function fails.
181+
// todo: We need to agree on a criteria to dedup (by default we use a BTreeMap that guarantees keys order)
182+
// todo: not good, because it only removes index if there is a conflict (see benches)
183+
#[deprecated(
184+
since = "0.4.9",
185+
note = "Use `select_valid_signatures_for_k_indices` instead"
186+
)]
187+
pub fn dedup_sigs_for_indices(
188+
total_stake: &Stake,
189+
params: &Parameters,
190+
msg: &[u8],
191+
sigs: &[SingleSignatureWithRegisteredParty],
192+
) -> Result<Vec<SingleSignatureWithRegisteredParty>, AggregationError> {
193+
Self::select_valid_signatures_for_k_indices(total_stake, params, msg, sigs)
194+
}
195+
167196
/// Collect and return `Vec<BlsSignature>, Vec<BlsVerificationKey>` which will be used
168197
/// by the aggregate verification.
169-
pub(crate) fn collect_sigs_vks(
198+
pub(crate) fn collect_signatures_verification_keys(
170199
sig_reg_list: &[SingleSignatureWithRegisteredParty],
171200
) -> (Vec<BlsSignature>, Vec<BlsVerificationKey>) {
172201
let sigs = sig_reg_list
@@ -198,12 +227,16 @@ impl BasicVerifier {
198227
})
199228
.collect::<Vec<SingleSignatureWithRegisteredParty>>();
200229

201-
let unique_sigs =
202-
Self::dedup_sigs_for_indices(&self.total_stake, parameters, msg, &sig_reg_list)?;
230+
let unique_sigs = Self::select_valid_signatures_for_k_indices(
231+
&self.total_stake,
232+
parameters,
233+
msg,
234+
&sig_reg_list,
235+
)?;
203236

204237
Self::preliminary_verify(&self.total_stake, &unique_sigs, parameters, msg)?;
205238

206-
let (sigs, vks) = Self::collect_sigs_vks(&unique_sigs);
239+
let (sigs, vks) = Self::collect_signatures_verification_keys(&unique_sigs);
207240

208241
BlsSignature::verify_aggregate(msg.to_vec().as_slice(), &vks, &sigs)?;
209242

0 commit comments

Comments
 (0)