
    DjZ                       d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
mZ d dlmZmZmZmZ ddlmZ ddlmZmZ dd	lmZmZmZmZmZ 	  G d
 de          Z ed          e_         edd           G d de                      Z edd           G d de                      Z  edd           G d de                      Z! G d de	          Z" G d de#ee"          Z$ edd           G d de                      Z%e G d de$                      Z&e G d d e$                      Z'e G d! d"e$                      Z(e G d# d$e$                      Z)e G d% d&e$                      Z*e G d' d(e$                      Z+e G d) d*e$                      Z,dMd/Z- eddd0           G d1 d2e                      Z. eddd0           G d3 d4e                      Z/ eddd0           G d5 d6e                      Z0 eddd0           G d7 d8e                      Z1 eddd0           G d9 d:e                      Z2 eddd0           G d; d<e                      Z3 eddd0           G d= d>e                      Z4 eddd0           G d? d@e                      Z5 eddd0           G dA dBe                      Z6 G dC dDee#ef                   Z7 eddd0           G dE dFe                      Z8 eddd0           G dG dHe                      Z9 eddd0           G dI dJe                      Z: eddd0           G dK dLe                      Z;dS )N    )annotationsN)	dataclassfield)EnumEnumMetaIntFlagunique)AnyMappingSequencecast   )cbor)ES256CoseKey)
ByteBuffer_JsonDataObjectsha256websafe_decodewebsafe_encodec                  L    e Zd ZU ddZd Zd Zd Zedd
            Zd e	d<   dS )Aaguiddatabytesc                J    t          |           dk    rt          d          d S )N   zAAGUID must be 16 bytes)len
ValueError)selfr   s     I/home/thesage/.hermes/venv/lib/python3.11/site-packages/fido2/webauthn.py__init__zAaguid.__init__A   s'    t99??6777 ?    c                "    | t           j        k    S N)r   NONEr   s    r    __bool__zAaguid.__bool__E   s    v{""r"   c                    |                                  }|d d          d|dd          d|dd          d|dd          d|dd           	S )N   -   r      )hex)r   hs     r    __str__zAaguid.__str__H   sc    HHJJBQB%BB!AbD'BBAbeHBBqBxBB!BCC&BBBr"   c                (    dt          |            dS )NzAAGUID())strr&   s    r    __repr__zAaguid.__repr__L   s    %T%%%%r"   valuer2   returnc                T    |                      |                    dd                    S )Nr*    )fromhexreplaceclsr4   s     r    parsezAaguid.parseO   s"    {{5==b11222r"   r%   N)r   r   )r4   r2   r5   r   )
__name__
__module____qualname__r!   r'   r/   r3   classmethodr<   __annotations__ r"   r    r   r   @   s         8 8 8 8# # #C C C& & & 3 3 3 [3 LLLLLr"   r   s                   FT)initfrozenc                       e Zd ZU ded<   ded<   ded<   d fdZd	 Zedd            Zedd            Z	edd            Z
edd            Z xZS )AttestedCredentialDatar   aaguidr   credential_idr   
public_key_c                v   t                                                       t                              |           }t                              | d|d                    t                              | d|d                    t                              | d|d                    |d         rt          d          d S )	NrG   r   rH   r   rI         Wrong length)superr!   rF   _parseobject__setattr__r   )r   rJ   parsed	__class__s      r    r!   zAttestedCredentialData.__init__`   s    '..t4446!95554&)<<<4vay999!9 	-^,,,	- 	-r"   c                     t          |           S r$   reprr&   s    r    r/   zAttestedCredentialData.__str__j       Dzzr"   r   r5   #tuple[bytes, bytes, CoseKey, bytes]c                6   t          |           }t          |                    d                    }|                    |                    d                    }t	          j        |                                          \  }}||t          j        |          |fS )zParse the components of an AttestedCredentialData from a binary
        string, and return them.

        :param data: A binary string containing an attested credential data.
        :return: AAGUID, credential ID, public key, and remaining data.
        r   >H)r   r   readunpackr   decode_fromr   r<   )r   readerrG   cred_idpub_keyrests         r    rP   zAttestedCredentialData._parsem   sz     D!!B((++fmmD1122(77wg 6 6<<r"   c           	          | |t          j        dt          |                    z   |z   t          j        |          z             S )a%  Create an AttestedCredentialData by providing its components.

        :param aaguid: The AAGUID of the authenticator.
        :param credential_id: The binary ID of the credential.
        :param public_key: A COSE formatted public key.
        :return: The attested credential data.
        r[   )structpackr   r   encode)r;   rG   rH   rI   s       r    createzAttestedCredentialData.create{   sS     sk$M 2 2334 k*%%&
 
 	
r"   $tuple[AttestedCredentialData, bytes]c                h    |                      |          \  }}}}|                     |||          |fS )a  Unpack an AttestedCredentialData from a byte string, returning it and
        any remaining data.

        :param data: A binary string containing an attested credential data.
        :return: The parsed AttestedCredentialData, and any remaining data from
            the input.
        )rP   rg   )r;   r   rG   r`   ra   rb   s         r    unpack_fromz"AttestedCredentialData.unpack_from   s9     *-D)9)9&$zz&'733T99r"   
