+
    :i"  c                   sP   ^ RI Ht ^ RIHt ^ RIHtHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^R
IHt ^RIHtHt ^RIHt   ! R R4      t]P:                  ! ]4       RR/R R lltRRRRRR/R R lltR R lt RRR/R R lllt!RRRRRRR/R R lllt"R# ) i    )sleep)	Generator)CardConnectionExceptionNoCardException)	TRANSPORTFidoConnectionOtpConnectionSmartCardConnection
DeviceInfo)get_name	read_infoYkmanDevice)list_all_devicesscan_devices)list_devicesc                   s   a  ] tR t^Bt o RtR tR tR t]V 3R lR l4       t	]V 3R lR l4       t
RR
 ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR	# )ScriptingDevicezpScripting-friendly proxy for YkmanDevice.

This wrapper adds some helpful utility methods useful for scripting.
c                s    Wn         W n        \        Y P                  '       d   V P                  P                  MR 4      V n        R # N)_wrapped_infor   ZpidZyubikey_type_name)selfZwrappedinfo   &&&4/usr/lib/python3.14/site-packages/ykman/scripting.py__init__ZScriptingDevice.__init__H   s,    
dXXXDHH$9$94P
    c                s.    \        V P                  V4      # r   )Zgetattrr   )r   Zattrs   &&r   __getattr__ZScriptingDevice.__getattr__M   s    t}}d++r   c                sz    V P                   P                  pV'       d   V P                   R V R2# V P                  # )z (Z))r   serialr   )r   r    s   & r   __str__ZScriptingDevice.__str__P   s3    ""-3$**Rxq)CCr   c                    < V ^8  d   QhRS[ /#    returnr   format__classdict__   "r   __annotate__ScriptingDevice.__annotate__U   s      j r   c                    V P                   # r   )r   r      &r   r   ZScriptingDevice.infoT       zzr   c                r"   r#   )Zstrr&   r)   r   r*   r+   Y   s      c r   c                r,   r   )r   r-   r.   r   nameZScriptingDevice.nameX   r/   r   Nc                s>    V P                   P                  WR 7       R# ))reinsert_cbeventN)r   reinsert)r   r1   r2   r   r   r3   ZScriptingDevice.reinsert\   s    ;Dr   c                r"   r#   r   r&   r)   r   r*   r+   _   s     3 3] 3r   c                ,    V P                  \        4      # )zEstablish a OTP connection.)open_connectionr   r-   r.   r   otpZScriptingDevice.otp_   s    ##M22r   c                r"   r#   r	   r&   r)   r   r*   r+   c   s     9 9/ 9r   c                r4   )z"Establish a Smart Card connection.)r5   r
   r-   r.   r   
