o
    sh                     @   s"  U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZmZmZ ddlmZ ddlmZ ejdksFJ dd	lmZ eeZd
ZdZdZed ZG dd de
ZG dd de
Z dZ!dZ"dZ#e$ Z%ee& e'd< dd Z(dd Z)dd Z*G dd dej+Z,dS )z'Implements raw HID interface on NetBSD.    )absolute_importN)	Structurec_charc_intc_ubytec_uint16c_uint32c_uint8)Set   )basewin32)ioctl            c                   @   s    e Zd Zdefded fgZdS )usb_ctl_report_desc	ucrd_size	ucrd_datai   N)__name__
__module____qualname__r   r   _fields_ r   r   K/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/hid/netbsd.pyr   5   s    
r   c                   @   s   e Zd Zdefdefded fdefdee fdee fded	 fd
ee fdefdefdefdefdefdefdefdefdefdefdefdee	 e
 fded fgZdS )usb_device_infoudi_busudi_addrudi_pad0   
udi_cookieudi_product
udi_vendorudi_release   
udi_serialudi_productNoudi_vendorNoudi_releaseNo	udi_classudi_subclassudi_protocol
udi_config	udi_speedudi_pad1	udi_power
udi_nportsudi_devnames	udi_portsr   N)r   r   r   r	   r   r   USB_MAX_ENCODED_STRING_LENr   r   USB_MAX_DEVNAMESUSB_MAX_DEVNAMELENr   r   r   r   r   r   <   s.    





r   ipUDiUDl   h  _failed_cachec                  C   s   t t} g }tdD ]a}d|f }| | zt|}W nI tyL } z$|jtjkr1W Y d }~ n;|tvrBtj	d|dd t
| W Y d }~q
d }~w tye   |tvrctj	d|dd t
| Y q
w || q
t|  |S )Nd   z/dev/uhid%dzFailed opening FIDO device %sT)exc_info)setr7   rangediscardget_descriptorOSErrorerrnoENOENTloggerdebugadd	Exceptionappenddifference_update)staledescriptorsipathdescer   r   r   list_descriptors`   s0   




rM   c              	   C   s   d }zqt | t jt jB }t }t|t| t }t|t| t	|j
d |j }t|\}}|j}|j}z|jd}	W n tyI   d }	Y nw z|jd}
W n ty]   d }
Y nw t| |||||	|
W |d urst | S S |d ur~t | w w )Nzutf-8)osopenO_RDONLY	O_CLOEXECr   r   USB_GET_DEVICE_INFOr   USB_GET_REPORT_DESC	bytearrayr   r   r   parse_report_descriptorr(   r'   r"   decodeUnicodeDecodeErrorr&   HidDescriptorclose)rJ   fddevinfoucrdreport_descmaxinmaxoutvidpidnameserialr   r   r   r=   {   s6   
r=   c                 C   s   t | S )N)NetBSDCtapHidConnection)
descriptorr   r   r   open_connection   s   rf   c                       s   e Zd Z fddZ  ZS )rd   c                    s   t  | zBt| jttdd td}tg d|dd< tdD ] }| 	| t
 }|| jt
j |drD|    W d S q$td	 tyT   |    w )
Nz@ir   @   )   rh   rh   rh      r   r   r      
   r8   zu2f ping timeout)super__init__r   handleUSB_HID_SET_RAWstructpackrT   r;   write_packetselectpollregisterPOLLINread_packetrD   rY   )selfre   pingrI   rt   	__class__r   r   rm      s$   

z NetBSDCtapHidConnection.__init__)r   r   r   rm   __classcell__r   r   rz   r   rd      s    rd   )-__doc__
__future__r   r?   loggingrN   rs   rp   sysctypesr   r   r   r   r   r   r	   typingr
    r   platformfcntlr   	getLoggerr   rA   r6   r5   USB_MAX_STRING_LENr4   r   r   rR   rS   ro   r:   r7   str__annotations__rM   r=   rf   FileCtapHidConnectionrd   r   r   r   r   <module>   s8   $	
