@@ -13,7 +13,8 @@ use elliptic_curve::{
1313} ;
1414use sha2:: { Digest , Sha256 } ;
1515use signature:: {
16- DigestSigner , Error , KeypairRef , RandomizedDigestSigner , RandomizedSigner , Result , Signer ,
16+ DigestSigner , Error , KeypairRef , MultipartSigner , RandomizedDigestSigner ,
17+ RandomizedMultipartSigner , RandomizedSigner , Result , Signer ,
1718 digest:: { FixedOutput , consts:: U32 } ,
1819 hazmat:: { PrehashSigner , RandomizedPrehashSigner } ,
1920} ;
@@ -201,7 +202,19 @@ impl RandomizedSigner<Signature> for SigningKey {
201202 rng : & mut R ,
202203 msg : & [ u8 ] ,
203204 ) -> Result < Signature > {
204- self . try_sign_digest_with_rng ( rng, Sha256 :: new_with_prefix ( msg) )
205+ self . try_multipart_sign_with_rng ( rng, & [ msg] )
206+ }
207+ }
208+
209+ impl RandomizedMultipartSigner < Signature > for SigningKey {
210+ fn try_multipart_sign_with_rng < R : TryCryptoRng + ?Sized > (
211+ & self ,
212+ rng : & mut R ,
213+ msg : & [ & [ u8 ] ] ,
214+ ) -> Result < Signature > {
215+ let mut digest = Sha256 :: new ( ) ;
216+ msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
217+ self . try_sign_digest_with_rng ( rng, digest)
205218 }
206219}
207220
@@ -221,7 +234,15 @@ impl RandomizedPrehashSigner<Signature> for SigningKey {
221234
222235impl Signer < Signature > for SigningKey {
223236 fn try_sign ( & self , msg : & [ u8 ] ) -> Result < Signature > {
224- self . try_sign_digest ( Sha256 :: new_with_prefix ( msg) )
237+ self . try_multipart_sign ( & [ msg] )
238+ }
239+ }
240+
241+ impl MultipartSigner < Signature > for SigningKey {
242+ fn try_multipart_sign ( & self , msg : & [ & [ u8 ] ] ) -> Result < Signature > {
243+ let mut digest = Sha256 :: new ( ) ;
244+ msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
245+ self . try_sign_digest ( digest)
225246 }
226247}
227248
0 commit comments