
    <[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Zd dlZd dl	Z	d dl
m
Z
 d dlm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 ej        d
          Z ej        d          Z ej        d          Z ej         ed                    ZdZdZdZ dZ!dZ"dZ# G d dej$                  Z% G d de          Z&d Z'd Z(d Z)e G d d                      Z*d Z+d Z,d Z- e.            Z/d e0d!<   d" Z1dS )#    )annotationsN)array)find_library)	dataclass   )FileCtapHidConnectionHidDescriptorparse_report_descriptorwin32z/dev/zvendor=(0x[0-9a-fA-F]+)zproduct=(0x[0-9a-fA-F]+)zsernum="([^"]+)cl   U@  i U@iU  iU@i!U@i%U@@c                      e Zd Zdej        fdej        fdej        fdej        fdej        fdej        fdej        fdej        fd	ej        fd
ej        fdej        fdej        dz  fgZdS )usb_gen_descriptorugd_dataugd_lang_id
ugd_maxlen
ugd_actlen
ugd_offsetugd_config_indexugd_string_indexugd_iface_indexugd_altif_indexugd_endpt_indexugd_report_typereserved   N)__name__
__module____qualname__ctypesc_void_pc_uint16c_uint8_fields_     Y/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fido2/hid/freebsd.pyr   r   H   s         O	
 
(	v'	v'	v'	V^,	V^,	FN+	FN+	FN+	FN+	V^a'(HHHr%   r   c                       e Zd Z fdZ xZS )HidrawCtapHidConnectionc                P    t                                          d|z              d S )N    )superwrite_packet)selfdata	__class__s     r&   r,   z$HidrawCtapHidConnection.write_packet]   s%    UT\*****r%   )r   r   r   r,   __classcell__)r/   s   @r&   r(   r(   \   s8        + + + + + + + + +r%   r(   c                    | j                             t          dz             dk    rt          |           S t	          |           S )Nhidrawr   )pathfinddevdirr(   r   )
descriptors    r&   open_connectionr7   b   s>    FX-..!33&z222$Z000r%   c                N   t          j        d          }t          t          j        |          t          j        |          |          }t
                              | t          t          j        |                    }|dk    rt          d          |j
        d |j                 S )Ni   )r   r   r   r   zioctl failed)r   create_string_bufferr   	addressofsizeoflibcioctlUSB_GET_REPORT_DESCbyref
ValueErrorrawr   )fdreport_typer.   descrets        r&   _get_report_datarF   i   s    &t,,D!$''=&&#  D
 **R,fl4.@.@
A
AC
axx(((8%do%&&r%   c           	         t          j        |t           j                  }t          |d          }t          j        |           t          |          \  }}t          || |||||          S )N   )osopenO_RDONLYrF   closer
   r	   )	vidpidnameserialr3   rB   r.   max_in_sizemax_out_sizes	            r&   _read_descriptorrS   v   s]    	r{	#	#BB""DHRLLL 7 = =KsClD&QQQr%   c                  \    e Zd ZU ded<   ded<   dZded<   dZded<   dZded	<   dZded
<   dS )_UhidDevicestrrO   r3   Nz
int | None	vendor_id
product_idz
str | Noneserial_numberproduct_desc)r   r   r   __annotations__rW   rX   rY   rZ   r$   r%   r&   rU   rU   ~   sh         IIIIII I    !J!!!! $M$$$$#L######r%   rU   c            	   #  H  K   t          j         t          dz             D ]} | t          t                    t          d          z   d          }|                                sDd|z   dz                                   }d|z   dz                                   }t          j        d          }t          j        t          j        |                    }t          j	        |          }t                              ||t          j        |          d d           }|dk    r| t          t                    d          }| }	|j        d |j                                                 }
t                              |
          }|r#t#          |                    d          d	          nd }t&                              |
          }|r#t#          |                    d          d	          nd }t(                              |
          }|r|                    d          nd }t          j	        |          }t                              ||t          j        |          d d           }|dk    r)|j        d |j                                                 pd }nd }t+          ||	||||          V  d S )
