
     hW                         d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZ dededefd	Z ed
           G d de
                      ZdS )    )	dataclass)OptionalSet)x509)InvalidCertificateError)ConfigurableMixinprocess_bit_string_flagsprocess_oidsrequiredpresentneed_allc                 6    |r| |z
   S t          | |z            S N)bool)r   r   r   s      \/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/pyhanko/sign/validation/settings.py_match_usagesr      s-     (w&'' Hw&'''    T)frozenc                        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
ej        fdZd Z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certc                 n    |                      |j                   |                     |j                   d S r   )_validate_key_usagekey_usage_value_validate_extd_key_usageextended_key_usage_value)selfr   s     r   validatezKeyUsageConstraints.validatef   s6      !5666%%d&CDDDDDr   c                    | j         sd S | j         pt                      }| j        pt                      }|t          |j                  nt                      }||z  }|r7t	          d |          }t          dd                    |           d          | j        }t          |||          s>t	          d |          }t          d|rdnd d	d                    |           d
          d S )Nc                 .    |                      dd          S N_ replacess    r   <lambda>z9KeyUsageConstraints._validate_key_usage.<locals>.<lambda>z       aiiS&9&9 r   zBThe active key usage policy explicitly bans certificates used for , .c                 .    |                      dd          S r&   r)   r+   s    r   r-   z9KeyUsageConstraints._validate_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   setr   nativemapr   joinr   r   )r"   key_usage_extension_valuer   r   cert_kuforbidden_ku	rephrasedneed_all_kus           r   r   z'KeyUsageConstraints._validate_key_usagej   sE   ~ 	FN+cee	"6?#%%
 )4 )0111 	 !44 	99<HHI)4 IIi004 4 4   /Y== 	999EEI)J$<22*<J J$(IIi$8$8J J J  	 	r   c                    | j         d S |d u}|rt          |j                  nt                      }d|v r	| j        sd S | j         pt                      }|s| j        rt	          d          d S t          ||d          sA|r+t          d |          }dd                    |           d}nd	}t	          d
|           d S )Nany_extended_key_usagezEThe active key usage policy requires an extended key usage extension.F)r   c                 .    |                      dd          S r&   r)   r+   s    r   r-   z>KeyUsageConstraints._validate_extd_key_usage.<locals>.<lambda>   s    !))C*=*= r   zRelevant key purposes are r/   r0   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   r3   r4   r   r   r   r5   r6   )r"   eku_extension_valuehas_extd_key_usage_extcert_ekur   r:   ok_lists          r   r    z,KeyUsageConstraints._validate_extd_key_usage   s%   &F!4D!@/EPC#*+++355 	
 %009 1 F,5% 	4 -+   F^XFFF 		 I = =~NN	Ntyy7K7K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   r'   -r   zextd-key-usage)
superprocess_entriesgetr3   r	   r   KeyUsager*   r
   KeyPurposeId)clsconfig_dictkey_usage_settaffected_flagsr   	__class__s        r   rF   z#KeyUsageConstraints.process_entries   s    ,,, C 		 		N(__^TBBN).1,&&..sC88 / /N+ %)94@@%,/%~7G - -K())) &%r   )__name__
__module____qualname____doc__r   r   r   str__annotations__r   r   r   r   r   r   Certificater#   r   r    classmethodrF   __classcell__)rN   s   @r   r   r      s$          %)IxC!((( /3#c(+222 *.NHSX&---< .2$d111	 "'$&&&ET- E E E E  @! ! !F     [    r   r   N)dataclassesr   typingr   r   
asn1cryptor   pyhanko_certvalidator.errorsr   pyhanko.config.apir   r	   r
   r3   r   r   r    r   r   <module>r^      s   ! ! ! ! ! !                       @ @ @ @ @ @         (C (# ( ( ( ( ( $m m m m m+ m m m m mr   