@@ -145,8 +145,10 @@ where
145
145
Scalar < C > : Invert < Output = CtOption < Scalar < C > > > ,
146
146
SignatureSize < C > : ArraySize ,
147
147
{
148
- fn try_sign_digest ( & self , msg_digest : D ) -> Result < Signature < C > > {
149
- self . sign_prehash ( & msg_digest. finalize_fixed ( ) )
148
+ fn try_sign_digest < F : Fn ( & mut D ) -> Result < ( ) > > ( & self , f : F ) -> Result < Signature < C > > {
149
+ let mut digest = D :: new ( ) ;
150
+ f ( & mut digest) ?;
151
+ self . sign_prehash ( & digest. finalize_fixed ( ) )
150
152
}
151
153
}
152
154
@@ -188,9 +190,10 @@ where
188
190
SignatureSize < C > : ArraySize ,
189
191
{
190
192
fn try_multipart_sign ( & self , msg : & [ & [ u8 ] ] ) -> core:: result:: Result < Signature < C > , Error > {
191
- let mut digest = C :: Digest :: new ( ) ;
192
- msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
193
- self . try_sign_digest ( digest)
193
+ self . try_sign_digest ( |digest : & mut C :: Digest | {
194
+ msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
195
+ Ok ( ( ) )
196
+ } )
194
197
}
195
198
}
196
199
@@ -201,12 +204,14 @@ where
201
204
Scalar < C > : Invert < Output = CtOption < Scalar < C > > > ,
202
205
SignatureSize < C > : ArraySize ,
203
206
{
204
- fn try_sign_digest_with_rng < R : TryCryptoRng + ?Sized > (
207
+ fn try_sign_digest_with_rng < R : TryCryptoRng + ?Sized , F : Fn ( & mut D ) -> Result < ( ) > > (
205
208
& self ,
206
209
rng : & mut R ,
207
- msg_digest : D ,
210
+ f : F ,
208
211
) -> Result < Signature < C > > {
209
- self . sign_prehash_with_rng ( rng, & msg_digest. finalize_fixed ( ) )
212
+ let mut digest = D :: new ( ) ;
213
+ f ( & mut digest) ?;
214
+ self . sign_prehash_with_rng ( rng, & digest. finalize_fixed ( ) )
210
215
}
211
216
}
212
217
@@ -264,9 +269,10 @@ where
264
269
rng : & mut R ,
265
270
msg : & [ & [ u8 ] ] ,
266
271
) -> Result < Signature < C > > {
267
- let mut digest = C :: Digest :: new ( ) ;
268
- msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
269
- self . try_sign_digest_with_rng ( rng, digest)
272
+ self . try_sign_digest_with_rng ( rng, |digest : & mut C :: Digest | {
273
+ msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
274
+ Ok ( ( ) )
275
+ } )
270
276
}
271
277
}
272
278
@@ -277,8 +283,8 @@ where
277
283
Scalar < C > : Invert < Output = CtOption < Scalar < C > > > ,
278
284
SignatureSize < C > : ArraySize ,
279
285
{
280
- fn try_sign_digest ( & self , msg_digest : D ) -> Result < SignatureWithOid < C > > {
281
- let signature: Signature < C > = self . try_sign_digest ( msg_digest ) ?;
286
+ fn try_sign_digest < F : Fn ( & mut D ) -> Result < ( ) > > ( & self , f : F ) -> Result < SignatureWithOid < C > > {
287
+ let signature: Signature < C > = self . try_sign_digest ( f ) ?;
282
288
let oid = ecdsa_oid_for_digest ( D :: OID ) . ok_or_else ( Error :: new) ?;
283
289
SignatureWithOid :: new ( signature, oid)
284
290
}
@@ -304,9 +310,10 @@ where
304
310
SignatureSize < C > : ArraySize ,
305
311
{
306
312
fn try_multipart_sign ( & self , msg : & [ & [ u8 ] ] ) -> Result < SignatureWithOid < C > > {
307
- let mut digest = C :: Digest :: new ( ) ;
308
- msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
309
- self . try_sign_digest ( digest)
313
+ self . try_sign_digest ( |digest : & mut C :: Digest | {
314
+ msg. iter ( ) . for_each ( |slice| digest. update ( slice) ) ;
315
+ Ok ( ( ) )
316
+ } )
310
317
}
311
318
}
312
319
@@ -348,12 +355,12 @@ where
348
355
der:: MaxSize < C > : ArraySize ,
349
356
<FieldBytesSize < C > as Add >:: Output : Add < der:: MaxOverhead > + ArraySize ,
350
357
{
351
- fn try_sign_digest_with_rng < R : TryCryptoRng + ?Sized > (
358
+ fn try_sign_digest_with_rng < R : TryCryptoRng + ?Sized , F : Fn ( & mut D ) -> Result < ( ) > > (
352
359
& self ,
353
360
rng : & mut R ,
354
- msg_digest : D ,
361
+ f : F ,
355
362
) -> Result < der:: Signature < C > > {
356
- RandomizedDigestSigner :: < D , Signature < C > > :: try_sign_digest_with_rng ( self , rng, msg_digest )
363
+ RandomizedDigestSigner :: < D , Signature < C > > :: try_sign_digest_with_rng ( self , rng, f )
357
364
. map ( Into :: into)
358
365
}
359
366
}
@@ -387,8 +394,8 @@ where
387
394
der:: MaxSize < C > : ArraySize ,
388
395
<FieldBytesSize < C > as Add >:: Output : Add < der:: MaxOverhead > + ArraySize ,
389
396
{
390
- fn try_sign_digest ( & self , msg_digest : D ) -> Result < der:: Signature < C > > {
391
- DigestSigner :: < D , Signature < C > > :: try_sign_digest ( self , msg_digest ) . map ( Into :: into)
397
+ fn try_sign_digest < F : Fn ( & mut D ) -> Result < ( ) > > ( & self , f : F ) -> Result < der:: Signature < C > > {
398
+ DigestSigner :: < D , Signature < C > > :: try_sign_digest ( self , f ) . map ( Into :: into)
392
399
}
393
400
}
394
401
0 commit comments