§
    ¥”j 8  ã            
       óÄ  — 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
 d dlmZmZmZ d dlmZmZ d dlmZmZmZ g d¢Z G d	„ d
ej        ¦  «        Z ed¬¦  «         G d„ d¦  «        ¦   «         Z G d„ dee j        ¦  «        Z e	de¬¦  «        Zdee         dee         fd„Zd„ Zdee         dee         dededef
d„Zdeej                  fd„Z! ed¬¦  «         G d„ de¦  «        ¦   «         Z" ed¬¦  «         G d„ d e¦  «        ¦   «         Z#e
e$ej%        e#f         Z&e
e$ej'        e"f         Z(d!ee&         dee#         fd"„Z)d#ee(         dee"         fd$„Z*dS )%é    N)Ú	dataclass)Údatetime)ÚIterableÚListÚOptionalÚTypeVarÚUnion)ÚalgosÚcrlÚocsp)ÚIssuedItemContainerÚValidationTimingParams)Ú#FRESHNESS_FALLBACK_VALIDITY_DEFAULTÚCertRevTrustPolicyÚFreshnessReqType)ÚCRLContainerÚOCSPContainerÚRevinfoContainerÚRevinfoUsabilityÚRevinfoUsabilityRatingÚprocess_legacy_crl_inputÚprocess_legacy_ocsp_inputÚsort_freshest_firstc                   ó®   — e Zd ZdZ ej        ¦   «         Z	  ej        ¦   «         Z	  ej        ¦   «         Z	  ej        ¦   «         Z		 e
defd„¦   «         ZdS )r   zz
    Description of whether a piece of revocation information
    is considered usable in the circumstances provided.
    Úreturnc                 ó6   — | t           j        t           j        fv S )zs
        Boolean indicating whether the assigned rating corresponds to
        a "fresh" judgment in AdES.
        )r   ÚOKÚTOO_NEW©Úselfs    úu/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko_certvalidator/revinfo/archival.pyÚusable_adesz"RevinfoUsabilityRating.usable_ades=   s"   € ð Ý"Ô%Ý"Ô*ð
ð 
ð 	
ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautor   ÚSTALEr   ÚUNCLEARÚpropertyÚboolr"   © r#   r!   r   r      s•   € € € € € ðð ð
 
ˆŒ‰Œ€Bðð ˆDŒI‰KŒK€Eðð ˆdŒi‰kŒk€Gðð ˆdŒi‰kŒk€Gðð
 ð	
˜Tð 	
ð 	
ð 	
ñ „Xð	
ð 	
ð 	
r#   r   T)Úfrozenc                   óV   — e Zd ZU dZeed<   	 dZee         ed<   	 dZ	ee         ed<   dS )r   z`
    Usability rating and cutoff date for a particular piece of
    revocation information.
    ÚratingNÚlast_usable_atÚcompared_to)
r$   r%   r&   r'   r   Ú__annotations__r2   r   r   r3   r.   r#   r!   r   r   J   sf   € € € € € € ðð ð
 #Ð"Ð"Ñ"ðð *.€N�H˜XÔ&Ð-Ð-Ñ-ðð
 '+€K�˜(Ô#Ð*Ð*Ñ*ðð r#   r   c                   óX   — e Zd ZdZdededefd„Zede	e