key_handlec                h    |                      t          j        |t          j        |                    S )ap  Create an AttestatedCredentialData from a CTAP1 RegistrationData instance.

        :param key_handle: The CTAP1 credential key_handle.
        :type key_handle: bytes
        :param public_key: The CTAP1 65 byte public key.
        :type public_key: bytes
        :return: The credential data, using an all-zero AAGUID.
        :rtype: AttestedCredentialData
        )rg   r   r%   r   
from_ctap1)r;   rk   rI   s      r    rm   z!AttestedCredentialData.from_ctap1   s'     zz&+z53CJ3O3OPPPr"   rJ   r   )r   r   r5   rY   )rG   r   rH   r   rI   r   r5   rF   )r   r   r5   rh   )rk   r   rI   r   r5   rF   )r=   r>   r?   rA   r!   r/   staticmethodrP   r@   rg   rj   rm   __classcell__rT   s   @r    rF   rF   Z   s         NNN- - - - - -   = = = \= 
 
 
 [
" 	: 	: 	: [	: 
Q 
Q 
Q [
Q 
Q 
Q 
Q 
Qr"   rF   c                       e Zd ZU dZ G d de          Zded<   ded<   ded	<   d
ed<   ded<   d fdZd Ze		 	 ddd            Z
ddZddZddZddZddZddZ xZS ) AuthenticatorDataa  Binary encoding of the authenticator data.

    :param _: The binary representation of the authenticator data.
    :ivar rp_id_hash: SHA256 hash of the RP ID.
    :ivar flags: The flags of the authenticator data, see
        AuthenticatorData.FLAG.
    :ivar counter: The signature counter of the authenticator.
    :ivar credential_data: Attested credential data, if available.
    :ivar extensions: Authenticator extensions, if available.
    c                  B    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S )	AuthenticatorData.FLAGzqAuthenticator data flags

        See https://www.w3.org/TR/webauthn/#sec-authenticator-data for details
        r      r)   r   @      N)r=   r>   r?   __doc__UPUVBEBSATEDUSER_PRESENTUSER_VERIFIEDBACKUP_ELIGIBILITYBACKUP_STATEATTESTEDEXTENSION_DATArB   r"   r    FLAGru      sY        	 	  !r"   r   r   
rp_id_hashru   flagsintcounterzAttestedCredentialData | Nonecredential_dataMapping | None
extensionsrJ   c                   t                                                       t          |           }t                              | d|                    d                     t                              | d|                    d                     t                              | d|                    d                     |                                }| j        t          j	        j
        z  rt                              |          \  }}nd }t                              | d|           | j        t          j	        j        z  rt          j        |          \  }}nd }t                              | d|           |rt!          d	          d S )
