§
    ¥”jT¾  ã                   óP	  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d d	l*m+Z+ d d
l,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZD d dlEmFZF d dlGmHZHmIZI ddlJmKZK ddlLmMZM ddlNmOZOmPZP ddlQmRZR ddlSmTZT ddlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ ddl]m^Z^m_Z_m`Z` g d¢Za ejb        ec¦  «        Zd edeZ¬¦  «        Zed ejf        d!eejg        ejh        df         fd"„Zid#ejfd$„Zkd%ejl        d ejf        fd&„Zmd'ejf        d(ejn        d)eejo                 d*eejp                 fd+„Zq	 ded,ejr        d%ejl        d-e_d.ee         fd/„Zs	 ded,ejr        d%ejl        d0etd1eud2eeD         d!eejejf         fd3„Zvd4ejw        d!e$fd5„Zx	 	 	 	 	 	 dfd4ejw        d6eeu         d7ee.         d8eey         d9ee>         d:ee@         d;ee_         d<eTd!e
etef         fd=„Zzd>e1fd?„Z{	 ded%ejl        d7e.d<eTd@e-e>         d:ee@         d!dAfdB„Z|edddddCœd4ejw        dDeee         d6eeu         d7ee.         d8eey         d<eeT         d!eefdE„¦   «         Z}edddddCœd4ejw        d6eeu         d7ee.         d8eey         d<eeT         d!eZfdF„¦   «         Z}eZdddddfd4ejw        d6eeu         d7ee.         d8eey         d<eeT         d;ee_         d!eefdG„Z}d,ejr        d!ee         fdH„Z~d,ejr        dIejd!eejw        ddf         fdJ„Zd,ejr        d!e	etgeuf         fdK„Z€dLetfdM„Z�	 ded,ejr        dNee.         d6e	etgeuf         d;ee_         fdO„Z‚	 dedPejw        d7ee.         dQe	etgeuf         d;ee_         fdR„ZƒdSeej„                 dTejl        d7e.d!eeeH         eee7e6e5f                  f         fdU„Z…dVeej„                 dTejl        d7ee.         dWejf        fdX„Z†dddddeKj‡        dfdYeeueejˆ        ej‰        f         d4ejw        dZee.         dNee.         d[ee.         d<eeT         d;ee_         d!e[fd\„ZŠ ed]d^¬_¦  «        Z‹ ed^¬`¦  «         G da„ dbee‹         ¦  «        ¦   «         ZŒd%ejl        dcee‹         d!eŒe‹         fdd„Z�dS )gé    N)Ú	dataclass)Údatetime)ÚIOÚAnyÚ	AwaitableÚCallableÚDictÚ	GeneratorÚGenericÚIterableÚListÚOptionalÚTupleÚTypeÚTypeVarÚUnionÚoverload)ÚalgosÚcmsÚcoreÚtspÚx509)ÚInvalidSignature)Úhashes)
ÚCMSExtractionErrorÚCMSStructuralErrorÚMultivaluedAttributeErrorÚNonexistentAttributeErrorÚSignedDataCertsÚcheck_ess_certidÚextract_certificate_infoÚextract_signer_infoÚfind_cms_attribute_iterÚfind_unique_cms_attribute)ÚTSTDigestNotAvailableError)ÚCancelableAsyncIteratorÚValidationContextÚfind_valid_path)ÚTrustedServiceType)ÚDisallowedAlgorithmErrorÚExpiredErrorÚInvalidCertificateErrorÚPathBuildingErrorÚPathValidationErrorÚRevokedErrorÚStaleRevinfoErrorÚValidationError)ÚTimeSlideFailure)ÚValidationPath)ÚPKIXValidationParams)ÚDefaultSignatureValidatorÚSignatureValidationContextÚSignatureValidator)Úget_pyca_cryptography_hash)ÚACValidationResultÚasync_validate_acé   )Úmisc)Úlift_iterable_asyncé   )ÚAdESFailureÚAdESIndeterminateé   )Úerrors)ÚKeyUsageConstraints)ÚCAdESSignerAttributeAssertionsÚCertifiedAttributesÚClaimedAttributesÚRevocationDetailsÚSignatureStatusÚStandardCMSSignatureStatusÚTimestampSignatureStatus)ÚDEFAULT_ALGORITHM_USAGE_POLICYÚCMSAlgorithmUsagePolicyÚextract_message_digest)Úasync_validate_cms_signatureÚasync_validate_detached_cmsÚcms_basic_validationÚcollect_signer_attr_statusÚcollect_timing_infoÚextract_certs_for_validationÚextract_self_reported_tsÚget_signing_cert_attrÚvalidate_algorithm_protectionÚvalidate_sig_integrityÚvalidate_tst_signed_dataÚ
StatusType)ÚboundÚsigned_attrsÚreturnc                 óN   — t          | d¬¦  «        }|€t          | d¬¦  «        }|S )a   
    Retrieve the ``signingCertificate`` or ``signingCertificateV2`` attribute
    (giving preference to the latter) from a signature's signed attributes.

    :param signed_attrs:
        Signed attributes.
    :return:
        The value of the attribute, if present, else ``None``.
    T)Úv2NF)Ú_grab_signing_cert_attr)r[   Úattrs     úr/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/sign/validation/generic_cms.pyrU   rU   i   s2   € õ # <°DÐ9Ñ9Ô9€DØ€|Ý& |¸Ð>Ñ>Ô>ˆØ€Kó    r^   c                 ó4  — |rdnd}|rt           j        nt           j        }	 t          | |¦  «        }|                     |                     ¦   «         ¦  «        S # t          $ r Y d S t          $ r(}t          j	        }t          j        d|¬¦  «        |‚d }~ww xY w)NÚsigning_certificate_v2Úsigning_certificatez3Wrong cardinality for signing certificate attribute©Úades_subindication)r   ÚSigningCertificateV2ÚSigningCertificater$   ÚloadÚdumpr   r   r@   ÚNO_SIGNING_CERTIFICATE_FOUNDrB   ÚSignatureValidationError)r[   r^   Ú	attr_nameÚclsÚvalueÚeÚerrs          ra   r_   r_   {   s¿   € ð -/ÐIÐ(Ð(Ð4I€IØ&(Ð
D�#Ô
"Ð
"­cÔ.D€CðÝ)¨,¸	ÑBÔBˆð �xŠx˜Ÿ
š
™œÑ%Ô%Ð%øÝ$ð ð ð ØˆtˆtÝ$ð ð ð åÔ<ˆÝÔ-ØAØ"ð
ñ 
ô 
ð ð	øøøøðøøøs   ¢6A Á
BÁ&	BÁ/#BÂBÚcertc                 óÈ   — t          |¦  «        }|€d S |d         d         }t          | |¦  «        s0t          j        }t	          j        d| j        j        › d�|¬¦  «        ‚d S )NÚcertsr   zWSigning certificate attribute does not match selected signer's certificate for subject"z".rf   )rU   r    r@   rl   rB   rm   ÚsubjectÚhuman_friendly)rs   r[   r`   Úcertidrr   s        ra   Ú_check_signing_certificatery   ‘   sŠ   € õ ! Ñ.Ô.€DØ€|àˆð �'Œ]˜1Ô€Få˜D &Ñ)Ô)ð 
ÝÔ<ˆÝÔ-ð2à”Ô,ð2ð 2ð 2ð  #ð	
ñ 
ô 
ð 	
ð
ð 
rb   ÚattrsÚclaimed_digest_algorithm_objÚclaimed_signature_algorithm_objÚclaimed_mac_algorithm_objc                 óò  — 	 t          | d¦  «        }n*# t          $ r d}Y nt          $ r t          d¦  «        ‚w xY w|�´|d         j        }||j        k    rt          j        d¦  «        ‚|�B|d         j        }|€t          j        d¦  «        ‚||j        k    rt          j        d¦  «        ‚|�D|d	         j        }|€t          j        d
¦  «        ‚||j        k    rt          j        d¦  «        ‚dS dS dS )a�  
    Internal API to validate the CMS algorithm protection attribute
    defined in :rfc:`6211`, if present.

    :param attrs:
        A CMS attribute list.
    :param claimed_digest_algorithm_obj:
        The claimed (i.e. unprotected) digest algorithm value.
    :param claimed_signature_algorithm_obj:
        The claimed (i.e. unprotected) signature algorithm value.
    :param claimed_mac_algorithm_obj:
        The claimed (i.e. unprotected) MAC algorithm value.
    :raises errors.CMSStructuralError:
        if multiple CMS protection attributes are present
    :raises errors.CMSAlgorithmProtectionError:
        if a mismatch is detected
    Úcms_algorithm_protectionNz4Multiple CMS algorithm protection attributes presentÚdigest_algorithmzCDigest algorithm does not match CMS algorithm protection attribute.Úsignature_algorithmz<CMS algorithm protection attribute not valid for signed datazFSignature mechanism does not match CMS algorithm protection attribute.Úmac_algorithmzCCMS algorithm protection attribute not valid for authenticated dataz@MAC mechanism does not match CMS algorithm protection attribute.)r$   r   r   r   ÚnativerB   ÚCMSAlgorithmProtectionError)rz   r{   r|   r}   Úcms_algid_protectionÚauth_digest_algorithmÚauth_sig_algorithmÚauth_mac_algorithms           ra   rV   rV   ª   s’  € ð0

