
    Dj)1                    	   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mZ ddlm	Z	m
Z
mZmZ ej        dk    sJ d dlmZmZ  ej        e          ZdZ ej        d	e
          Z ej        de
          Z ej        de
          Z G d dej                  Z ej                    d          dk    rdZn= ej                    d          dk    rdZn! ed ej                    d                      G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Zej         Z!ej         Z"ej         Z#dd ej$        ej                   z  z  dz
  Z%dZ&dZ'dZ(ej)        Z*dZ+dZ,dZ-d Z.dZ/dej0        _1         ej2        e          gej0        _3        ej4        ej5        _1        e" ej2        e          gej5        _3        ej4        ej6        _1        e" ej2        e#          gej6        _3        ej4        ej7        _1        e#gej7        _3        ej4        ej8        _1        e"ej         ej9        gej8        _3        ej4        ej:        _1        e"ej         ej9        gej:        _3        e*ej;        _1        e# ej2        e          gej;        _3        ej<        ej=        _1        e"ej         ej9        gej=        _3        ej<        ej>        _1        e"ej         ej9        gej>        _3         ej2        e          ej?        ej@        ejA        gejB        _3        e!ejB        _1        ej<        ejC        _1        e!ej          ej2        e          ejA         ej2        e          gejC        _3        ej<        ejD        _1        e! ej2        e           ej2        e          ejA         ej2        ejA                  ej         gejD        _3        ej<        ejE        _1        e!gejE        _3        e"ejF        _1        ej?        ejA        ejA        ej         ejA        ejA        e"gejF        _3        ej<        ejG        _1        e"gejG        _3         G d! d"e          ZHd# ZId$ ZJd% ZKd& ZLd' ZM ee eN                      ZOi ZPd(eQd)<   d* ZRdS )+    )annotationsN)cast   )
