+
    :i'  c                   sl   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^RIHtHtHt ]P                   R8w  g   Q h]P"                  ! ]4      tRtRtRtR	tR
tRtRtRtRt ! R R]4      t] P<                  ! ]	! R4      4      t ! R R] P@                  4      t! ! R R]4      t"R t#R# )    N)find_library)OtpConnection)	USAGE_OTP
YUBICO_VIDOtpYubiKeyDeviceZwin32z/dev/l   U@  l   U@  l   U@  i U@iU  iU@l   $U  l   #U  c                   s|   a  ] tR t^Zt o RtR tR tR tR t]	R 4       t
]	R 4       t]	R 4       t]	R	 4       tR
tV tR# )HidrawConnectionz
hidraw(4) is FreeBSD's modern raw access driver, based on usbhid(4).
It is available since FreeBSD 13 and can be activated by adding
`hw.usb.usbhid.enable="1"` to `/boot/loader.conf`. The actual kernel
module is loaded with `kldload hidraw`.
c                Z    \         P                  ! V\         P                  4      V n        R # NosopenZO_RDWRfdselfZpath   &&6/usr/lib/python3.14/site-packages/ykman/hid/freebsd.py__init__ZHidrawConnection.__init__b       ''$		*    c                F    \         P                  ! V P                  4       R # r   r
   closer   r      &r   r   ZHidrawConnection.closee       
r   c                s    \        ^	4      p\        P                  ! V P                  \        VR4       \        VR,          4      # )   Tr   NN)	bytearrayfcntlioctlr   HIDIOCGFEATURE_9bytes)r   buf   & r   receiveZHidrawConnection.receiveh   s1    DGG-sD9SW~r   c                sx    \        ^ .4      V,           p\        P                  ! V P                  \        V4       R# )r    N)r    r   r   r   HIDIOCSFEATURE_9)r   datar!   s   && r   sendZHidrawConnection.sendm   s'    QCj4DGG-s3r   c                s    \        ^4      p\        P                  ! V \        VR4       \        P
                  ! RV4      # )   Tz<IHH)r   r   r   HIDIOCGRAWINFOstructunpack)devr!   r"   r   get_infoZHidrawConnection.get_infoq   s/    	"Cd3}}VS))r   c                s    \        ^4      p\        P                  ! V \        VR4       \        P
                  ! RV4      ^ ,          pV\        V4      ,          p\        P                  ! V \        VR4       VR,          # )r'   T<I:r'   NN)r   r   r   HIDIOCGRDESCSIZEr)   r*   HIDIOCGRDESC)r+   r!   sizes   &  r   get_descriptorZHidrawConnection.get_descriptorw   s\    lC)35}}T3'*yCsD12wr   c                s   \         P                  V 4      pR R r2V'       d   V^ ,          VR,          r^V,          ^V,          reVR V WR  rV^8X  d8   \        P                  ! RVP	                  ^R4      4      ^ ,          pVe   W23# Kp  V^8X  g   Ky  \        P                  ! RVP	                  ^R4      4      ^ ,          pVf   K  W23# R # )Nr   r-       )r   r1   r)   r*   ljust)r+   r!   usage
usage_pageheadZtypr0   values   &       r   	get_usageZHidrawConnection.get_usage   s    --c2!4zAB#tTD[UdSZ3ax#]]4Q1FGJ
$%,, %dEKK5,AB1E)%,, r   c            
     s   . p \         P                   ! \        R ,           4       F  p \        VR4      ;_uu_ 4       p\        P	                  V4      w  r4pV\
        8X  d>   \        P                  V4      \        8X  d    V P                  \        W\        4      4       RRR4       K  	  V #   + '       g   i     K  ; i  \         d#   p\        P                  RTR7        Rp?K  Rp?ii ; i)zhidraw?*rbNFailed opening HID deviceZexc_info)globdevdirr   r   r,   r   r8   r   appendr   	Exceptionloggerdebug)devicesZhidrawfZbustypevidpides          r   list_devicesZHidrawConnection.list_devices   s    ii 34F&$''1(8(A(A!(D%G#j(-=-G-G-Ji-W'7EU'VW (' 5  (''  81Es5   B?A!B+B?+B<6B?<B??C,
