11use std:: { collections:: HashMap , fmt:: Display , hash:: Hash , str:: FromStr } ;
22
33use anyhow:: anyhow;
4- use blake2:: digest:: { Digest , FixedOutput } ;
54use serde:: { Deserialize , Serialize } ;
65
76use super :: AggregateVerificationKey ;
87use crate :: {
98 AggregateSignatureError , Parameters , StmError , StmResult ,
10- membership_commitment:: MerkleBatchPath , proof_system:: ConcatenationProof ,
9+ membership_commitment:: { MembershipDigest , MerkleBatchPath } ,
10+ proof_system:: ConcatenationProof ,
1111} ;
1212
1313/// The type of STM aggregate signature.
@@ -46,9 +46,7 @@ impl AggregateSignatureType {
4646 }
4747}
4848
49- impl < D : Clone + Digest + FixedOutput + Send + Sync > From < & AggregateSignature < D > >
50- for AggregateSignatureType
51- {
49+ impl < D : MembershipDigest > From < & AggregateSignature < D > > for AggregateSignatureType {
5250 fn from ( aggr_sig : & AggregateSignature < D > ) -> Self {
5351 match aggr_sig {
5452 AggregateSignature :: Concatenation ( _) => AggregateSignatureType :: Concatenation ,
@@ -84,10 +82,10 @@ impl Display for AggregateSignatureType {
8482/// An STM aggregate signature.
8583#[ derive( Debug , Clone , Serialize , Deserialize ) ]
8684#[ serde( bound(
87- serialize = "MerkleBatchPath<D>: Serialize" ,
88- deserialize = "MerkleBatchPath<D>: Deserialize<'de>"
85+ serialize = "MerkleBatchPath<D::ConcatenationHash >: Serialize" ,
86+ deserialize = "MerkleBatchPath<D::ConcatenationHash >: Deserialize<'de>"
8987) ) ]
90- pub enum AggregateSignature < D : Clone + Digest + FixedOutput + Send + Sync > {
88+ pub enum AggregateSignature < D : MembershipDigest > {
9189 /// A future proof system.
9290 #[ cfg( feature = "future_proof_system" ) ]
9391 Future ,
@@ -100,7 +98,7 @@ pub enum AggregateSignature<D: Clone + Digest + FixedOutput + Send + Sync> {
10098 Concatenation ( ConcatenationProof < D > ) ,
10199}
102100
103- impl < D : Clone + Digest + FixedOutput + Send + Sync > AggregateSignature < D > {
101+ impl < D : MembershipDigest + Clone > AggregateSignature < D > {
104102 /// Verify an aggregate signature
105103 pub fn verify (
106104 & self ,
@@ -218,17 +216,17 @@ mod tests {
218216 }
219217
220218 mod aggregate_signature_golden_concatenation {
221- use blake2:: { Blake2b , digest:: consts:: U32 } ;
222219 use rand_chacha:: ChaCha20Rng ;
223220 use rand_core:: SeedableRng ;
224221
225222 use super :: { AggregateSignature , AggregateSignatureType } ;
226223 use crate :: {
227224 Clerk , ClosedKeyRegistration , KeyRegistration , Parameters , Signer ,
225+ membership_commitment:: CustomMembershipDigest ,
228226 signature_scheme:: { BlsSigningKey , BlsVerificationKeyProofOfPossession } ,
229227 } ;
230228
231- type D = Blake2b < U32 > ;
229+ type D = CustomMembershipDigest ;
232230
233231 const GOLDEN_JSON : & str = r#"
234232 {
0 commit comments