@@ -214,12 +214,15 @@ impl TryFrom<Box<[u8]>> for SigningKey {
214
214
215
215
impl < D > signature:: DigestSigner < D , Signature > for SigningKey
216
216
where
217
- D : Digest ,
217
+ D : Digest + Update ,
218
218
{
219
- fn try_sign_digest ( & self , digest : D ) -> Result < Signature , Error > {
220
- let mut prehashed_message = [ 0u8 ; 64 ] ;
221
- prehashed_message. copy_from_slice ( digest. finalize ( ) . as_slice ( ) ) ;
222
- let sig = self . secret . sign_prehashed ( & [ ] , & prehashed_message) ?;
219
+ fn try_sign_digest < F : Fn ( & mut D ) -> Result < ( ) , Error > > (
220
+ & self ,
221
+ f : F ,
222
+ ) -> Result < Signature , Error > {
223
+ let mut digest = D :: new ( ) ;
224
+ f ( & mut digest) ?;
225
+ let sig = self . secret . sign_prehashed ( & [ ] , & digest. finalize ( ) ) ?;
223
226
Ok ( sig. into ( ) )
224
227
}
225
228
}
@@ -240,15 +243,18 @@ impl signature::Signer<Signature> for SigningKey {
240
243
241
244
impl < D > signature:: DigestSigner < D , Signature > for Context < ' _ , ' _ , SigningKey >
242
245
where
243
- D : Digest ,
246
+ D : Digest + Update ,
244
247
{
245
- fn try_sign_digest ( & self , digest : D ) -> Result < Signature , Error > {
246
- let mut prehashed_message = [ 0u8 ; 64 ] ;
247
- prehashed_message. copy_from_slice ( digest. finalize ( ) . as_slice ( ) ) ;
248
+ fn try_sign_digest < F : Fn ( & mut D ) -> Result < ( ) , Error > > (
249
+ & self ,
250
+ f : F ,
251
+ ) -> Result < Signature , Error > {
252
+ let mut digest = D :: new ( ) ;
253
+ f ( & mut digest) ?;
248
254
let sig = self
249
255
. key
250
256
. secret
251
- . sign_prehashed ( self . value , & prehashed_message ) ?;
257
+ . sign_prehashed ( self . value , & digest . finalize ( ) ) ?;
252
258
Ok ( sig. into ( ) )
253
259
}
254
260
}
@@ -269,12 +275,16 @@ impl signature::Signer<Signature> for Context<'_, '_, SigningKey> {
269
275
270
276
impl < D > signature:: DigestVerifier < D , Signature > for SigningKey
271
277
where
272
- D : Digest ,
278
+ D : Digest + Update ,
273
279
{
274
- fn verify_digest ( & self , msg : D , signature : & Signature ) -> Result < ( ) , Error > {
280
+ fn verify_digest < F : Fn ( & mut D ) -> Result < ( ) , Error > > (
281
+ & self ,
282
+ f : F ,
283
+ signature : & Signature ,
284
+ ) -> Result < ( ) , Error > {
275
285
<VerifyingKey as signature:: DigestVerifier < D , Signature > >:: verify_digest (
276
286
& self . secret . public_key ,
277
- msg ,
287
+ f ,
278
288
signature,
279
289
)
280
290
}
0 commit comments