o
    sh0                     @  s  U d dl mZ ddlmZmZmZmZ d dlmZm	Z	 d dl
mZmZ d dlZd dlZd dlZd dlZejdks:J d dlmZmZ eeZe	eZejZejZejZG d	d
 d
ejZe d  dkrhdZne d  dkrsdZne de d   G dd dejZ!G dd dejZ"G dd dejZ#G dd dejZ$ej%Z&ej%Z'ej%Z(dde)ej% > d Z*dZ+dZ,dZ-ej.Z/dZ0dZ1dZ2dZ3dZ4dej5_6e7egej5_8ej9ej:_6e'e7e#gej:_8ej9ej;_6e'e7e(gej;_8ej9ej<_6e(gej<_8ej9ej=_6e'ej%ej>gej=_8ej9ej?_6e'ej%ej>gej?_8e/ej@_6e(e7e$gej@_8ejAejB_6e'ej%ej>gejB_8ejAejC_6e'ej%ej>gejC_8e7eejDejEejFgejG_8e&ejG_6ejAejH_6e&ej%e7eejFe7e!gejH_8ejAejI_6e&e7e!e7e"ejFe7ejFej%gejI_8ejAejJ_6e&gejJ_8e'ejK_6ejDejFejFej%ejFejFe'gejK_8ejAejL_6e'gejL_8G dd deZMdd  ZNd!d" ZOd#d$ ZPd%d& ZQd'd( ZReeeS ZTi ZUd)eVd*< d+d, ZWdS )-    )annotations   )HidDescriptorCtapHidConnectionFIDO_USAGE_PAGE
FIDO_USAGE)wintypesLibraryLoader)DictcastNwin32)WinDLLWinErrorc                   @  s4   e Zd Zdejfdejfdejfdejd fgZdS )GUIDData1Data2Data3Data4   N)__name__
__module____qualname__ctypesc_ulongc_ushortc_ubyte_fields_ r   r   L/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/hid/windows.pyr   -   s    r   64bitr   32bitzUnknown architecture: c                   @  s8   e Zd ZdejfdefdejfdeejfgZ	e
ZdS )DeviceInterfaceDatacbSizeInterfaceClassGuidFlagsReservedN)r   r   r   r   DWORDr   r   POINTERr   r   SETUPAPI_PACK_pack_r   r   r   r   r!   C   s    r!   c                   @  s(   e Zd Zdejfdejd fgZeZ	dS )DeviceInterfaceDetailDatar"   
DevicePathr   N)
r   r   r   r   r&   r   c_byter   r(   r)   r   r   r   r   r*   M   s    r*   c                   @  s0   e Zd ZdejfdejfdejfdejfgZdS )HidAttributesSizeVendorID	ProductIDVersionNumberN)r   r   r   r   r   r   r   r   r   r   r   r-   R   s    r-   c                	   @  sP   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d fdejd	 fgZd
S )HidCapabilitiesUsage	UsagePageInputReportByteLengthOutputReportByteLengthFeatureReportByteLengthr%      NotUsed
   N)r   r   r   r   r   r   r   r   r   r   r2   [   s    r2         i   i   @l           c                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
WinCtapHidConnectionc              	   C  s<   || _ t|jttB ttB d tdd | _	| j	t
krt d S )Nr   )
descriptorkernel32CreateFileApathGENERIC_WRITEGENERIC_READFILE_SHARE_READFILE_SHARE_WRITEOPEN_EXISTINGhandleINVALID_HANDLE_VALUEr   )selfr?   r   r   r   __init__   s   
	zWinCtapHidConnection.__init__c                 C  s   t | j d S N)r@   CloseHandlerH   )rJ   r   r   r   close   s   zWinCtapHidConnection.closec                 C  sd   d| }t  }t| j|t|t|d }|st |j	t|kr0t
