§
    ¥”jm(  ã                   óÜ   — d dl m Z  d dlmZmZmZmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ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  d dl!m"Z"  G d„ d¦  «        Z#dS )é    )Údatetime)ÚDictÚIterableÚListÚOptionalÚSet)ÚcrlÚocspÚx509)Ú	Authority)ÚCRLFetchErrorÚOCSPFetchError)ÚFetchers)ÚKnownPOEÚ
POEManagerÚPOETypeÚValidationObjectÚValidationObjectTypeÚdigest_for_poe)ÚNonRevokedStatusAssertion)ÚCertificateRegistry)ÚCRLContainerÚOCSPContainerÚsort_freshest_first)Úget_ocsp_urlsc                   ó8  — e Zd ZdZ	 	 d!dededee         dee         dee	         d	e
e         fd
„Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zedeej                 fd„¦   «         Zedeej                 fd„¦   «         Zedeej                 fd„¦   «         Zdefd„Zd„ Zde
ej                 fd„Zdee         fd„Zdee         fd„Z dee         fd„Z!de"dee         fd„Z#de$e%         fd„Z&de$e%         fd„Z'dej        de(defd „Z)dS )"ÚRevinfoManageraÑ  
    .. versionadded:: 0.20.0

    Class to manage and potentially fetch revocation information.

    :param certificate_registry:
        The associated certificate registry.
    :param poe_manager:
        The proof-of-existence (POE) data manager.
    :param crls:
        CRL data.
    :param ocsps:
        OCSP response data.
    :param fetchers:
        Fetchers for collecting revocation information.
        If ``None``, no fetching will be performed.
    © NÚcertificate_registryÚpoe_managerÚcrlsÚocspsÚ