Ý8ØÐ-ñ 
ô  
ÐÐøõ %ð $ð $ð $à#ÐÐÐÝ$ð 
ð 
ð 
Ý ØBñ
ô 
ð 	
ð
øøøð Ð'Ø 4Ð5GÔ HÔ OÐØ Ð$@Ô$GÒGÐGÝÔ4ðñô ð ð +Ð6Ø!5Ø%ô"äð ð "Ð)ÝÔ8ðñô ð ð $Ð'FÔ'MÒMÐMÝÔ8ð,ñô ð ð %Ð0Ø!5°oÔ!FÔ!MÐØ!Ð)ÝÔ8ð)ñô ð ð $Ð'@Ô'GÒGÐGÝÔ8ð,ñô ð ð; (Ð'ð* 1Ð0ð HÐGs   ‚ “:¡:Úsigner_infoÚalgorithm_usage_policyÚ
time_indicc                 óP  — | d         }| d         }|d         j         }|                     |||j        ¬¦  «        }|sAd|d         j         › d�}|j        �|d|j        › d	�z  }t	          j        ||j        ¬
¦  «        ‚|                     ||¬¦  «        }	|	sAd|d         j         › d�}|	j        �|d|	j        › d	�z  }t	          j        ||	j        ¬
¦  «        ‚|                     |t          j
        d|i¦  «        d¬¦  «        }
|
s t	          j        |
j        |
j        ¬¦  «        ‚dS )a:  
    Enforce the algorithm usage policy.

    :param signer_info:
        A :class:`cms.SignerInfo` object.
    :param cert:
        The signer's certificate.
    :param algorithm_usage_policy:
        Algorithm usage policy.
    :param time_indic:
        Time indication for the production of the signature.
    r�   r€   Ú	algorithm)ÚmomentÚ
public_keyzThe algorithm z, is not allowed by the current usage policy.Nz	 Reason: ú.)Útime_horizon)rŽ   )Úsignature_algoÚmessage_digest_algorŽ   )Úfailure_messager‘   )rƒ   Úsignature_algorithm_allowedr�   Úfailure_reasonrB   r*   Únot_allowed_afterÚdigest_algorithm_allowedÚdigest_combination_allowedr   ÚDigestAlgorithm)r‰   rs   rŠ   r‹   r�   Údigest_algorithm_objÚmd_algorithmÚsig_algo_allowedÚmsgÚdigest_algo_allowedÚdigest_compatibles              ra   Ú_enforce_algorithm_usager¡   ð   sÔ  € ð$ 6AØô6Ðð 'Ð'9Ô:ÐØ'¨Ô4Ô;€LØ-×IÒIØ J¸4¼?ð Jñ ô Ðð ð 	
ð;Ð0°Ô=ÔDð ;ð ;ð ;ð 	ð Ô*Ð6ØÐAÐ/Ô>ÐAÐAÐAÑAˆCÝÔ-ØÐ.Ô@ð
ñ 
ô 
ð 	
ð 1×IÒIØØð Jñ ô Ðð ð 	
ð;Ð1°+Ô>ÔEð ;ð ;ð ;ð 	ð Ô-Ð9ØÐDÐ2ÔAÐDÐDÐDÑDˆCÝÔ-ØÐ1ÔCð
ñ 
ô 
ð 	
ð /×IÒIØ*Ý!Ô1°;ÀÐ2MÑNÔNØð Jñ ô Ðð
 ð 
ÝÔ-Ø-Ô<Ø*Ô<ð
ñ 
ô 
ð 	
ð
ð 
rb   Úexpected_content_typeÚactual_digestÚsig_validatorc           
      óî  — | d         }| d         }|d         j         }| d         j         }| d         }	|	t          j        u rd}
d}|}�nL| d                              ¦   «         }|                     ¦   «         }d}	 t          |||d¬	¦  «         nn# t          $ r*}t          j        |j	        t          j        ¬
¦  «        ‚d}~wt          j        $ r*}t          j        |j	        t          j        ¬
¦  «        ‚d}~ww xY wt          ||¦  «         	 t!          |d¦  «        }n5# t"          t$          f$ r! t          j        dt          j        ¬
¦  «        ‚w xY w|j         }||k    r&t          j        d|› d|› �t          j        ¬
¦  «        ‚t'          | ¦  «        }
	 |pt)          ¦   «         }|                     |||j        |t/          ||¬¦  «        ¬¦  «         d}n# t0          $ r d}Y nw xY w|
