
    <[jt                    .   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j        e          ZdZdZd	Zd
ZdZdZ G d de	          Z G d de          Zd Zd Z e             Z!de"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                      e Zd Zdefdefdeez  fdeez  fdedz  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z  e	z  fde
dz  fdeez  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_     Y/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fido2/hid/openbsd.pyr   r   -   s        	G	W	!334	v 223	
#	(#	"	(#	g	!	!	w	g	e	u	"447GGH	hm$	v 223%HHHr/   r   c                  $     e Zd Z fdZd Z xZS )OpenBsdCtapHidConnectionc                    t                                          |           	 |                                  d S # t          $ r |                                   w xY wN)super__init___terrible_ping_kludge	Exceptionclose)self
descriptor	__class__s     r0   r6   z!OpenBsdCtapHidConnection.__init__E   sc    $$$	&&((((( 	 	 	JJLLL	s	   :  Ac                V   t          d          D ]}d                    | j        j        d          }t	          j                    }|                    | j        t          j                   | 	                    |           |                    d           | 
                                }d S )Nr   s        d   )rangeljustr;   report_size_outselectpollregisterhandlePOLLINwrite_packetread_packet)r:   _datarD   s       r0   r7   z.OpenBsdCtapHidConnection._terrible_ping_kludgeM   s     q 	& 	&A.44/ D ;==DMM$+v}555d###IIcNNN##%%DD	& 	&r/   )r'   r(   r)   r6   r7   __classcell__)r<   s   @r0   r2   r2   D   sG            & & & & & & &r/   r2   c                     t          |           S r4   )r2   )r;   s    r0   open_connectionrN   _   s    #J///r/   c           	        t          j        | t           j                  }t                      }	 t	          j        |t          |           t          j        |           n# t          j        |           w xY wt          |j	                  }t          |j
                  }|j                            d          pd }|j                            d          pd }t          | ||t          t          ||          S )Nzutf-8)osopenO_RDONLYr   fcntlioctlUSB_GET_DEVICEINFOr9   intr   r   r   decoder&   r   MAX_U2F_HIDLEN)pathfdev_infovidpidnameserials          r0   get_descriptorr`   c   s    
bk""AHA)8444

h#
$
$C
h$
%
%C&&w//74D ''008DFsCvVVVs   A A5zset[str]_failed_cachec                    t          t                    } g }t          j        t                    D ]}t          j                            t          |          }|                     |           	 |                    t          |                     `# t          $ rC |t          vr7t                              d|d           t                              |           Y w xY w|S )NzFailed opening FIDO device %sT)exc_info)setra   rP   listdir	FIDO_DEVSrY   joindiscardappendr`   r8   loggerdebugadd)staledescriptorsdevrY   s       r0   list_descriptorsrp   y   s    EKz)$$ ( (w||Is++d	(~d334444 	( 	( 	(=((<dTRRR!!$'''	( s   -"BA
CC)$
__future__r   rS   loggingrP   os.pathrC   sysctypesr   r   r   r   r   r	   baser   r   platform	getLoggerr'   rj   rU   r*   r,   r+   rf   rX   r   r2   rN   r`   rd   ra   __annotations__rp   r.   r/   r0   <module>rz      s  $ # " " " " " "   				   



 H H H H H H H H H H H H H H H H 6 6 6 6 6 6 6 6 |w		8	$	$      	    I   .& & & & &4 & & &60 0 0W W W& #%%        r/   