assertionsÚfetchersc                 ó  — || _         || _        i | _        i | _        g | _        |rt          |¦  «        | _        g | _        |r0t          |¦  «        x| _        }|D ]}|                      |¦  «         Œ|| _        d„ |D ¦   «         | _	        d S )Nc                 ó   — i | ]
}|j         |“ŒS r   )Úcert_sha256)Ú.0Ú	assertions     út/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko_certvalidator/revinfo/manager.pyú
<dictcomp>z+RevinfoManager.__init__.<locals>.<dictcomp>N   s0   € ð D
ð D
ð D
Ø1:ˆIÔ! 9ðD
ð D
ð D
ó    )
Ú_certificate_registryÚ_poe_managerÚ_revocation_certsÚ_crl_issuer_mapÚ_crlsr   Ú_ocspsÚ_extract_ocsp_certsÚ	_fetchersÚ_assertions)Úselfr   r    r!   r"   r#   r$   Úocsp_responses           r*   Ú__init__zRevinfoManager.__init__4   s¾   € ð &:ˆÔ"Ø'ˆÔà@BˆÔØ>@ˆÔà)+ˆŒ
Øð 	3Ý,¨TÑ2Ô2ˆDŒJà+-ˆŒØð 	8Ý"5°eÑ"<Ô"<Ð<ˆDŒK˜%Ø!&ð 8ð 8�Ø×(Ò(¨Ñ7Ô7Ð7Ð7à!ˆŒðD
ð D
Ø>HðD
ñ D
ô D
ˆÔÐÐr,   Úreturnc                 ó   — | j         S )z<
        The proof-of-existence (POE) data manager.
        )r.   ©r6   s    r*   r    zRevinfoManager.poe_managerR   s   € ð
 Ô Ð r,   c                 ó   — | j         S )z6
        The associated certificate registry.
        )r-   r;   s    r*   r   z#RevinfoManager.certificate_registryY   s   € ð
 Ô)Ð)r,   c                 ó   — | j         duS )zA
        Boolean indicating whether fetching is allowed.
        N)r4   r;   s    r*   Úfetching_allowedzRevinfoManager.fetching_allowed`   s   € ð
 Œ~ TÐ)Ð)r,   c                 ó’   — d„ | j         D ¦   «         }| j        s|S t          | j        j                             ¦   «         ¦  «        |z   S )zK
        A list of all cached :class:`crl.CertificateList` objects
        c                 ó   — g | ]	}|j         ‘Œ
S r   )Úcrl_data©r(   Úconts     r*   ú
<listcomp>z'RevinfoManager.crls.<locals>.<listcomp>m   s   € Ð9Ð9Ð9 d�D”MÐ9Ð9Ð9r,   )r1   r4   ÚlistÚcrl_fetcherÚfetched_crls)r6   Úraw_crlss     r*   r!   zRevinfoManager.crlsg   sL   € ð :Ð9¨d¬jÐ9Ñ9Ô9ˆØŒ~ð 	ØˆOÝ�D”NÔ.×;Ò;Ñ=Ô=Ñ>Ô>ÀÑIÐIr,   c                 ó’   — d„ | j         D ¦   «         }| j        s|S t          | j        j                             ¦   «         ¦  «        |z   S )zI
        A list of all cached :class:`ocsp.OCSPResponse` objects
        c                 ó   — g | ]	}|j         ‘Œ
S r   )Úocsp_response_datarB   s     r*   rD   z(RevinfoManager.ocsps.<locals>.<listcomp>x   s   € ÐEÐEÐE°�TÔ,ÐEÐEÐEr,   )r2   r4   rE   Úocsp_fetcherÚfetched_responses)r6   Ú	raw_ocspss     r*   r"   zRevinfoManager.ocspsr   sN   € ð FÐE¸¼ÐEÑEÔEˆ	ØŒ~ð 	ØÐå�D”NÔ/×AÒAÑCÔCÑDÔDÀyÑPÐPr,   c                 óN   — t          | j                             ¦   «         ¦  «        S )zƒ
        A list of newly-fetched :class:`x509.Certificate` objects that were
        obtained from OCSP responses and CRLs
        )rE   r/   Úvaluesr;   s    r*   Únew_revocation_certsz#RevinfoManager.new_revocation_certs~   s!   € õ �DÔ*×1Ò1Ñ3Ô3Ñ4Ô4Ð4r,   r7   c                 ó¨  — | j         }||         }| j        }| j        }|                     ¦   «         }|�š|d         r”|d         D ]�}|                     |¦  «        rr|||j        <   |                     t          t          j	        t          |                     ¦   «         ¦  «        |t          t          j        |¬¦  «        ¬¦  «        ¦  «         ŒŠdS dS dS )zê
        Extracts any certificates included with an OCSP response and adds them
        to the certificate registry

        :param ocsp_response:
            An asn1crypto.ocsp.OCSPResponse object to look for certs inside of
        NÚcerts)Úobject_typeÚvalue)Úpoe_typeÚdigestÚpoe_timeÚvalidation_object)r.   r-   r/   Úextract_basic_ocsp_responseÚregisterÚissuer_serialÚregister_known_poer   r   Ú
VALIDATIONr   Údumpr   r   ÚCERTIFICATE)r6   r7   Úpoe_manÚocsp_poe_timeÚregistryÚ
revo_certsÚbasicÚ
other_certs           r*   r3   z"RevinfoManager._extract_ocsp_certs‡   sú   € ð Ô#ˆØ Ô.ˆàÔ-ˆØÔ+ˆ
à×9Ò9Ñ;Ô;ˆØÐ  w¤ÐØ# Gœnð ð �
Ø×$Ò$ ZÑ0Ô0ð Ø;E�J˜zÔ7Ñ8Ø×.Ò.Ý Ý%,Ô%7Ý#1°*·/²/Ñ2CÔ2CÑ#DÔ#Dð &3Ý.>Ý,@Ô,LØ&0ð/ñ /ô /ð
ñ 
ô 
ñô ð øð	 ÐÐÐðð r,   c                 ó$   — || j         |j        <   dS )aU  
        Records the certificate that issued a certificate list. Used to reduce
        processing code when dealing with self-issued certificates and multiple
        CRLs.

        :param certificate_list:
            An ans1crypto.crl.CertificateList object

        :param cert:
            An ans1crypto.x509.Certificate object
        N)r0   Ú	signature)r6   Úcertificate_listÚcerts      r*   Úrecord_crl_issuerz RevinfoManager.record_crl_issuer©   s   € ð <@ˆÔÐ-Ô7Ñ8Ð8Ð8r,   c                 ó@   — | j                              |j        ¦  «        S )a3  
        Checks to see if the certificate that signed a certificate list has
        been found

        :param certificate_list:
            An ans1crypto.crl.CertificateList object

        :return:
            None if not found, or an asn1crypto.x509.Certificate object of the
            issuer
        )r0   Úgetrh   )r6   ri   s     r*   Úcheck_crl_issuerzRevinfoManager.check_crl_issuer¸   s   € ð Ô#×'Ò'Ð(8Ô(BÑCÔCÐCr,   c                 ó¶   — t          | j        ¦  «        }| j        r=| j        j                             ¦   «         }|                     d„ |D ¦   «         ¦  «         |S )zž
        .. versionadded:: 0.27.0

        Return all currently available CRLs.

        :return:
            A list of :class:`CRLContainer` objects
        c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N©r   ©r(   rA   s     r*   ú	<genexpr>z:RevinfoManager.currently_available_crls.<locals>.<genexpr>Ó   s*   è è € ÐFÐF°X�, xÑ0Ô0ÐFÐFÐFÐFÐFÐFr,   )rE   r1   r4   rF   rG   Úextend)r6   Úresultr!   s      r*   Úcurrently_available_crlsz'RevinfoManager.currently_available_crlsÇ   sZ   € õ �d”jÑ!Ô!ˆØŒ>ð 	GØ”>Ô-×:Ò:Ñ<Ô<ˆDØ�MŠMÐFÐFÀÐFÑFÔFÑFÔFÐFØˆr,   c              ƒ   óô   K  — | j         st          d¦  «        ‚| j         }	 |j                             |¦  «        }n0# t          $ r# |j                             |¦  «        ƒ d{V —†}Y nw xY wd„ |D ¦   «         }|S )zõ
        .. versionadded:: 0.27.0

        Download all relevant CRLs for a given certificate.

        :param cert:
            An asn1crypto.x509.Certificate object

        :return:
            A list of :class:`CRLContainer` objects
        zNo CRL fetcher availableNc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   rr   rs   s     r*   rD   z-RevinfoManager.fetch_crls.<locals>.<listcomp>ê   s    € Ð=Ð=Ð=¨H•˜hÑ'Ô'Ð=Ð=Ð=r,   )r4   r   rF   Úfetched_crls_for_certÚKeyErrorÚfetch)r6   rj   r$   r!   Úcontss        r*   Ú
fetch_crlszRevinfoManager.fetch_crlsÖ   s¤   è è € ð Œ~ð 	<ÝÐ :Ñ;Ô;Ð;à”>ˆð	:ØÔ'×=Ò=¸dÑCÔCˆDˆDøÝð 	:ð 	:ð 	:Ø!Ô-×3Ò3°DÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9ˆDˆDˆDð	:øøøà=Ð=¸Ð=Ñ=Ô=ˆØˆs   ¡< ¼*A)Á(A)c              ƒ   óœ   K  — |                       ¦   «         }| j        r.|                     |                      |¦  «        ƒ d{V —†¦  «         |S )z¸
        .. versionadded:: 0.20.0

        :param cert:
            An asn1crypto.x509.Certificate object

        :return:
            A list of :class:`CRLContainer` objects
        N)rw   r4   ru   r~   )r6   rj   r!   s      r*   Úasync_retrieve_crlsz"RevinfoManager.async_retrieve_crlsí   sX   è è € ð ×,Ò,Ñ.Ô.ˆØŒ>ð 	5Ø�KŠK˜dŸošo¨dÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ñ4Ô4Ð4Øˆr,   Ú	authorityc              ƒ   óˆ  K  — | j         rt          |¦  «        s| j        S | j         }d„ |j                             |¦  «        D ¦   «         }|sm|j                             ||¦  «        ƒ d{V —†}t          j        |¦  «        }|D ]5}	 |                      |¦  «         Œ# t          $ r t          d¦  «        ‚w xY w|| j        z   S )a
  
        .. versionadded:: 0.20.0

        :param cert:
            An asn1crypto.x509.Certificate object

        :param authority:
            The issuing authority for the certificate

        :return:
            A list of :class:`OCSPContainer` objects
        c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )r   )r(   Úresps     r*   rD   z7RevinfoManager.async_retrieve_ocsps.<locals>.<listcomp>  s0   € ð 
ð 
ð 
àõ ˜$ÑÔð
ð 
ð 
r,   Nz9Failed to extract certificates from fetched OCSP response)r4   r   r2   rL   Úfetched_responses_for_certr|   r   Ú
load_multir3   Ú
ValueErrorr   )r6   rj   r�   r$   r"   rK   r„   s          r*   Úasync_retrieve_ocspsz#RevinfoManager.async_retrieve_ocspsü   s&  è è € ð  Œ~ð 	¥]°4Ñ%8Ô%8ð 	Ø”;Ðà”>ˆð
ð 
à Ô-×HÒHÈÑNÔNð
ñ 
ô 
ˆð ð 	Ø'/Ô'<×'BÒ'BØ�iñ(ô (ð "ð "ð "ð "ð "ð "Ðõ "Ô,Ð-?Ñ@Ô@ˆEð
 ð ð �ðØ×,Ò,¨TÑ2Ô2Ð2Ð2øÝ!ð ð ð Ý(ð0ñô ð ðøøøð �t”{Ñ"Ð"s   ÂBÂB7Úhashes_to_evictc                 óp   ‡— dt           fˆfd„}t          t          || j        ¦  «        ¦  «        | _        dS )zÂ
        Internal API to eliminate local OCSP records from consideration.

        :param hashes_to_evict:
            A collection of OCSP response hashes; see :func:`.digest_for_poe`.
        Ú	containerc                 óX   •— t          | j                             ¦   «         ¦  «        }|‰vS rq   )r   rK   r_   ©r‹   rW   r‰   s     €r*   Úpz%RevinfoManager.evict_ocsps.<locals>.p0  s*   ø€ Ý# IÔ$@×$EÒ$EÑ$GÔ$GÑHÔHˆFØ Ð0Ð0r,   N)r   rE   Úfilterr2   ©r6   r‰   rŽ   s    ` r*   Úevict_ocspszRevinfoManager.evict_ocsps(  sI   ø€ ð	1�ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1õ �6 ! T¤[Ñ1Ô1Ñ2Ô2ˆŒˆˆr,   c                 óp   ‡— dt           fˆfd„}t          t          || j        ¦  «        ¦  «        | _        dS )z°
        Internal API to eliminate local CRLs from consideration.

        :param hashes_to_evict:
            A collection of CRL hashes; see :func:`.digest_for_poe`.
        r‹   c                 óX   •— t          | j                             ¦   «         ¦  «        }|‰vS rq   )r   rA   r_   r�   s     €r*   rŽ   z$RevinfoManager.evict_crls.<locals>.p>  s*   ø€ Ý# IÔ$6×$;Ò$;Ñ$=Ô$=Ñ>Ô>ˆFØ Ð0Ð0r,   N)r   rE   r�   r1   r�   s    ` r*   Ú