�||
k    n|}||fS )a7  
    Validate the integrity of a signature for a particular signerInfo object
    inside a CMS signed data container.

    .. warning::
        This function does not do any trust checks, and is considered
        "dangerous" API because it is easy to misuse.

    :param signer_info:
        A :class:`cms.SignerInfo` object.
    :param cert:
        The signer's certificate.

        .. note::
            This function will not attempt to extract certificates from
            the signed data.
    :param expected_content_type:
        The expected value for the content type attribute (as a Python string,
        see :class:`cms.ContentType`).
    :param actual_digest:
        The actual digest to be matched to the message digest attribute.
    :param sig_validator:
        Signature validator implementing the cryptographic validation process.
    :return:
        A tuple of two booleans. The first indicates whether the provided
        digest matches the value in the signed attributes.
        The second indicates whether the signature of the digest is valid.
    r�   r€   r�   Ú	signaturer[   NTF)r{   r|   r}   rf   Úcontent_typezQContent type not found in signature, or multiple content-type attributes present.zContent type z did not match expected value )Úcontextual_md_algorithmÚ	prehashed)Úcontext)rƒ   r   ÚVOIDÚuntagrk   rV   r   rB   rm   r”   r?   ÚFORMAT_FAILUREr„   r@   ÚGENERICry   r$   r   r   rM   r5   Úvalidate_signaturer�   r6   r   )r‰   rs   r¢   r£   r¤   r�   r›   rœ   r¦   Úsigned_attrs_origÚembedded_digestr©   Úsigned_datar[   rq   r§   ÚvalidÚintacts                     ra   rW   rW   .  sÒ  € ðH 6AØô6Ðð 'Ð'9Ô:ÐØ'¨Ô4Ô;€LØ˜KÔ(Ô/€Ià+6°~Ô+FÐà�DœIÐ%Ð%ØˆØˆ	Ø#ˆ‰ð # >Ô2×8Ò8Ñ:Ô:ˆð #×'Ò'Ñ)Ô)ˆØˆ	ð	Ý)ØØ-AØ0CØ*.ð	ñ ô ð ð øõ "ð 	ð 	ð 	ÝÔ1ØÔ!µkÔ6Pðñ ô ð øøøøõ Ô1ð 	ð 	ð 	ÝÔ1ØÔ!õ $5Ô#<ðñ ô ð øøøøð	øøøõ 	# 4¨Ñ6Ô6Ð6ð		Ý4Ø˜nñô ˆLˆLøõ *Õ+DÐEð 	ð 	ð 	ÝÔ1ð&å#.Ô#=ðñ ô ð ð	øøøð $Ô*ˆØÐ0Ò0Ð0ÝÔ1ð+ ð +ð +Ø(ð+ð +å#.Ô#=ðñ ô ð õ 1°Ñ=Ô=ˆðØ%ÐDÕ)BÑ)DÔ)DˆØ×(Ò(ØØØŒOØÝ.Ø(4Ø#ðñ ô ð 	)ñ 		
ô 		
ð 		
ð ˆˆøÝð ð ð Øˆˆˆðøøøð
 Ð&ð 	˜Ò(Ð(àð ð �5ˆ=ÐsC   Á:B Â
C9Â%B=Â=C9Ã%C4Ã4C9ÄD Ä2EÆA G ÇG&Ç%G&r²   c                 óà   — 	 t          | ¦  «        }|j        }n.# t          $ r! t          j        dt
          j        ¬¦  «        ‚w xY wt          | ¦  «        }|d         }t          ||¦  «         |S )a  
    Extract certificates from a CMS signed data object for validation purposes,
    identifying the signer's certificate in accordance with ETSI EN 319 102-1,
    5.2.3.4.

    :param signed_data:
        The CMS payload.
    :return:
        The extracted certificates.
    z,signer certificate not included in signaturerf   r[   )	r!   Úsigner_certr   rB   rm   r@   rl   r"   ry   )r²   Ú	cert_infors   r‰   r[   s        ra   rS   rS   ·  s‹   € ð 
Ý,¨[Ñ9Ô9ˆ	ØÔ$ˆˆøÝð 
ð 
ð 
ÝÔ-Ø:Ý0ÔMð
ñ 
ô 
ð 	
ð
øøøõ
 & kÑ2Ô2€KØ˜~Ô.€Lå˜t \Ñ2Ô2Ð2ØÐs	   ‚ ™+AÚ
raw_digestÚvalidation_contextÚstatus_kwargsÚvalidation_pathÚpkix_validation_paramsÚalgorithm_policyÚkey_usage_settingsc             ƒ   ó  K  — t          | ¦  «        }t          | ¦  «        }	|	j        }
|	j        }d}|�"|pt	          j        |j        ¦  «        }|j        }|pt          ¦   «         }|€J ‚|€t          }|€J ‚|d         }|d         j
        }|d         d         j
        }| d         }|d         j
        }|€bt          |d         ¦  «        }t          |¦  «        }t          j        |¦  «        }|                     |¦  «         |                     ¦   «         }n4|d         t"          j        ur t'          j        dt*          j        ¬	¦  «        ‚	 t/          ||
||¬
¦  «         dx}}nF# t&          j        $ r4}t2                               d|¬¦  «         |j        }|j        }Y d}~nd}~ww xY w	 t;          ||
|||j        ¬¦  «        \  }}n;# t>          $ r.}t'          j        d|j         z   t*          j        ¬	¦  «        |‚d}~ww xY wdx}}|rÇ|€Å	 |j!         "                    |¦  «         |�tG          |g¦  «        }n|j$         %                    |
¦  «        }tM          |
||||¬¦  «        ƒ d{V —†}|j'        }|j(        }|j)        p|j*        }|j+        }n?# tX          $ r2}t2           -                    d|¬¦  «         t\          j/        }Y d}~nd}~ww xY w|pi }d|d<   |€dn|j0        |d<   |                     |||
||||||¬¦	  «	         |S )z†
    Perform basic validation of CMS and PKCS#7 signatures in isolation
    (i.e. integrity and trust checks).

    Internal API.
    Nr�   r�   r€   Úencap_content_infor§   ÚcontentzKCMS structural error: detached signatures should not have encapsulated datarf   )rŠ   r‹   z6Encountered disallowed algorithm during CMS validation©Úexc_info)r¢   r£   r¤   zCMS structural error: )r¾   Úpathsr¼   z&Processing error in validation processÚqualification_resultÚvalidation_time)	r´   r³   Úsigning_certrœ   Úpkcs7_signature_mechanismÚtrust_problem_indicr»   Úrevocation_detailsÚerror_time_horizon)1r"   rS   r¶   Úother_certsrL   Úlift_policyr½   Úbest_signature_timer'   rK   rƒ   Úbytesr8   r   ÚHashÚupdateÚfinalizer   r«   rB   rm   r?   r­   r¡   r*   ÚloggerÚwarningrg   r‘   rW   r¤   r   r”   Úcertificate_registryÚregister_multipler=   Úpath_builderÚasync_build_paths_lazyÚvalidate_cert_usageÚerror_subindicÚrevo_detailsÚsuccess_resultÚ
