o
    5׾g"                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ g d	Zed
dG dd dejZG dd dejZed
dG dd dejZdeeef fddZdS )    N)	dataclass)AnyIterableListOptionalSetUnion)x509)api)ConfigurationError)load_cert_from_pemderload_certs_from_pemder)get_and_apply)TokenCriteriaPKCS11PinEntryModePKCS11SignatureConfigT)frozenc                   @   sB   e Zd ZU dZdZee ed< 	 dZee	 ed< 	 e
dd ZdS )r   zL
    .. versionadded:: 0.14.0

    Search criteria for a PKCS#11 token.
    Nlabelserialc              
   C   sN   zt |d |d< W d S  ty   Y d S  ty& } ztd|d }~ww )Nr   z<Failed to parse PKCS #11 token serial number as a hex string)binascii	unhexlifyKeyError
ValueErrorr   )clsconfig_dicte r   _/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/pyhanko/config/pkcs11.pyprocess_entries#   s   zTokenCriteria.process_entries)__name__
__module____qualname____doc__r   r   str__annotations__r   bytesclassmethodr   r   r   r   r   r      s   
 r   c                   @   sD   e Zd ZdZe Z	 e Z	 e Z	 e	de
dd fddZdS )r   zT
    Pin entry behaviour if the user PIN is not supplied as part of the config.
    valuereturnc                 C   s`   t | tr(ztj|   W S  ty'   td| dddd tD  dw | r-tjS tj	S )NzInvalid PIN entry mode z; must be one of z, c                 s   s    | ]}t |jV  qd S N)reprname).0xr   r   r   	<genexpr>W   s    z8PKCS11PinEntryMode.parse_mode_setting.<locals>.<genexpr>.)

isinstancer#   r   __members__upperr   r   joinPROMPTSKIP)r'   r   r   r   parse_mode_settingO   s   
z%PKCS11PinEntryMode.parse_mode_settingN)r   r    r!   r"   enumautor4   DEFERr5   staticmethodr   r6   r   r   r   r   r   /   s    	r   c                       sD  e Zd ZU dZeed< 	 dZee ed< 	 dZee	 ed< 	 dZ
eej ed< 	 dZee ed< 	 dZeeej  ed< 	 dZee ed	< 	 dZee	 ed
< 	 dZee ed< 	 dZee ed< 	 ejZeed< 	 dZeee  ed< 	 dZeed< 	 dZeed< 	 dZeed< 	 ede e f fddZ!e fddZ"  Z#S )r   z
    Configuration for a PKCS#11 signature.

    This class is used to load PKCS#11 setup information from YAML
    configuration.
    module_pathN
cert_labelcert_idsigning_certificatetoken_criteriaother_certs	key_labelkey_idslot_nouser_pin
prompt_pinr   other_certs_to_pullT
bulk_fetchF
prefer_pssraw_mechanismkeys_suppliedc                    s   t  dd |D  d S )Nc                 S   s   h | ]}|d vr|qS ))token_labelztoken-labelr   )r,   kr   r   r   	<setcomp>   s
    z:PKCS11SignatureConfig.check_config_keys.<locals>.<setcomp>)supercheck_config_keys)r   rJ   	__class__r   r   rO      s
   z'PKCS11SignatureConfig.check_config_keysc                    s~  t  | |dd}t|tr|f}tt||d< |dd }|d ur,t||d< d|v r8t|d |d< d|v rDt|d |d< d|vrld|vrld|vrXd|vrXt	dd|v rb|d |d< d|v rl|d |d< d|vrd|vrd|vrd|v r|d |d< d|v r|d |d< t
|d	tjtjd
|d	< d|v rtdt |d}d|vrd|i|d< d S |d d| d S d S )Nr@   r   r>   rB   r=   rA   r<   zYEither 'key_id', 'key_label', 'cert_label' or 'cert_id',must be provided in PKCS#11 setuprE   )defaultrK   z?'token_label' is deprecated, use 'token_criteria.label' insteadr?   r   )rN   r   getr0   r#   listr   r   _process_pkcs11_id_valuer   r   r   r6   r4   warningswarnDeprecationWarningpop
setdefault)r   r   r@   	cert_filelblrP   r   r   r      sd   


z%PKCS11SignatureConfig.process_entries)$r   r    r!   r"   r#   r$   r<   r   r=   r%   r>   r	   Certificater?   r   r@   r   rA   rB   rC   intrD   r   r4   rE   rF   r   rG   boolrH   rI   r&   r   rO   r   __classcell__r   r   rP   r   r   `   sH   
 r   r-   c                 C   s   t | tr
t| gS t| S r)   )r0   r^   r%   r   r   )r-   r   r   r   rU     s   


rU   ) r   r7   rV   dataclassesr   typingr   r   r   r   r   r   
asn1cryptor	   pyhanko.configr
   pyhanko.config.errorsr   pyhanko.keysr   r   pyhanko.pdf_utils.miscr   __all__ConfigurableMixinr   Enumr   r   r#   r^   rU   r   r   r   r   <module>   s$     1 2