Nr       r   Br   z>Ir   r   rN   )rO   r!   r   rQ   rR   r\   r]   r   rs   r   r~   rF   rj   r   r   r^   r   )r   rJ   r_   rb   r   r   rT   s         r    r!   zAuthenticatorData.__init__   sU   D!!4v{{2???4&--*<*<===4FMM$,?,?@@@{{}}:).11 	#$:$F$Ft$L$L!OTT"O4!2ODDD:).11 	#/55JJ4z::: 	-^,,,	- 	-r"   c                     t          |           S r$   rV   r&   s    r    r/   zAuthenticatorData.__str__   rX   r"   r"   Nc                ~     | |t          j        d||          z   |z   |t          j        |          ndz             S )a  Create an AuthenticatorData instance.

        :param rp_id_hash: SHA256 hash of the RP ID.
        :param flags: Flags of the AuthenticatorData.
        :param counter: Signature counter of the authenticator data.
        :param credential_data: Authenticated credential data (only if attested
            credential data flag is set).
        :param extensions: Authenticator extensions (only if ED flag is set).
        :return: The authenticator data.
        z>BINr"   )rd   re   r   rf   )r;   r   r   r   r   r   s         r    rg   zAuthenticatorData.create   sX    & sk%001 +5*@t{:&&&cK
 
 	
r"   r5   boolc                N    t          | j        t          j        j        z            S )z,Return true if the User Present flag is set.)r   r   rs   r   rz   r&   s    r    is_user_presentz!AuthenticatorData.is_user_present      DJ!2!7!::;;;r"   c                N    t          | j        t          j        j        z            S )z-Return true if the User Verified flag is set.)r   r   rs   r   r{   r&   s    r    is_user_verifiedz"AuthenticatorData.is_user_verified	  r   r"   c                N    t          | j        t          j        j        z            S )z2Return true if the Backup Eligibility flag is set.)r   r   rs   r   r|   r&   s    r    is_backup_eligiblez$AuthenticatorData.is_backup_eligible  r   r"   c                N    t          | j        t          j        j        z            S )z,Return true if the Backup State flag is set.)r   r   rs   r   r}   r&   s    r    is_backed_upzAuthenticatorData.is_backed_up  r   r"   c                N    t          | j        t          j        j        z            S )z8Return true if the Attested credential data flag is set.)r   r   rs   r   r~   r&   s    r    is_attestedzAuthenticatorData.is_attested  r   r"   c                N    t          | j        t          j        j        z            S )z/Return true if the Extenstion data flag is set.)r   r   rs   r   r   r&   s    r    has_extension_dataz$AuthenticatorData.has_extension_data  r   r"   rn   )r"   N)
r   r   r   ru   r   r   r   r   r   r   )r5   r   )r=   r>   r?   ry   r   r   rA   r!   r/   r@   rg   r   r   r   r   r   r   rp   rq   s   @r    rs   rs      sb        	 	    w   , !!!!LLL2222- - - - - -0    "%%)
 
 
 
 [
2< < < << < < << < < << < < << < < << < < < < < < <r"   rs   c                  z     e Zd ZU dZded<   ded<   ded<   d fd
Zd Zedd            Zedd            Z	 xZ
S )AttestationObjecta  Binary CBOR encoded attestation object.

    :param _: The binary representation of the attestation object.
    :ivar fmt: The type of attestation used.
    :ivar auth_data: The attested authenticator data.
    :ivar att_statement: The attestation statement.
    r2   fmtrs   	auth_dataMapping[str, Any]att_stmtrJ   r   c                   t                                                       t          t          t          t
          f         t          j        t          |                               }t          
                    | d|d                    t          
                    | dt          |d                              t          
                    | d|d                    d S )Nr   r   authDatar   attStmt)rO   r!   r   r   r2   r
   r   decoder   rQ   rR   rs   )r   rJ   r   rT   s      r    r!   zAttestationObject.__init__,  s    GCH%t{5;;'?'?@@4U4444.?Z@P.Q.QRRR4T)_=====r"   c                     t          |           S r$   rV   r&   s    r    r/   zAttestationObject.__str__4  rX   r"   r5   c                D     | t          j        |||d                    S )N)r   r   r   )r   rf   )r;   r   r   r   s       r    rg   zAttestationObject.create7  s/     sKxPPQQ
 
 	
r"   	app_paramc                
   |                      dt                               |t          j        j        t          j        j        z  dt
                              |j        |j                            |j	        g|j
        d          S )a  Create an AttestationObject from a CTAP1 RegistrationData instance.

        :param app_param: SHA256 hash of the RP ID used for the CTAP1 request.
        :type app_param: bytes
        :param registration: The CTAP1 registration data.
        :type registration: RegistrationData
        :return: The attestation object, using the "fido-u2f" format.
        :rtype: AttestationObject
        zfido-u2fr   )x5csig)rg   rs   r   r~   rz   rF   rm   rk   rI   certificate	signature)r;   r   registrations      r    rm   zAttestationObject.from_ctap1?  s     zz$$!&),=,B,EE&11 +\-D 	  "-.|7MNN
 
 	