smart_cardZScriptingDevice.smart_cardc   s    ##$788r   c                r"   r#   r   r&   r)   r   r*   r+   g   s     4 4n 4r   c                r4   )zEstablish a FIDO connection.)r5   r   r-   r.   r   fidoZScriptingDevice.fidog   s    ##N33r   )r   r   r   )NN)Z__name__Z
__module__Z__qualname__Z__firstlineno__Z__doc__r   r   r!   Zpropertyr   r0   r3   r6   r7   r8   Z__static_attributes__Z__classdictcell__)r(   s   @r   r   r   B   sg     
Q
,D    E3 39 94 4r   r   promptTc                $    V ^8  d   QhR\         /# r#   r   r'      "r   r*   r*   o   s     5 5o 5r   c                s\   \        4       w  r\        VP                  4       4      pV '       d   V^ 8X  d   \        R4       V^ 8X  d3   \	        R4       \        4       w  r\        VP                  4       4      pK9  \        4       p\        V4      ^8X  d   \        V^ ,          !  # \        R4      h)z^Connect to a YubiKey.

:param prompt: When set, you will be prompted to
    insert a YubiKey.
zInsert YubiKey...      ?zFailed to get single YubiKey)	r   sumvaluesprintr    r   lenr   
ValueError)r9   pidsstaten_devs	new_stateZdevss   $     r   singlerH   o   s     .KDF&A+!"
A+c
&.T[[]#D
4yA~Q((
3
44r   ignore_duplicatesallow_initialFc                sd    V ^8  d   QhR\         R\         R\         R\        \        RR3,          /# )r$   rI   rJ   r9   r%   N)Zboolr   r   r<   r=   r   r*   r*      s8     ( ((6:(LP(d*+(r   c              #  s  "   Rp\        4       p\        4       w  rV\        VP                  4       4      pV^ 8X  d   V'       d   \	        R4       MV'       g   \        R4      h \        4       w  rXW8w  d   Tp\        4       p	\        V4      ^ 8X  d   RV9   d   VP                  R4       \        4        F[  w  rV	P                  VP                  4       VP                  V9  g   K3  VP                  VP                  4       \        W4      x  K]  	  V '       g   T	pK  K   \        R4       K    \         d     R# i ; i5i)a  Connect to multiple YubiKeys.


:param ignore_duplicates: When set, duplicates are ignored.
:param allow_initial: When set, YubiKeys can be connected
    at the start of the function call.
:param prompt: When set, you will be prompted to
    insert a YubiKey.
Nz!Insert YubiKeys, one at a time...z'YubiKeys must not be present initially.r>   )setr   r?   r@   rA   rC   rB   remover   addr    r   r    KeyboardInterrupt)rI   rJ   r9   rE   handled_serialsrD   Z_rF   rG   Zserialsdevicer   s   $$$         r   multirQ      s     E'*uOnGDF{56BCC
&.EeG4yA~$/"9&&t, 0 2DKK(;;o5#''4)&77	 !3
 %") %c
$ sC   A E E B
E &3E E !D. ,E .D=9E <D==E c                r:   r#   r   r<   r=   r   r*   r*      s      ; r   c                 s@   \        V 4       Uu. uF%  qP                  \        P                  8X  g   K#  VNK'  	  ppV'       g   \	        R V  R24      h\        V4      ^8  d,   V Uu. uF  q3P                  NK  	  pp\	        RV  RV 24      hV^ ,          # u upi u upi )z&No NFC reader found matching filter: 'Z'z'Multiple NFC readers matching filter: 'z' )	list_ccidZ	transportr   ZNFCrC   rB   Zfingerprint)readerZdZreadersZrZnamess   &    r   _get_readerrT      s    #F+L+Q{{imm/Kqq+GLA&KLL	W	(/010B6("UGTUU1: M 1s    BB&Bc                r:   r#   r;   r<   r=   r   r*   r*      s      _ r   c               s    \        V 4      p  VP                  \        4      ;_uu_ 4       p\        V4      pRRR4       \	        VX4      #   + '       g   i     L; i  \
         d%    T'       d   \        R4       Rp\        R4        K  i ; i)zConnect to a YubiKey over NFC.

:param reader: The name of the NFC reader.
:param prompt: When set, you will prompted to place
    a YubiKey on NFC reader.
NPlace YubiKey on NFC reader...Fr>   )rT   r5   r
   r   r   r   rA   r    )rS   r9   rP   
connectionr   s   &$   r   
single_nfcrW      sw      F
	''(;<<
 , ="6400 =<  	67#J		s-   A AA A	A B1BBc                s@    V ^8  d   QhR\         \        RR3,          /# )r$   r%   N)r   r   r<   r=   r   r*   r*      s      5 5d*+5r   c             #  s  "   \        V 4      pRp VP                  \        4      ;_uu_ 4       pV'       g   \        R4      h RRR4       \        4       pRp  TP                  \        4      ;_uu_ 4       p\        T4      p	RRR4       X	P                  T9   g   YP                  8X  d   T'       d   T'       g   \        R4       RpM5T	P                  pT'       d   TP                  T4       \        YI4      x  Rp  \        R4       K    + '       g   i     L; i  \         d%    T'       d   \        R4       Rp\        R4        ELi ; i  + '       g   i     L; i  \         d;    RT9   d   TP                  R4       RpT'       d   T'       g   \        R4       Rp L\         d     Li ; i  \         d     R# i ; i5i)	aG  Connect to multiple YubiKeys over NFC.

:param reader: The name of the NFC reader.
:param ignore_duplicates: When set, duplicates are ignored.
:param allow_initial: When set, YubiKeys can be connected
    at the start of the function call.
:param prompt: When set, you will be prompted to place
    YubiKeys on the NFC reader.
Fz&YubiKey must not be present initially.NrU   Tr>   zRemove YubiKey from NFC reader.i)rT   r5   r
   rC   r   rA   r    rK   r   r    rM   r   rL   r   rN   )
rS   rI   rJ   r9   rP   ZpromptedrV   rO   Zcurrentr   s
   &$$$      r   	multi_nfcrX      sw      FH##$788J  !IJJ ! 9 (+uOG
	''(;<<
 , ={{o-KK1G(;<#H++$#''0%f33 	#JG 98  23Hc
	 =<  	 &&&t,Gh67& 		 ! 		s   G
D DD G
E$ 6E0E$ 3E$ ;E$ G
	E$  E$ =G
?F8 
G
D	D G
D E2E
G
EG
E!	E$ $4F5F5&G
(F51F52G
4F55G
8GG
GG
N)Z )#Ztimer    Ztypingr   Zsmartcard.Exceptionsr   r   Zyubikit.corer   Zyubikit.core.fidor   Zyubikit.core.otpr   Zyubikit.core.smartcardr
   Zyubikit.managementr   Zyubikit.supportr   r   Zbaser   rP   r   r   Zpcscr   rR   r   ZregisterrH   rQ   rT   rW   rX   ) r   r   <module>rY      s   :   I " , * 6 ) /  2 +*'4 '4T   _ %5T 5((!%(=B(SW(VD  (5$(58=5FJ5 5r   