§
    ¥”jÀM  ã                   óª  — d Z ddlZddlZddlmZ ddlmZmZ ddlmZm	Z	 ddl
mZmZ ddlmZ g d	¢Z eg d
¢¦  «        Z	  ed¬¦  «        Z	  ed¬¦  «         G d„ d¦  «        ¦   «         Zej         G d„ dej        ¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z eej        ej        ¦  «        Z	  eej        ej        ¬¦  «        Z	 e eej        ej        ¦  «         eej        ej        ¦  «        edœZ	 ej         G d„ dej        ¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z dee!         dee!         dee!         fd„Z" ed¬¦  «         G d„ d ¦  «        ¦   «         Z# ed¬¦  «         G d!„ d"¦  «        ¦   «         Z$ G d#„ d$ej%        ¦  «        Z& G d%„ d&e&¦  «        Z' G d'„ d(e&¦  «        Z(dS ))z
.. versionadded:: 0.20.0
é    N)Ú	dataclass)ÚdatetimeÚ	timedelta)Ú	FrozenSetÚOptional)ÚalgosÚkeysé   )ÚPKIXSubtrees)ÚDEFAULT_WEAK_HASH_ALGOSÚNO_REVOCATIONÚREQUIRE_REVINFOÚAcceptAllAlgorithmsÚAlgorithmUsageConstraintÚAlgorithmUsagePolicyÚCertRevTrustPolicyÚDisallowWeakAlgorithmsPolicyÚFreshnessReqTypeÚNonRevokedStatusAssertionÚPKIXValidationParamsÚRevocationCheckingPolicyÚRevocationCheckingRule)Úmd2Úmd5Úsha1é   )ÚminutesT)Úfrozenc                   ó*   — e Zd ZU dZeed<   	 eed<   dS )r   zG
    Assert that a certificate was not revoked at some given date.
    Úcert_sha256ÚatN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚbytesÚ__annotations__r   © ó    úp/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko_certvalidator/policy_decl.pyr   r   -   s>   € € € € € € ðð ð ÐÐÑðð 	€L€L�Lðð r)   r   c                   óä   — e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ		 dZ
	 ed	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fd„¦   «         Zed	efd„¦   «         ZdS )r   zg
    Rules determining in what circumstances revocation data has to be checked,
    and what kind.
    ÚclrcheckÚ	ocspcheckÚ	bothcheckÚeithercheckÚnocheckÚifdeclaredcheckÚifdeclaredsoftcheckÚreturnc                 óL   — | t           j        t           j        t           j        fvS ©N)r   ÚCHECK_IF_DECLAREDÚCHECK_IF_DECLARED_SOFTÚNO_CHECK©Úselfs    r*   ÚstrictzRevocationCheckingRule.strict{   s(   € ð Ý"Ô4Ý"Ô9Ý"Ô+ð
ð 
ð 	
r)   c                 ó6   — | t           j        t           j        fv S r5   )r   r7   r8   r9   s    r*   ÚtolerantzRevocationCheckingRule.tolerant„   s    € àÝ"Ô9Ý"Ô+ð
ð 
ð 	
r)   c                 ó6   — | t           j        t           j        fv S r5   )r   ÚCRL_REQUIREDÚCRL_AND_OCSP_REQUIREDr9   s    r*   Úcrl_mandatoryz$RevocationCheckingRule.crl_mandatory‹   s    € àÝ"Ô/Ý"Ô8ð
ð 
ð 	
r)   c                 ó6   — | t           j        t           j        fvS r5   )r   r8   ÚOCSP_REQUIREDr9   s    r*   Úcrl_relevantz#RevocationCheckingRule.crl_relevant’   s    € àÝ"Ô+Ý"Ô0ð
ð 
ð 	
r)   c                 ó6   — | t           j        t           j        fv S r5   )r   rC   r@   r9   s    r*   Úocsp_mandatoryz%RevocationCheckingRule.ocsp_mandatory™   s    € àÝ"Ô0Ý"Ô8ð
ð 
ð 	
r)   c                 ó6   — | t           j        t           j        fvS r5   )r   r8   r?   r9   s    r*   Úocsp_relevantz$RevocationCheckingRule.ocsp_relevant    s    € àÝ"Ô+Ý"Ô/ð
ð 
ð 	
r)   N)r"   r#   r$   r%   r?   rC   r@   ÚCRL_OR_OCSP_REQUIREDr8   r6   r7   ÚpropertyÚboolr;   r=   rA   rD   rF   rH   r(   r)   r*   r   r   >   s`  € € € € € ðð ð €Lðð  €Mðð (Ððð )Ððð €Hðð *Ðð
ð 3Ððð ð
˜ð 
ð 
ð 
ñ „Xð
ð ð
˜$ð 
ð 
ð 
ñ „Xð
ð ð
˜tð 
ð 
ð 
ñ „Xð
ð ð
˜dð 
ð 
ð 
ñ „Xð
ð ð
 ð 