C''C,r   N)__name__
__module____qualname____firstlineno____doc__r   r   r#   r&   staticmethodr,   r1   r8   rG   __static_attributes____classdictcell__Z__classdict__   @r   r   r   Z   sn     +
4 * *
   - -   r   r   Zcc                   s`   ] tR t^tR]P
                  3R]P                  3R]P                  3R]P                  3R]P                  3R]P                  3R]P                  3R]P                  3R	]P                  3R
]P                  3R]P                  3R]P                  ^,          3.tRt	R# )usb_gen_descriptorugd_dataZugd_lang_id
ugd_maxlenZ
ugd_actlenZ
ugd_offsetZugd_config_indexZugd_string_indexZugd_iface_indexZugd_altif_indexZugd_endpt_indexugd_report_typeZreserved N)
rI   rJ   rK   rL   ctypesZc_void_pZc_uint16Zc_uint8Z_fields_rO   rW   r   r   rS   rS      s     OO	
 
(	v'	v'	v'	V^^,	V^^,	FNN+	FNN+	FNN+	FNN+	V^^a'(Hr   rS   c                   sl   a  ] tR t^t o RtR tR tR tR t]	R 4       t
]	R 4       t]	R 4       tR	tV tR
# )UhidConnectionzh
uhid(4) is FreeBSD's classic USB hid access driver and enabled
by default in FreeBSD 13.x and earlier.
c                r   r   r	   r   r   r   r   ZUhidConnection.__init__   r   r   c                r   r   r   r   r   r   r   ZUhidConnection.close   r   r   c                sn   \         P                  ! ^	4      p\        \         P                  ! V4      \         P                  ! V4      ^R7      p\
        P                  V P                  \        \         P                  ! V4      4      pV^ 8w  d   \        R\        V4      ,           4      hVP                  RR # )i	   rT   rU   rV   ioctl failed: Ni)rX   create_string_bufferrS   	addressofsizeoflibcr   r   USB_GET_REPORTpointer
ValueErrorstrraw)r   r!   descrets   &   r   r#   ZUhidConnection.receive   s    ))!,!%%c*}}S)

 jj.&..2FG!8-C899wws|r   c                s   \         P                  ! ^4      p\        ^ \        V4      4       F  pW,          W#&   K  	  \	        \         P
                  ! V4      \        V4      ^R7      p\        P                  V P                  \        \         P                  ! V4      4      pV^ 8w  d   \        R\        V4      ,           4      hR# )i   rZ   r[   N)rX   r\   ZrangelenrS   r]   r_   r   r   USB_SET_REPORTra   rb   rc   )r   r%   r!   Zire   rf   s   &&    r   r&   ZUhidConnection.send   s    ))!,q#d)$AWCF % "%%c*3x

 jj.&..2FG!8-C899 r   c                s   \         P                  ! R 4      p\        \         P                  ! V4      \         P                  ! V4      ^R7      p\
        P                  V \        \         P                  ! V4      4      pV^ 8w  d   \        R4      h^pV( p^p^pVP                  pRRrV'       d   V	'       d	   V
'       g   \        P                  ! RV4      ^ ,          VR,          rWK,          W[,          r\        P                  ! RVRV P                  ^R4      4      ^ ,          pWR pW8X  d   V
'       g   Tp
K  W8X  g   K  V	'       d   K  Tp	K  W3# )i   rZ   zioctl failedNz>Br   r-   r2   )rX   r\   rS   r]   r^   r_   r   USB_GET_REPORT_DESCra   rb   rd   r)   Zunpack_fromr3   )r+   Zc_datare   rf   ZREPORT_DESCRIPTOR_KEY_MASKZ	SIZE_MASKZ
USAGE_PAGEZUSAGEr%   r4   r5   r6   keyr0   r7   s   &              r   r8   ZUhidConnection.get_usage   s   ,,T2!%%f-}}V,

 jj16>>$3GH!8^,,%)"//	
zz!4zEj++D$7:DH$299;K&&tT%4[->->q%-HI!LE;D "
ee""r   c                sp   \         P                  ! R 4      p\         P                  ! R4      p\         P                  ! R4      pRV ,           R,           P                  4       p\        P                  ! R4      p\        P
                  ! \        P                  ! V4      4      p\        P                  ! V4      p\        P                  Wu\        P                  ! V4      RR4      pV^ 8w  d   \        R4      hVP                  RVP                   P                  4       p	VP                  V	4      p
V
'       d   \        V
P!                  ^4      ^4      MRpVP                  V	4      p
V
'       d   \        V
P!                  ^4      ^4      MRpVP                  V	4      p
V
'       d   V
P!                  ^4      MRpWV3# )zvendor=(0x[0-9a-fA-F]+)zproduct=(0x[0-9a-fA-F]+)zsernum="([^"]+)z	dev.uhid.z	.%pnpinfoi   Nzsysctlbyname failed)reZcompileZencoderX   r\   Zc_size_tr^   Zc_char_pr_   ZsysctlbynameZbyrefZIOErrorr7   ZdecodeZsearchZintZgroup)indexZ	vendor_reZ
product_reZ	sernum_reZpnpinfoZovalueZolenrj   Zretvalr7   ZmrD   rE   serials   &             r   r,   ZUhidConnection.get_info   sG   JJ89	ZZ :;
JJ01	&4<<>,,T2v}}V45oog&""3T0BD$OQ;/00\tzz*113U#%&c!''!*b!De$%&c!''!*b!DU# d&!!r   c            
     st   . p \         P                   ! \        R ,           4       F  pV\        \        4      \        R4      ,           R pVP                  4       '       g   K=   \        P                  V4      w  r4pV\        8X  dk   \        VR4      ;_uu_ 4       p\        P                  VP                  4       4      \        8X  d    V P                  \        W\        4      4       RRR4       K  K  	  V #   + '       g   i     K  ; i  \         d$   p\        P                  RTR7        Rp?EK  Rp?ii ; i)zuhid?*uhidNr9   r:   r;   )r<   r=   rg   ZisdigitrY   r,   r   r   r8   Zfilenor   r>   r   r?   r@   rA   )rB   rn   rl   rD   rE   rm   rC   rF   s           r   rG   ZUhidConnection.list_devices  s    IIfx/0DVs6{245E==??%3%<%<U%C"6*$dD))Q)33AHHJ?9L#NN+;D~+VW *) % 1  *))  81Es7   "7D	AC5%D	5D D	D		D7D22D7rH   N)rI   rJ   rK   rL   rM   r   r   r#   r&   rN   r8   r,   rG   rO   rP   rQ   rR   r   rY   rY      sZ     
+: # #< " ".  r   rY   c                  sf    \         P                  4       p V '       g   \        P                  4       p V # r   )r   rG   rY   )rB   s    r   rG   rG   *  s&    ++-G --/Nr   )$rX   r   r<   Zloggingr
   rk   r)   ZsysZctypes.utilr   Zyubikit.core.otpr   Zbaser   r   r   ZplatformZ	getLoggerrI   r@   r=   r`   rh   ri   r(   r/   r.   r   r$   r   ZCDLLr_   Z	StructurerS   rY   rG   rW   r   r   <module>ro      s   p     	 	  
 $ * 9 9 ||w 			8	$	       C} CN {{<$%)) (o] odr   