error_pathrË   Ú
ValueErrorÚerrorr@   Ú!CERTIFICATE_CHAIN_GENERAL_FAILURErŽ   )r²   r¸   r¹   rº   r»   r¼   r½   r¾   r‰   r·   rs   rÌ   r‹   r�   Ú	mechanismrœ   Úecir¢   ÚrawÚmd_specÚmdÚades_statusrË   rq   r´   r³   ÚpathrÛ   rÄ   Ú	op_results                                 ra   rP   rP   Ö  s3  è è € õ" & kÑ2Ô2€KÝ,¨[Ñ9Ô9€IØÔ €DØÔ'€Kà€JØÐ%àð Ý&Ô2Ø"Ô3ñô ð 	ð (Ô;ˆ
Ø+ÐBÕ/@Ñ/BÔ/BÐØÐ)Ð)Ð)ØÐÝ9ÐØÐ'Ð'Ð'à5@Øô6Ðð $ KÔ0Ô7€IØÐ1Ô2°;Ô?ÔF€LØ
Ð*Ô
+€CØ Ô/Ô6ÐØÐå�C˜	”NÑ#Ô#ˆÝ,¨\Ñ:Ô:ˆÝŒ[˜Ñ!Ô!ˆØ
�	Š	�#‰ŒˆØ—[’[‘]”]ˆ
ˆ
Ø	ˆYŒ�tœyÐ	(Ð	(ÝÔ-ð å*Ô9ð
ñ 
ô 
ð 	
ð,Ý ØØØ#3Ø!ð		
ñ 	
ô 	
ð 	
ð ,0Ð/ˆÐ(Ð(øÝÔ*ð ,ð ,ð ,Ý�ŠØDÈqð 	ñ 	
ô 	
ð 	
ð Ô*ˆØœ^ÐÐÐÐÐÐøøøøð,øøøðÝ.ØØØ"7Ø$Ø,Ô:ð
ñ 
ô 
‰ˆ��øõ ð ð ð ÝÔ-Ø$ qÔ'8Ñ8Ý*Ô9ð
ñ 
ô 
ð ð	øøøøðøøøð Ð€Dˆ<Øð N�Ð$ð	NØÔ3×EÒEØñô ð ð
 Ð*Ý+¨_Ð,=Ñ>Ô>��à*Ô7×NÒNØñô �õ 2ØØ"Ø#5ØØ'=ðñ ô ð ð ð ð ð ð ˆIð $Ô2ˆKØ$Ô1ˆLØÔ+ÐC¨yÔ/CˆDØ!*Ô!=ÐÐøÝð 	Nð 	Nð 	NÝ�LŠLÐAÈAˆLÑNÔNÐNÝ+ÔMˆKˆKˆKˆKˆKˆKøøøøð	Nøøøð "Ð' R€Mð -1€MÐ(Ñ)à"Ð*ˆˆÐ0BÔ0Ið Ð#Ñ$ð ×ÒØØØØ!Ø"+Ø'ØØ'Ø-ð ñ 
ô 
ð 
ð ÐsI   ÅE$ Å$F'Å3*F"Æ"F'Æ+G Ç
H Ç)G;Ç;H ÈBJ Ê
KÊ(KËKÚservice_typec                 óÀ   — | t           j        k    rt          ¦   «         dhfS | t           j        k    rddht          ¦   «         fS t          ¦   «         t          ¦   «         fS )NÚtime_stampingÚcrl_signÚkey_cert_sign)r)   ÚTIME_STAMPING_AUTHORITYÚsetÚCERTIFICATE_AUTHORITY)ré   s    ra   Ú!_service_type_implicit_key_usagesrñ   d  sX   € ØÕ)ÔAÒAÐAÝ‰uŒu�Ð'Ð'Ð'Ø	Õ+ÔAÒ	AÐ	AØ˜OÐ,­c©e¬eÐ3Ð3å‰uŒu•c‘e”eˆ|Ðrb   rÄ   z,CertvalidatorOperationResult[ValidationPath]c              ƒ   óp   ‡ ‡‡‡‡K  — dt           fˆ ˆˆˆˆfd„}t          ‰  |¦   «         ¬¦  «        ƒ d{V —†S )zE
    Low-level certificate validation routine.
    Internal API.
    r\   c               “   ó  •K  — t          ‰‰‰‰¬¦  «        ƒ d {V —†} | j        dk    r‰                     ‰¦  «         nK| j        j        j        }|t          j        k    r*t          |¦  «        \  }}‰                     ‰||¬¦  «         | S )N)r¹   r¼   r   )Úextra_asserted_key_usagesÚextra_asserted_extd_key_usages)	r(   Úpkix_lenÚvalidateÚtrust_anchorÚtrust_qualifiersÚtrusted_service_typer)   ÚUNSPECIFIEDrñ   )	rç   ré   Úimplicit_kusÚimplicit_ekusrs   r¾   rÄ   r¼   r¹   s	       €€€€€ra   Ú_checkz#validate_cert_usage.<locals>._checky  sÕ   øè è € å%4ØØØ1Ø#9ð	&