j                 fd„¦   «         ZdS )r   z<
    A container for a piece of revocation information.
    ÚpolicyÚtiming_paramsr   c                 ó   — t           ‚)af  
        Assess the usability of the revocation information given a
        revocation information trust policy and timing parameters.

        :param policy:
            The revocation information trust policy.
        :param timing_params:
            Timing-related information.
        :return:
            A :class:`.RevinfoUsability` judgment.
        ©ÚNotImplementedError)r    r6   r7   s      r!   Ú	usable_atzRevinfoContainer.usable_atg   s
   € õ "Ð!r#   c                 ó   — t           ‚)zŠ
        Extract the signature mechanism used to guarantee the authenticity
        of the revocation information, if applicable.
        r9   r   s    r!   Úrevinfo_sig_mechanism_usedz+RevinfoContainer.revinfo_sig_mechanism_usedw   s
   € õ "Ð!r#   N)r$   r%   r&   r'   r   r   r   r;   r,   r   r
   ÚSignedDigestAlgorithmr=   r.   r#   r!   r   r   b   sz   € € € € € ðð ð"Ø(ð"Ø9Oð"à	ð"ð "ð "ð "ð  ð"à	�%Ô-Ô	.ð"ð "ð "ñ „Xð"ð "ð "r#   r   ÚRevInfoType)ÚboundÚlstr   c                 ó<   — dt           fd„}t          | |d¬¦  «        S )aV  
    Sort a list of revocation information containers in freshest-first order.

    Revocation information that does not have a well-defined issuance date
    will be grouped at the end.

    :param lst:
        A list of :class:`.RevinfoContainer` objects of the same type.
    :return:
        The same list sorted from fresh to stale.
    Ú	containerc                 ó   — | j         }|d u|fS ©N)Úissuance_date)rC   Údts     r!   Ú_keyz!sort_freshest_first.<locals>._key’   s   € ØÔ$ˆð ˜ˆ~˜rÐ!Ð!r#   T)ÚkeyÚreverse)r   Úsorted)rA   rH   s     r!   r   r   …   s5   € ð"Õ(ð "ð "ð "ð "õ �#˜4¨Ð.Ñ.Ô.Ð.r#   c                 óZ   — | j         }|€|�||k    r||z
  }|�t          |¦  «        |z   }|S rE   )Ú	freshnessÚabs)r6   Úthis_updateÚnext_updateÚtime_toleranceÚfreshness_deltas        r!   Ú_freshness_deltarS   Ÿ   sH   € ØÔ&€OØÐØÐ" {°kÒ'AÐ'AØ)¨KÑ7ˆOØÐ"Ý˜oÑ.Ô.°Ñ?ˆØÐr#   rO   rP   r6   r7   c                 óH  — | €t          t          j        ¦  «        S |j        }|j        }|j        t          j        k    rct          || ||¦  «        }|€t          t          j        ¦  «        S |j	        }| ||z   |z
  k     r"t          t          j
        || |z
  |z   ¬¦  «        S né|j        t          j        k    rXt          || ||¦  «        }|€t          t          j        ¦  «        S | |z   |z   }||k    rt          t          j
        ||¬¦  «        S n||j        t          j        k    r`|€
| t          z   }|j        }	|	s"|| |z
  k     rt          t          j        ¦  «        S |||z   k    rt          t          j
        |||z   ¬¦  «        S nt           ‚t          t          j        ¦  «        S )N)r3   r2   )r   r   r+   Úvalidation_timerQ   Úfreshness_req_typer   ÚTIME_AFTER_SIGNATURErS   Úbest_signature_timer*   ÚMAX_DIFF_REVOCATION_VALIDATIONÚDEFAULTr   Úretroactive_revinfor   r:   r   )
rO   rP   r6   r7   rU   rQ   rR   Úsignature_poe_timeÚcutoffÚretroactives
             r!   Ú_judge_revinfor_   ©   s  € ð ÐÝÕ 6Ô >Ñ?Ô?Ð?à#Ô3€OØ"Ô1€Nð Ô Õ$4Ô$IÒIÐIõ +Ø�K ¨nñ
ô 
ˆð Ð"Ý#Õ$:Ô$BÑCÔCÐCØ*Ô>ÐØ˜Ð+=Ñ=ÀÑNÒNÐNÝ#Ý&Ô,Ø.Ø*¨_Ñ<¸~ÑMðñ ô ð ð Oð 	Ô!ÝÔ:ò	;ð 	;õ +Ø�K ¨nñ
ô 
ˆð Ð"Ý#Õ$:Ô$BÑCÔCÐCð
 ˜Ñ.°Ñ?ˆØ˜VÒ#Ð#Ý#Ý&Ô,Ø+Ø%ðñ ô ð ð $ð 
Ô	"Õ&6Ô&>Ò	>Ð	>ð Ðð &Õ(KÑKˆKàÔ0ˆàð 	D˜°¸~Ñ1MÒMÐMÝ#Õ$:Ô$BÑCÔCÐCØ˜[¨>Ñ9Ò9Ð9Ý#Ý&Ô,Ø+Ø*¨^Ñ;ðñ ô ð ð :õ "Ð!ÝÕ2Ô5Ñ6Ô6Ð6r#   c                 ó|   — | d         j         }|dk    rd S | d         }|d         j         dk    rd S |d         j        S )NÚresponse_statusÚ
successfulÚresponse_bytesÚresponse_typeÚbasic_ocsp_responseÚresponse)ÚnativeÚparsed)Úocsp_responseÚstatusrc   s      r!   Ú_extract_basic_ocsp_responserk   ü   sT   € ð Ð,Ô-Ô4€FØ�ÒÐØˆtà"Ð#3Ô4€NØ�oÔ&Ô-Ð1FÒFÐFØˆtà˜*Ô%Ô,Ð,r#   c                   ó"  — e Zd ZU dZej        ed<   	 dZeed<   	 e	dej        de
d          fd„¦   «         Zedee         fd„¦   «         Zd	ed
edefd„Zdeej                 fd„Zdeej                 fd„Zedeej                 fd„¦   «         ZdS )r   z)
    Container for an OCSP response.
    Úocsp_response_datar   Úindexri   r   c                 ó–   ‡— t          ‰¦  «        }|€g S |d         }ˆfd„t          t          |d         ¦  «        ¦  «        D ¦   «         S )aè  
        Turn an OCSP response object into one or more :class:`.OCSPContainer`
        objects. If a :class:`.OCSPContainer` contains more than one
        ``SingleResponse``, then the same OCSP response will be duplicated
        into multiple containers, each with a different ``index`` value.

        :param ocsp_response:
            An OCSP response.
        :return:
            A list of :class:`.OCSPContainer` objects, one for each
            ``SingleResponse`` value.
        NÚtbs_response_datac                 ó2   •— g | ]}t          ‰|¬ ¦  «        ‘ŒS ))rm   rn   )r   )Ú.0Úixri   s     €r!   ú
<listcomp>z,OCSPContainer.load_multi.<locals>.<listcomp>2  s6   ø€ ð 
ð 
ð 
àõ ¨]À"ÐEÑEÔEð
ð 
ð 
r#   Ú	responses)rk   ÚrangeÚlen)Úclsri   re   Útbs_responses    `  r!   Ú
load_multizOCSPContainer.load_multi  si   ø€ õ" ;¸=ÑIÔIÐØÐ&ØˆIØ*Ð+>Ô?ˆð
ð 
ð 
ð 
å�C ¨[Ô 9Ñ:Ô:Ñ;Ô;ð
ñ 
ô 
ð 	
r#   c                 óL   — |                       ¦   «         }|€d S |d         j        S )NrO   )Úextract_single_responserg   )r    Úcert_responses     r!   rF   zOCSPContainer.issuance_date7  s,   € à×4Ò4Ñ6Ô6ˆØÐ Ø�4à˜]Ô+Ô2Ð2r#   r6   r7   c                 óº   — |                       ¦   «         }|€t          t          j        ¦  «        S |d         j        }|d         j        }t          ||||¬¦  «        S )NrO   rP   ©r6   r7   )r|   r   r   r+   rg   r_   )r    r6   r7   r}   rO   rP   s         r!   r;   zOCSPContainer.usable_at?  sj   € ð ×4Ò4Ñ6Ô6ˆØÐ Ý#Õ$:Ô$BÑCÔCÐCà# MÔ2Ô9ˆØ# MÔ2Ô9ˆÝØØØØ'ð	
ñ 
ô 
ð 	
r#   c                 ó*   — t          | j        ¦  «        S )zŽ
        Extract the ``BasicOCSPResponse``, assuming there is one (i.e.
        the OCSP response is a standard, non-error response).
        )rk   rm   r   s    r!   Úextract_basic_ocsp_responsez)OCSPContainer.extract_basic_ocsp_responseO  s   € õ ,¨DÔ,CÑDÔDÐDr#   c                 ó¨   — |                       ¦   «         }|€dS |d         }t          |d         ¦  «        | j        k    rdS |d         | j                 S )z^
        Extract the unique ``SingleResponse`` value identified by the
        index.
        Nrp   ru   )r�   rw   rn   )r    re   ry   s      r!   r|   z%OCSPContainer.extract_single_responseW  s]   € ð #×>Ò>Ñ@Ô@ÐØÐ&Ø�4Ø*Ð+>Ô?ˆåˆ|˜KÔ(Ñ)Ô)¨T¬ZÒ7Ð7Ø�4Ø˜KÔ(¨¬Ô4Ð4r#   c                 óB   — |                       ¦   «         }|€d n|d         S ©NÚsignature_algorithm)r�   )r    Ú
