o
    sh                     @  s   d dl m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
Z
dZdZeG dd dZG d	d
 d
e	jZG dd deZdZe ZdZdZdZdZdZdZdZdddZdS )    )annotations)	dataclass)TupleUnionOptionalNi     c                   @  sF   e Zd ZU ded< ded< ded< ded< ded< ded	< ded
< dS )HidDescriptorzUnion[str, bytes]pathintvidpidreport_size_inreport_size_outzOptional[str]product_nameserial_numberN)__name__
__module____qualname____annotations__ r   r   I/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/hid/base.pyr   (   s   
 r   c                   @  s<   e Zd ZejdddZejdddZejdd	d
ZdS )CtapHidConnectionreturnbytesc                 C     dS )zReads a CTAP HID packetNr   selfr   r   r   read_packet4       zCtapHidConnection.read_packetdataNonec                 C  r   )zWrites a CTAP HID packetNr   )r   r   r   r   r   write_packet8   r   zCtapHidConnection.write_packetc                 C  r   )zCloses the connectionNr   r   r   r   r   close<   r   zCtapHidConnection.closeN)r   r   )r   r   r   r    )r   r    )r   r   r   abcabstractmethodr   r!   r"   r   r   r   r   r   3   s    r   c                   @  s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )FileCtapHidConnectionzMBasic CtapHidConnection implementation which uses a path to a file descriptorc                 C  s   t |jt j| _|| _d S N)osopenr	   O_RDWRhandle
descriptor)r   r+   r   r   r   __init__D   s   
zFileCtapHidConnection.__init__c                 C  s   t | j d S r&   )r'   r"   r*   r   r   r   r   r"   H   s   zFileCtapHidConnection.closec                 C  s"   t | j|t|krtdd S )Nzfailed to write entire packet)r'   writer*   lenOSError)r   packetr   r   r   r!   K   s   z"FileCtapHidConnection.write_packetc                 C  s   t | j| jjS r&   )r'   readr*   r+   r   r   r   r   r   r   O   s   z!FileCtapHidConnection.read_packetN)r   r   r   __doc__r,   r"   r!   r   r   r   r   r   r%   A   s    r%                  t         r   r   r   Tuple[int, int]c                 C  sl  d\}}d\}}d\}}d}| r|rt d| d | dd  }} t|@ t|@ }	}
t d| d |
 ddd }| |
d  } |d uru|d uru|	tkr_|d u r^|| d }d\}}|d8 }n|	tkru|d u ru|| d }d\}}|d8 }|	tkr|s|}|d8 }n|	tkr|s|}|d8 }n|	t	kr|s|}n|	t
kr|s|}| r|s|s|tkr|tkr||fS td	)
N)NNr9   z>Br   r   z<I    r:   zNot a FIDO device)structunpack_fromREPORT_DESCRIPTOR_KEY_MASK	SIZE_MASKljust
INPUT_ITEMOUTPUT_ITEM
USAGE_PAGEUSAGEREPORT_COUNTREPORT_SIZEFIDO_USAGE_PAGE
FIDO_USAGE
ValueError)r   usage
usage_pagemax_input_sizemax_output_sizereport_countreport_size	remainingheadkeysizevaluer   r   r   parse_report_descriptor^   sT     rV   )r   r   r   r;   )
__future__r   dataclassesr   typingr   r   r   r=   r#   r'   rH   rI   r   ABCr   r%   r?   r@   rC   rB   COLLECTION_ITEMrF   rG   rD   rE   rV   r   r   r   r   <module>   s,   
