§
    ¥”j+   ã                   ó¦   — d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ dededefd	„Z ed
¬¦  «         G d„ de	¦  «        ¦   «         ZdS )é    )Ú	dataclass)ÚIterableÚOptionalÚSet)Úx509)ÚConfigurableMixinÚprocess_bit_string_flagsÚprocess_oids)ÚInvalidCertificateErrorÚrequiredÚpresentÚneed_allc                 ó6   — |r| |z
   S t          | |z  ¦  «        S ©N)Úbool)r   r   r   s      úo/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/sign/validation/settings.pyÚ_match_usagesr      s-   € Øð (Ø˜wÑ&Ð'Ð'õ �H˜wÑ&Ñ'Ô'Ð'ó    T)Úfrozenc                   óD  ‡ — e Zd ZU dZdZeee                  ed<   	 dZ	eee                  ed<   	 dZ
eee                  ed<   	 dZeed<   	 dZeed	<   	 	 	 ddej        dee         dee         fd„Zd„ Zdee         fd„Zd„ Zdee         fd„Zeˆ fd„¦   «         Zˆ xZS )ÚKeyUsageConstraintsa5  
    Convenience class to pass around key usage requirements and validate them.
    Intended to be flexible enough to handle both PKIX and ISO 32000 certificate
    seed value constraint semantics.

    .. versionchanged:: 0.6.0
        Bring extended key usage semantics in line with :rfc:`5280` (PKIX).
    NÚ	key_usageÚkey_usage_forbiddenÚextd_key_usageTÚ explicit_extd_key_usage_requiredFÚmatch_all_key_usages© ÚcertÚextra_asserted_key_usagesÚextra_asserted_extd_key_usagesc                 óª   — |                       |j        t          |¦  «        ¬¦  «         |                      |j        t          |¦  «        ¬¦  «         d S )N)Úextra)Ú_validate_key_usage_extensionÚkey_usage_valueÚsetÚ"_validate_extd_key_usage_extensionÚextended_key_usage_value)Úselfr   r   r    s       r   ÚvalidatezKeyUsageConstraints.validatee   sm   € ð 	×*Ò*ØÔ ­Ð,EÑ(FÔ(Fð 	+ñ 	
ô 	
ð 	
ð 	×/Ò/ØÔ)ÝÐ4Ñ5Ô5ð 	0ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó~   — |�t          |j        ¦  «        nt          ¦   «         }|                      ||z  ¦  «         d S r   )r%   ÚnativeÚvalidate_asserted_key_usage)r(   Úkey_usage_extension_valuer"   Úcert_kus       r   r#   z1KeyUsageConstraints._validate_key_usage_extensions   sJ   € ð )Ð4õ Ð)Ô0Ñ1Ô1Ð1å‘”ð 	ð
 	×(Ò(¨°5©Ñ9Ô9Ð9Ð9Ð9r   Úasserted_key_usagesc                 ó˜  — | j         sd S t          | j         pd¦  «        }t          | j        pd¦  «        }||z  }|r7t          d„ |¦  «        }t	          dd                     |¦  «        › d�¦  «        ‚| j        }t          |||¦  «        s>t          d„ |¦  «        }t	          d|rdnd	› d
