o
    s–hõ  ã                   @  s~   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZ eG dd„ deƒƒZG dd	„ d	ejƒZG d
d„ deƒZdS )é    )ÚannotationsN)ÚIntEnumÚunique)ÚEvent)ÚOptionalÚCallableÚIteratorc                   @  s   e Zd ZdZdZdZdS )ÚSTATUSz(Status code for CTAP keep-alive message.é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
PROCESSINGÚUPNEEDED© r   r   úE/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/ctap.pyr	   %   s    r	   c                   @  sj   e Zd ZdZeejddd„ƒƒZej			dddd„ƒZddd„Z	dd„ Z
dd„ Zeejddd„ƒƒZdS ) Ú
CtapDevicezµ
    CTAP-capable device.

    Subclasses of this should implement :func:`call`, as well as :func:`list_devices`,
    which should return a generator over discoverable devices.
    ÚreturnÚintc                 C  ó   dS )zGet device capabilitiesNr   ©Úselfr   r   r   Úcapabilities5   ó    zCtapDevice.capabilitiesó    NÚcmdÚdataÚbytesÚeventúOptional[Event]Úon_keepaliveú"Optional[Callable[[STATUS], None]]c                 C  r   )a)  Sends a command to the authenticator, and reads the response.

        :param cmd: The integer value of the command.
        :param data: The payload of the command.
        :param event: An optional threading.Event which can be used to cancel
            the invocation.
        :param on_keepalive: An optional callback to handle keep-alive messages
            from the authenticator. The function is only called once for
            consecutive keep-alive messages with the same status.
        :return: The response from the authenticator.
        Nr   )r   r   r   r    r"   r   r   r   Úcall:   r   zCtapDevice.callÚNonec                 C  r   )z/Close the device, releasing any held resources.Nr   r   r   r   r   ÚcloseN   r   zCtapDevice.closec                 C  s   | S ©Nr   r   r   r   r   Ú	__enter__Q   s   zCtapDevice.__enter__c                 C  s   |   ¡  d S r'   )r&   )r   ÚtypÚvalueÚ	tracebackr   r   r   Ú__exit__T   s   zCtapDevice.__exit__úIterator[CtapDevice]c                 C  r   )z4Generates instances of cls for discoverable devices.Nr   )Úclsr   r   r   Úlist_devicesW   r   zCtapDevice.list_devices©r   r   )r   NN)
r   r   r   r   r    r!   r"   r#   r   r   )r   r%   )r   r-   )r   r   r   r   ÚpropertyÚabcÚabstractmethodr   r$   r&   r(   r,   Úclassmethodr/   r   r   r   r   r   -   s     û
r   c                      sF   e Zd ZdZG dd„ deƒZeG dd„ deƒƒZd
‡ fdd	„Z	‡  Z
S )Ú	CtapErrorz;Error returned from the Authenticator when a command fails.c                   @  s2   e Zd ZdZdZeddd„ƒZdd„ Zd	d
„ ZdS )zCtapError.UNKNOWN_ERRz.CTAP error status code that is not recognized.ÚUNKNOWN_ERRr   r   c                 C  s   t | ƒS r'   )r   r   r   r   r   r*   e   s   zCtapError.UNKNOWN_ERR.valuec                 C  s   d|  S )Nz<ERR.UNKNOWN: %d>r   r   r   r   r   Ú__repr__i   s   zCtapError.UNKNOWN_ERR.__repr__c                 C  s   d| d›dS )NÚ0xÚ02Xz
 - UNKNOWNr   r   r   r   r   Ú__str__l   s   zCtapError.UNKNOWN_ERR.__str__Nr0   )	r   r   r   r   Únamer1   r*   r7   r:   r   r   r   r   r6   `   s    r6   c                   @  sè   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6d7„ Z8d8S )9zCtapError.ERRz¥CTAP status codes.

        https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#error-responses
        r   r
   r   é   é   é   é   é
   é   é   é   é   é   é   é   é   é!   é"   é#   é$   é%   é&   é'   é(   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   é   éß   éà   éï   éð   éÿ   c                 C  s   d| j d›d| j› S )Nr8   r9   z - )r*   r;   r   r   r   r   r:   ®   s   zCtapError.ERR.__str__N)9r   r   r   r   ÚSUCCESSÚINVALID_COMMANDÚINVALID_PARAMETERÚINVALID_LENGTHÚINVALID_SEQÚTIMEOUTÚCHANNEL_BUSYÚLOCK_REQUIREDÚINVALID_CHANNELÚCBOR_UNEXPECTED_TYPEÚINVALID_CBORÚMISSING_PARAMETERÚLIMIT_EXCEEDEDÚFP_DATABASE_FULLÚLARGE_BLOB_STORAGE_FULLÚCREDENTIAL_EXCLUDEDr   ÚINVALID_CREDENTIALÚUSER_ACTION_PENDINGÚOPERATION_PENDINGÚNO_OPERATIONSÚUNSUPPORTED_ALGORITHMÚOPERATION_DENIEDÚKEY_STORE_FULLÚUNSUPPORTED_OPTIONÚINVALID_OPTIONÚKEEPALIVE_CANCELÚNO_CREDENTIALSÚUSER_ACTION_TIMEOUTÚNOT_ALLOWEDÚPIN_INVALIDÚPIN_BLOCKEDÚPIN_AUTH_INVALIDÚPIN_AUTH_BLOCKEDÚPIN_NOT_SETÚPUAT_REQUIREDÚPIN_POLICY_VIOLATIONÚPIN_TOKEN_EXPIREDÚREQUEST_TOO_LARGEÚACTION_TIMEOUTÚUP_REQUIREDÚ
UV_BLOCKEDÚINTEGRITY_FAILUREÚINVALID_SUBCOMMANDÚ
UV_INVALIDÚUNAUTHORIZED_PERMISSIONÚOTHERÚ	SPEC_LASTÚEXTENSION_FIRSTÚEXTENSION_LASTÚVENDOR_FIRSTÚVENDOR_LASTr:   r   r   r   r   ÚERRo   sn    r    Úcoder   c                   sH   zt  |¡| _W n ty   t  |¡| _Y nw tƒ  d| j› ¡ d S )NzCTAP error: )r5   r    r¡   Ú
ValueErrorr6   ÚsuperÚ__init__)r   r¡   ©Ú	__class__r   r   r¤   ±   s   ÿzCtapError.__init__)r¡   r   )r   r   r   r   r   r6   r   r   r    r¤   Ú__classcell__r   r   r¥   r   r5   ]   s    Ar5   )Ú
__future__r   r2   Úenumr   r   Ú	threadingr   Útypingr   r   r   r	   ÚABCr   Ú	Exceptionr5   r   r   r   r   Ú<module>   s   0