ddt||j	f  d S )N    z"Failed to write complete packet.  zExpected %d, but got %d)r   r&   r@   	WriteFilerH   lenr   byrefr   valueOSError)rJ   packetoutnum_writtenretr   r   r   write_packet   s   z!WinCtapHidConnection.write_packetc                 C  sj   t | jjd }t }t| j|t	|t 
|d }|s!t |j| jjd kr.td|jdd  S )Nr   z.Failed to read full length report from device.)r   create_string_bufferr?   report_size_inr   r&   r@   ReadFilerH   rQ   rR   r   rS   rT   raw)rJ   bufnum_readrX   r   r   r   read_packet   s   z WinCtapHidConnection.read_packetN)r   r   r   rK   rN   rY   r`   r   r   r   r   r>      s
    r>   c                 C  s.   t  }t| t|}|st |j|jfS rL   )r-   hidHidD_GetAttributesr   rR   r   r/   r0   )device
attributesresultr   r   r   get_vid_pid   s
   rf   c              	   C  2   t d}t| |t t |}|sd S |jS N   )r   create_unicode_bufferra   HidD_GetProductStringr   sizeofrS   rc   r^   re   r   r   r   get_product_name   s
   
rn   c              	   C  rg   rh   )r   rj   ra   HidD_GetSerialNumberStringr   rl   rS   rm   r   r   r   
get_serial  s   
rp   c              	   C  s  t | dttB d tdd }|tkrt zhtd}t	|t
|}|s't zOt }t|t
|}|tkr;t |jtkrs|jtkrst|\}}t|}t|}|jd }	|jd }
t| |||	|
||W t| W t | S tdt| w t | w )Nr   r   zNot a CTAP device)r@   rA   rE   rF   rG   rI   r   PHIDP_PREPARSED_DATAra   HidD_GetPreparsedDatar   rR   r2   HidP_GetCapsHIDP_STATUS_SUCCESSr4   r   r3   r   rf   rn   rp   r5   r6   r   HidD_FreePreparsedDatarM   
ValueError)rB   rc   preparsed_datarX   capsvidpidproduct_nameserialsize_insize_outr   r   r   get_descriptor  sF   	

r   c                 C  s   t | S rL   )r>   )r?   r   r   r   open_connection8  s   r   zDict[bytes, HidDescriptor]_descriptor_cachec               	   C  s  t t} g }t }tt| tt|d d t	t
B }zd}t }tt|_	 t|dt||t|}|d7 }|sAnt }t|t|d dt|d }|rZt |j}|dkrbq*t|}	t|	}
tt|
_t|t|t|
|d d }|st t|
j}| | t|}|r|tur|| q*zt|}|t|< || W q* ty   Y n ty   t j!d|dd Y nw tt|< q+W t"| nt"| w | D ]}t|= q|S )Nr   Tr   z$Failed reading HID descriptor for %s)exc_info)#setr   r   ra   HidD_GetHidGuidr   rR   setupapiSetupDiGetClassDevsADIGCF_DEVICEINTERFACEDIGCF_PRESENTr!   rl   r"   SetupDiEnumDeviceInterfacesr   r&    SetupDiGetDeviceInterfaceDetailAr   rS   rZ   r*   from_buffer	string_atr+   discardget_SKIPappendr   rv   	ExceptionloggerdebugSetupDiDestroyDeviceInfoList)staledescriptorshid_guid
collectionindexinterface_infore   dw_detail_len
detail_lenr^   interface_detailrB   descr?   r   r   r   list_descriptors@  s   







9r   )X
__future__r   baser   r   r   r   r   r   r	   typingr
   r   platformloggingsysr   r   	getLoggerr   r   windllHidra   SetupAPIr   Kernel32r@   	Structurer   architecturer(   rT   r!   r*   r-   r2   c_void_pHDEVINFOHANDLErq   rl   rI   rE   rF   rG   c_longNTSTATUSrt   rC   rD   r   r   r   restyper'   argtypesBOOLEANrb   rr   ru   rk   r   ro   rs   BOOLHidD_GetFeatureHidD_SetFeaturec_char_pHWNDr&   r   r   r   r   rA   rM   r>   rf   rn   rp   r   r   objectr   r   __annotations__r   r   r   r   r   <module>   s   

	












	
/	
+