Skip to content

Commit 2593aff

Browse files
committed
solving some complaints
1 parent 2e98a3f commit 2593aff

File tree

7 files changed

+79
-35
lines changed

7 files changed

+79
-35
lines changed

mithril-aggregator/src/multi_signer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ impl MultiSigner for MultiSignerImpl {
189189

190190
let message = &self.get_current_message().unwrap();
191191
let clerk = self.clerk();
192-
match clerk.verify_sig(signature, message) {
192+
let avk = clerk.compute_avk();
193+
match signature.verify(&self.protocol_parameters.unwrap(), &avk, message) {
193194
Ok(_) => {
194195
// Register single signature
195196
self.single_signatures

mithril-common/src/crypto_helper/types.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use mithril::key_reg::KeyReg;
22
use mithril::multi_sig::SigningKey;
33
use mithril::stm::{
4-
Index, PartyId, Stake, StmClerk, StmInitializer, StmMultiSig, StmParameters, StmSig, StmSigner,
5-
StmVerificationKey,
4+
Index, PartyId, Stake, StmClerk, StmInitializer, StmAggrSig, StmParameters, StmSig, StmSigner,
5+
StmVerificationKeyPoP,
66
};
77

88
pub type Bytes = Vec<u8>;
@@ -19,6 +19,6 @@ pub type ProtocolInitializer = StmInitializer;
1919
pub type ProtocolClerk = StmClerk<D>;
2020
pub type ProtocolKeyRegistration = KeyReg;
2121
pub type ProtocolSingleSignature = StmSig<D>;
22-
pub type ProtocolMultiSignature = StmMultiSig<D>;
23-
pub type ProtocolSignerVerificationKey = StmVerificationKey;
22+
pub type ProtocolMultiSignature = StmAggrSig<D>;
23+
pub type ProtocolSignerVerificationKey = StmVerificationKeyPoP;
2424
pub type ProtocolSignerSecretKey = SigningKey;

mithril-core/examples/key_registration.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
//! run presented in `tests/integration.rs`, we explicitly treat each party individually.
44
55
use mithril::key_reg::{ClosedKeyReg, KeyReg};
6-
use mithril::stm::{Stake, StmClerk, StmInitializer, StmParameters, StmSig, StmSigner, StmVerificationKeyPoP, StmVerifier};
6+
use mithril::stm::{
7+
Stake, StmClerk, StmInitializer, StmParameters, StmSig, StmSigner, StmVerificationKeyPoP,
8+
StmVerifier,
9+
};
710

811
use rand_chacha::ChaCha20Rng;
912
use rand_core::{RngCore, SeedableRng};

mithril-core/src/c_api.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,8 @@ mod signer {
444444

445445
mod key_reg {
446446
use crate::c_api::{
447-
ClosedKeyRegPtr, KeyRegPtr, MerkleTreeCommitmentPtr, StmVerificationKeyPoPPtr, NULLPOINTERERR,
447+
ClosedKeyRegPtr, KeyRegPtr, MerkleTreeCommitmentPtr, StmVerificationKeyPoPPtr,
448+
NULLPOINTERERR,
448449
};
449450
use crate::error::RegisterError;
450451
use crate::key_reg::KeyReg;
@@ -609,7 +610,7 @@ mod clerk {
609610
Err(VerificationFailure::LotteryLost) => -1,
610611
Err(VerificationFailure::InvalidMerkleTree(_)) => -2,
611612
Err(VerificationFailure::InvalidSignature(_)) => -3,
612-
Err(VerificationFailure::IndexBoundFailed(_,_)) => -4,
613+
Err(VerificationFailure::IndexBoundFailed(_, _)) => -4,
613614
};
614615
}
615616
NULLPOINTERERR

mithril-core/src/key_reg.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
33
use crate::error::RegisterError;
44
use digest::{Digest, FixedOutput};
5+
use serde::{Deserialize, Serialize};
56
use std::collections::{HashMap, HashSet};
67
use std::sync::Arc;
7-
use serde::{Deserialize, Serialize};
88

99
use super::multi_sig::VerificationKeyPoP;
1010
use super::stm::{PartyId, Stake};
@@ -26,8 +26,8 @@ pub struct KeyReg {
2626
/// a closed key registration.
2727
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
2828
#[serde(bound(
29-
serialize = "MerkleTree<D>: Serialize",
30-
deserialize = "MerkleTree<D>: Deserialize<'de>"
29+
serialize = "MerkleTree<D>: Serialize",
30+
deserialize = "MerkleTree<D>: Deserialize<'de>"
3131
))]
3232
pub struct ClosedKeyReg<D>
3333
where

mithril-core/src/stm.rs

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,12 @@ pub struct StmSig<D: Clone + Digest + FixedOutput> {
276276
impl<D: Clone + Digest + FixedOutput> StmSig<D> {
277277
/// Verify an stm signature by checking that the lottery was won, the merkle path is correct,
278278
/// the index is in the desired range and the underlying msp signature validates.
279-
pub fn verify(&self, params: &StmParameters, avk: &StmAggrVerificationKey<D>, msg: &[u8]) -> Result<(), VerificationFailure<D>> {
279+
pub fn verify(
280+
&self,
281+
params: &StmParameters,
282+
avk: &StmAggrVerificationKey<D>,
283+
msg: &[u8],
284+
) -> Result<(), VerificationFailure<D>> {
280285
let msgp = avk.mt_commitment.concat_with_msg(msg);
281286

282287
if self.index > params.m {
@@ -344,7 +349,7 @@ impl<D: Clone + Digest + FixedOutput> StmSig<D> {
344349
#[derive(Debug, Clone, Serialize, Deserialize)]
345350
pub struct StmAggrVerificationKey<D>
346351
where
347-
D: Clone + Digest + FixedOutput
352+
D: Clone + Digest + FixedOutput,
348353
{
349354
mt_commitment: MerkleTreeCommitment<D>,
350355
total_stake: Stake,
@@ -357,7 +362,7 @@ where
357362
fn from(reg: &ClosedKeyReg<D>) -> Self {
358363
Self {
359364
mt_commitment: reg.merkle_tree.to_commitment(),
360-
total_stake: reg.total_stake
365+
total_stake: reg.total_stake,
361366
}
362367
}
363368
}
@@ -419,13 +424,29 @@ impl<D: Clone + Digest + FixedOutput> StmAggrSig<D> {
419424
}
420425

421426
// Check that merkle paths are valid
422-
if avk.mt_commitment.check(&MTLeaf(sig.pk, sig.stake), &sig.path).is_err() {
427+
if avk
428+
.mt_commitment
429+
.check(&MTLeaf(sig.pk, sig.stake), &sig.path)
430+
.is_err()
431+
{
423432
return Err(MithrilWitnessError::PathInvalid(sig.path.clone()));
424433
}
425434
}
426435

427-
let aggregate_signature: Signature = self.signatures.iter().map(|sig| sig.sigma).collect::<Vec<Signature>>().iter().sum();
428-
let aggregate_mpk: StmVerificationKey = self.signatures.iter().map(|sig| sig.pk).collect::<Vec<StmVerificationKey>>().iter().sum();
436+
let aggregate_signature: Signature = self
437+
.signatures
438+
.iter()
439+
.map(|sig| sig.sigma)
440+
.collect::<Vec<Signature>>()
441+
.iter()
442+
.sum();
443+
let aggregate_mpk: StmVerificationKey = self
444+
.signatures
445+
.iter()
446+
.map(|sig| sig.pk)
447+
.collect::<Vec<StmVerificationKey>>()
448+
.iter()
449+
.sum();
429450

430451
aggregate_signature.verify(&avk.mt_commitment.concat_with_msg(msg), &aggregate_mpk)?;
431452
Ok(())
@@ -633,10 +654,19 @@ where
633654
// sigma <- MSP.Sig(msk, msg')
634655
// ev <- MSP.Eval(msg', index, sigma)
635656
// return 1 if ev < phi(stake) else return 0
636-
let msgp = self.closed_reg.merkle_tree.to_commitment().concat_with_msg(msg);
657+
let msgp = self
658+
.closed_reg
659+
.merkle_tree
660+
.to_commitment()
661+
.concat_with_msg(msg);
637662
let sigma = self.sk.sign(&msgp);
638663
let ev = sigma.eval(&msgp, index);
639-
ev_lt_phi(self.params.phi_f, ev, self.stake, self.closed_reg.total_stake)
664+
ev_lt_phi(
665+
self.params.phi_f,
666+
ev,
667+
self.stake,
668+
self.closed_reg.total_stake,
669+
)
640670
}
641671

642672
/// If lottery is won for this message/index, signs it.
@@ -648,9 +678,16 @@ where
648678
// p_i is the users path inside the merkle tree AVK
649679
// reg_i is (mvk_i, stake_i)
650680
// return pi
651-
let msgp = self.closed_reg.merkle_tree.to_commitment().concat_with_msg(msg);
681+
let msgp = self
682+
.closed_reg
683+
.merkle_tree
684+
.to_commitment()
685+
.concat_with_msg(msg);
652686
let sigma = self.sk.sign(&msgp);
653-
let path = self.closed_reg.merkle_tree.get_path(self.mt_index.try_into().unwrap());
687+
let path = self
688+
.closed_reg
689+
.merkle_tree
690+
.get_path(self.mt_index.try_into().unwrap());
654691
Some(StmSig {
655692
sigma,
656693
pk: self.vk,
@@ -881,10 +918,7 @@ where
881918
/// Create a new `Clerk` from a closed registration instance.
882919
/// todo: why does it consume the closed reg?
883920
pub fn from_registration(params: StmParameters, closed_reg: ClosedKeyReg<D>) -> Self {
884-
Self {
885-
params,
886-
closed_reg
887-
}
921+
Self { params, closed_reg }
888922
}
889923

890924
/// Creates a Clerk from a Signer.
@@ -927,8 +961,12 @@ where
927961
msig: &StmAggrSig<D>,
928962
msg: &[u8],
929963
) -> Result<(), MithrilWitnessError<D>> {
930-
StmVerifier::new(self.closed_reg.merkle_tree.to_commitment(), self.params, self.closed_reg.total_stake)
931-
.verify_msig(msg, msig)
964+
StmVerifier::new(
965+
self.closed_reg.merkle_tree.to_commitment(),
966+
self.params,
967+
self.closed_reg.total_stake,
968+
)
969+
.verify_msig(msg, msig)
932970
}
933971

934972
/// Given a slice of `indices` and one of `sigs`, this functions selects a single valid signature
@@ -1096,11 +1134,11 @@ where
10961134
params: StmParameters,
10971135
total_stake: Stake,
10981136
) -> Self {
1099-
let avk = StmAggrVerificationKey { mt_commitment, total_stake };
1100-
Self {
1101-
avk,
1102-
params,
1103-
}
1137+
let avk = StmAggrVerificationKey {
1138+
mt_commitment,
1139+
total_stake,
1140+
};
1141+
Self { avk, params }
11041142
}
11051143

11061144
/// Verify an aggregated signature

mithril-signer/src/single_signer.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use thiserror::Error;
44

55
use mithril_common::crypto_helper::{
66
key_decode_hex, key_encode_hex, Bytes, ProtocolInitializer, ProtocolKeyRegistration,
7-
ProtocolParameters, ProtocolPartyId, ProtocolSigner, ProtocolSignerSecretKey, ProtocolStake,
7+
ProtocolParameters, ProtocolPartyId, ProtocolSingleSignature, ProtocolSigner, ProtocolSignerSecretKey, ProtocolStake,
88
};
99
use mithril_common::entities::{self, SignerWithStake, SingleSignature};
1010

@@ -195,6 +195,7 @@ mod tests {
195195
)
196196
.unwrap();
197197
let clerk = ProtocolClerk::from_signer(&protocol_signer);
198+
let avk = clerk.compute_avk();
198199

199200
let message = "message".as_bytes();
200201
let sign_result = single_signer.compute_single_signatures(
@@ -205,8 +206,8 @@ mod tests {
205206

206207
assert!(!sign_result.as_ref().unwrap().is_empty());
207208
for sig in sign_result.unwrap() {
208-
let decoded_sig = key_decode_hex(&sig.signature).unwrap();
209-
assert!(clerk.verify_sig(&decoded_sig, message).is_ok());
209+
let decoded_sig: ProtocolSingleSignature = key_decode_hex(&sig.signature).unwrap();
210+
assert!(decoded_sig.verify(&protocol_parameters, &avk, message).is_ok());
210211
assert_eq!(
211212
decoded_sig.pk,
212213
key_decode_hex(&signer_with_keys.verification_key).unwrap()

0 commit comments

Comments
 (0)