Nzuhid?*uhidz	dev.uhid.z	.%pnpinfoz.%desci   r   r      )globr5   lenisdigitencoder   r9   c_size_tr;   c_char_pr<   sysctlbynamer?   valuedecode	vendor_researchintgroup
product_re	sernum_rerU   )r]   indexpnpinforD   ovalueolenkeyretvaldev_namedev_pathrf   mdev_vendor_iddev_product_iddev_serial_numberdev_product_descs                   r&   
_enumerater{      sn     	&8+,, *
 *
S[[3v;;.001}} 	&4<<>>e#h.6688,T22v}V4455og&&""3T0B0BD$OOQ;;F&\tz\*1133U##/0:AGGAJJ+++de$$01;QWWQZZ,,,tU##*+5AGGAJJJod##""3T0B0BD$OOQ;;%|LdjL9@@BBJd#
 
 	
 	
 	
 	
G*
 *
r%   c           	     x   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          dz   }|dk    r-t          |d |dz
                     
                    d	          nd }	 t          ddgd
z            }t          j        |t          |d           |                    d          dz   }|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   r   Tz<IHH   r   zutf-8A      z<I)rJ   r   fcntlr=   HIDIOCGRAWINFOstructunpackHIDIOCGRAWNAME_128rn   	bytearrayrg   HIDIOCGRAWUNIQ_64OSErrorHIDIOCGRDESCSIZEHIDIOCGRDESCbytesr
   r	   )r3   fbuf_rM   rN   lengthrO   rP   sizer.   rQ   rR   s                r&   get_hidraw_descriptorr      s{   	dD		 0QC!	*++A~sD111mFC003 C!s##A)35551!AG!y^
^,--44W===QU	aS2X&&CK,c4888YYq\\A%FBH1**	#n!n-..55g>>>RV F  	 	 	FFF	 C!q!!A'd333}T3''*uS1#*%%%A|S$///?0 0 0 0 0 0 0 0 0 0 0 0 0 0 0B QRR>>D 7 = =KsClD&QQQs8   CG3A=EG3E&#G3%E&&BG33G7:G7c                   |                      t          dz             dk    rt          |           S t                      D ];}|j        | k    r.t          |j        |j        |j        |j	        |j                  c S <t          d          )Nr2   r   zDevice not found)r4   r5   r   r{   r3   rS   rW   rX   rO   rY   r@   )r3   devs     r&   get_descriptorr      s    yy("##q(($T***||  8t#s~sx9JCH      '
(
((r%   zset[str]_failed_cachec            
     x   t          t                    } g }t          j        t          dz             D ]}|                     |           	 |                    t          |                     ;# t          $ r Y Gt          $ rC |t          vr7t          
                    d|d           t                              |           Y w xY w|st                      D ]}|                     |j                   	 |                    t          |j        |j        |j        |j        |j                             ]# t          $ r Y it          $ rR |j        t          vrAt          
                    d|j        d           t                              |j                   Y w xY wt                              |            |S )Nzhidraw?*zFailed opening device %sT)exc_infozFailed opening HID device %s)setr   r_   r5   discardappendr   r@   	Exceptionloggerdebugaddr{   r3   rS   rW   rX   rO   rY   difference_update)staledescriptorsr2   r   s       r&   list_descriptorsr      s   EK)FZ/00 	* 	*f	*~f556666 	 	 	D 	* 	* 	*]**7$OOO!!&)))	*
  0<< 	0 	0CMM#(###0""$)         0 0 08=00LL64 !    "%%ch///0 ##E***s2   "A..
C:A	CC6?D66
FAFF)2
__future__r   r   r   r_   loggingrI   rer   sysr   ctypes.utilr   dataclassesr   baser   r	   r
   platform	getLoggerr   r   r5   compilerh   rl   rm   CDLLr<   r>   r   r   r   r   r   	Structurer   r(   r7   rF   rS   rU   r{   r   r   r   r   r[   r   r$   r%   r&   <module>r      s}  > # " " " " " "     				 				  



       $ $ $ $ $ $ ! ! ! ! ! ! O O O O O O O O O O |w		8	$	$ 
BJ011	RZ233
BJ())	v{<<$$%% !         )   (+ + + + +3 + + +1 1 1
' 
' 
'R R R $ $ $ $ $ $ $ $+
 +
 +
\$R $R $RN	) 	) 	) #%%    ' ' ' ' 'r%   