
    Csi$                     X   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
       G d dej2                               Z G d dej6                        Z ed
       G d dej2                               Zdeeef   fdZ y)    N)	dataclass)AnyIterableListOptionalSetUnion)algosx509)api)ConfigurationError)load_cert_from_pemderload_certs_from_pemder)get_and_apply)PKCS11PinEntryModePKCS11SignatureConfigTokenCriteriaT)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      a/var/www/python-projects/worksol/worksolenv/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>V   s      J!aff Js   !.)

isinstancer&   r   __members__upperr   r   joinPROMPTSKIP)r-   s    r    parse_mode_settingz%PKCS11PinEntryMode.parse_mode_settingN   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<   	 dZeed<   	 dZ ee!jD                     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only_resident_certssignature_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   rU   k	__class__s      r    rY   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 )NrI   r*   rG   rK   rF   rJ   rE   zYEither 'key_id', 'key_label', 'cert_label' or 'cert_id',must be provided in PKCS#11 setuprN   )defaultrW   z?'token_label' is deprecated, use 'token_criteria.label' insteadrH   r   )rX   r!   getr8   r&   listr   r   _process_pkcs11_id_valuer   r   r   r>   r<   warningswarnDeprecationWarningpop
setdefault)r   r   rI   	cert_filelblr[   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'   rE   r   rF   r(   rG   r   CertificaterH   r   rI   r   rJ   rK   rL   intrM   r   r<   rN   rO   r   rP   boolrQ   rR   rS   rT   r
   SignedDigestAlgorithmr)   r   rY   r!   __classcell__)r[   s   @r    r   r   _   s    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 !&% BF%"="=>E 	
c#h 	
 	
 =G =Gr+   r   r5   c                 d    t        | t              rt        | g      S t        j                  |       S r1   )r8   ri   r(   r   r   )r5   s    r    r`   r`   $  s)    !SaSz!!!$$r+   )!r   r?   ra   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&   ri   r`   r*   r+   r    <module>rx      s       ! < < "  4 F 0
J $C))  :. .b $AGC11 AG AGH%c3h %r+   