@@ -85,7 +85,7 @@ use crate::error::ErrorStack;
85
85
use crate :: md:: MdRef ;
86
86
use crate :: pkey:: { HasPrivate , HasPublic , PKeyRef } ;
87
87
use crate :: pkey_ctx:: PkeyCtxRef ;
88
- use crate :: { cvt, cvt_n , cvt_p} ;
88
+ use crate :: { cvt, cvt_p} ;
89
89
use cfg_if:: cfg_if;
90
90
use foreign_types:: { ForeignType , ForeignTypeRef } ;
91
91
use openssl_macros:: corresponds;
@@ -309,12 +309,21 @@ impl MdCtxRef {
309
309
#[ inline]
310
310
pub fn digest_verify_final ( & mut self , signature : & [ u8 ] ) -> Result < bool , ErrorStack > {
311
311
unsafe {
312
- let r = cvt_n ( ffi:: EVP_DigestVerifyFinal (
312
+ let r = ffi:: EVP_DigestVerifyFinal (
313
313
self . as_ptr ( ) ,
314
314
signature. as_ptr ( ) as * mut _ ,
315
315
signature. len ( ) ,
316
- ) ) ?;
317
- Ok ( r == 1 )
316
+ ) ;
317
+ if r == 1 {
318
+ Ok ( true )
319
+ } else {
320
+ let errors = ErrorStack :: get ( ) ;
321
+ if errors. errors ( ) . is_empty ( ) {
322
+ Ok ( false )
323
+ } else {
324
+ Err ( errors)
325
+ }
326
+ }
318
327
}
319
328
}
320
329
@@ -424,8 +433,11 @@ mod test {
424
433
425
434
ctx. digest_verify_init ( Some ( md) , & key1) . unwrap ( ) ;
426
435
ctx. digest_verify_update ( bad_data) . unwrap ( ) ;
427
- let valid = ctx. digest_verify_final ( & signature) . unwrap ( ) ;
428
- assert ! ( !valid) ;
436
+ assert ! ( matches!(
437
+ ctx. digest_verify_final( & signature) ,
438
+ Ok ( false ) | Err ( _)
439
+ ) ) ;
440
+ assert ! ( ErrorStack :: get( ) . errors( ) . is_empty( ) ) ;
429
441
}
430
442
431
443
#[ test]
0 commit comments