o
    vhW                     @   s|   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
 d dlmZ dededefd	d
ZeddG dd deZdS )    )	dataclass)OptionalSet)x509)ConfigurableMixinprocess_bit_string_flagsprocess_oids)InvalidCertificateErrorrequiredpresentneed_allc                 C   s   |r| |  S t | |@ S N)bool)r
   r   r    r   ^/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/pyhanko/sign/validation/settings.py_match_usages   s   
r   T)frozenc                       s   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dZdd Zdd Ze fddZ  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                 C   s   |  |j | |j d S r   )_validate_key_usagekey_usage_value_validate_extd_key_usageextended_key_usage_value)selfr   r   r   r   validatef   s   zKeyUsageConstraints.validatec                 C   s   | j sd S | j p
t }| jpt }|d urt|jnt }||@ }|r5tdd |}tdd| d| j}t|||sWtdd |}td|rKdnd	 d
d| dd S )Nc                 S      |  ddS N_ replacesr   r   r   <lambda>z       z9KeyUsageConstraints._validate_key_usage.<locals>.<lambda>zBThe active key usage policy explicitly bans certificates used for , .c                 S   r    r!   r$   r&   r   r   r   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_kur   r   r   r   j   s6   

z'KeyUsageConstraints._validate_key_usagec                 C   s   | j d u r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dsR|rItd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                 S   r    r!   r$   r&   r   r   r   r(      r)   z>KeyUsageConstraints._validate_extd_key_usage.<locals>.<lambda>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/   r0   )r   eku_extension_valuehas_extd_key_usage_extcert_ekur   r4   ok_listr   r   r   r      s6   
z,KeyUsageConstraints._validate_extd_key_usagec              	      sz   t  | dD ]}||d }|d ur#tttj||dd||< q|dd }|d ur;tttj	|d|d< d S d S )N)r   r   r"   -r   zextd-key-usage)
superprocess_entriesgetr-   r   r   KeyUsager%   r   KeyPurposeId)clsconfig_dictkey_usage_settaffected_flagsr   	__class__r   r   r=      s(   
z#KeyUsageConstraints.process_entries)__name__
__module____qualname____doc__r   r   r   str__annotations__r   r   r   r   r   r   Certificater   r   r   classmethodr=   __classcell__r   r   rE   r   r      s"   
 		 #r   N)dataclassesr   typingr   r   
asn1cryptor   pyhanko.config.apir   r   r   pyhanko_certvalidator.errorsr	   r-   r   r   r   r   r   r   r   <module>   s    