basic_resps     r!   r=   z(OCSPContainer.revinfo_sig_mechanism_usedf  s*   € ð ×5Ò5Ñ7Ô7ˆ
Ø!Ð)ˆtˆt¨zÐ:OÔ/PÐPr#   N)r$   r%   r&   r'   r   ÚOCSPResponser4   rn   ÚintÚclassmethodr   rz   r,   r   r   rF   r   r   r   r;   ÚBasicOCSPResponser�   ÚSingleResponser|   r
   r>   r=   r.   r#   r!   r   r     s\  € € € € € € ðð ð Ô)Ð)Ð)Ñ)ðð €Eˆ3€N€N�Nðð
 ð
Ø Ô-ð
à	ˆoÔ	ð
ð 
ð 
ñ „[ð
ð4 ð3˜x¨Ô1ð 3ð 3ð 3ñ „Xð3ð
Ø(ð
Ø9Oð
à	ð
ð 
ð 
ð 
ð E¨X°dÔ6LÔ-Mð Eð Eð Eð Eð5¨°$Ô2EÔ)Fð 5ð 5ð 5ð 5ð ðQà	�%Ô-Ô	.ðQð Qð Qñ „XðQð Qð Qr#   r   c                   óŒ   — e Zd ZU dZej        ed<   	 dedede	fd„Z
edee         fd„¦   «         Zedej        fd„¦   «         Zd	S )
r   z<
    Container for a certificate revocation list (CRL).
    Úcrl_datar6   r7   r   c                 óv   — | j         d         }|d         j        }|d         j        }t          ||||¬¦  «        S )NÚtbs_cert_listrO   rP   r   )r�   rg   r_   )r    r6   r7   r�   rO   rP   s         r!   r;   zCRLContainer.usable_aty  sJ   € ð œ oÔ6ˆØ# MÔ2Ô9ˆØ# MÔ2Ô9ˆÝØ˜¨VÀ=ð
