@@ -26,6 +26,8 @@ use crate::x509::{self, Crl, Time, VerifyCallback};
2626#[ cfg( feature = "std" ) ]
2727use yasna:: { models:: ObjectIdentifier , ASN1Error , ASN1ErrorKind , ASN1Result , BERDecodable , BERReader } ;
2828
29+ use super :: VerifyError ;
30+
2931#[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
3032pub enum CertificateVersion {
3133 V1 ,
@@ -225,12 +227,12 @@ impl Certificate {
225227 err_info : Option < & mut String > ,
226228 cb : Option < F > ,
227229 expected_common_name : Option < & str > ,
228- ) -> Result < ( ) >
230+ ) -> core :: result :: Result < ( ) , ( Error , VerifyError ) >
229231 where
230232 F : VerifyCallback + ' static ,
231233 {
232234 if chain. is_empty ( ) {
233- return Err ( Error :: X509BadInputData ) ;
235+ return Err ( ( Error :: X509BadInputData , VerifyError :: CERT_MISSING ) ) ;
234236 }
235237 let ( f_vrfy, p_vrfy) : ( Option < unsafe extern "C" fn ( _, _, _, _) -> _ > , _ ) = if let Some ( cb) = cb. as_ref ( ) {
236238 ( Some ( x509:: verify_callback :: < F > ) , cb as * const _ as * mut c_void )
@@ -267,7 +269,8 @@ impl Certificate {
267269 }
268270 }
269271 }
270- result. map ( |_| ( ) )
272+ let verify_err = VerifyError :: from_bits_truncate ( flags) ;
273+ result. map_err ( |e| ( e, verify_err) ) . map ( |_| ( ) )
271274 }
272275
273276 pub fn verify (
@@ -276,6 +279,16 @@ impl Certificate {
276279 ca_crl : Option < & mut Crl > ,
277280 err_info : Option < & mut String > ,
278281 ) -> 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 ) > {
279292 Self :: verify_ex ( chain, trust_ca, ca_crl, err_info, None :: < & dyn VerifyCallback > , None )
280293 }
281294
@@ -302,6 +315,25 @@ impl Certificate {
302315 None :: < & dyn VerifyCallback > ,
303316 expected_common_name,
304317 )
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+ )
305337 }
306338
307339 pub fn verify_with_callback < F > (
@@ -311,6 +343,20 @@ impl Certificate {
311343 err_info : Option < & mut String > ,
312344 cb : F ,
313345 ) -> 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 ) >
314360 where
315361 F : VerifyCallback + ' static ,
316362 {
@@ -333,6 +379,21 @@ impl Certificate {
333379 cb : F ,
334380 expected_common_name : Option < & str > ,
335381 ) -> 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 ) >
336397 where
337398 F : VerifyCallback + ' static ,
338399 {
0 commit comments