ñ &
ô &
ð  
ð  
ð  
ð  
ð  
ð  
ˆð Œ=˜1ÒÐØ×'Ò'¨Ñ-Ô-Ð-Ð-ð Ô!Ô2ÔGð ð Õ1Ô=Ò=Ð=Ý.OØ ñ/ô /Ñ+�˜mð #×+Ò+ØØ.:Ø3@ð ,ñ ô ð ð ˆrb   )rs   ÚcoroN)r3   Úhandle_certvalidator_errors)rs   r¹   r¾   rÄ   r¼   rþ   s   ````` ra   rÙ   rÙ   m  sq   øøøøøè è € ð�.ð ð ð ð ð ð ð ð ð ð õ: -°$¸V¸V¹X¼XÐFÑFÔFÐFÐFÐFÐFÐFÐFÐFrb   )r¸   r¹   rº   r¾   Ú
status_clsc             ƒ   ó
   K  — d S ©N© )r²   r  r¸   r¹   rº   r¾   s         ra   rN   rN   ™  s   è è € ð �rb   c             ƒ   ó
   K  — d S r  r  )r²   r¸   r¹   rº   r¾   s        ra   rN   rN   ¥  s   è è € ð �crb   c              ƒ   óv   K  — |                      |¦  «        }t          | |||||¬¦  «        ƒ d{V —†} |di |¤ŽS )aÓ  
    Validate a CMS signature (i.e. a ``SignedData`` object).

    :param signed_data:
        The :class:`.asn1crypto.cms.SignedData` object to validate.
    :param status_cls:
        Status class to use for the validation result.
    :param raw_digest:
        Raw digest, computed from context.
    :param validation_context:
        Validation context to validate the signer's certificate.
    :param status_kwargs:
        Other keyword arguments to pass to the ``status_class`` when reporting
        validation results.
    :param key_usage_settings:
        A :class:`.KeyUsageConstraints` object specifying which key usages
        must or must not be present in the signer's certificate.
    :param algorithm_policy:
        The algorithm usage policy for the signature validation.

        .. warning::
            This is distinct from the algorithm usage policy used for
            certificate validation, but the latter will be used as a fallback
            if this parameter is not specified.

            It is nonetheless recommended to align both policies unless
            there is a clear reason to do otherwise.
    :return:
        A :class:`.SignatureStatus` object (or an instance of a proper subclass)
    )r¾   r½   Nr  )Údefault_usage_constraintsrP   )r²   r  r¸   r¹   rº   r¾   r½   Úeff_key_usage_settingss           ra   rN   rN   °  s€   è è € ðN (×AÒAØñô Ðõ /ØØØØØ1Ø)ðñ ô ð ð ð ð ð ð €Mð ˆ:Ð&Ð&˜Ð&Ð&Ð&rb   c                 ór   — 	 | d         }t          |d¦  «        }|j        S # t          t          f$ r Y dS w xY w)a  
    Extract self-reported timestamp (from the ``signingTime`` attribute)

    Internal API.

    :param signer_info:
        A ``SignerInfo`` value.
    :return:
        The value of the ``signingTime`` attribute as a ``datetime``, or
        ``None``.
    r[   Úsigning_timeN)r$   rƒ   r   r   )r‰   ÚsaÚsts      ra   rT   rT   æ  sP   € ðØ˜Ô(ˆÝ& r¨>Ñ:Ô:ˆØŒyÐøÝ%Õ'@ÐAð ð ð Øˆtˆtðøøøs   ‚! ¡6µ6Úsignedc             #   óŽ   K  — |r| d         }t          |d¦  «        }n| d         }t          |d¦  «        }|D ]}|d         V — ŒdS )a„  
    Extract signed data associated with one or more timestamp tokens.

    Internal API.

    :param signer_info:
        A ``SignerInfo`` value.
    :param signed:
        If ``True``, look for content timestamps (among the signed
        attributes), else look for signature timestamps (among the unsigned
        attributes).
    :return:
        The ``SignedData`` values found.
    r[   Úcontent_time_stampÚunsigned_attrsÚsignature_time_stamp_tokenrÁ   N)r#   )r‰   r  r  ÚgenÚuaÚtsts         ra   Úextract_tst_data_iterr  ú  st   è è € ð" ð HØ˜Ô(ˆÝ% bÐ*>Ñ?Ô?ˆˆàÐ)Ô*ˆÝ% bÐ*FÑGÔGˆàð ð ˆØ�)ŒnÐÐÐÐðð rb   c                 ó0   ‡ — dt           dt          fˆ fd„}|S )NÚmi_hash_algor\   c                 ó²   •— t          | ¦  «        }t          j        |¦  «        }|                     ‰d         j        ¦  «         |                     ¦   «         S )Nr¦   )Úget_hash_spec_for_tst_digestr   rÐ   rÑ   rƒ   rÒ   )r  Útst_md_specrå   r‰   s      €ra   Ú	_mi_checkz*message_imprint_checker.<locals>._mi_check  sG   ø€ Ý2°<Ñ@Ô@ˆÝŒ[˜Ñ%Ô%ˆØ
�	Š	�+˜kÔ*Ô1Ñ2Ô2Ð2Ø�{Š{‰}Œ}Ðrb   )ÚstrrÏ   )r‰   r  s   ` ra   Úmessage_imprint_checkerr    s7   ø€ ð¥ð ­ð ð ð ð ð ð ð Ðrb   r  c                 ól   — 	 t          | ¦  «        S # t          $ r}t          d| ›�¦  «        |‚d }~ww xY w)NzUnknown hash function )r8   ÚAttributeErrorr%   )r  rq   s     ra   r  r  "  sT   € ðÝ)¨,Ñ7Ô7Ð7øÝð ð ð Ý(Ø5 \Ð5Ð5ñ
ô 
àð	øøøøðøøøs   ‚ ‘
3›.®3Úts_validation_contextc              ƒ   óˆ  K  — i }t          | ¦  «        }|�||d<   d}t          | d¬¦  «        D ]=}t          ||t          | ¦  «        |¬¦  «        ƒ d{V —†}t	          d
i |¤Ž}|j        r nŒ>|�||d<   d}	t          | d¬¦  «        D ]4}
t          |
||¬¦  «        ƒ d{V —†}t	          d
i |¤Ž}	|	|d	<   |	j        r nŒ5|	�|	|d	<   |S )a³  
    Collect and validate timing information in a ``SignerInfo`` value.
    This includes the ``signingTime`` attribute, content timestamp information
    and signature timestamp information.

    :param signer_info:
        A ``SignerInfo`` value.
    :param ts_validation_context:
        The timestamp validation context to validate against.
    :param raw_digest:
        The raw external message digest bytes (only relevant for the
        validation of the content timestamp token, if there is one)
    :param algorithm_policy:
        The algorithm usage policy for the signature validation.

        .. warning::
            This is distinct from the algorithm usage policy used for
            certificate validation, but the latter will be used as a fallback
            if this parameter is not specified.

            It is nonetheless recommended to align both policies unless
            there is a clear reason to do otherwise.
    NÚsigner_reported_dtF)r  )r½   Útimestamp_validityT)Úexpected_tst_imprintÚcontent_timestamp_validityr  )rT   r  rX   r  rJ   Útrusted)r‰   r   r¸   r½   rº   r"  Útst_validityÚtst_signed_dataÚtst_validity_kwargsÚcontent_tst_validityÚcontent_tst_signed_dataÚcontent_tst_validity_kwargss               ra   rR   rR   +  s˜  è è € ð< %'€Mõ 2°+Ñ>Ô>ÐØÐ%Ø.@ˆÐ*Ñ+à7;€LÝ0°ÀUÐKÑKÔKð 	ð 	ˆÝ$<ØØ!Ý# KÑ0Ô0Ø-ð	%
ñ %
ô %
ð 
ð 
ð 
ð 
ð 
ð 
Ðõ 0ÐFÐFÐ2EÐFÐFˆØÔð 	ØˆEð	ð ÐØ.:ˆÐ*Ñ+à?CÐÝ#8Ø˜Dð$ñ $ô $ð ð Ðõ -EØ#Ø!Ø!+ð-
ñ -
ô -
ð '
ð '
ð '
ð '
ð '
ð '
Ð#õ
  8ð  
ð  
Ø)ð 
ð  
Ðð 7KˆÐ2Ñ3àÔ'ð 	ØˆEð	ð Ð'Ø6JˆÐ2Ñ3àÐrb   r(  r$  c              ƒ   óf  K  — d}| d         d         }t          |t          j        ¦  «        r|j        }t          |t          j        ¦  «        s t          j        dt          j	        ¬¦  «        ‚|d         j
        }t          j        ¦   «         }t          | |d|i||¬¦  «        ƒ d{V —†}|d	         d
         j
        }	|d	         d         d         j
        }
 ||
¦  «        }||	k    rJt                               d|	                     ¦   «         › d|                     ¦   «         › d�¦  «         d|d<   |S )aø  
    Validate the ``SignedData`` of a time stamp token.

    :param tst_signed_data:
        The ``SignedData`` value to validate; must encapsulate a ``TSTInfo``
        value.
    :param validation_context:
        The validation context to validate against.
    :param expected_tst_imprint:
        A callable that takes a hash algorithm names and returns a digest value.
        detailing the expected message imprint value that should be contained in
        the encapsulated ``TSTInfo``.
    :param algorithm_policy:
        The algorithm usage policy for the signature validation.

        .. warning::
            This is distinct from the algorithm usage policy used for
            certificate validation, but the latter will be used as a fallback
            if this parameter is not specified.

            It is nonetheless recommended to align both policies unless
            there is a clear reason to do otherwise.
    :return:
        Keyword arguments for a :class:`.TimeStampSignatureStatus`.
    NrÀ   rÁ   z'SignedData does not encapsulate TSTInforf   Úgen_timeÚ	timestamp)r¹   rº   r¾   r½   Úmessage_imprintÚhashed_messageÚhash_algorithmr�   zTimestamp token imprint is z, but expected r�   Fr´   )Ú
isinstancer   ÚParsableOctetStringÚparsedr   ÚTSTInforB   rm   r?   r­   rƒ   rJ   r  rP   rÓ   rÔ   Úhex)r(  r¹   r$  r½   Útst_infoÚtst_info_bytesr/  Úku_settingsrº   Útst_imprintÚtst_algoÚexpected_tst_imprint_values               ra   rX   rX   v  s�  è è € ð@ €HØ$Ð%9Ô:¸9ÔE€NÝ�.¥$Ô":Ñ;Ô;ð )Ø!Ô(ˆÝ�h¥¤Ñ,Ô,ð 
ÝÔ-Ø5Ý*Ô9ð
ñ 
ô 
ð 	
ð ˜Ô$Ô+€Iå*ÔDÑFÔF€KÝ.ØØ-Ø" IÐ.Ø&Ø)ðñ ô ð ð ð ð ð ð €Mð Ð,Ô-Ð.>Ô?ÔF€KØÐ)Ô*Ð+;Ô<¸[ÔIÔP€HØ!5Ð!5°hÑ!?Ô!?Ðà! [Ò0Ð0Ý�Šð3¨+¯/ª/Ñ*;Ô*;ð 3ð 3Ø)×-Ò-Ñ/Ô/ð3ð 3ð 3ñ	
ô 	
ð 	
ð #(ˆ�hÑØÐrb   Úacsr¶   c              ƒ   ó  ‡‡K  — ˆˆfd„| D ¦   «         }g }g }t          j        |¦  «        D ]R}	 |                     |ƒ d {V —†¦  «         Œ# t          t          t
          f$ r} |j        |¦  «         Y d }~ŒKd }~ww xY w||fS )Nc                 ó4   •— g | ]}t          |‰‰¬ ¦  «        ‘ŒS ))Úholder_cert)r:   )Ú.0Úacr¶   r¹   s     €€ra   ú
<listcomp>z+process_certified_attrs.<locals>.<listcomp>Â  s9   ø€ ð ð ð àõ 	˜"Ð0¸kÐJÑJÔJðð ð rb   )ÚasyncioÚas_completedÚappendr-   r.   r,   )r>  r¶   r¹   ÚjobsÚresultsrB   Újobrq   s    ``     ra   Úprocess_certified_attrsrK  ¸  sÚ   øøè è € ðð ð ð ð àðñ ô €Dð €GØ€FÝÔ# DÑ)Ô)ð ð ˆð	Ø�NŠN ˜9˜9˜9˜9˜9˜9Ñ%Ô%Ð%Ð%øåÝÝ#ð
ð 	ð 	ð 	ð
 ˆFŒM˜!ÑÔÐÐÐÐÐÐøøøøð	øøøð �Fˆ?Ðs   ¯AÁA<Á"A7Á7A<Úsd_attr_certificatesÚsd_signed_attrsc              ƒ   óÒ  K  — 	 t          |d¦  «        }nM# t          $ r d }Y n?t          $ r3}t          j        t          |¦  «        t          j        ¬¦  «        |‚d }~ww xY wi }d }d }|��|d         }	t          j	        t          |	t          j        ¦  «        s|	nd¦  «        }
|d         }d}t          |t          j        ¦  «        sJd„ |D ¦   «         }t          |¦  «        t          |¦  «        k    }|�t          |||¦  «        }|ƒ d {V —†\  }}|�t          j        |¦  «        }nd }|p t          |d         t          j        ¦  «         }|�|rt"                               d	¦  «         t'          |
|||¬
¦  «        |d<   |�dt          | ||¦  «        ƒ d {V —†\  }}|r|                     |¦  «         |r|                     |¦  «         t          j        |¦  «        |d<   ||d<   |S )NÚsigner_attributes_v2rf   Úclaimed_attributesr  Úcertified_attributes_v2Fc                 ó2   — g | ]}|j         d k    ¯|j        ‘ŒS )Ú	attr_cert)ÚnameÚchosen)rB  r`   s     ra   rD  z.collect_signer_attr_status.<locals>.<listcomp>ú  s1   € ð ð ð àØ”9 Ò+Ð+ð ”à+Ð+Ð+rb   Úsigned_assertionsz¡CAdES signer attributes with externally certified assertions for which no validation method is available. This may affect signature semantics in unexpected ways.)Úclaimed_attrsÚcertified_attrsÚac_validation_errsÚunknown_attrs_presentÚcades_signer_attrsÚac_attrsrY  )r$   r   r   rB   rm   r  r?   r­   rF   Úfrom_iterabler3  r   ÚVoidÚlenrK  rE   Úfrom_resultsrÓ   rÔ   rD   Úextend)rL  r¶   r¹   rM  Úsigner_attrsrq   ÚresultÚcades_ac_resultsÚcades_ac_errorsÚclaimed_asn1ÚclaimedÚcertified_asn1Úunknown_cert_attrsÚ	cades_acsÚval_jobÚ	certifiedÚunknown_attrsÚ
ac_resultsÚ	ac_errorss                      ra   rQ   rQ   Ô  s²  è è € ð
Ý0ØÐ3ñ
ô 
ˆˆøõ %ð ð ð ØˆˆˆÝ$ð ð ð åÔ-Ý�‰FŒF¥{Ô'Að
ñ 
ô 
àð	øøøøðøøøð  €FØÐØ€OØÑØ#Ð$8Ô9ˆõ $Ô1Ý *¨<½¼Ñ CÔ CÐKˆLˆLÈñ
ô 
ˆð &Ð&?Ô@ˆØ"ÐÝ˜.­$¬)Ñ4Ô4ð 	Bðð à*ðñ ô ˆIõ "% Y¡¤µ3°~Ñ3FÔ3FÒ!FÐØ!Ð-å1ØØØ&ñô �ð
 ;B°M°M°M°M°M°MÑ1Ð  /ð Ð'õ ,Ô8Ð9IÑJÔJˆIˆIàˆIð
 +ð 
µ*ØÐ,Ô-­t¬yñ3
ô 3
ð /
ˆð Ð)¨mÐ)Ý�NŠNð:ñô ð õ (FØ!Ø%Ø.Ø"/ð	(
ñ (
ô (
ˆÐ#Ñ$ð Ð%õ '>Ø  +Ð/Añ'
ô '
ð !
ð !
ð !
ð !
ð !
ð !
Ñˆ
�Ið
 ð 	0Ø×ÒÐ.Ñ/Ô/Ð/Øð 	.Ø×Ò˜_Ñ-Ô-Ð-Ý0Ô=¸jÑIÔIˆˆzÑØ'0ˆÐ#Ñ$Ø€Ms   „ •A£	A¬.AÁAÚ
input_dataÚsigner_validation_contextÚac_validation_contextc	           	   ƒ   ó"  ‡ ‡‡‡K  — |€|}t          |¦  «        }	i Šdt          dt          fˆˆˆ ˆfd„}
|	d         d         j        } |
|¦  «        }t	          |	||
|¬¦  «        ƒ d{V —†}t          j        |¦  «        }t          ||||||¬¦  «        ƒ d{V —†}t          |¦  «        }|�|j	         
                    |j        ¦  «         |                     t          |j        |j        ||	d         ¬	¦  «        ƒ d{V —†¦  «         t          d
i |¤ŽS )a¨  
    .. versionadded: 0.9.0

    .. versionchanged: 0.11.0
        Added ``ac_validation_context`` param.

    Validate a detached CMS signature.

    :param input_data:
        The input data to sign. This can be either a :class:`bytes` object,
        a file-like object or a :class:`cms.ContentInfo` /
        :class:`cms.EncapsulatedContentInfo` object.

        If a CMS content info object is passed in, the `content` field
        will be extracted.
    :param signed_data:
        The :class:`cms.SignedData` object containing the signature to verify.
    :param signer_validation_context:
        Validation context to use to verify the signer certificate's trust.
    :param ts_validation_context:
        Validation context to use to verify the TSA certificate's trust, if
        a timestamp token is present.
        By default, the same validation context as that of the signer is used.
    :param ac_validation_context:
        Validation context to use to validate attribute certificates.
        If not supplied, no AC validation will be performed.

        .. note::
            :rfc:`5755` requires attribute authority trust roots to be specified
            explicitly; hence why there's no default.
    :param algorithm_policy:
        The algorithm usage policy for the signature validation.

        .. warning::
            This is distinct from the algorithm usage policy used for
            certificate validation, but the latter will be used as a fallback
            if this parameter is not specified.

            It is nonetheless recommended to align both policies unless
            there is a clear reason to do otherwise.
    :param key_usage_settings:
        Key usage parameters for the signer.
    :param chunk_size:
        Chunk size to use when consuming input data.
    :param max_read:
        Maximal number of bytes to read from the input stream.
    :return:
        A description of the signature's status.
    Nr€   r\   c                 óð  •— 	 ‰|          S # t           $ r Y nw xY wt          j        t          | ¦  «        ¦  «        }t	          ‰t
          ¦  «        r|                     ‰¦  «         nvt	          ‰t          j        t          j	        f¦  «        r)|                     t          ‰d         ¦  «        ¦  «         n't          ‰¦  «        }t          j        |‰|‰¬¦  «         |                     ¦   «         }|‰| <   |S )NrÁ   )Úmax_read)ÚKeyErrorr   rÐ   r8   r3  rÏ   rÑ   r   ÚContentInfoÚEncapsulatedContentInfoÚ	bytearrayr<   Úchunked_digestrÒ   )r€   ÚhÚtemp_bufrc  Ú