ð 
ð 
ñ „Xð
ð ð
˜tð 
ð 
ð 
ñ „Xð
ð 
ð 
r)   r   c                   ód   — e Zd ZU dZeed<   	 eed<   	 edefd„¦   «         Ze	de
fd„¦   «         ZdS )	r   zu
    Class describing a revocation checking policy
    based on the types defined in the ETSI TS 119 172 series.
    Úee_certificate_ruleÚintermediate_ca_cert_ruleÚpolicyc                 ó`   — 	 t           |         S # t          $ r t          d|› d�¦  «        ‚w xY w)Nú'z ' is not a valid revocation mode)ÚLEGACY_POLICY_MAPÚKeyErrorÚ
ValueError)ÚclsrO   s     r*   Úfrom_legacyz$RevocationCheckingPolicy.from_legacy¹   sL   € ð	KÝ$ VÔ,Ð,øÝð 	Kð 	Kð 	KÝÐI ÐIÐIÐIÑJÔJÐJð	Køøøs   ‚ �-r3   c                 ó4   — | j         j        o| j         j         S r5   )rM   r=   r9   s    r*   Ú	essentialz"RevocationCheckingPolicy.essentialÀ   s%   € ð Ô$Ô-ð 2ØÔ(Ô1ð
ð 	
r)   N)r"   r#   r$   r%   r   r'   ÚclassmethodÚstrrV   rJ   rK   rX   r(   r)   r*   r   r   ¨   s™   € € € € € € ðð ð
 0Ð/Ð/Ñ/ðð  6Ð5Ð5Ñ5ðð ðK ð Kð Kð Kñ „[ðKð ð
˜4ð 
ð 
ð 
ñ „Xð
ð 
ð 
r)   r   )rM   rN   )Únonez	soft-failz	hard-failÚrequirec                   óp   — e Zd ZdZ ej        ¦   «         Z	  ej        ¦   «         Z	  ej        ¦   «         ZdS )r   z%
    Freshness requirement type.
    N)	r"   r#   r$   r%   ÚenumÚautoÚDEFAULTÚMAX_DIFF_REVOCATION_VALIDATIONÚTIME_AFTER_SIGNATUREr(   r)   r*   r   r   í   sW   € € € € € ðð ð ˆdŒi‰kŒk€Gðð &/ T¤Y¡[¤[Ð"ðð %˜4œ9™;œ;Ððð r)   r   c                   ó€   — e Zd ZU dZeed<   	 dZee         ed<   	 e	j
        Ze	ed<   	 dZee         ed<   	 dZeed<   dS )	r   zz
    Class describing conditions for trusting revocation info.
    Based on CertificateRevTrust in ETSI TS 119 172-3.
    Úrevocation_checking_policyNÚ	freshnessÚfreshness_req_typeÚ!expected_post_expiry_revinfo_timeFÚretroactive_revinfo)r"   r#   r$   r%   r   r'   re   r   r   r   r`   rf   rg   rh   rK   r(   r)   r*   r   r   	  sœ   € € € € € € ðð ð
 !9Ð8Ð8Ñ8ðð &*€Iˆx˜	Ô"Ð)Ð)Ñ)ðð ,<Ô+CÐÐ(ÐCÐCÑCðð >BÐ% x°	Ô':ÐAÐAÑAðð
 !&Ð˜Ð%Ð%Ñ%ðð r)   r   Úa_polsÚb_polsr3   c                 óT   — d| v }d|v }|r|rt          dg¦  «        S |r|S |r|S || z  S )zí
    Intersect two sets of policies, taking into account the special
    'any_policy'.

    :param a_pols:
        A set of policies.
    :param b_pols:
        Another set of policies.
    :return:
        The intersection of both.
    Ú