ñ 
ô 
ð 	
r#   c                 ó6   — | j         d         }|d         j        S )Nr�   rO   )r�   rg   )r    r�   s     r!   rF   zCRLContainer.issuance_dateƒ  s   € àœ oÔ6ˆØ˜]Ô+Ô2Ð2r#   c                 ó   — | j         d         S r„   )r�   r   s    r!   r=   z'CRLContainer.revinfo_sig_mechanism_usedˆ  s   € àŒ}Ð2Ô3Ð3r#   N)r$   r%   r&   r'   r   ÚCertificateListr4   r   r   r   r;   r,   r   r   rF   r
   r>   r=   r.   r#   r!   r   r   n  s¸   € € € € € € ðð ð Ô!Ð!Ð!Ñ!ðð
Ø(ð
Ø9Oð
à	ð
ð 
ð 
ð 
ð ð3˜x¨Ô1ð 3ð 3ð 3ñ „Xð3ð ð4¨EÔ,Gð 4ð 4ð 4ñ „Xð4ð 4ð 4r#   r   Úcrlsc                 ój  — g }| D ]­}t          |t          ¦  «        rt          j                             |¦  «        }t          |t          j        ¦  «        rt          |¦  «        }t          |t
          ¦  «        r|                     |¦  «         ŒŠt          dt          |¦  «        j	        › �¦  «        ‚|S )zÓ
    Internal function to process legacy CRL data into one or more
    :class:`.CRLContainer`.

    :param crls:
        Legacy CRL input data.
    :return:
        A list of :class:`.CRLContainer` objects.
    zScrls must be a list of byte strings or asn1crypto.crl.CertificateList objects, not )