FIDO_USAGEFIDO_USAGE_PAGECtapHidConnectionHidDescriptorwin32)WinErrorwintypesi   hid)winmodesetupapikernel32c                  X    e Zd Zdej        fdej        fdej        fdej        dz  fgZdS )GUIDData1Data2Data3Data4   N)__name__
__module____qualname__ctypesc_ulongc_ushortc_ubyte_fields_     L/home/thesage/.hermes/venv/lib/python3.11/site-packages/fido2/hid/windows.pyr   r   +   sB        	&.!	&/"	&/"	&.1$%	HHHr!   r   64bitr   32bitzUnknown architecture: c                  h    e Zd Zdej        fdefdej        fd ej        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&   A   sN        	8>"	t$	(.!	^V^FN334	H FFFr!   r&   c                  <    e Zd Zdej        fdej        dz  fgZeZ	dS )DeviceInterfaceDetailDatar'   
DevicePathr   N)
r   r   r   r   r+   r   c_byter   r-   r.   r    r!   r"   r0   r0   K   s0        8>*\6=1;L,MNHFFFr!   r0   c                  R    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"   r4   r4   P   s=        	 	V_%	fo&	&/*	HHHr!   r4   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        dz  fdej        d	z  fgZd
S )HidCapabilitiesUsage	UsagePageInputReportByteLengthOutputReportByteLengthFeatureReportByteLengthr*      NotUsed
   N)r   r   r   r   r   r   r    r!   r"   r:   r:   Y   se        	&/"	fo&	 &/2	!6?3	"FO4	V_r)*	FOb()HHHr!   r:         i   i   @l           c                  &    e Zd Zd Zd Zd Zd ZdS )WinCtapHidConnectionc           	         || _         t                              |j        t          t
          z  t          t          z  d t          dd           | _	        | j	        t          k    rt                      d S )Nr   )
descriptorr   CreateFileApathGENERIC_WRITEGENERIC_READFILE_SHARE_READFILE_SHARE_WRITEOPEN_EXISTINGhandleINVALID_HANDLE_VALUEr   )selfrI   s     r"   __init__zWinCtapHidConnection.__init__   sd    $**OL(..
 
 ;...** /.r!   c                D    t                               | j                   d S N)r   CloseHandlerQ   )rS   s    r"   closezWinCtapHidConnection.close   s    T[)))))r!   c                \   d|z   }t          j                    }t                              | j        |t          |          t          j        |          d           }|st                      |j	        t          |          k    r)t          ddt          |          |j	        fz  z             d S )N    z"Failed to write complete packet.  zExpected %d, but got %d)r   r+   r   	WriteFilerQ   lenr   byrefr   valueOSError)rS   dataoutnum_writtenrets        r"   write_packetz!WinCtapHidConnection.write_packet   s    dln&&  Kc#hh[(A(A4
 
  	**C((4+s3xx9J.KKL   )(r!   c                z   t          j        | j        j        dz             }t	          j                    }t                              | j        |t          |          t          j
        |          d           }|st                      |j        | j        j        dz   k    rt          d          |j        dd          S )Nr   z.Failed to read full length report from device.)r   create_string_bufferrI   report_size_inr   r+   r   ReadFilerQ   r\   r]   r   r^   r_   raw)rS   bufnum_readrc   s       r"   read_packetz WinCtapHidConnection.read_packet   s    )$/*H1*LMM>##Kc#hhX(>(>
 
  	**>T_;a???JKKKwqrr{r!   N)r   r   r   rT   rX   rd   rl   r    r!   r"   rG   rG      sP          * * *      r!   rG   c                    t                      }t                              | t          j        |                    }|st                      |j        |j        fS rV   )r4   r   HidD_GetAttributesr   r]   r   r6   r7   )device
attributesresults      r"   get_vid_pidrr      sM    J##FFL,D,DEEF jj
 444r!   c           	         t          j        d          }t                              | |t          j        t          j        |                              }|sd S |j        S N   )r   create_unicode_bufferr   HidD_GetProductStringr   sizeofr^   ro   rj   rq   s      r"   get_product_namerz      sS    

&s
+
+C&&vsFN6=QTCUCU4V4VWWF t9r!   c           	         t          j        d          }t                              | |t          j        t          j        |                              }|sd S |j        S rt   )r   rv   r   HidD_GetSerialNumberStringr   rx   r^   ry   s      r"   
get_serialr}      sY    

&s
+
+C++V^FM#$6$677 F  t9r!   c           	        t                               | dt          t          z  d t          dd           }|t
          k    rt                      	 t          d          }t          	                    |t          j        |                    }|st                      	 t                      }t                              |t          j        |                    }|t          k    rt                      |j        t           k    r|j        t$          k    rt'          |          \  }}t)          |          }t+          |          }|j        dz
  }	|j        dz
  }
t1          | |||	|
||          t                              |           t                               |           S t7          d          # t                              |           w xY w# t                               |           w xY w)Nr   r   zNot a CTAP device)r   rJ   rN   rO   rP   rR   r   PHIDP_PREPARSED_DATAr   HidD_GetPreparsedDatar   r]   r:   HidP_GetCapsHIDP_STATUS_SUCCESSr<   r   r;   r   rr   rz   r}   r=   r>   r	   HidD_FreePreparsedDatarW   
ValueError)rK   ro   preparsed_datarc   capsvidpidproduct_nameserialsize_insize_outs              r"   get_descriptorr     s   !!	**	 F %%%jj%-a00''^0L0LMM 	**	7"$$D"">6<3E3EFFC)))jj ~00TZ:5M5M&v..S/77#F++4q86:$#sGX|V  &&~666V$$$$ 0111 &&~6666V$$$$s,   AG	 CF* &G	 F* *GG	 	G%c                     t          |           S rV   )rG   )rI   s    r"   open_connectionr   6  s    
+++r!   zdict[bytes, HidDescriptor]_descriptor_cachec            	        t          t                    } g }t                      }t                              t          j        |                     t                              t          j        |          d d t          t          z            }	 d}t                      }t          j        t                    |_        	 t                              |dt          j        |          |t          j        |                    }|dz  }|snt          j                    }t                              |t          j        |          d dt          j        |          d           }|rt%                      |j        }|dk    rt          j        |          }	t*                              |	          }
t          j        t*                    |
_        t                              |t          j        |          t          j        |
          |d d           }|st%                      t          j        |
j                  }|                     |           t                              |          }|r |t6          ur|                    |           	 t;          |          }|t          |<   |                    |           # t<          $ r Y n,t>          $ r  t@          !                    d|d           Y nw xY wt6          t          |<   B	 t          "                    |           n# t          "                    |           w xY w| D ]
}t          |= |S )Nr   Tr   z$Failed reading HID descriptor for %s)exc_info)#setr   r   r   HidD_GetHidGuidr   r]   r   SetupDiGetClassDevsADIGCF_DEVICEINTERFACEDIGCF_PRESENTr&   rx   r'   SetupDiEnumDeviceInterfacesr   r+    SetupDiGetDeviceInterfaceDetailAr   r^   rf   r0   from_buffer	string_atr1   discardget_SKIPappendr   r   	ExceptionloggerdebugSetupDiDestroyDeviceInfoList)staledescriptorshid_guid
collectionindexinterface_inforq   dw_detail_len
detail_lenrj   interface_detailrK   descrI   s                 r"   list_descriptorsr   >  sE   !""EKvvHX..///..Xd,AM,Q JH:,.. &.A B BA	,99X&&^,, F QJE $N,,M>>^,,]++ F  !jj &,JQ-j99C8DDSII&,m4M&N&N#>>^,,-.. F  !jj #$4$?@@DMM$ %((..D u$$&&t,,,
+D11
*4!$'"":...      :D4       ',d#CA	, r 	--j9999--j9999  $ $d##s=   G7L .J6 4L 6
K+ L &K+(L *K++L L7)S
__future__r   r   loggingplatformsystypingr   baser   r   r   r	   r   r   	getLoggerr   r   LOAD_LIBRARY_SEARCH_SYSTEM32WinDLLr   r   r   	Structurer   architecturer-   r_   r&   r0   r4   r:   c_void_pHDEVINFOHANDLEr   rx   rR   rN   rO   rP   c_longNTSTATUSr   rL   rM   r   r   r   restyper,   argtypesBOOLEANrn   r   r   rw   r   r|   r   BOOLHidD_GetFeatureHidD_SetFeaturec_char_pHWNDr+   r   r   r   r   rJ   rW   rG   rr   rz   r}   r   r   objectr   r   __annotations__r   r    r!   r"   <module>r      s&  $ # " " " " " "    



       O O O O O O O O O O O O |w % % % % % % % %		8	$	$  * fmE#?@@@6=-IJJJ6=-IJJJ    6    81((MMXQ7**MM
'G+@8+@+B+B1+EGG
H
HH    &*        0   
    F$   	 	 	 	 	f& 	 	 	 ?	  Qv!?!???1D   =     #   .t 4 45  !)!1  #)>6>-+H+H"I  $,$4  !&,nfn=Q.R.R%S  "%-%5  "';&<  #$,$4  !&,fov~%N  ")1)9  &+16?FN*S  '#  1>6>/3R3RS   'm   &H  &m   &H   FN4
OMN	*  & )1  %/7} $ ,
OFN4NFN&''1 $ - 5=M ) 1FN&''FN,--NFN8>""
O6 ) 2 19 % -2 % .  &  
ONN
ONN
!    (}  !'  , , , , ,, , , ,^5 5 5  	 	 	(% (% (%V, , , 	]FFHH%%02  2 2 2 2X X X X Xr!   