@@ -26,6 +26,8 @@ use crate::x509::{self, Crl, Time, VerifyCallback};
26
26
#[ cfg( feature = "std" ) ]
27
27
use yasna:: { models:: ObjectIdentifier , ASN1Error , ASN1ErrorKind , ASN1Result , BERDecodable , BERReader } ;
28
28
29
+ use super :: VerifyError ;
30
+
29
31
#[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
30
32
pub enum CertificateVersion {
31
33
V1 ,
@@ -225,12 +227,12 @@ impl Certificate {
225
227
err_info : Option < & mut String > ,
226
228
cb : Option < F > ,
227
229
expected_common_name : Option < & str > ,
228
- ) -> Result < ( ) >
230
+ ) -> core :: result :: Result < ( ) , ( Error , VerifyError ) >
229
231
where
230
232
F : VerifyCallback + ' static ,
231
233
{
232
234
if chain. is_empty ( ) {
233
- return Err ( Error :: X509BadInputData ) ;
235
+ return Err ( ( Error :: X509BadInputData , VerifyError :: CERT_MISSING ) ) ;
234
236
}
235
237
let ( f_vrfy, p_vrfy) : ( Option < unsafe extern "C" fn ( _, _, _, _) -> _ > , _ ) = if let Some ( cb) = cb. as_ref ( ) {
236
238
( Some ( x509:: verify_callback :: < F > ) , cb as * const _ as * mut c_void )
@@ -267,7 +269,8 @@ impl Certificate {
267
269
}
268
270
}
269
271
}
270
- result. map ( |_| ( ) )
272
+ let verify_err = VerifyError :: from_bits_truncate ( flags) ;
273
+ result. map_err ( |e| ( e, verify_err) ) . map ( |_| ( ) )
271
274
}
272
275
273
276
pub fn verify (
@@ -276,6 +279,16 @@ impl Certificate {
276
279
ca_crl : Option < & mut Crl > ,
277
280
err_info : Option < & mut String > ,
278
281
) -> Result < ( ) > {
282
+ Self :: verify_ex ( chain, trust_ca, ca_crl, err_info, None :: < & dyn VerifyCallback > , None ) . map_err ( |( e, _ve) | e)
283
+ }
284
+
285
+ /// Like `verify`. In case of errors, returns `VerifyError` as well.
286
+ pub fn verify_return_verify_err (
287
+ chain : & MbedtlsList < Certificate > ,
288
+ trust_ca : & MbedtlsList < Certificate > ,
289
+ ca_crl : Option < & mut Crl > ,
290
+ err_info : Option < & mut String > ,
291
+ ) -> core:: result:: Result < ( ) , ( Error , VerifyError ) > {
279
292
Self :: verify_ex ( chain, trust_ca, ca_crl, err_info, None :: < & dyn VerifyCallback > , None )
280
293
}
281
294
@@ -302,6 +315,25 @@ impl Certificate {
302
315
None :: < & dyn VerifyCallback > ,
303
316
expected_common_name,
304
317
)
318
+ . map_err ( |( e, _ve) | e)
319
+ }
320
+
321
+ /// Like `verify_with_expected_common_name`. In case of errors, returns `VerifyError` as well.
322
+ pub fn verify_with_expected_common_name_return_verify_err (
323
+ chain : & MbedtlsList < Certificate > ,
324
+ trust_ca : & MbedtlsList < Certificate > ,
325
+ ca_crl : Option < & mut Crl > ,
326
+ err_info : Option < & mut String > ,
327
+ expected_common_name : Option < & str > ,
328
+ ) -> core:: result:: Result < ( ) , ( Error , VerifyError ) > {
329
+ Self :: verify_ex (
330
+ chain,
331
+ trust_ca,
332
+ ca_crl,
333
+ err_info,
334
+ None :: < & dyn VerifyCallback > ,
335
+ expected_common_name,
336
+ )
305
337
}
306
338
307
339
pub fn verify_with_callback < F > (
@@ -311,6 +343,20 @@ impl Certificate {
311
343
err_info : Option < & mut String > ,
312
344
cb : F ,
313
345
) -> Result < ( ) >
346
+ where
347
+ F : VerifyCallback + ' static ,
348
+ {
349
+ Self :: verify_ex ( chain, trust_ca, ca_crl, err_info, Some ( cb) , None ) . map_err ( |( e, _ve) | e)
350
+ }
351
+
352
+ /// Like `verify_with_callback`. In case of errors, returns `VerifyError` as well.
353
+ pub fn verify_with_callback_return_verify_err < F > (
354
+ chain : & MbedtlsList < Certificate > ,
355
+ trust_ca : & MbedtlsList < Certificate > ,
356
+ ca_crl : Option < & mut Crl > ,
357
+ err_info : Option < & mut String > ,
358
+ cb : F ,
359
+ ) -> core:: result:: Result < ( ) , ( Error , VerifyError ) >
314
360
where
315
361
F : VerifyCallback + ' static ,
316
362
{
@@ -333,6 +379,21 @@ impl Certificate {
333
379
cb : F ,
334
380
expected_common_name : Option < & str > ,
335
381
) -> Result < ( ) >
382
+ where
383
+ F : VerifyCallback + ' static ,
384
+ {
385
+ Self :: verify_ex ( chain, trust_ca, ca_crl, err_info, Some ( cb) , expected_common_name) . map_err ( |( e, _ve) | e)
386
+ }
387
+
388
+ /// Like `verify_with_callback_expected_common_name`. In case of errors, returns `VerifyError` as well.
389
+ pub fn verify_with_callback_expected_common_name_return_verify_err < F > (
390
+ chain : & MbedtlsList < Certificate > ,
391
+ trust_ca : & MbedtlsList < Certificate > ,
392
+ ca_crl : Option < & mut Crl > ,
393
+ err_info : Option < & mut String > ,
394
+ cb : F ,
395
+ expected_common_name : Option < & str > ,
396
+ ) -> core:: result:: Result < ( ) , ( Error , VerifyError ) >
336
397
where
337
398
F : VerifyCallback + ' static ,
338
399
{
0 commit comments