o
    s–hº!  ã                   @  s^  U d dl m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
 ddlmZmZmZ d dlZd dlZd dlmZmZmZmZ ejdksPJ ‚e e¡Zd	Ze d
¡Ze d¡Ze d¡Ze edƒ¡Z dZ!dZ"dZ#dZ$dZ%dZ&G dd„ dej'ƒZ(G dd„ deƒZ)dd„ Z*dd„ Z+dd„ Z,dd„ Z-d d!„ Z.d"d#„ Z/e0ƒ Z1d$e2d%< d&d'„ Z3dS )(é    )Úannotations)Úfind_libraryN)Úarrayé   )ÚHidDescriptorÚparse_report_descriptorÚFileCtapHidConnection)ÚDictÚOptionalÚSetÚUnionÚ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                   @  st   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 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_© r%   r%   úL/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/hid/freebsd.pyr   I   s     þñr   c                      s   e Zd Z‡ fdd„Z‡  ZS )ÚHidrawCtapHidConnectionc                   s   t t| ƒ d| ¡ d S )Nó    )Úsuperr'   Úwrite_packet)ÚselfÚpacket©Ú	__class__r%   r&   r*   ^   s   z$HidrawCtapHidConnection.write_packet)r   r   r   r*   Ú__classcell__r%   r%   r-   r&   r'   ]   s    r'   c                 C  s$   | j  td ¡dkrt| ƒS t| ƒS )NÚhidrawr   )ÚpathÚfindÚdevdirr'   r   )Ú
descriptorr%   r%   r&   Úopen_connectionc   s   r5   c                 C  sX   t  d¡}tt  |¡t  |¡|d}t | tt  |¡¡}|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_typeÚdataÚdescÚretr%   r%   r&   Ú_get_report_dataj   s   
ýrD   c           	      C  sB   t  |t j¡}t|dƒ}t  |¡ t|ƒ\}}t|| |||||ƒS )Né   )ÚosÚopenÚO_RDONLYrD   Úcloser   r   )	ÚvidÚpidÚnameÚserialr1   r?   rA   Úmax_in_sizeÚmax_out_sizer%   r%   r&   Ú_read_descriptorw   s
   

rP   c                  c  sŽ   t   td ¡D ]¼} | ttƒtdƒ d … }| ¡ sqd| d  ¡ }d| d  ¡ }t d¡}t t |¡¡}t 	|¡}t
 ||t |¡d d ¡}|dkrNqi }| ttƒd … |d< | |d	< |jd |j…  ¡ }	t |	¡}
|
rwt|
 d
¡dƒnd |d< t |	¡}
|
rŠt|
 d
¡dƒnd |d< t |	¡}
|
rš|
 d
¡nd |d< t 	|¡}t
 ||t |¡d d ¡}|dkrÁ|jd |j…  ¡ p¾d |d< |V  qd S )Nzuhid?*Úuhidz	dev.uhid.z	.%pnpinfoz.%desci   r   rL   r1   r   é   Ú	vendor_idÚ
product_idÚserial_numberÚproduct_desc)Úglobr3   ÚlenÚisdigitÚencoder    r6   Úc_size_tr8   Úc_char_pr9   Úsysctlbynamer<   ÚvalueÚdecodeÚ	vendor_reÚsearchÚintÚgroupÚ
product_reÚ	sernum_re)rQ   ÚindexÚpnpinforB   ÚovalueÚolenÚkeyÚretvalÚdevr^   Úmr%   r%   r&   Ú
_enumerate   s:   €





Þrn   c              	   C  s¤  t | dƒ­}tddgd ƒ}t |t|d¡ t d|¡\}}}tddgd ƒ}t |t|d¡ | d¡d }|dkrGt	|d |d … ƒ 
d	¡nd }z,tddgd
 ƒ}t |t|d¡ | d¡d }|dkrrt	|d |d … ƒ 
d	¡nd }W n ty€   d }Y nw tddgd ƒ}t |t|d¡ t d|¡d }	|tddg|	 ƒ7 }t |t|d¡ W d   ƒ n1 sµw   Y  t	|dd … ƒ}
t|
ƒ\}}t| ||||||ƒS )NÚrbÚBr   r   Tz<IHHé   r   zutf-8éA   é   z<I)rG   r   Úfcntlr:   ÚHIDIOCGRAWINFOÚstructÚunpackÚHIDIOCGRAWNAME_128rf   Ú	bytearrayr_   ÚHIDIOCGRAWUNIQ_64ÚOSErrorÚHIDIOCGRDESCSIZEÚHIDIOCGRDESCr   r   )r1   ÚfÚbufÚ_rJ   rK   ÚlengthrL   rM   ÚsizerA   rN   rO   r%   r%   r&   Úget_hidraw_descriptor¥   s4   &$ÿÿá!rƒ   c                 C  s‚   |   td ¡dkrt| ƒS tƒ D ],}|d | kr<|d }|d }|d p%d }d|v r.|d nd p1d }t||||| ƒ  S qtdƒ‚)	Nr0   r   r1   rS   rT   rV   rU   zDevice not found)r2   r3   rƒ   rn   rP   r=   )r1   rl   rJ   rK   rL   rM   r%   r%   r&   Úget_descriptorÌ   s   
ûr„   zSet[str]Ú_failed_cachec               	   C  s:  t tƒ} g }t td ¡D ]2}|  |¡ z	| t|ƒ¡ W q ty&   Y q ty?   |tvr=t	j
d|dd t |¡ Y qw |s–tƒ D ]P}|d }|  |¡ z#|d pVd }d|v r_|d nd pbd }| t|d |d	 |||ƒ¡ W qE ty|   Y qE ty•   |tvr“t	j
d
|dd t |¡ Y qEw t | ¡ |S )Nzhidraw?*zFailed opening device %sT)Úexc_infor1   rV   rU   rS   rT   zFailed opening HID device %s)Úsetr…   rW   r3   ÚdiscardÚappendr„   r=   Ú	ExceptionÚloggerÚdebugÚaddrn   rP   Údifference_update)ÚstaleÚdescriptorsr0   rl   r1   rL   rM   r%   r%   r&   Úlist_descriptorsÞ   sV   

€ý

ÿþûÿ	
€ý
r‘   )4Ú
__future__r   Úctypes.utilr   r    rt   rW   Úrerv   rF   r   Úbaser   r   r   ÚloggingÚsysÚtypingr	   r
   r   r   ÚplatformÚ	getLoggerr   r‹   r3   Úcompiler`   rd   re   ÚCDLLr9   r;   ru   r}   r|   rx   rz   Ú	Structurer   r'   r5   rD   rP   rn   rƒ   r„   r‡   r…   Ú__annotations__r‘   r%   r%   r%   r&   Ú<module>   sH   



&'