Ú
isinstanceÚbytesr   r’   Úloadr   ÚappendÚ	TypeErrorÚtyper$   )r“   Únew_crlsÚcrl_s      r!   r   r   ‘  s½   € ð €HØð ð ˆÝ�d�EÑ"Ô"ð 	2ÝÔ&×+Ò+¨DÑ1Ô1ˆDÝ�d�CÔ/Ñ0Ô0ð 	&Ý Ñ%Ô%ˆDÝ�d�LÑ)Ô)ð 	Ø�OŠO˜DÑ!Ô!Ð!Ð!åð-å˜D‘z”zÔ*ð-ð -ñô ð ð
 €Or#   Úocspsc                 ó¬  — g }| D ]Î}t          |t          ¦  «        rt          j                             |¦  «        }t          |t          j        ¦  «        r0t
                               |¦  «        }|                     |¦  «         Œ€t          |t
          ¦  «        r|                     |¦  «         Œ«t          dt          |¦  «        j        › �¦  «        ‚|S )zØ
    Internal function to process legacy OCSP data into one or more
    :class:`.OCSPContainer`.

    :param ocsps:
        Legacy OCSP input data.
    :return:
        A list of :class:`.OCSPContainer` objects.
    zRocsps must be a list of byte strings or asn1crypto.ocsp.OCSPResponse objects, not )r•   r–   r   r‡   r—   r   rz   Úextendr˜   r™   rš   r$   )r�   Ú	new_ocspsÚocsp_Úextrs       r!   r   r   ¯  sÝ   € ð €IØð ð ˆÝ�e�UÑ#Ô#ð 	2ÝÔ%×*Ò*¨5Ñ1Ô1ˆEÝ�e�TÔ.Ñ/Ô/ð 
	Ý ×+Ò+¨EÑ2Ô2ˆDØ×Ò˜TÑ"Ô"Ð"Ð"Ý˜�}Ñ-Ô-ð 	Ø×Ò˜UÑ#Ô#Ð#Ð#åð.å˜E‘{”{Ô+ð.ð .ñô ð ð
 Ðr#   )+Úabcr(   Údataclassesr   r   Útypingr   r   r   r   r	   Ú
asn1cryptor
   r   r   Úpyhanko_certvalidator.ltv.typesr   r   Ú!pyhanko_certvalidator.policy_declr   r   r   Ú__all__ÚEnumr   r   ÚABCr   r?   r   rS   r_   rŠ   rk   r   r   r–   r’   ÚLegacyCompatCRLr‡   ÚLegacyCompatOCSPr   r   r.   r#   r!   ú<module>r®      s†  ðØ 
€
€
€
Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð	ð 	ð 	€ð(
ð (
ð (
ð (
ð (
˜TœYñ (
ô (
ð (
ðV €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð."ð "ð "ð "ð "Ð*¨C¬Gñ "ô "ð "ð@ ˆg�mÐ+;Ð<Ñ<Ô<€ð/˜X kÔ2ð /°t¸KÔ7Hð /ð /ð /ð /ð4ð ð ðP7Ø˜(Ô#ðP7à˜(Ô#ðP7ð ðP7ð *ð	P7ð
 ðP7ð P7ð P7ð P7ðf-àˆdÔ$Ô%ð-ð -ð -ð -ð €�$ÐÑÔð_Qð _Qð _Qð _Qð _QÐ$ñ _Qô _Qñ Ôð_QðD €�$ÐÑÔð4ð 4ð 4ð 4ð 4Ð#ñ 4ô 4ñ Ôð4ð< ˜˜sÔ2°LÐ@ÔA€Ø˜ Ô 1°=Ð@ÔAÐ ðØ
�?Ô
#ðà	ˆ,Ôðð ð ð ð<ØÐ$Ô%ðà	ˆ-Ôðð ð ð ð ð r#   