evict_crlszRevinfoManager.evict_crls6  sI   ø€ ð	1�ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1õ �&  D¤JÑ/Ô/Ñ0Ô0ˆŒ
ˆ
ˆ
r,   rj   Úatc                 ó\   — 	 || j         |j                 j        k    S # t          $ r Y dS w xY w)NF)r5   Úsha256r•   r{   )r6   rj   r•   s      r*   Úcheck_asserted_unrevokedz'RevinfoManager.check_asserted_unrevokedD  sA   € ð	Ø˜Ô)¨$¬+Ô6Ô9Ò9Ð9øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ �
+ª+)r   N)*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r8   Úpropertyr    r   Úboolr>   r   r	   ÚCertificateListr!   r
   ÚOCSPResponser"   r   ÚCertificaterQ   r3   rk   rn   rw   r~   r€   r   rˆ   r   Úbytesr‘   r”   r   r˜   r   r,   r*   r   r   !   sè  € € € € € ðð ð0 ;=Ø'+ð
ð 
à1ð
ð  ð
ð �|Ô$ð	
ð
 ˜Ô&ð
ð Ð6Ô7ð
ð ˜8Ô$ð
ð 
ð 
ð 
ð< ð!˜Zð !ð !ð !ñ „Xð!ð ð*Ð&9ð *ð *ð *ñ „Xð*ð ð* $ð *ð *ð *ñ „Xð*ð ðJ�d˜3Ô.Ô/ð Jð Jð Jñ „XðJð ð	Q�t˜DÔ-Ô.ð 	Qð 	Qð 	Qñ „Xð	Qð ð5 d¨4Ô+;Ô&<ð 5ð 5ð 5ñ „Xð5ð °ð  ð  ð  ð  ðD@ð @ð @ðD°H¸TÔ=MÔ4Nð Dð Dð Dð Dð¨$¨|Ô*<ð ð ð ð ð¨¨\Ô(:ð ð ð ð ð.°°lÔ1Cð ð ð ð ð*#Ø(ð*#à	ˆmÔ	ð*#ð *#ð *#ð *#ðX3¨3¨u¬:ð 3ð 3ð 3ð 3ð1¨#¨e¬*ð 1ð 1ð 1ð 1ðØÔ$ðØ*2ðà	ðð ð ð ð ð r,   r   N)$r   Útypingr   r   r   r   r   Ú
asn1cryptor	   r
   r   Úpyhanko_certvalidator.authorityr   Úpyhanko_certvalidator.errorsr   r   Úpyhanko_certvalidator.fetchersr   Úpyhanko_certvalidator.ltv.poer   r   r   r   r   r   Ú!pyhanko_certvalidator.policy_declr   Úpyhanko_certvalidator.registryr   Ú&pyhanko_certvalidator.revinfo.archivalr   r   r   Úpyhanko_certvalidator.utilr   r   r   r,   r*   ú<module>r­      s²  ðØ Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 'Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð HÐ GÐ GÐ GÐ GÐ GØ >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð ð ð
 5Ð 4Ð 4Ð 4Ð 4Ð 4ðið ið ið ið iñ iô ið ið ið ir,   