d                     |¦  «        › d�¦  «        ‚d S )Nr   c                 ó.   — |                       dd¦  «        S ©NÚ_ú ©Úreplace©Úss    r   ú<lambda>zAKeyUsageConstraints.validate_asserted_key_usage.<locals>.<lambda>…   ó   €  a§i¢i°°SÑ&9Ô&9€ r   zBThe active key usage policy explicitly bans certificates used for ú, ú.c                 ó.   — |                       dd¦  «        S r2   r5   r7   s    r   r9   zAKeyUsageConstraints.validate_asserted_key_usage.<locals>.<lambda>Ž   r:   r   z%The active key usage policy requires Ú zat least one of zthe key usage extensions z to be present.)r   r%   r   Úmapr   Újoinr   r   )r(   r/   r   r   Úforbidden_kuÚ	rephrasedÚneed_all_kus          r   r,   z/KeyUsageConstraints.validate_asserted_key_usage|   s$  € ØŒ~ð 	ØˆFå˜œÐ,¨"Ñ-Ô-ˆ	Ý! $Ô":Ð"@¸bÑAÔAÐà*Ð-@Ñ@ˆØð 	ÝÐ9Ð9¸<ÑHÔHˆIÝ)ð4Ø ŸIšI iÑ0Ô0ð4ð 4ð 4ñô ð ð Ô/ˆÝ˜YÐ(;¸[ÑIÔIð 	ÝÐ9Ð9¸9ÑEÔEˆIÝ)ðJØ$Ð<�2�2Ð*<ðJð Jà$(§I¢I¨iÑ$8Ô$8ðJð Jð Jñô ð ð	ð 	r   c                 ó†   — |d u}|rt          |j        ¦  «        nt          ¦   «         }|                      ||z  ¦  «         d S r   )r%   r+   Ú$validate_asserted_extended_key_usage)r(   Úeku_extension_valuer"   Úhas_extd_key_usage_extÚcert_ekus        r   r&   z6KeyUsageConstraints._validate_extd_key_usage_extension•   sP   € à!4¸DÐ!@Ðà/EÐP�CÐ#Ô*Ñ+Ô+Ð+Í3É5Ì5ð 	ð 	×1Ò1°(¸UÑ2BÑCÔCÐCÐCÐCr   c                 ó8  — | j         €d S |s| j        rt          d¦  «        ‚d S d|v r	| j        sd S t          | j         pd¦  «        }t	          ||d¬¦  «        sA|r+t          d„ |¦  «        }dd                     |¦  «        › d	�}nd
}t          d|› �¦  «        ‚d S )NzEThe active key usage policy requires an extended key usage extension.Úany_extended_key_usager   F)r   c                 ó.   — |                       dd¦  «        S r2   r5   r7   s    r   r9   zJKeyUsageConstraints.validate_asserted_extended_key_usage.<locals>.<lambda>·   s   € ¨!¯)ª)°C¸Ñ*=Ô*=€ r   zRelevant key purposes are r;   r<   z,There are no acceptable extended key usages.zfThe extended key usages for which this certificate is valid do not match the active key usage policy. )r   r   r   r%   r   r?   r@   )r(   r/   r   rB   Úok_lists        r   rE   z8KeyUsageConstraints.validate_asserted_extended_key_usage�   s	  € ð ÔÐ&ØˆFà"ð 	ØÔ4ð Ý-ð+ñô ð ð ˆFð %Ð(;Ð;Ð;ØÔ9ð <ð ˆFå˜TÔ0Ð6°BÑ7Ô7ˆåØÐ/¸%ð
ñ 
ô 
ð 	ð ð IÝÐ =Ð =¸~ÑNÔN�	ØN°t·y²yÀÑ7KÔ7KÐNÐNÐN��àH�Ý)ðGØ=DðGð Gñô ð ð	ð 	r   c                 óŒ  •— t          ¦   «                              |¦  «         dD ]Y}|                     |d ¦  «        }|�?t          t	          t
          j        ||                     dd¦  «        ¦  «        ¦  «        ||<   ŒZ|                     dd ¦  «        }|�-t          t          t
          j	        |d¦  «        ¦  «        |d<   d S d S )N)r   r   r3   ú-r   zextd-key-usage)
ÚsuperÚprocess_entriesÚgetr%   r	   r   ÚKeyUsager6   r
   ÚKeyPurposeId)ÚclsÚconfig_dictÚkey_usage_settÚaffected_flagsr   Ú	__class__s        €r   rP   z#KeyUsageConstraints.process_entriesÀ   sÚ   ø€ å‰Œ×Ò Ñ,Ô,Ð,ð Cð 		ð 		ˆNØ(Ÿ_š_¨^¸TÑBÔBˆNØÐ)Ý.1Ý,ÝœØ&Ø&×.Ò.¨s°CÑ8Ô8ñô ñ/ô /�˜NÑ+øð %ŸšÐ)9¸4Ñ@Ô@ˆØÐ%Ý,/ÝÝÔ% ~Ð7Gñô ñ-ô -ˆKÐ(Ñ)Ð)Ð)ð &Ð%r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ÚstrÚ__annotations__r   r   r   r   r   r   ÚCertificater)   r#   r   r,   r&   rE   ÚclassmethodrP   Ú__classcell__)rX   s   @r   r   r      sŠ  ø€ € € € € € ðð ð *.€Iˆx˜ œÔ&Ð-Ð-Ñ-ðð 48Ð˜ (¨3¤-Ô0Ð7Ð7Ñ7ðð /3€N�H˜X cœ]Ô+Ð2Ð2Ñ2ðð< .2Ð$ dÐ1Ð1Ñ1ð	ð "'Ð˜$Ð&Ð&Ñ&ðð 46Ø8:ð	
ð 
àÔð
ð $,¨C¤=ð
ð )1°¬ð	
ð 
ð 
ð 
ð:ð :ð :ð¸sÀ3¼xð ð ð ð ð2Dð Dð Dð!Ø#& s¤8ð!ð !ð !ð !ðF ðð ð ð ñ „[ðð ð ð ð r   r   N)Údataclassesr   Útypingr   r   r   Ú
asn1cryptor   Úpyhanko.config.apir   r	   r
   Úpyhanko_certvalidator.errorsr   r%   r   r   r   r   r   r   ú<module>rg      s  ðØ !Ð !Ð !Ð !Ð !Ð !Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð
 AÐ @Ð @Ð @Ð @Ð @ð(˜Cð (¨#ð (¸ð (ð (ð (ð (ð €�$ÐÑÔðAð Að Að Að AÐ+ñ Aô Añ ÔðAð Að Ar   