
    <[j                     z   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 ej        dk    sJ ddlmZ  ej        e          Zd	Zd
ZdZedz  Z G d de
          Z G d de
          ZdZdZ dZ! e"            Z#e"e$         e%d<   d Z&d Z'd Z( G d dej)                  Z*dS )z'Implements raw HID interface on NetBSD.    )absolute_importN)	Structurec_charc_intc_ubytec_uint8c_uint16c_uint32   )basewin32)ioctl            c                   $    e Zd Zdefdedz  fgZdS )usb_ctl_report_desc	ucrd_size	ucrd_datai   N)__name__
__module____qualname__r   r   _fields_     X/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fido2/hid/netbsd.pyr   r   3   s)        	e	gn%HHHr   r   c                       e Zd Zdefdefdedz  fdefdeez  fdeez  fded	z  fd
ee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fdee	z  e
z  fdedz  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        	G	W	Wq[!	x 	!;;<	v ::;	
#	v ::;	(#	"	(#	g	!	!	w	g	W	e	u	"225GGH	gl#+HHHr   r   ipUDiUDl   h  _failed_cachec                     t          t                    } g }t          d          D ]}d|fz  }|                     |           	 t	          |          }n# t
          $ re}|j        t          j        k    rY d }~ n|t          vr7t          	                    d|d           t          
                    |           Y d }~d }~wt          $ rC |t          vr7t          	                    d|d           t          
                    |           Y w xY w|                    |           t                              |            |S )Nd   z/dev/uhid%dzFailed opening FIDO device %sT)exc_info)setr:   rangediscardget_descriptorOSErrorerrnoENOENTloggerdebugadd	Exceptionappenddifference_update)staledescriptorsipathdesces         r   list_descriptorsrQ   ^   s[   EK3ZZ ! !t#d	!$''DD 	 	 	w%,&&=((<dTRRR!!$'''HHHH 	 	 	=((<dTRRR!!$'''H		
 	4    ##E***s&   A
DB?:A B??ADDc           	         d }	 t          j        | t           j        t           j        z            }t	                      }t          |t          |           t                      }t          |t          |           t          |j
        d |j                           }t          j        |          \  }}|j        }|j        }	 |j                            d          }	n# t$          $ r d }	Y nw xY w	 |j                            d          }
n# t$          $ r d }
Y nw xY wt          j        | |||||	|
          |t          j        |           S S # |t          j        |           w w xY w)Nzutf-8)osopenO_RDONLY	O_CLOEXECr   r   USB_GET_DEVICE_INFOr   USB_GET_REPORT_DESCbytesr   r   r   parse_report_descriptorr+   r*   r%   decodeUnicodeDecodeErrorr)   HidDescriptorclose)rN   fddevinfoucrdreport_descmaxinmaxoutvidpidnameserials              r   rA   rA   y   ss   	BWT2;566!##b%w///"$$b%t,,,DN+;T^+;<==4[AAv"#	&--g66DD! 	 	 	DDD		'..w77FF! 	 	 	FFF	!$S%vNN>HRLLLL 2>HRLLLL sT   B:E ?C E C)&E (C))E -D E DE DE E$c                      t          |           S )N)NetBSDCtapHidConnection)
descriptors    r   open_connectionrl      s    ":...r   c                        e Zd Z fdZ xZS )rj   c                    t                                          |           	 t          | j        t          t          j        dd                     t          d          }t          g d          |dd<   t          d          D ]}| 	                    t          |                     t          j                    }|                    | j        t          j                   |                    d          r|                                   d S t!          d	          # t           $ r |                                   w xY w)
Nz@ir   @   )   rp   rp   rp      r   r   r      
   r<   zu2f ping timeout)super__init__r   handleUSB_HID_SET_RAWstructpack	bytearrayr?   write_packetrY   selectpollregisterPOLLINread_packetrH   r^   )selfrk   pingrM   r}   	__class__s        r   ru   z NetBSDCtapHidConnection.__init__   s'    	$$$	$+D!0D0DEEER==D!"F"F"FGGD1I2YY 4 4!!%++...{}}dk6=99999S>> $$&&&EE   2333 	 	 	JJLLL	s   C(D D  D>)r   r   r   ru   __classcell__)r   s   @r   rj   rj      s8                r   rj   )+__doc__
__future__r   rC   loggingrS   r|   rx   sysctypesr   r   r   r   r   r	   r
    r   platformfcntlr   	getLoggerr   rE   r9   r8   USB_MAX_STRING_LENr7   r   r   rW   rX   rw   r>   r:   str__annotations__rQ   rA   rl   FileCtapHidConnectionrj   r   r   r   <module>r      s   . - - & & & & & &   				   



                        |w      		8	$	$    /!3     )       i   4 !   
 #%%s3x     6  4/ / /    d8     r   