r"   rn   )r   r2   r   rs   r   r   r5   r   )r   r   r5   r   )r=   r>   r?   ry   rA   r!   r/   r@   rg   rm   rp   rq   s   @r    r   r     s           HHH    > > > > > >   
 
 
 [
 
 
 
 [
 
 
 
 
r"   r   c                  $     e Zd Zd Z fdZ xZS )_StringEnumMetac                    d S r$   rB   r:   s     r    
_get_valuez_StringEnumMeta._get_valueY  s    tr"   c                    	  t                      j        |g|R i |S # t          $ r |                     |          cY S w xY wr$   )rO   __call__r   r   )r;   r4   argskwargsrT   s       r    r   z_StringEnumMeta.__call__\  sb    	)#577#E;D;;;F;;; 	) 	) 	)>>%(((((	)s     AA)r=   r>   r?   r   r   rp   rq   s   @r    r   r   X  sG          ) ) ) ) ) ) ) ) )r"   r   c                      e Zd ZdZd ZdS )_StringEnumzYEnum of strings for WebAuthn types.

    Unrecognized values are treated as missing.
    c                    | j         S r$   )r4   r&   s    r    r/   z_StringEnum.__str__m  s
    zr"   N)r=   r>   r?   ry   r/   rB   r"   r    r   r   f  s-             r"   r   )	metaclassc                       e Zd ZU e G d de                      Zded<   ded<   ded<   ded	<   d
Zded<   d fdZe		 ddd            Z
d Zedd            Zedd            Z xZS )CollectedClientDatac                      e Zd ZdZdZdS )CollectedClientData.TYPEzwebauthn.createzwebauthn.getN)r=   r>   r?   CREATEGETrB   r"   r    TYPEr   s  s        "r"   r   r   _datar2   typer   	challengeoriginFr   cross_originrJ   c                6   t                                                       t                              | dt	          j        |                                                      t                              | d| j        d                    t                              | dt          | j        d                              t                              | d| j        d                    t                              | d| j        	                    dd                     d S )Nr   r   r   r   r   crossOriginF)
rO   r!   rQ   rR   jsonloadsr   r   r   get)r   rJ   rT   s     r    r!   zCollectedClientData.__init__~  s    4$*T[[]]*C*CDDD4F);<<<4nTZ=T.U.UVVV44:h+?@@@4u1U1UVVVVVr"   bytes | strr5   c           	         t          |t                    rt          |          }n|} | t          j        ||||d|d                                                    S )N)r   r   r   r   ),:)
separators)
isinstancer   r   r   dumpsrf   )r;   r   r   r   r   r   encoded_challenges          r    rg   zCollectedClientData.create  s     i'' 	* .y 9 9 )sJ !2$#/	 
  &	 	 	 fhh
 
 	
