o
    vh$                     @   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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)algos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   S/var/www/html/hyperkenya/venv/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>V   s    z8PKCS11PinEntryMode.parse_mode_setting.<locals>.<genexpr>.)

isinstancer$   r   __members__upperr   r   joinPROMPTSKIP)r(   r   r   r   parse_mode_settingN   s   
z%PKCS11PinEntryMode.parse_mode_settingN)r    r!   r"   r#   enumautor5   DEFERr6   staticmethodr   r7   r   r   r   r   r   .   s    	r   c                       sf  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< 	 dZeed< 	 dZ ee!j" 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only_resident_certssignature_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   rM   	__class__r   r   rR      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 )NrA   r   r?   rC   r>   rB   r=   zYEither 'key_id', 'key_label', 'cert_label' or 'cert_id',must be provided in PKCS#11 setuprF   )defaultrN   z?'token_label' is deprecated, use 'token_criteria.label' insteadr@   r   )rQ   r   getr1   r$   listr   r   _process_pkcs11_id_valuer   r   r   r7   r5   warningswarnDeprecationWarningpop
setdefault)r   r   rA   	cert_filelblrS   r   r   r      sd   


z%PKCS11SignatureConfig.process_entries)(r    r!   r"   r#   r$   r%   r=   r   r>   r&   r?   r
   Certificater@   r   rA   r   rB   rC   rD   intrE   r   r5   rF   rG   r   rH   boolrI   rJ   rK   rL   r	   SignedDigestAlgorithmr'   r   rR   r   __classcell__r   r   rS   r   r   _   sP   
 	r   r.   c                 C   s   t | tr
t| gS t| S r*   )r1   ra   r&   r   r   )r.   r   r   r   rX   $  s   


rX   )!r   r8   rY   dataclassesr   typingr   r   r   r   r   r   
asn1cryptor	   r
   pyhanko.configr   pyhanko.config.errorsr   pyhanko.keysr   r   pyhanko.pdf_utils.miscr   __all__ConfigurableMixinr   Enumr   r   r$   ra   rX   r   r   r   r   <module>   s$     1 E