
    <[j                        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 ddlm	Z	m
Z
mZ ej        dk    sJ  ej        e          ZdZdZd	Zd
ZdZ G d de	          Zd Zd Z e            Zded<   d ZdS )    )annotationsN)array   )FileCtapHidConnectionHidDescriptorparse_report_descriptorwin32l   H  l   H  l   H  l   H  l   H  c                       e Zd Z fdZ xZS )LinuxCtapHidConnectionc                P    t                                          d|z              d S )N    )superwrite_packet)selfdata	__class__s     W/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fido2/hid/linux.pyr   z#LinuxCtapHidConnection.write_packet+   s%    UT\*****    )__name__
__module____qualname__r   __classcell__)r   s   @r   r   r   *   s8        + + + + + + + + +r   r   c                     t          |           S )N)r   )
descriptors    r   open_connectionr   0   s    !*---r   c           	        t          | d          5 }t          ddgdz            }t          j        |t          |d           t          j        d|          \  }}}t          ddgdz            }t          j        |t          |d          }|dk    r-t          |d |dz
                     	                    d	          nd }	 t          ddgd
z            }t          j        |t          |d          }|dk    r-t          |d |dz
                     	                    d	          nd }n# t          $ r d }Y nw xY wt          ddgdz            }t          j        |t          |d           t          j        d|          d         }	|t          ddg|	z            z  }t          j        |t          |d           d d d            n# 1 swxY w Y   t          |dd                    }
t          |
          \  }}t!          | ||||||          S )NrbBr      Tz<IHH   r   zutf-8@      z<I)openr   fcntlioctlHIDIOCGRAWINFOstructunpackHIDIOCGRAWNAME	bytearraydecodeHIDIOCGRAWUNIQOSErrorHIDIOCGRDESCSIZEHIDIOCGRDESCbytesr   r   )pathfbuf_vidpidlengthnameserialsizer   max_in_sizemax_out_sizes                r   get_descriptorr=   4   sN   	dD		 0QC!	*++A~sD111mFC003 C!s##QT::AG!y^
^,--44W===QU	aS2X&&C[NC>>FBH1**	#n!n-..55g>>>RV F  	 	 	FFF	 C!q!!A'd333}T3''*uS1#*%%%A|S$///50 0 0 0 0 0 0 0 0 0 0 0 0 0 08 QRR>>D 7 = =KsClD&QQQs8   B/GA%D'&G'D63G5D66BGG
Gzset[str]_failed_cachec                    t          t                    } g }t          j        d          D ]}|                     |           	 |                    t          |                     ;# t          $ r Y Gt          $ rC |t          vr7t          	                    d|d           t          
                    |           Y w xY wt                              |            |S )Nz/dev/hidraw*zFailed opening device %sT)exc_info)setr>   globdiscardappendr=   
ValueError	Exceptionloggerdebugadddifference_update)staledeviceshidraws      r   list_descriptorsrN   Z   s    EG)N++ 	* 	*f	*NN>&112222 	 	 	D 	* 	* 	*]**7$OOO!!&)))	* ##E***Ns   "A&&
B>2A	B>=B>)
__future__r   r$   rB   loggingr'   sysr   baser   r   r   platform	getLoggerr   rG   r&   r.   r/   r)   r,   r   r   r=   rA   r>   __annotations__rN    r   r   <module>rW      s;  $ # " " " " " "     



       O O O O O O O O O O |w		8	$	$  + + + + +2 + + +. . .R R RF #%%        r   