r"   c                     t          |           S r$   rV   r&   s    r    r/   zCollectedClientData.__str__  rX   r"   c                     t          |           S r$   )r   r&   s    r    b64zCollectedClientData.b64  s    d###r"   c                     t          |           S r$   )r   r&   s    r    hashzCollectedClientData.hash  s    d||r"   rn   )F)
r   r2   r   r   r   r2   r   r   r5   r   )r5   r2   )r5   r   )r=   r>   r?   r	   r   r   rA   r   r!   r@   rg   r/   propertyr   r   rp   rq   s   @r    r   r   q  s/            {   V IIIKKKLW W W W W W  #
 
 
 
 [
4   $ $ $ X$    X    r"   r   c                      e Zd ZdZdZdZdZdS )AttestationConveyancePreferencenoneindirectdirect
enterpriseN)r=   r>   r?   r%   INDIRECTDIRECT
ENTERPRISErB   r"   r    r   r     s"        DHFJJJr"   r   c                      e Zd ZdZdZdZdS )UserVerificationRequirementrequired	preferreddiscouragedNr=   r>   r?   REQUIRED	PREFERREDDISCOURAGEDrB   r"   r    r   r             HIKKKr"   r   c                      e Zd ZdZdZdZdS )ResidentKeyRequirementr   r   r   Nr   rB   r"   r    r   r     r   r"   r   c                      e Zd ZdZdZdS )AuthenticatorAttachmentplatformzcross-platformN)r=   r>   r?   PLATFORMCROSS_PLATFORMrB   r"   r    r   r     s        H%NNNr"   r   c                  "    e Zd ZdZdZdZdZdZdS )AuthenticatorTransportusbnfcblehybridinternalN)r=   r>   r?   USBNFCBLEHYBRIDINTERNALrB   r"   r    r   r     s'        
C
C
CFHHHr"   r   c                      e Zd ZdZdS )PublicKeyCredentialTypez
public-keyN)r=   r>   r?   
PUBLIC_KEYrB   r"   r    r  r    s        JJJr"   r  c                      e Zd ZdZdZdZdS )PublicKeyCredentialHintzsecurity-keyzclient-devicer   N)r=   r>   r?   SECURITY_KEYCLIENT_DEVICEr  rB   r"   r    r	  r	    s        !L#MFFFr"   r	  r   r   r5   r   c                       fd D             S )Nc                b    i | ]+}|t          t                                        |          ,S rB   )rO   r   __getitem__).0kr   s     r    
<dictcomp>z_as_cbor.<locals>.<dictcomp>  s3    IIIqAu_d++77::IIIr"   rB   )r   s   `r    _as_cborr    s    IIIIDIIIIr"   )eqrD   kw_onlyc                  @    e Zd ZU ded<   dZded<   ed	d            ZdS )
PublicKeyCredentialRpEntityr2   nameN
str | Noneidr5   bytes | Nonec                b    | j         r't          | j                             d                    ndS )z%Return SHA256 hash of the identifier.utf8N)r  r   rf   r&   s    r    id_hashz#PublicKeyCredentialRpEntity.id_hash  s,     26BvdgnnV,,---dBr"   )r5   r  )r=   r>   r?   rA   r  r   r  rB   r"   r    r  r    sT         IIIBC C C XC C Cr"   r  c                  6    e Zd ZU dZded<   ded<   dZded<   dS )PublicKeyCredentialUserEntityNr  r  r   r  display_name)r=   r>   r?   r  rA   r   rB   r"   r    r  r    s=         DIII#L######r"   r  c                  $    e Zd ZU ded<   ded<   dS )PublicKeyCredentialParametersr  r   r   algNr=   r>   r?   rA   rB   r"   r    r"  r"    s%         !!!!HHHHHr"   r"  c                  2    e Zd ZU ded<   ded<   dZded<   dS )PublicKeyCredentialDescriptorr  r   r   r  Nz'Sequence[AuthenticatorTransport] | None
transports)r=   r>   r?   rA   r'  rB   r"   r    r&  r&    s8         !!!!III:>J>>>>>>r"   r&  c                  X     e Zd ZU dZded<   dZded<   dZded<   dZd	ed
<    fdZ xZ	S )AuthenticatorSelectionCriteriaNAuthenticatorAttachment | Noneauthenticator_attachmentzResidentKeyRequirement | Noneresident_key"UserVerificationRequirement | Noneuser_verificationFzbool | Nonerequire_resident_keyc                &   t                                                       | j        9t                              | d| j        rt          j        nt          j                   t                              | d| j        t          j        k               d S )Nr,  r/  )	rO   __post_init__r,  rQ   rR   r/  r   r   r   r   rT   s    r    r1  z,AuthenticatorSelectionCriteria.__post_init__  s    $ 0<*33/;   	"!7!@@	
 	
 	
 	
 	
r"   )
r=   r>   r?   r+  rA   r,  r.  r/  r1  rp   rq   s   @r    r)  r)    s         ?CCCCC26L6666<@@@@@(-----
 
 
 
 
 
 
 
 
r"   r)  c                      e Zd ZU ded<   ded<   ded<   ded<   d	Zd
ed<   d	Zded<   d	Zded<   d	Zded<   d	Zded<   d	Z	ded<   d	Z
ded<   d	S )"PublicKeyCredentialCreationOptionsr  rpr  userr   r   z'Sequence[PublicKeyCredentialParameters]pub_key_cred_paramsN
int | Nonetimeout.Sequence[PublicKeyCredentialDescriptor] | Noneexclude_credentialsz%AuthenticatorSelectionCriteria | Noneauthenticator_selection(Sequence[PublicKeyCredentialHint] | Nonehintsz&AttestationConveyancePreference | NoneattestationzSequence[str] | Noneattestation_formatsMapping[str, Any] | Noner   )r=   r>   r?   rA   r9  r;  r<  r>  r?  r@  r   rB   r"   r    r4  r4    s         ####''''@@@@GJNNNNNEIIIII6:E:::::>K>>>>044444+/J//////r"   r4  c                  n    e Zd ZU ded<   dZded<   dZded<   dZded	<   dZd
ed<   dZded<   dZ	ded<   dS )!PublicKeyCredentialRequestOptionsr   r   Nr8  r9  r  rp_idr:  allow_credentialsr-  r.  r=  r>  rA  r   )
r=   r>   r?   rA   r9  rD  rE  r.  r>  r   rB   r"   r    rC  rC  .  s         GEHLLLLL<@@@@@6:E::::+/J//////r"   rC  c                  P    e Zd ZU  e ed                    Zded<   ded<   dS )	 AuthenticatorAttestationResponseclientDataJSONr  metadatar   client_datar   attestation_objectN)r=   r>   r?   r   dictrL  rA   rB   r"   r    rG  rG  9  sJ         ',udd@P6Q6Q6Q'R'R'RKRRRR))))))r"   rG  c                  h    e Zd ZU  e ed                    Zded<   ded<   ded	<   d
Zded<   d
S )AuthenticatorAssertionResponserH  rI  rJ  r   rL  rs   authenticator_datar   r   Nr  user_handle)r=   r>   r?   r   rN  rL  rA   rR  rB   r"   r    rP  rP  ?  sg         ',udd@P6Q6Q6Q'R'R'RKRRRR)))) $K$$$$$$r"   rP  c                  <    e Zd ZdZi fddZd Zd Zd Zd Zd	 Z	d
S )%AuthenticationExtensionsClientOutputsa  Holds extension output from a call to MakeCredential or GetAssertion.

    When accessed as a dict, all bytes values will be serialized to base64url encoding,
    capable of being serialized to JSON.

    When accessed using attributes, richer types will instead be returned.
    outputsr   c                L    d |                                 D             | _        d S )Nc                    i | ]