any_policy)Ú	frozenset)ri   rj   Úa_anyÚb_anys       r*   Úintersect_policy_setsrp   8  s[   € ð ˜FÐ"€EØ˜FÐ"€Eàð �ð Ý˜,˜Ñ(Ô(Ð(Ø	ð ØˆØ	ð Øˆà˜‰Ðr)   c                   ó¤   — e Zd ZU  edg¦  «        Zeed<   	 dZeed<   	 dZeed<   	 dZ	eed<   	 dZ
ee         ed<   	 dZee         ed	<   	 dd„ZdS )r   rl   Úuser_initial_policy_setFÚinitial_policy_mapping_inhibitÚinitial_explicit_policyÚinitial_any_policy_inhibitNÚinitial_permitted_subtreesÚinitial_excluded_subtreesÚotherr3   c                 óÞ   — d| j         v r|j         }n d|j         v r| j         }n|j         | j         z  }| j        o|j        }| j        o|j        }| j        o|j        }t	          ||||¬¦  «        S )aa  
        Combine the conditions of these PKIX validation params with another
        set of parameters, producing the most lenient set of parameters that
        is stricter than both inputs.

        :param other:
            Another set of PKIX validation parameters.
        :return:
            A combined set of PKIX validation parameters.
        rl   )rr   ru   rt   rs   )rr   ru   rt   rs   r   )r:   rx   Úinit_policy_setru   rt   rs   s         r*   ÚmergezPKIXValidationParams.mergeœ  s°   € ð ˜4Ô7Ð7Ð7Ø#Ô;ˆOˆOØ˜UÔ:Ð:Ð:Ø"Ô:ˆOˆOð Ô-°Ô0LÑLð ð
 Ô+ÐP°Ô0Pð 	#ð Ô(ÐJ¨UÔ-Jð 	 ð Ô/ð 5ØÔ4ð 	'õ $Ø$3Ø'AØ$;Ø+Ið	
ñ 
ô 
ð 	
r)   )rx   r   r3   r   )r"   r#   r$   rm   rr   r'   rs   rK   rt   ru   rv   r   r   rw   r{   r(   r)   r*   r   r   T  sÎ   € € € € € € à)2¨°L°>Ñ)BÔ)BÐ˜YÐBÐBÑBð
ð ,1Ð" DÐ0Ð0Ñ0ðð %*Ð˜TÐ)Ð)Ñ)ðð" (-Ð Ð,Ð,Ñ,ðð :>Ð ¨Ô 6Ð=Ð=Ñ=ðð 9=Ð˜x¨Ô5Ð<Ð<Ñ<ðð$
ð $
ð $
ð $
ð $
ð $
r)   r   c                   ó^   — e Zd ZU dZeed<   	 dZee         ed<   	 dZ	ee
         ed<   	 d„ ZdS )r   zh
    Expression of a constraint on the usage of an algorithm (possibly with
    parameter choices).
    ÚallowedNÚnot_allowed_afterÚfailure_reasonc                 ó   — | j         S r5   ©r}   r9   s    r*   Ú__bool__z!AlgorithmUsageConstraint.__bool__Ú  s
   € ØŒ|Ðr)   )r"   r#   r$   r%   rK   r'   r~   r   r   r   rZ   r‚   r(   r)   r*   r   r   Ã  sw   € € € € € € ðð ð
 €M€M�Mðð -1Ð�x Ô)Ð0Ð0Ñ0ðð
 %)€N�H˜S”MÐ(Ð(Ñ(ððð ð ð ð r)   r   c                   ó€   — e Zd ZdZdej        dee         defd„Z	dej
        dee         deej                 defd„ZdS )	r   zR
    Abstract interface defining a usage policy for cryptographic algorithms.
    ÚalgoÚmomentr3   c                 ó   — t           ‚)aÄ  
        Determine if the indicated digest algorithm can be used at the point
        in time indicated.

        :param algo:
            A digest algorithm description in ASN.1 form.
        :param moment:
            The point in time at which the algorithm should be usable.
            If ``None``, then the returned judgment applies at all times.
        :return:
            A :class:`.AlgorithmUsageConstraint` expressing the judgment.
        ©ÚNotImplementedError©r:   r„   r…   s      r*   Údigest_algorithm_allowedz-AlgorithmUsagePolicy.digest_algorithm_allowedã  s
   € õ "Ð!r)   Ú
