Skip to content

Commit 5b9e6e8

Browse files
more work on validation
1 parent 5626c7d commit 5b9e6e8

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

dash/src/bls_sig_utils.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,38 @@ impl TryFrom<&BLSSignature> for blsful::Signature<Bls12381G2Impl> {
126126
}
127127
}
128128

129+
#[cfg(feature = "bls")]
130+
impl TryFrom<BLSSignature> for blsful::MultiSignature<Bls12381G2Impl> {
131+
type Error = QuorumValidationError;
132+
133+
fn try_from(value: BLSSignature) -> Result<Self, Self::Error> {
134+
let Some(g2_element) =
135+
<Bls12381G2Impl as Pairing>::Signature::from_compressed(&value.to_bytes())
136+
.into_option()
137+
else {
138+
return Err(QuorumValidationError::InvalidBLSSignature(hex::encode(value.to_bytes()))); // We should not error because the signature could be given by an invalid source
139+
};
140+
141+
Ok(blsful::MultiSignature::Basic(g2_element))
142+
}
143+
}
144+
145+
#[cfg(feature = "bls")]
146+
impl TryFrom<&BLSSignature> for blsful::MultiSignature<Bls12381G2Impl> {
147+
type Error = QuorumValidationError;
148+
149+
fn try_from(value: &BLSSignature) -> Result<Self, Self::Error> {
150+
let Some(g2_element) =
151+
<Bls12381G2Impl as Pairing>::Signature::from_compressed(&value.to_bytes())
152+
.into_option()
153+
else {
154+
return Err(QuorumValidationError::InvalidBLSSignature(hex::encode(value.to_bytes()))); // We should not error because the signature could be given by an invalid source
155+
};
156+
157+
Ok(blsful::MultiSignature::Basic(g2_element))
158+
}
159+
}
160+
129161
#[cfg(feature = "bls")]
130162
impl TryFrom<BLSSignature> for blsful::AggregateSignature<Bls12381G2Impl> {
131163
type Error = QuorumValidationError;

dash/src/sml/quorum_entry/validation.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use blsful::{AggregateSignature, Bls12381G2Impl};
1+
use blsful::{Bls12381G2Impl, MultiPublicKey, MultiSignature};
22
use hashes::Hash;
33
use crate::bls_sig_utils::BLSPublicKey;
44
use crate::sml::masternode_list_entry::MasternodeListEntry;
@@ -11,12 +11,13 @@ impl QualifiedQuorumEntry {
1111
I: IntoIterator<Item = &'a BLSPublicKey>,
1212
{
1313
let message = self.commitment_hash.as_byte_array().as_slice();
14-
let public_keys : Vec<(blsful::PublicKey<Bls12381G2Impl>, &[u8])> = operator_keys
14+
let public_keys : Vec<(blsful::PublicKey<Bls12381G2Impl>)> = operator_keys
1515
.into_iter()
16-
.map(|key| Ok((key.try_into()?, message)))
17-
.collect::<Result<Vec<(blsful::PublicKey<Bls12381G2Impl>, &[u8])>, QuorumValidationError>>()?;
18-
let signature: AggregateSignature<Bls12381G2Impl> = self.quorum_entry.all_commitment_aggregated_signature.try_into()?;
19-
signature.verify(&public_keys).map_err(|e| QuorumValidationError::AllCommitmentAggregatedSignatureNotValid(e.to_string()))
16+
.map(|key| key.try_into())
17+
.collect::<Result<Vec<(blsful::PublicKey<Bls12381G2Impl>)>, QuorumValidationError>>()?;
18+
let signature: MultiSignature<Bls12381G2Impl> = self.quorum_entry.all_commitment_aggregated_signature.try_into()?;
19+
let multi_public_key = MultiPublicKey::<Bls12381G2Impl>::from_public_keys(public_keys);
20+
signature.verify(multi_public_key, message).map_err(|e| QuorumValidationError::AllCommitmentAggregatedSignatureNotValid(e.to_string()))
2021
}
2122

2223
pub fn verify_quorum_signature(&self) -> Result<(), QuorumValidationError> {

0 commit comments

Comments
 (0)