\  }}|||S r$   rB   )r  r  vs      r    r  zBAuthenticationExtensionsClientOutputs.__init__.<locals>.<dictcomp>Q  s    KKK$!QQ]A]]]r"   )items_members)r   rU  s     r    r!   z.AuthenticationExtensionsClientOutputs.__init__P  s#    KK'--//KKKr"   c                *    t          | j                  S r$   )iterrZ  r&   s    r    __iter__z.AuthenticationExtensionsClientOutputs.__iter__S  s    DM"""r"   c                *    t          | j                  S r$   )r   rZ  r&   s    r    __len__z-AuthenticationExtensionsClientOutputs.__len__V  s    4=!!!r"   c                    | j         |         }t          |t                    rt          |          S t          |t                    r$t          |t
                    st          |          S |S r$   )rZ  r   r   r   r   rN  )r   keyr4   s      r    r  z1AuthenticationExtensionsClientOutputs.__getitem__Y  sb    c"eU## 	!%(((w'' 	
5$0G0G 	;;r"   c                    |                     d          }|d         d                    d |dd          D                       z   }| j                            |          S )NrJ   r   r7   c              3  >   K   | ]}|                                 V  d S r$   )title)r  ps     r    	<genexpr>zDAuthenticationExtensionsClientOutputs.__getattr__.<locals>.<genexpr>c  s*      !?!?!''))!?!?!?!?!?!?r"   r   )splitjoinrZ  r   )r   ra  partsr  s       r    __getattr__z1AuthenticationExtensionsClientOutputs.__getattr__a  sX    		#Qx"''!?!?U122Y!?!?!????}  &&&r"   c                :    t          t          |                     S r$   )rW   rN  r&   s    r    r3   z.AuthenticationExtensionsClientOutputs.__repr__f  s    DJJr"   N)rU  r   )
r=   r>   r?   ry   r!   r]  r_  r  rj  r3   rB   r"   r    rT  rT  G  s          57 L L L L L# # #" " "  ' ' '
         r"   rT  c                       e Zd ZU dZ ed          Zded<   ded<   ded	<   d
Zded<    ee          Z	ded<   e
j        Zded<    fdZe fd            Ze fd            Z xZS )RegistrationResponsea1  
    Represents the RegistrationResponse structure from the WebAuthn specification,
    with fields modeled after the JSON serialization.

    Serializing this object to JSON can be done by using json.dumps(dict(response)).

    See: https://www.w3.org/TR/webauthn-3/#dictdef-registrationresponsejson
    FrC   r2   r  r   raw_idrG  responseNr*  r+  default_factoryrT  client_extension_resultsr  r   c                    t                               | dt          | j                             t	                                                       d S Nr  rQ   rR   r   ro  rO   r1  r2  s    r    r1  z"RegistrationResponse.__post_init__~  A    4~dk'B'BCCCr"   c                    |t           t          t          f         d z  k    r|S t                                          ||          S r$   r   r2   r
   rO   _parse_valuer;   tr4   rT   s      r    rz  z!RegistrationResponse._parse_value  ;    S!D(((Lww##Au---r"   c                    d|v r?t          |          }|                    d          }||d         k    rt          d          t                                          |          S Nr  rawIdzid does not match rawIdrN  popr   rO   _parse_from_dictr;   r   rH   rT   s      r    r  z%RegistrationResponse._parse_from_dict  s\    4<<::D HHTNNMW-- !:;;;ww''---r"   r=   r>   r?   ry   r   r  rA   r+  rT  rs  r  r  r   r1  r@   rz  r  rp   rq   s   @r    rm  rm  j  s          eBMMM....?CCCCCFKe=G G G     %<$FDFFFF          . . . . [. . . . . [. . . . .r"   rm  c                       e Zd ZU dZ ed          Zded<   ded<   ded	<   d
Zded<    ee          Z	ded<   e
j        Zded<    fdZe fd            Ze fd            Z xZS )AuthenticationResponsea5  
    Represents the AuthenticationResponse structure from the WebAuthn specification,
    with fields modeled after the JSON serialization.

    Serializing this object to JSON can be done by using json.dumps(dict(response)).

    See: https://www.w3.org/TR/webauthn-3/#dictdef-authenticationresponsejson
    Frn  r2   r  r   ro  rP  rp  Nr*  r+  rq  rT  rs  r  r   c                    t                               | dt          | j                             t	                                                       d S ru  rv  r2  s    r    r1  z$AuthenticationResponse.__post_init__  rw  r"   c                    |t           t          t          f         d z  k    r|S t                                          ||          S r$   ry  r{  s      r    rz  z#AuthenticationResponse._parse_value  r}  r"   c                    d|v r?t          |          }|                    d          }||d         k    rt          d          t                                          |          S r  r  r  s      r    r  z'AuthenticationResponse._parse_from_dict  s\    4<<::D HHTNNMW-- !:;;;ww''---r"   r  rq   s   @r    r  r    s          eBMMM,,,,?CCCCCFKe=G G G     %<$FDFFFF          . . . . [. . . . . [. . . . .r"   r  c                      e Zd ZU ded<   dS )CredentialCreationOptionsr4  rI   Nr$  rB   r"   r    r  r    s         222222r"   r  c                      e Zd ZU ded<   dS )CredentialRequestOptionsrC  rI   Nr$  rB   r"   r    r  r    s         111111r"   r  )r   r   r5   r   )<
__future__r   r   rd   dataclassesr   r   enumr   r   r   r	   typingr
   r   r   r   r7   r   coser   r   utilsr   r   r   r   r   r   r   r%   rF   rs   r   r   r2   r   r   r   r   r   r   r   r  r	  r  r  r  r"  r&  r)  r4  rC  rG  rP  rT  rm  r  r  r  rB   r"   r    <module>r     sP  8 # " " " " "   ( ( ( ( ( ( ( ( 0 0 0 0 0 0 0 0 0 0 0 0 / / / / / / / / / / / /                                   $    U   . fZ   d###IQ IQ IQ IQ IQU IQ IQ $#IQX d###s< s< s< s< s< s< s< $#s<l d###6
 6
 6
 6
 6
 6
 6
 $#6
r
) 
) 
) 
) 
)h 
) 
) 
)    #t     d###9 9 9 9 9% 9 9 $#9x     k             +                [       & & & & &k & & &
     [        k        k   J J J J eD$///C C C C C/ C C 0/C eD$///$ $ $ $ $O $ $ 0/$ eD$///    O   0/
 eD$///? ? ? ? ?O ? ? 0/? eD$///
 
 
 
 
_ 
 
 0/
4 eD$///0 0 0 0 0 0 0 0/0 eD$///0 0 0 0 0 0 0 0/0 eD$///* * * * * * * 0/*
 eD$///% % % % %_ % % 0/%              GCH,=         F eD$///&. &. &. &. &.? &. &. 0/&.R eD$///%. %. %. %. %._ %. %. 0/%.P eD$///3 3 3 3 3 3 3 0/3 eD$///2 2 2 2 2 2 2 0/2 2 2r"   