11use std:: collections:: { BTreeMap , BTreeSet } ;
2- use bls_signatures:: { BasicSchemeMPL , G1Element , G2Element , Scheme } ;
2+ use bls_signatures:: { BasicSchemeMPL , BlsError , G1Element , G2Element , Scheme } ;
33use blsful:: { Bls12381G2Impl , MultiPublicKey , MultiSignature } ;
44use hashes:: Hash ;
55use crate :: bls_sig_utils:: BLSPublicKey ;
@@ -10,15 +10,28 @@ use crate::sml::quorum_validation_error::QuorumValidationError;
1010impl QualifiedQuorumEntry {
1111 pub fn verify_aggregated_commitment_signature < ' a , I > ( & self , operator_keys : I ) -> Result < ( ) , QuorumValidationError >
1212 where
13- I : IntoIterator < Item = & ' a BLSPublicKey > ,
13+ I : IntoIterator < Item = & ' a MasternodeListEntry > ,
1414 {
1515 let mut message = self . commitment_hash . to_byte_array ( ) ;
1616 // println!("quorum {}", self.quorum_entry.quorum_hash);
1717 println ! ( "using message {}" , hex:: encode( message) ) ;
1818 let message = message. as_slice ( ) ;
1919 let public_keys2 = operator_keys
2020 . into_iter ( )
21- . filter_map ( |key| G1Element :: from_bytes ( key. as_ref ( ) ) . ok ( ) )
21+ . filter_map ( |masternode_list_entry| {
22+ let result = if masternode_list_entry. use_legacy_bls_keys ( ) {
23+ G1Element :: from_bytes_legacy ( masternode_list_entry. operator_public_key . as_ref ( ) )
24+ } else {
25+ G1Element :: from_bytes ( masternode_list_entry. operator_public_key . as_ref ( ) )
26+ } ;
27+ match result {
28+ Ok ( public_key) => Some ( public_key) ,
29+ Err ( e) => {
30+ println ! ( "error {} with key for masternode {}" , e, masternode_list_entry. pro_reg_tx_hash) ;
31+ None
32+ }
33+ }
34+ } )
2235 . collect :: < Vec < _ > > ( ) ;
2336 let sig = G2Element :: from_bytes ( self . quorum_entry . all_commitment_aggregated_signature . as_bytes ( ) ) . expect ( "expected sig" ) ;
2437 let verified = BasicSchemeMPL :: new ( ) . verify_secure ( public_keys2. iter ( ) , message, & sig) ;
@@ -52,11 +65,7 @@ impl QualifiedQuorumEntry {
5265 where
5366 I : IntoIterator < Item = & ' a MasternodeListEntry > ,
5467 {
55- let operator_keys = valid_masternodes
56- . into_iter ( )
57- . map ( |node| & node. operator_public_key ) ;
58-
59- self . verify_aggregated_commitment_signature ( operator_keys) ?;
68+ self . verify_aggregated_commitment_signature ( valid_masternodes) ?;
6069 self . verify_quorum_signature ( ) ?;
6170
6271 Ok ( ( ) )
0 commit comments