chunk_sizeÚdigest_by_algorp  ru  s       €€€€ra   Ú_content_digestz4async_validate_detached_cms.<locals>._content_digest{  sÿ   ø€ ð	Ø!Ð"2Ô3Ð3øÝð 	ð 	ð 	ØˆDð	øøøåŒKÕ2Ð3CÑDÔDÑEÔEˆÝ�j¥%Ñ(Ô(ð 	LØ�HŠH�ZÑ Ô Ð Ð ÝØ�œ­#Ô*EÐFñ
ô 
ð 	Lð �HŠH•U˜: iÔ0Ñ1Ô1Ñ2Ô2Ð2Ð2å  Ñ,Ô,ˆHÝÔ ¨*°aÀ(ÐKÑKÔKÐKØ—’‘”ˆØ+1ˆÐ'Ñ(Øˆs   ƒ ‹
—r�   )r   r¸   r½   )r¸   r¹   rº   r¾   r½   r[   )rL  r¶   r¹   rM  r  )r"   r  rÏ   rƒ   rR   rI   r  rP   r!   rÕ   rÖ   rÌ   rÑ   rQ   Úattribute_certsr¶   )rp  r²   rq  r   rr  r¾   r½   r}  ru  r‰   r  Úsignature_digest_algoÚdigest_bytesrº   r·   r~  s   `      ``      @ra   rO   rO   9  sÕ  øøøøè è € ðz Ð$Ø 9ÐÝ% kÑ2Ô2€KØ')€Nð­#ð µ%ð ð ð ð ð ð ð ð ð ð& (Ð(:Ô;¸KÔHÔOÐØ"�?Ð#8Ñ9Ô9€Lå-ØØ3Ø"Ø)ð	ñ ô ð ð ð ð ð ð €Mõ 4ÔMØñô Ðõ /ØØØ4Ø#Ø-Ø)ðñ ô ð ð ð ð ð ð €Mõ )¨Ñ5Ô5€IØÐ(ØÔ2×DÒDØÔ!ñ	
ô 	
ð 	
ð ×ÒÝ(Ø!*Ô!:Ø!Ô-Ø4Ø'¨Ô7ð	
ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ñô ð õ &Ð6Ð6¨Ð6Ð6Ð6rb   Ú
ResultTypeT)Ú	covariant)Úfrozenc                   ó’   — e Zd ZU dZee         ed<   dZee         ed<   dZ	ee
         ed<   dZee         ed<   dZee         ed<   dS )ÚCertvalidatorOperationResultzB
    Internal class to inspect error data from certvalidator.
    rÜ   NrÛ   rË   rÝ   rÚ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rƒ  Ú__annotations__rÛ   rG   rË   r   rÝ   r3   rÚ   r@   r  rb   ra   r‡  r‡  µ  s†   € € € € € € ðð ð ˜ZÔ(Ð(Ð(Ñ(Ø04€L�(Ð,Ô-Ð4Ð4Ñ4Ø-1Ð˜ Ô*Ð1Ð1Ñ1Ø+/€J�˜Ô(Ð/Ð/Ñ/Ø26€N�HÐ.Ô/Ð6Ð6Ñ6Ð6Ð6rb   r‡  rÿ   c              ƒ   óB  ‡ K  — dt           fˆ fd„}d}dx}}	 t          |ƒ d{V —†¬¦  «        S # t          $ r"} ||¦  «         t          j        }Y d}~�n8d}~wt
          $ r"} ||¦  «         t          j        }Y d}~�nd}~wt          $ r)} ||¦  «         t          j        }|j	        }Y d}~�nÝd}~wt          $ rD} ||¦  «         |j        }|j        €t          j        }nt          j        }|j        }Y d}~�n‘d}~wt          $ r�}|j        } ||¦  «         |j        }|j        rt          j        }nX|j        r)t          j        }t+          d|j        |j        ¬¦  «        }n(t          j        }t+          d|j        |j        ¬¦  «        }Y d}~núd}~wt0          $ r?}t2                               d‰ j        j        › �|¬	¦  «         t          j        }Y d}~n³d}~wt<          $ rJ}|j        } ||¦  «         |j        }|j        s|j        rt          j         }nt          j        }Y d}~nad}~wtB          $ r(}|j        } ||¦  «         t          j        }Y d}~n1d}~wt           $ r!} ||¦  «         t          j        }Y d}~nd}~ww xY wt          d||||¬
¦  «        S )zi
    Internal error handling function that maps certvalidator errors
    to AdES status indications.
    rq   c                 ón   •— d‰j         j        › d| j        › �}t                               || ¬¦  «         d S )Nz Validation error [cert context: z]: rÂ   )rv   rw   Úfailure_msgrÓ   rÔ   )rq   rž   rs   s     €ra   Ú_warnz*handle_certvalidator_errors.<locals>._warnË  sL   ø€ ðØŒ|Ô*ðð àŒ}ðð ð 	õ
 	�Š�s QˆÑ'Ô'Ð'Ð'Ð'rb   N)rÜ   F)Ú
