o
    l>jt                     @  s   U 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 ddlmZmZ ejdks>J eeZdZdZd	Zd
ZdZdZG dd de	ZG dd deZdd Zdd Ze  Z!de"d< dd Z#dS )    )annotationsN)	Structurec_charc_intc_uint8c_uint16c_uint32   )FileCtapHidConnectionHidDescriptorwin32ipUB         z	/dev/fido@   c                   @  s   e Zd Zdefdefdee fdee fded 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dee fgZdS )UsbDeviceInfoudi_busudi_addrudi_product
udi_vendorudi_release   udi_productNoudi_vendorNoudi_releaseNo	udi_classudi_subclassudi_protocol
udi_config	udi_speed	udi_power
udi_nportsudi_devnames	udi_portsr   
udi_serialN)__name__
__module____qualname__r   r   USB_MAX_STRING_LENr   r   USB_MAX_DEVNAMELENUSB_MAX_DEVNAMESr   _fields_ r,   r,   F/home/thesage/.local/lib/python3.10/site-packages/fido2/hid/openbsd.pyr   -   s(    




r   c                      s$   e Zd Z fddZdd Z  ZS )OpenBsdCtapHidConnectionc                   s4   t  | z|   W d S  ty   |    w N)super__init___terrible_ping_kludge	Exceptionclose)self
descriptor	__class__r,   r-   r1   E   s   z!OpenBsdCtapHidConnection.__init__c                 C  sV   t dD ]$}d| jjd}t }|| jtj | 	| |d | 
 }qd S )Nr   s        d   )rangeljustr6   report_size_outselectpollregisterhandlePOLLINwrite_packetread_packet)r5   _datar?   r,   r,   r-   r2   M   s   


z.OpenBsdCtapHidConnection._terrible_ping_kludge)r%   r&   r'   r1   r2   __classcell__r,   r,   r7   r-   r.   D   s    r.   c                 C  s   t | S r/   )r.   )r6   r,   r,   r-   open_connection_   s   rH   c              	   C  s   t | t j}t }zt|t| W t | nt | w t|j	}t|j
}|jdp0d }|jdp8d }t| ||tt||S )Nzutf-8)osopenO_RDONLYr   fcntlioctlUSB_GET_DEVICEINFOr4   intr   r   r   decoder$   r   MAX_U2F_HIDLEN)pathfdev_infovidpidnameserialr,   r,   r-   get_descriptorc   s   

rY   zset[str]_failed_cachec               	   C  s~   t t} g }ttD ]1}tjt|}| | z	|t	| W q t
y<   |tvr:tjd|dd t| Y qw |S )NzFailed opening FIDO device %sT)exc_info)setrZ   rI   listdir	FIDO_DEVSrR   joindiscardappendrY   r3   loggerdebugadd)staledescriptorsdevrR   r,   r,   r-   list_descriptorsy   s   

rh   )$
__future__r   rL   loggingrI   os.pathr>   sysctypesr   r   r   r   r   r   baser
   r   platform	getLoggerr%   rb   rN   r(   r*   r)   r^   rQ   r   r.   rH   rY   r\   rZ   __annotations__rh   r,   r,   r,   r-   <module>   s.    
