@@ -17,14 +17,13 @@ use async_generic::async_generic;
17
17
use c2pa_crypto:: {
18
18
asn1:: rfc3161:: TstInfo ,
19
19
cose:: {
20
- cert_chain_from_sign1, check_certificate_profile , parse_cose_sign1, signing_alg_from_sign1,
21
- validate_cose_tst_info , validate_cose_tst_info_async, CertificateTrustError ,
22
- CertificateTrustPolicy , CoseError , OcspFetchPolicy ,
20
+ cert_chain_from_sign1, parse_cose_sign1, signing_alg_from_sign1, validate_cose_tst_info ,
21
+ validate_cose_tst_info_async, CertificateTrustError , CertificateTrustPolicy ,
22
+ OcspFetchPolicy , Verifier ,
23
23
} ,
24
24
ocsp:: OcspResponse ,
25
25
p1363:: parse_ec_der_sig,
26
26
raw_signature:: { validator_for_signing_alg, RawSignatureValidator } ,
27
- time_stamp:: TimeStampError ,
28
27
SigningAlg , ValidationInfo ,
29
28
} ;
30
29
use c2pa_status_tracker:: { log_item, validation_codes:: * , StatusTracker } ;
@@ -255,42 +254,21 @@ pub(crate) async fn verify_cose_async(
255
254
256
255
let tst_info_res = validate_cose_tst_info_async ( & sign1, & data) . await ;
257
256
258
- // verify cert matches requested algorithm
259
- if cert_check {
260
- // verify certs
261
- match & tst_info_res {
262
- Ok ( tst_info) => {
263
- check_certificate_profile ( der_bytes, ctp, validation_log, Some ( tst_info) ) ?
264
- }
265
-
266
- Err ( CoseError :: NoTimeStampToken ) => {
267
- check_certificate_profile ( der_bytes, ctp, validation_log, None ) ?
268
- }
269
-
270
- Err ( CoseError :: TimeStampError ( TimeStampError :: InvalidData ) ) => {
271
- log_item ! (
272
- "Cose_Sign1" ,
273
- "timestamp message imprint did not match" ,
274
- "verify_cose"
275
- )
276
- . validation_status ( TIMESTAMP_MISMATCH )
277
- . failure ( validation_log, Error :: CoseTimeStampMismatch ) ?;
278
- }
279
-
280
- Err ( CoseError :: TimeStampError ( TimeStampError :: ExpiredCertificate ) ) => {
281
- log_item ! ( "Cose_Sign1" , "timestamp outside of validity" , "verify_cose" )
282
- . validation_status ( TIMESTAMP_OUTSIDE_VALIDITY )
283
- . failure ( validation_log, Error :: CoseTimeStampValidity ) ?;
284
- }
285
-
286
- _ => {
287
- log_item ! ( "Cose_Sign1" , "error parsing timestamp" , "verify_cose" )
288
- . failure_no_throw ( validation_log, Error :: CoseInvalidTimeStamp ) ;
289
-
290
- return Err ( Error :: CoseInvalidTimeStamp ) ;
291
- }
257
+ let verifier = if cert_check {
258
+ match get_settings_value :: < bool > ( "verify.verify_trust" ) {
259
+ Ok ( true ) => Verifier :: VerifyTrustPolicy ( ctp) ,
260
+ _ => Verifier :: VerifyCertificateProfileOnly ( ctp) ,
292
261
}
262
+ } else {
263
+ Verifier :: IgnoreProfileAndTrustPolicy
264
+ } ;
293
265
266
+ verifier
267
+ . verify_profile_async ( & sign1, & tst_info_res, validation_log)
268
+ . await ?;
269
+
270
+ // verify cert matches requested algorithm
271
+ if cert_check {
294
272
// is the certificate trusted
295
273
#[ cfg( target_arch = "wasm32" ) ]
296
274
check_trust_async (
@@ -461,49 +439,18 @@ pub(crate) fn verify_cose(
461
439
462
440
let tst_info_res = validate_cose_tst_info ( & sign1, data) ;
463
441
464
- if cert_check {
465
- // verify certs
466
- match & tst_info_res {
467
- Ok ( tst_info) => {
468
- check_certificate_profile ( der_bytes, ctp, validation_log, Some ( tst_info) ) ?
469
- }
470
-
471
- Err ( CoseError :: NoTimeStampToken ) => {
472
- check_certificate_profile ( der_bytes, ctp, validation_log, None ) ?
473
- }
474
-
475
- Err ( CoseError :: TimeStampError ( TimeStampError :: InvalidData ) ) => {
476
- log_item ! (
477
- "Cose_Sign1" ,
478
- "timestamp did not match signed data" ,
479
- "verify_cose"
480
- )
481
- . validation_status ( TIMESTAMP_MISMATCH )
482
- . failure_no_throw ( validation_log, Error :: CoseTimeStampMismatch ) ;
483
-
484
- return Err ( Error :: CoseTimeStampMismatch ) ;
485
- }
486
-
487
- Err ( CoseError :: TimeStampError ( TimeStampError :: ExpiredCertificate ) ) => {
488
- log_item ! (
489
- "Cose_Sign1" ,
490
- "timestamp certificate outside of validity" ,
491
- "verify_cose"
492
- )
493
- . validation_status ( TIMESTAMP_OUTSIDE_VALIDITY )
494
- . failure_no_throw ( validation_log, Error :: CoseTimeStampValidity ) ;
495
-
496
- return Err ( Error :: CoseTimeStampValidity ) ;
497
- }
498
-
499
- _ => {
500
- log_item ! ( "Cose_Sign1" , "error parsing timestamp" , "verify_cose" )
501
- . failure_no_throw ( validation_log, Error :: CoseInvalidTimeStamp ) ;
502
-
503
- return Err ( Error :: CoseInvalidTimeStamp ) ;
504
- }
442
+ let verifier = if cert_check {
443
+ match get_settings_value :: < bool > ( "verify.verify_trust" ) {
444
+ Ok ( true ) => Verifier :: VerifyTrustPolicy ( ctp) ,
445
+ _ => Verifier :: VerifyCertificateProfileOnly ( ctp) ,
505
446
}
447
+ } else {
448
+ Verifier :: IgnoreProfileAndTrustPolicy
449
+ } ;
506
450
451
+ verifier. verify_profile ( & sign1, & tst_info_res, validation_log) ?;
452
+
453
+ if cert_check {
507
454
// is the certificate trusted
508
455
check_trust (
509
456
ctp,
0 commit comments