ca_revokedÚrevocation_dateÚrevocation_reasonTzFailed to build path for rÂ   )rÜ   rÛ   rË   rÝ   rÚ   )"r1   r‡  r,   r@   ÚCHAIN_CONSTRAINTS_FAILUREr2   ÚNO_POEr0   Ú	TRY_LATERÚtime_cutoffr*   Úoriginal_pathÚbanned_sinceÚCRYPTO_CONSTRAINTS_FAILUREÚ!CRYPTO_CONSTRAINTS_FAILURE_NO_POEr/   Úrevocation_dtÚis_side_validationrà   Ú
is_ee_certÚREVOKED_NO_POErG   ÚreasonÚREVOKED_CA_NO_POEr-   rÓ   rÔ   rv   rw   ÚNO_CERTIFICATE_CHAIN_FOUNDr+   Ú
expired_dtÚOUT_OF_BOUNDS_NO_POEr.   )rs   rÿ   r�  r‘   rÛ   rç   rq   ræ   s   `       ra   r   r   Â  st  øè è € ð(•ð (ð (ð (ð (ð (ð (ð (,€LØÐ€L�4ðIJÝ+À¸:¸:¸:¸:¸:¸:ÐFÑFÔFÐFøÝ"ð Bð Bð BØˆˆa‰ŒˆÝ'ÔAˆˆˆˆˆ‰øøøøÝð /ð /ð /Øˆˆa‰ŒˆÝ'Ô.ˆˆˆˆˆ‰øøøøÝð %ð %ð %Øˆˆa‰Œˆõ (Ô1ˆØ”}ˆˆˆˆˆ‰øøøøÝ#ð *ð *ð *Øˆˆa‰Œˆð ŒˆØŒ>Ð!å+ÔFˆKˆKõ ,ÔMˆKØœ>ˆLøøøøùøøøøÝð ð ð ØŒˆØˆˆa‰ŒˆØ”ˆØÔð 	å+ÔMˆKˆKØŒ\ð 	Ý+Ô:ˆKÝ,Ø Ø !¤Ø"#¤(ðñ ô ˆLˆLõ ,Ô=ˆKÝ,ØØ !¤Ø"#¤(ðñ ô ˆLøøøøøøøøøõ
 ð Cð Cð CÝ�ŠØE¨¬Ô(CÐEÐEØð 	ñ 	
ô 	
ð 	
õ (ÔBˆˆˆˆˆˆøøøøÝð Nð Nð NØŒˆØˆˆa‰ŒˆØ”|ˆØÔ#ð 	N¨¬ð 	Nõ
 ,Ô@ˆKˆKå+ÔMˆKøøøøøøøøøÝð Jð Jð JØŒˆØˆˆa‰ŒˆÝ'ÔIˆˆˆˆˆˆøøøøÝð Jð Jð JØˆˆa‰ŒˆÝ'ÔIˆˆˆˆˆˆøøøøðJøøøõ (ØØ!Ø'ØØ"ðñ ô ð sv   ˜. ®
J
¸AÁJ
Á"A?Á?J
ÂB0Â0J
Â=9C<Ã<J
Ä	BFÆJ
Æ 5GÇJ
Ç'A H,È,J
È9IÉJ
É)JÊJ
r  )NNNNNN)ŽrE  ÚloggingÚdataclassesr   r   Útypingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Ú
asn1cryptor   r   r   r   r   Úcryptography.exceptionsr   Úcryptography.hazmat.primitivesr   Úpyhanko.sign.generalr   r   r   r   r   r    r!   r"   r#   r$   Úpyhanko.sign.validation.errorsr%   Úpyhanko_certvalidatorr&   r'   r(   Úpyhanko_certvalidator.authorityr)   Úpyhanko_certvalidator.errorsr*   r+   r,   r-   r.   r/   r0   r1   Ú pyhanko_certvalidator.ltv.errorsr2   Úpyhanko_certvalidator.pathr3   Ú!pyhanko_certvalidator.policy_declr4   Ú"pyhanko_certvalidator.sig_validater5   r6   r7   Úpyhanko_certvalidator.utilr8   Úpyhanko_certvalidator.validater9   r:   Ú	pdf_utilsr<   Úpdf_utils.miscr=   Úades.reportr?   r@   Ú rB   ÚsettingsrC   ÚstatusrD   rE   rF   rG   rH   rI   rJ   ÚutilsrK   rL   rM   Ú__all__Ú	getLoggerrˆ  rÓ   rY   ÚCMSAttributesri   rh   rU   Úboolr_   ÚCertificatery   rš   ÚSignedDigestAlgorithmÚHmacAlgorithmrV   Ú
SignerInfor¡   r  rÏ   rW   Ú
SignedDatarS   ÚdictrP   rñ   rÙ   rN   rT   r  r  r  rR   rX   ÚAttributeCertificateV2rK  rQ   ÚDEFAULT_CHUNK_SIZErw  rx  rO   rƒ  r‡  r   r  rb   ra   ú<module>rÉ     s�  ðØ €€€Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ 3Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð FÐ EÐ EÐ EÐ EÐ Eðð ð ð ð ð ð ð ð ð ð
 ?Ð >Ð >Ð >Ð >Ð >ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð >Ð =Ð =Ð =Ð =Ð =Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø BÐ BÐ BÐ BÐ BÐ Bðð ð ð ð ð ð ð ð ð ð
 BÐ AÐ AÐ AÐ AÐ AØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pà Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ðð ð €ð 
ˆÔ	˜8Ñ	$Ô	$€àˆW�\¨Ð9Ñ9Ô9€
ðØÔ#ðà
ˆ3Ô! 3Ô#;¸TÐAÔBðð ð ð ð$¨dð ð ð ð ð,
Ø
Ô
ð
Ø*-Ô*;ð
ð 
ð 
ð 
ð2CØÔðCà"%Ô"5ðCð &.¨eÔ.IÔ%JðCð  (¨Ô(;Ô<ð	Cð Cð Cð CðT &*ð	;
ð ;
Ø”ð;
à
Ô
ð;
ð 4ð;
ð ˜Ô"ð	;
ð ;
ð ;
ð ;
ðF 37ðFð FØ”ðFà
Ô
ðFð ðFð ð	Fð
 Ð.Ô/ðFð ˆ4�ˆ:ÔðFð Fð Fð FðRØ”ðàðð ð ð ðB #'Ø6:Ø$(Ø04Ø=AØ:>ðKð KØ”ðKà˜”ðKð !Ð!2Ô3ðKð ˜D”>ð	Kð
 ˜nÔ-ðKð %Ð%9Ô:ðKð Ð6Ô7ðKð ,ðKð 
ˆ#ˆsˆ(„^ðKð Kð Kð Kð\Ð4Fð ð ð ð ð >Bð)Gð )GØ
Ô
ð)Gà)ð)Gð ,ð)Gð # >Ô2ð	)Gð
 %Ð%9Ô:ð)Gð 4ð)Gð )Gð )Gð )GðX 
ð
 #'Ø6:Ø$(Ø8<ðð ð Ø”ðð �ZÔ ðð ˜”ð	ð
 !Ð!2Ô3ðð ˜D”>ðð !Ð!4Ô5ðð ðð ð ñ 
„ðð 
ð #'Ø6:Ø$(Ø8<ðð ð Ø”ðð ˜”ðð !Ð!2Ô3ð	ð
 ˜D”>ðð !Ð!4Ô5ðð ðð ð ñ 
„ðð Ø"&Ø6:Ø$(Ø8<Ø:>ð3'ð 3'Ø”ð3'ð ˜”ð3'ð !Ð!2Ô3ð	3'ð
 ˜D”>ð3'ð !Ð!4Ô5ð3'ð Ð6Ô7ð3'ð ð3'ð 3'ð 3'ð 3'ðl¨#¬.ð ¸XÀhÔ=Oð ð ð ð ð(Ø”ðØ,0ðàˆsŒ~˜t TÐ)Ô*ðð ð ð ð8	Ø”ð	àˆsˆe�UˆlÔð	ð 	ð 	ð 	ð¨sð ð ð ð ð ;?ð	Hð HØ”ðHà#Ð$5Ô6ðHð ˜#˜ ˜Ô&ðHð Ð6Ô7ð	Hð Hð Hð Hð^ ;?ð	?ð ?Ø”^ð?à Ð!2Ô3ð?ð # C 5¨% <Ô0ð?ð Ð6Ô7ð	?ð ?ð ?ð ?ðDØ	�#Ô,Ô	-ðàÔ!ðð *ðð ØÐ	ÔØØÐ!Ð#4Ð6MÐMÔNôðôð	ð ð ð ð8bØ" 3Ô#=Ô>ðbàÔ!ðbð !Ð!2Ô3ðbð Ô&ð	bð bð bð bðP >BØ9=Ø9=Ø8<Ø:>ØÔ&Øðv7ð v7Ø�e˜R ¤°#Ô2MÐMÔNðv7à”ðv7ð  (Ð(9Ô:ðv7ð $Ð$5Ô6ð	v7ð
 $Ð$5Ô6ðv7ð !Ð!4Ô5ðv7ð Ð6Ô7ðv7ð  ðv7ð v7ð v7ð v7ðr ˆW�\¨TÐ2Ñ2Ô2€
ð €�$ÐÑÔð	7ð 	7ð 	7ð 	7ð 	7 7¨:Ô#6ñ 	7ô 	7ñ Ôð	7ðdØ
Ô
ðdà
�JÔ
ðdð " *Ô-ðdð dð dð dð dð drb   