public_keyc                 ó   — t           ‚)a'  
        Determine if the indicated signature algorithm (including the associated
        digest function and any parameters, if applicable) can be used at the
        point in time indicated.

        :param algo:
            A signature mechanism description in ASN.1 form.
        :param moment:
            The point in time at which the algorithm should be usable.
            If ``None``, then the returned judgment applies at all times.
        :param public_key:
            The public key associated with the operation, if available.

            .. note::
                This parameter can be used to enforce key size limits or
                to filter out keys with known structural weaknesses.
        :return:
            A :class:`.AlgorithmUsageConstraint` expressing the judgment.
        r‡   ©r:   r„   r…   r‹   s       r*   Úsignature_algorithm_allowedz0AlgorithmUsagePolicy.signature_algorithm_allowedô  s
   € õ2 "Ð!r)   N)r"   r#   r$   r%   r   ÚDigestAlgorithmr   r   r   rŠ   ÚSignedDigestAlgorithmr	   ÚPublicKeyInforŽ   r(   r)   r*   r   r   Þ  sœ   € € € € € ðð ð"ØÔ)ð"Ø3;¸HÔ3Eð"à	!ð"ð "ð "ð "ð""àÔ)ð"ð ˜Ô"ð"ð ˜TÔ/Ô0ð	"ð
 
"ð"ð "ð "ð "ð "ð "r)   r   c                   ó    — e Zd ZdZe e¦   «         ddfd„Zdej        de	e
         defd„Zdej        de	e
         d	e	ej                 defd
„ZdS )r   aª  
    Primitive usage policy that forbids a list of user-specified
    "weak" algorithms and allows everything else.
    It also ignores the time parameter completely.

    .. note::
        This denial-based strategy is supplied to provide a backwards-compatible
        default.
        In many scenarios, an explicit allow-based strategy is more appropriate.
        Users with specific security requirements are encouraged to implement
        :class:`.AlgorithmUsagePolicy` themselves.

    :param weak_hash_algos:
        The list of digest algorithms considered weak.
        Defaults to :const:`.DEFAULT_WEAK_HASH_ALGOS`.
    :param weak_signature_algos:
        The list of digest algorithms considered weak.
        Defaults to the empty set.
    :param rsa_key_size_threshold:
        The key length threshold for RSA keys, in bits.
    :param dsa_key_size_threshold:
        The key length threshold for DSA keys, in bits.
    i   ix  c                 ó>   — || _         || _        || _        || _        d S r5   )Úweak_hash_algosÚweak_signature_algosÚrsa_key_size_thresholdÚdsa_key_size_threshold)r:   r”   r•   r–   r—   s        r*   Ú__init__z%DisallowWeakAlgorithmsPolicy.__init__)  s*   € ð  /ˆÔØ$8ˆÔ!Ø&<ˆÔ#Ø&<ˆÔ#Ð#Ð#r)   r„   r…   r3   c                 óD   — t          |d         j        | j        v¦  «        S )NÚ	algorithm)r   Únativer”   r‰   s      r*   rŠ   z5DisallowWeakAlgorithmsPolicy.digest_algorithm_allowed6  s)   € õ (Ø�ÔÔ$¨DÔ,@Ð@ñ
ô 
ð 	
r)   r‹   c           	      óT  — 	 |j         }n# t          $ r |d         j        }Y nw xY w|| j        v}|                     d¦  «        }|dk    }|rT|�R|s|rN|j        }d }	|r|| j        k     r| j        }	n|r|| j        k     r| j        }	|	�t          dd|› d|› d|	› �¬¦  «        S 	 |j	        }
n# t          $ r d }
Y nw xY w|r\|
�Z|  
                    t          j        d|j	        i¦  «        |¦  «        }|s)t          dd	|› d
