
    Wwg"                     T   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
       G d dej0                               Z G d dej4                        Z ed
       G d dej0                               Zdeeef   fdZy)    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                   N    e Zd ZU dZdZee   ed<   	 dZee	   ed<   	 e
d        Zy)r   zL
    .. versionadded:: 0.14.0

    Search criteria for a PKCS#11 token.
    Nlabelserialc                     	 t        j                  |d         |d<   y # t        $ r Y y t        $ r}t	        d      |d }~ww xY w)Nr   z<Failed to parse PKCS #11 token serial number as a hex string)binascii	unhexlifyKeyError
ValueErrorr   )clsconfig_dictes      L/var/www/horilla/myenv/lib/python3.12/site-packages/pyhanko/config/pkcs11.pyprocess_entrieszTokenCriteria.process_entries#   sO    	$,$6$6{87L$MK! 	 	$N	s    	AA=A)__name__
__module____qualname____doc__r   r   str__annotations__r   bytesclassmethodr         r   r   r      sE      E8C= #FHUO"  r*   r   c                       e Zd ZdZ ej
                         Z	  ej
                         Z	  ej
                         Z	 e	de
dd fd       Zy)r   zT
    Pin entry behaviour if the user PIN is not supplied as part of the config.
    valuereturnc           
         t        | t              r"	 t        j                  | j	                            S | rt        j                  S t        j                  S # t
        $ r- t        d| ddj                  d t        D               d      w xY w)NzInvalid PIN entry mode z; must be one of z, c              3   F   K   | ]  }t        |j                          y wN)reprname).0xs     r   	<genexpr>z8PKCS11PinEntryMode.parse_mode_setting.<locals>.<genexpr>W   s      J!aff Js   !.)

isinstancer%   r   __members__upperr   r   joinPROMPTSKIP)r,   s    r   parse_mode_settingz%PKCS11PinEntryMode.parse_mode_settingO   s    eS!)55ekkmDD .3"))8J8O8O  (-eY6Gyy J7I JJK1N s    A 6BN)r!   r"   r#   r$   enumautor;   DEFERr<   staticmethodr   r=   r)   r*   r   r   r   /   sf     TYY[F DIIKE 499;D # *>  r*   r   c                       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       Z!e fd       Z" x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                 R    t         |   |D ch c]  }|dvr|
 c}       y c c}w )N)token_labelztoken-label)supercheck_config_keys)r   rR   k	__class__s      r   rV   z'PKCS11SignatureConfig.check_config_keys   s8     	! ':: 	
s   $c                    t         |   |       |j                  dd      }t        |t              r|f}t        t        |            |d<   |j                  dd       }|t        |      |d<   d|v rt        |d         |d<   d|v rt        |d         |d<   d|vr/d|vr+d|vrd|vrt        d      d|v r|d   |d<   d|v r|d   |d<   d|vr d|vrd|vrd|v r|d   |d<   d|v r|d   |d<   t        |d	t        j                  t        j                  
      |d	<   d|v rMt        j                  dt                |j#                  d      }d|vrd|i|d<   y |d   j%                  d|       y y )NrH   r)   rF   rJ   rE   rI   rD   zYEither 'key_id', 'key_label', 'cert_label' or 'cert_id',must be provided in PKCS#11 setuprM   )defaultrT   z?'token_label' is deprecated, use 'token_criteria.label' insteadrG   r   )rU   r    getr7   r%   listr   r   _process_pkcs11_id_valuer   r   r   r=   r;   warningswarnDeprecationWarningpop
setdefault)r   r   rH   	cert_filelblrX   s        r   r    z%PKCS11SignatureConfig.process_entries   s   ,!oomR8k3'&.K%)*@*M%NM"OO$94@	 1F2K-. {"$<H%%K! #%=I&&K	" k)hk.I+K0O(8  K'(3I(>H%{*+6|+DK( +,%[8;&)4X)>I&k),7,DL)$111&--	%
L! K'MM"
 //-0C{218#,-,-88#F (r*   )$r!   r"   r#   r$   r%   r&   rD   r   rE   r'   rF   r
   CertificaterG   r   rH   r   rI   rJ   rK   intrL   r   r;   rM   rN   r   rO   boolrP   rQ   r(   r   rV   r    __classcell__)rX   s   @r   r   r   `   sn    3 $J$4#GXe_#16:$"2"23:	 /3NH]+248K$t//018&#Ix}#
 #FHUO" "GXc]! #Hhsm"
 &8%>%>J"> 46(3-05
 J J  M4 	
c#h 	
 	
 =G =Gr*   r   r4   c                 d    t        | t              rt        | g      S t        j                  |       S r0   )r7   rf   r'   r   r   )r4   s    r   r]   r]     s)    !SaSz!!!$$r*   ) r   r>   r^   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%   rf   r]   r)   r*   r   <module>rt      s       ! < <   4 F 0
J $C))  :. .b $nGC11 nG nGb%c3h %r*   