o
    sh                     @  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mZm	Z	m
Z
mZmZmZ ddlmZmZ d dlZd dlmZ ejdksDJ 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   )HidDescriptorFileCtapHidConnection)Set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-   L/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/hid/openbsd.pyr   0   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.   r2   H   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ljustr7   report_size_outselectpollregisterhandlePOLLINwrite_packetread_packet)r6   _datar@   r-   r-   r.   r3   P   s   


z.OpenBsdCtapHidConnection._terrible_ping_kludge)r&   r'   r(   r2   r3   __classcell__r-   r-   r8   r.   r/   G   s    r/   c                 C  s   t | S r0   )r/   )r7   r-   r-   r.   open_connectionb   s   rI   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_DEVICEINFOr5   intr   r   r   decoder%   r
   MAX_U2F_HIDLEN)pathfdev_infovidpidnameserialr-   r-   r.   get_descriptorf   s   

rZ   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)setr[   rJ   listdir	FIDO_DEVSrS   joindiscardappendrZ   r4   loggerdebugadd)staledescriptorsdevrS   r-   r-   r.   list_descriptors|   s   

ri   )&
__future__r   rM   r?   rJ   os.pathsysctypesr   r   r   r   r   r   baser
   r   loggingtypingr   platform	getLoggerr&   rc   rO   r)   r+   r*   r_   rR   r   r/   rI   rZ   r]   r[   __annotations__ri   r-   r-   r-   r.   <module>   s0    