|d         j        › d�|j        ¬¦  «        S t          |¬¦  «        S )Nrš   ÚrsaÚdsaFz	Key size z for algorithm z- is considered too small; policy mandates >= )r}   r   zDigest algorithm z< is not allowed, which disqualifies the signature mechanism z	 as well.)r}   r   r~   r�   )Úsignature_algorT   r›   r•   Ú
startswithÚbit_sizer–   r—   r   Ú	hash_algorŠ   r   r�   r~   )r:   r„   r…   r‹   Ú	algo_nameÚalgo_allowedÚis_rsaÚis_dsaÚkey_szÚfailed_thresholdr¢   Údigest_alloweds               r*   rŽ   z8DisallowWeakAlgorithmsPolicy.signature_algorithm_allowed=  sñ  € ð	1ØÔ+ˆIˆIøÝð 	1ð 	1ð 	1Ø˜[Ô)Ô0ˆIˆIˆIð	1øøøà ¨Ô(AÐAˆØ×%Ò% eÑ,Ô,ˆØ˜eÒ#ˆØð 	˜JÐ2¸Ð2À&Ð2ØÔ(ˆFØ#ÐØð ?˜& 4Ô#>Ò>Ð>Ø#'Ô#>Ð Ð Øð ?˜F TÔ%@Ò@Ð@Ø#'Ô#>Ð ØÐ+Ý/Ø!ðA Fð Að A¸9ð Að Aà.>ðAð Aðñ ô ð ð	ØœˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøàð 	˜IÐ1Ø!×:Ò:ÝÔ% {°D´NÐ&CÑDÔDÀfñô ˆNð "ð 	Ý/Ø!ð?¨Nð ?ð ?à Ô,Ô3ð?ð ?ð ?ð '5Ô&Fðñ ô ð õ (°Ð=Ñ=Ô=Ð=s   ‚
 Š$£$Â"B* Â*B9Â8B9N)r"   r#   r$   r%   r   rm   r˜   r   r�   r   r   r   rŠ   r�   r	   r‘   rŽ   r(   r)   r*   r   r     sÄ   € € € € € ðð ð4 0Ø&˜Y™[œ[Ø#à#ð=ð =ð =ð =ð
ØÔ)ð
Ø3;¸HÔ3Eð
à	!ð
ð 
ð 
ð 
ð/>àÔ)ð/>ð ˜Ô"ð/>ð ˜TÔ/Ô0ð	/>ð
 
"ð/>ð />ð />ð />ð />ð />r)   r   c                   ó|   — e Zd Zdej        dee         defd„Zdej	        dee         dee
j                 defd„ZdS )r   r„   r…   r3   c                 ó"   — t          d¬¦  «        S ©NTr�   ©r   r‰   s      r*   rŠ   z,AcceptAllAlgorithms.digest_algorithm_allowedp  s   € õ (°Ð5Ñ5Ô5Ð5r)   r‹   c                 ó"   — t          d¬¦  «        S r¬   r­   r�   s       r*   rŽ   z/AcceptAllAlgorithms.signature_algorithm_allowedu  s   € õ (°Ð5Ñ5Ô5Ð5r)   N)r"   r#   r$   r   r�   r   r   r   rŠ   r�   r	   r‘   rŽ   r(   r)   r*   r   r   o  s’   € € € € € ð6ØÔ)ð6Ø3;¸HÔ3Eð6à	!ð6ð 6ð 6ð 6ð
6àÔ)ð6ð ˜Ô"ð6ð ˜TÔ/Ô0ð	6ð
 
"ð6ð 6ð 6ð 6ð 6ð 6r)   r   ))r%   Úabcr^   Údataclassesr   r   r   Útypingr   r   Ú
asn1cryptor   r	   Ú
name_treesr   Ú__all__rm   r   Ú#FRESHNESS_FALLBACK_VALIDITY_DEFAULTr   ÚuniqueÚEnumr   r   rI   r   r8   r   r7   r6   rR   r   r   rZ   rp   r   r   ÚABCr   r   r   r(   r)   r*   ú<module>r¹      s  ððð ð €
€
€
Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $ðð ð €ð" $˜)Ð$:Ð$:Ð$:Ñ;Ô;Ð ðð '0 i¸Ð&;Ñ&;Ô&;Ð #ðð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð  „ðf
ð f
ð f
ð f
ð f
˜TœYñ f
ô f
ñ „ðf
ðR €�$ÐÑÔð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ Ôð
ð> +Ð*ØÔ/ØÔ/ñô €ðð )Ð(Ø.Ô7Ø4Ô=ðñ ô €ðð Ø)Ð)ØÔ5ØÔ5ñô ð *Ð)ØÔ0ØÔ0ñô ð ðð Ð ðð „ðð ð ð ð �t”yñ ô ñ „ðð6 €�$ÐÑÔð+ð +ð +ð +ð +ñ +ô +ñ Ôð+ð\Ø�cŒNðØ$-¨c¤Nðàˆs„^ðð ð ð ð8 €�$ÐÑÔðk
ð k
ð k
ð k
ð k
ñ k
ô k
ñ Ôðk
ð\ €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð4/"ð /"ð /"ð /"ð /"˜3œ7ñ /"ô /"ð /"ðd\>ð \>ð \>ð \>ð \>Ð#7ñ \>ô \>ð \>ð~6ð 6ð 6ð 6ð 6Ð.ñ 6ô 6ð 6ð 6ð 6r)   