@@ -272,33 +272,34 @@ class XAdESVerifier(XAdESProcessor, XMLVerifier):
272272 def _verify_signing_time (self , verify_result : VerifyResult ):
273273 pass
274274
275- def _verify_cert_digest (self , signing_cert_node , expect_cert ):
276- for cert in self ._findall (signing_cert_node , "xades:Cert" ):
277- cert_digest = self ._find (cert , "xades:CertDigest" )
278- digest_alg = DigestAlgorithm (self ._find (cert_digest , "DigestMethod" ).get ("Algorithm" ))
279- digest_value = self ._find (cert_digest , "DigestValue" )
280- # check spec for specific method of retrieving cert
281- der_encoded_cert = dump_certificate (FILETYPE_ASN1 , expect_cert )
275+ def _verify_cert_digest (self , signing_cert_node , expect_cert , idx ):
276+ cert = self ._find (signing_cert_node , "xades:Cert[{0}]" . format ( idx ):
277+ cert_digest = self ._find (cert , "xades:CertDigest" )
278+ digest_alg = DigestAlgorithm (self ._find (cert_digest , "DigestMethod" ).get ("Algorithm" ))
279+ digest_value = self ._find (cert_digest , "DigestValue" )
280+ # check spec for specific method of retrieving cert
281+ der_encoded_cert = dump_certificate (FILETYPE_ASN1 , expect_cert )
282282
283- if b64decode (digest_value .text ) != self ._get_digest (der_encoded_cert , algorithm = digest_alg ):
284- raise InvalidDigest ("Digest mismatch for certificate digest" )
283+ if b64decode (digest_value .text ) != self ._get_digest (der_encoded_cert , algorithm = digest_alg ):
284+ raise InvalidDigest ("Digest mismatch for certificate digest" )
285285
286286 def _verify_cert_digests (self , verify_result : VerifyResult ):
287287 x509_data = verify_result .signature_xml .find ("ds:KeyInfo/ds:X509Data" , namespaces = namespaces )
288- cert_from_key_info = load_certificate (
289- FILETYPE_PEM , add_pem_header (self ._find (x509_data , "X509Certificate" ).text )
290- )
291- signed_signature_props = self ._find (verify_result .signed_xml , "xades:SignedSignatureProperties" )
292- signing_cert = self ._find (signed_signature_props , "xades:SigningCertificate" , require = False )
293- signing_cert_v2 = self ._find (signed_signature_props , "xades:SigningCertificateV2" , require = False )
294- if signing_cert is None and signing_cert_v2 is None :
295- raise InvalidInput ("Expected to find XML element xades:SigningCertificate or xades:SigningCertificateV2" )
296- if signing_cert is not None and signing_cert_v2 is not None :
297- raise InvalidInput ("Expected to find exactly one of xades:SigningCertificate or xades:SigningCertificateV2" )
298- if signing_cert is not None :
299- self ._verify_cert_digest (signing_cert , expect_cert = cert_from_key_info )
300- elif signing_cert_v2 is not None :
301- self ._verify_cert_digest (signing_cert_v2 , expect_cert = cert_from_key_info )
288+ for idx ,x_cert in enumerate (self ._findall (x509_data , "X509Certificate" )):
289+ cert_from_key_info = load_certificate (
290+ FILETYPE_PEM , add_pem_header (x_cert .text )
291+ )
292+ signed_signature_props = self ._find (verify_result .signed_xml , "xades:SignedSignatureProperties" )
293+ signing_cert = self ._find (signed_signature_props , "xades:SigningCertificate" , require = False )
294+ signing_cert_v2 = self ._find (signed_signature_props , "xades:SigningCertificateV2" , require = False )
295+ if signing_cert is None and signing_cert_v2 is None :
296+ raise InvalidInput ("Expected to find XML element xades:SigningCertificate or xades:SigningCertificateV2" )
297+ if signing_cert is not None and signing_cert_v2 is not None :
298+ raise InvalidInput ("Expected to find exactly one of xades:SigningCertificate or xades:SigningCertificateV2" )
299+ if signing_cert is not None :
300+ self ._verify_cert_digest (signing_cert , expect_cert = cert_from_key_info ,idx = idx )
301+ elif signing_cert_v2 is not None :
302+ self ._verify_cert_digest (signing_cert_v2 , expect_cert = cert_from_key_info ,idx = idx )
302303
303304 def _verify_signature_policy (self , verify_result : VerifyResult , expect_signature_policy : XAdESSignaturePolicy ):
304305 signed_signature_props = self ._find (verify_result .signed_xml , "xades:SignedSignatureProperties" )
0 commit comments