o
    l>j|                     @  sl  U d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZmZ dZeejZejZejZG dd	 d	ZG d
d dejZG dd dZeG dd deeZeG dd deeZeG dd deeZ eG dd deeZ!eG dd deeZ"eG dd deeZ#eG dd deeZ$eG dd deeZ%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)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-G d.d/ d/ejZ.G d0d1 d1ejZ/G d2d3 d3ejZ0G d4d5 d5ejZ1G d6d7 d7ejZ2G d8d9 d9ejZ3G d:d; d;ejZ4G d<d= d=ejZ5G d>d? d?ejZ6G d@dA dAejZ7G dBdC dCejZ8G dDdE dEejZ9G dFdG dGejZ:ej;Z;ej<dHedIZ=e=> Z?eej@ge=jA_Be;e=jA_Ceee)ee*ee'ee(ee9eee:ge=jD_Be;e=jD_Cee	ee(ee7eee8ge=jE_Be;e=jE_Cee:ge=jF_Bee8ge=jG_Beege=jH_Be;e=jH_Ceege=jI_Be;e=jI_Ce;ge=jJ_Bee=jJ_CdJdJdJdJdJdJdKdLdJdKdJdMi dLdNdLdOdPdNdQdKdJdRdSdOidQdNdLdTdUdUdQdNdPdVdKdUdVdWdXdXdQdLdVdJdYdZ	ZKd[eLd\< dcdadbZMdS )dz
Structs based on Microsoft's WebAuthN API.
https://github.com/microsoft/webauthn

Definitions taken from https://github.com/microsoft/webauthn/blob/master/webauthn.h
    )annotationsN)BOOLDWORDHWNDLONGLPCWSTRWORD)IntEnumunique)AnyMappingSequencei   c                   @  s,   e Zd ZdZdddZdd Zdd
dZdS )BytesPropertyzProperty for structs storing byte arrays as DWORD + PBYTE.

    Allows for easy reading/writing to struct fields using Python bytes objects.
    namestrc                 C  s   d| | _ d| | _d S )Ncbpb)cbNamepbName)selfr    r   I/home/thesage/.local/lib/python3.10/site-packages/fido2/client/win_api.py__init__@      
zBytesProperty.__init__c                 C  s$   t tt|| jd t|| j S N)bytes	bytearraygetattrr   r   )r   instanceownerr   r   r   __get__D   s   zBytesProperty.__get__valuebytes | Nonec                 C  sJ   |rt |nd}|rt|nd}t|| j| t|| jt|t d S )Nr   )lenctypescreate_string_buffersetattrr   r   castPBYTE)r   r   r!   lnbufferr   r   r   __set__I   s   zBytesProperty.__set__N)r   r   )r!   r"   )__name__
__module____qualname____doc__r   r    r+   r   r   r   r   r   :   s
    
r   c                   @  s@   e Zd ZdZdejfdejfdejfdejd fgZdd Z	d	S )
GUIDzGUID Type in C++.Data1Data2Data3Data4   c                 C  sx   d| j | j| j| jd d | jd  | jd d | jd d  | jd	 d
  | jd d  | jd d  | jd  f S )Nz{%08X-%04X-%04X-%04X-%012X}r            l           l           i      i         )r1   r2   r3   r4   r   r   r   r   __str__Z   s"   zGUID.__str__N)
r,   r-   r.   r/   r$   c_ulongc_ushortc_ubyte_fields_r?   r   r   r   r   r0   P   s    r0   c                   @  s   e Zd ZedddZdS )_FromStringr!   r   c                 C  s   t | | ddS )N-_)r   upperreplace)clsr!   r   r   r   from_stringj   s   z_FromString.from_stringN)r!   r   )r,   r-   r.   classmethodrJ   r   r   r   r   rD   i   s    rD   c                   @      e Zd ZdZdZdZdZdZdS )#WebAuthNUserVerificationRequirementz1Maps to WEBAUTHN_USER_VERIFICATION_REQUIREMENT_*.r   r7   r8   r9   N)r,   r-   r.   r/   ANYREQUIRED	PREFERREDDISCOURAGEDr   r   r   r   rM   o       rM   c                   @  rL   )'WebAuthNAttestationConveyancePreferencez5Maps to WEBAUTHN_ATTESTATION_CONVEYANCE_PREFERENCE_*.r   r7   r8   r9   N)r,   r-   r.   r/   rN   NONEINDIRECTDIRECTr   r   r   r   rS   y   rR   rS   c                   @  rL   )WebAuthNAuthenticatorAttachmentz,Maps to WEBAUTHN_AUTHENTICATOR_ATTACHMENT_*.r   r7   r8   r9   N)r,   r-   r.   r/   rN   PLATFORMCROSS_PLATFORMCROSS_PLATFORM_U2F_V2r   r   r   r   rW      rR   rW   c                   @  s4   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S )WebAuthNCTAPTransportz"Maps to WEBAUTHN_CTAP_TRANSPORT_*.r   r7   r8   r:   r5          @      N)r,   r-   r.   r/   rN   USBNFCBLETESTINTERNALHYBRID
SMART_CARD
FLAGS_MASKr   r   r   r   r[      s    r[   c                   @     e Zd ZdZdZdZdZdS )WebAuthNEnterpriseAttestationz*Maps to WEBAUTHN_ENTERPRISE_ATTESTATION_*.r   r7   r8   N)r,   r-   r.   r/   rT   VENDOR_FACILITATEDPLATFORM_MANAGEDr   r   r   r   ri      
    ri   c                   @  rh   )WebAuthNLargeBlobSupportz&Maps to WEBAUTHN_LARGE_BLOB_SUPPORT_*.r   r7   r8   N)r,   r-   r.   r/   rT   rO   rP   r   r   r   r   rm      rl   rm   c                   @  rL   )WebAuthNLargeBlobOperationz(Maps to WEBAUTHN_LARGE_BLOB_OPERATION_*.r   r7   r8   r9   N)r,   r-   r.   r/   rT   GETSETDELETEr   r   r   r   rn      rR   rn   c                   @  rL   )WebAuthNUserVerificationz%Maps to WEBAUTHN_USER_VERIFICATION_*.r   r7   r8   r9   N)r,   r-   r.   r/   rN   OPTIONAL OPTIONAL_WITH_CREDENTIAL_ID_LISTrO   r   r   r   r   rr      rR   rr   c                   @  s0   e Zd ZdZdefdefdefgZd
ddZd	S )WebAuthNCoseCredentialParameterzoMaps to WEBAUTHN_COSE_CREDENTIAL_PARAMETER Struct.

    :param cred_params: Dict of Credential parameters.
    	dwVersionpwszCredentialTypelAlgcred_paramsMapping[str, Any]c                 C  s&   t | jj| _|d | _|d | _d S )Ntypealg)get_version	__class__r,   rv   rw   rx   )r   ry   r   r   r   r      s   
z(WebAuthNCoseCredentialParameter.__init__N)ry   rz   )	r,   r-   r.   r/   r   r   r   rC   r   r   r   r   r   ru      s    ru   c                   @  0   e Zd ZdZdefdeefgZd	ddZ	dS )
 WebAuthNCoseCredentialParameterszpMaps to WEBAUTHN_COSE_CREDENTIAL_PARAMETERS Struct.

    :param params: List of Credential parameter dicts.
    cCredentialParameterspCredentialParametersparamsSequence[Mapping[str, Any]]c                 C  *   t || _tt | dd |D  | _d S )Nc                 s      | ]}t |V  qd S r   )ru   ).0paramr   r   r   	<genexpr>       z<WebAuthNCoseCredentialParameters.__init__.<locals>.<genexpr>)r#   r   ru   r   )r   r   r   r   r   r         


z)WebAuthNCoseCredentialParameters.__init__N)r   r   )
r,   r-   r.   r/   r   r$   POINTERru   rC   r   r   r   r   r   r          r   c                   @  >   e Zd ZdZdefdefdefdefgZedZ	dd	d
Z
dS )WebAuthNClientDatazlMaps to WEBAUTHN_CLIENT_DATA Struct.

    :param client_data_json: ClientData serialized as JSON bytes.
    rv   cbClientDataJSONpbClientDataJSONpwszHashAlgIdClientDataJSONclient_data_jsonr   c                 C  s   t | jj| _|| _d| _d S )NzSHA-256)r}   r~   r,   rv   r   r   )r   r   r   r   r   r      s   
zWebAuthNClientData.__init__N)r   r   )r,   r-   r.   r/   r   r(   r   rC   r   r   r   r   r   r   r   r          r   c                   @  s6   e Zd ZdZdefdefdefdefgZddd	Zd
S )WebAuthNRpEntityInformationz[Maps to WEBAUTHN_RP_ENTITY_INFORMATION Struct.

    :param rp: Dict of RP information.
    rv   pwszIdpwszNamepwszIconrprz   c                 C  s2   t | jj| _|d | _|d | _|d| _d S )Nidr   icon)r}   r~   r,   rv   r   r   getr   )r   r   r   r   r   r     s   

z$WebAuthNRpEntityInformation.__init__N)r   rz   )r,   r-   r.   r/   r   PCWSTRrC   r   r   r   r   r   r      s    r   c                   @  sJ   e Zd ZdZdefdefdefdefdefdefgZedZ	dddZ
dS )WebAuthNUserEntityInformationzaMaps to WEBAUTHN_USER_ENTITY_INFORMATION Struct.

    :param user: Dict of User information.
    rv   cbIdpbIdr   r   pwszDisplayNameIduserrz   c                 C  s>   t | jj| _|d | _|d | _|d| _|d| _d S )Nr   r   r   displayName)	r}   r~   r,   rv   r   r   r   r   r   )r   r   r   r   r   r      s
   

z&WebAuthNUserEntityInformation.__init__N)r   rz   )r,   r-   r.   r/   r   r(   r   rC   r   r   r   r   r   r   r   r     s    	r   c                   @  sD   e Zd ZdZdefdefdefdefdefgZedZ	dd
dZ
dS )WebAuthNCredentialExzaMaps to WEBAUTHN_CREDENTIAL_EX Struct.

    :param cred: Dict of Credential Descriptor data.
    rv   r   r   rw   dwTransportsr   credrz   c                 C  s8   t | jj| _|d | _|d | _t|dd | _d S )Nr   r{   	transportrN   )	r}   r~   r,   rv   r   rw   r[   r   r   r   r   r   r   r   r   8  s   

zWebAuthNCredentialEx.__init__Nr   rz   r,   r-   r.   r/   r   r(   r   rC   r   r   r   r   r   r   r   r   (  s    r   c                   @  s6   e Zd ZdZdefdeeefgZd	ddZ	dS )
WebAuthNCredentialListzrMaps to WEBAUTHN_CREDENTIAL_LIST Struct.

    :param credentials: List of dict of Credential Descriptor data.
    cCredentialsppCredentialscredentialsr   c                 C  s0   t || _ttt | dd |D  | _d S )Nc                 s  s    | ]
}t t|V  qd S r   )r$   pointerr   r   r   r   r   r   r   M  s    z2WebAuthNCredentialList.__init__.<locals>.<genexpr>)r#   r   r$   r   r   r   r   r   r   r   r   r   J  s   

zWebAuthNCredentialList.__init__Nr   r   )
r,   r-   r.   r/   r   r$   r   r   rC   r   r   r   r   r   r   ?  s    r   c                   @  sD   e Zd ZdefdefdefdefgZedZedZddddZ	dS )WebAuthNHmacSecretSaltcbFirstpbFirstcbSecondpbSecondFirstSecondNfirstr   secondr"   c                 C     || _ || _d S r   )r   r   )r   r   r   r   r   r   r   \  s   
zWebAuthNHmacSecretSalt.__init__r   )r   r   r   r"   )
r,   r-   r.   r   r(   rC   r   r   r   r   r   r   r   r   r   Q  s    r   c                   @  s:   e Zd ZdefdefdeefgZe	dZ
dd	d
ZdS )WebAuthNCredWithHmacSecretSaltcbCredIDpbCredIDpHmacSecretSaltCredIDcred_idr   saltr   c                 C  s   || _ t|| _d S r   )r   r$   r   r   )r   r   r   r   r   r   r   j  s   z'WebAuthNCredWithHmacSecretSalt.__init__N)r   r   r   r   )r,   r-   r.   r   r(   r$   r   r   rC   r   r   r   r   r   r   r   r   a  s    r   c                   @  s<   e Zd ZdeefdefdeefgZg fddd	Z	d
S )WebAuthNHmacSecretSaltValuespGlobalHmacSaltcCredWithHmacSecretSaltListpCredWithHmacSecretSaltListglobal_saltWebAuthNHmacSecretSalt | Nonecredential_salts(Sequence[WebAuthNCredWithHmacSecretSalt]c                 C  s0   |rt || _t|| _tt| | | _d S r   )r$   r   r   r#   r   r   r   )r   r   r   r   r   r   r   v  s   


z%WebAuthNHmacSecretSaltValues.__init__N)r   r   r   r   )
r,   r-   r.   r$   r   r   r   r   rC   r   r   r   r   r   r   o  s    	r   c                   @  s*   e Zd ZdZdefdefgZddd	Zd
S )WebAuthNCredProtectExtensionInz2Maps to WEBAUTHN_CRED_PROTECT_EXTENSION_IN Struct.dwCredProtectbRequireCredProtectcred_protectrr   require_cred_protectboolc                 C  r   r   )r   r   )r   r   r   r   r   r   r     s   
z'WebAuthNCredProtectExtensionIn.__init__N)r   rr   r   r   )r,   r-   r.   r/   r   r   rC   r   r   r   r   r   r     s    r   c                   @  s.   e Zd ZdefdefgZedZd	ddZdS )
WebAuthNCredBlobExtension
cbCredBlob
pbCredBlobCredBlobblobr   c                 C  s
   || _ d S r   )	cred_blob)r   r   r   r   r   r     s   
z"WebAuthNCredBlobExtension.__init__N)r   r   )	r,   r-   r.   r   r(   rC   r   r   r   r   r   r   r   r     s    r   c                   @  s0   e Zd ZdZdefdefdefgZdd	d
ZdS )WebAuthNExtensionz"Maps to WEBAUTHN_EXTENSION Struct.pwszExtensionIdentifiercbExtensionpvExtension
identifierr   r!   r   c                 C  s*   || _ t|| _tt|t| _d S r   )r   r$   sizeofr   r'   r   PVOIDr   )r   r   r!   r   r   r   r     s   zWebAuthNExtension.__init__N)r   r   r!   r   )	r,   r-   r.   r/   r   r   r   rC   r   r   r   r   r   r     s    r   c                   @  r   )
WebAuthNExtensionsz#Maps to WEBAUTHN_EXTENSIONS Struct.cExtensionspExtensions
extensionsSequence[WebAuthNExtension]c                 C  s    t || _tt | | | _d S r   )r#   r   r   r   )r   r   r   r   r   r     s   
zWebAuthNExtensions.__init__N)r   r   )
r,   r-   r.   r/   r   r$   r   r   rC   r   r   r   r   r   r     s    r   c                   @  r   )WebAuthNCredentialz^Maps to WEBAUTHN_CREDENTIAL Struct.

    :param cred: Dict of Credential Descriptor data.
    rv   r   r   rw   r   r   rz   c                 C  s   |d | _ |d | _d S )Nr   r{   )r   rw   r   r   r   r   r     r   zWebAuthNCredential.__init__Nr   r   r   r   r   r   r     r   r   c                   @  r   )
WebAuthNCredentialsznMaps to WEBAUTHN_CREDENTIALS Struct.

    :param credentials: List of dict of Credential Descriptor data.
    r   pCredentialsr   r   c                 C  r   )Nc                 s  r   r   )r   r   r   r   r   r     r   z/WebAuthNCredentials.__init__.<locals>.<genexpr>)r#   r   r   r   r   r   r   r   r     r   zWebAuthNCredentials.__init__Nr   )
r,   r-   r.   r/   r   r$   r   r   rC   r   r   r   r   r   r     r   r   c                   @  sv   e Zd ZdZdefdefdefdefdefdefdefd	efd
efdefdefgZe	dZ
e	dZe	dZe	dZdS )CtapCborHybridStorageLinkedDataz3Maps to CTAPCBOR_HYBRID_STORAGE_LINKED_DATA Struct.rv   cbContactIdpbContactIdcbLinkIdpbLinkIdcbLinkSecretpbLinkSecretcbPublicKeypbPublicKeypwszAuthenticatorNamewEncodedTunnelServerDomain	ContactIdLinkId
LinkSecret	PublicKeyN)r,   r-   r.   r/   r   r(   r   r   rC   r   
contact_idlink_idlink_secret
public_keyr   r   r   r   r     s$    r   c                   @  s,  e Zd ZdZdefdefdefdefdefdefdefd	efd
e	e
fde	efde	efdefdefdefde	efde
fde	efde
fdefdefdefde	efdefdefdefdefdefgZedZedZedZed Zd!ejejg d"ejd"d"g d!d"d"d"d"d"d"fd>d<d=Zd"S )?WebAuthNGetAssertionOptionsa  Maps to WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS Struct.

    :param timeout: Time that the operation is expected to complete within.
        This is used as guidance, and can be overridden by the platform.
    :param attachment: Platform vs Cross-Platform
        Authenticators.
    :param uv_requirement: User Verification Requirement.
    :param credentials: Allowed Credentials List.
    rv   dwTimeoutMillisecondsCredentialList
ExtensionsdwAuthenticatorAttachmentdwUserVerificationRequirementdwFlagspwszU2fAppId
pbU2fAppIdpCancellationIdpAllowCredentialListdwCredLargeBlobOperationcbCredLargeBlobpbCredLargeBlobpHmacSecretSaltValuesbBrowserInPrivateModepLinkedDevice	bAutoFill	cbJsonExt	pbJsonExtcCredentialHintsppwszCredentialHintspwszRemoteWebOrigin'cbPublicKeyCredentialRequestOptionsJSON'pbPublicKeyCredentialRequestOptionsJSONcbAuthenticatorIdpbAuthenticatorIdCredLargeBlobJsonExt%PublicKeyCredentialRequestOptionsJSONAuthenticatorIdr   Ntimeoutint
attachmentuv_requirementr   r   cancellationIdGUID | Nonecred_large_blob_operationcred_large_blobr"   hmac_secret_salts#WebAuthNHmacSecretSaltValues | Noner   r   flags	u2f_appid
str | Noneu2f_appid_usedBOOL | Nonecredential_hintsSequence[str] | Noneremote_web_origin*public_key_credential_request_options_jsonauthenticator_idc                 C  s"  t | jj| _|| _|| _|| _|
| _|	rt|	| _	| jdkr,|| _
|d ur,t|| _| jdkr9|r9t|| _| jdkrIt|}t|| _nt|| _| jdkrY|| _|| _| jdkrf|rft|| _| jdkr|rt|| _tt| | | _| j| _| jdkr|| _|| _|| _d S d S )Nr8   r9   r:   r;   r<   r5   	   )r}   r~   r,   rv   r   r   r  r  r   r   r  r$   r   r  r  r   r  r   r   r  r"  r
  r#   r  r   _credential_hints_arrayr  r  r-  r.  )r   r  r  r  r   r  r!  r"  r#  r   r%  r&  r(  r*  r,  r-  r.  clistr   r   r   r   0  sD   








z$WebAuthNGetAssertionOptions.__init__) r  r  r  r  r  r  r   r   r  r   r!  r  r"  r"   r#  r$  r   r   r%  r  r&  r'  r(  r)  r*  r+  r,  r'  r-  r"   r.  r"   )r,   r-   r.   r/   r   r   r   r   r$   r   r   r0   r   r(   r   r   rC   r   r"  json_extr-  r.  rW   rN   rM   rQ   rn   rT   r   r   r   r   r   r     sj    &r   c                   @  s   e Zd ZdZdefdefdefdefdefdefdefd	efd
efdefdefdefde	e
fdefdefdefdefdefdefdefgZedZedZedZedZedZedZedZdd ZdS ) WebAuthNAssertionz"Maps to WEBAUTHN_ASSERTION Struct.rv   cbAuthenticatorDatapbAuthenticatorDatacbSignaturepbSignature
CredentialcbUserIdpbUserIdr   r  r	  dwCredLargeBlobStatuspHmacSecretdwUsedTransportscbUnsignedExtensionOutputspbUnsignedExtensionOutputsr   r   cbAuthenticationResponseJSONpbAuthenticationResponseJSONAuthenticatorData	SignatureUserIdr  UnsignedExtensionOutputsr   AuthenticationResponseJSONc                 C     t t|  d S r   )WEBAUTHNWebAuthNFreeAssertionr$   byrefr>   r   r   r   __del__     zWebAuthNAssertion.__del__N)r,   r-   r.   r/   r   r(   r   r   r$   r   r   rC   r   	auth_data	signatureuser_idr"  unsigned_extension_outputsr   authentication_response_jsonrK  r   r   r   r   r3  q  s>    r3  c                   @  s,  e Zd ZdZdefdefdefdefdefdefdefd	efd
efde	e
fde	efdefdefdefdefdefde	efdefdefde	efdefde	efdefdefdefdefdefdefgZedZedZed Zd!d"ejejejg d#ejejd"d"g d#d#d"d#d#d#fdAd?d@Zd#S )BWebAuthNMakeCredentialOptionsa=  maps to WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS Struct.

    :param timeout: Time that the operation is expected to complete within.This
        is used as guidance, and can be overridden by the platform.
    :param require_resident_key: Require key to be resident or not.
    :param attachment: Platform vs Cross-Platform
        Authenticators.
    :param user_verification_requirement: User
        Verification Requirement.
    :param attestation_convoyence:
        Attestation Conveyance Preference.
    :param credentials: Credentials used for exclusion.
    rv   r   r   r   r   bRequireResidentKeyr  !dwAttestationConveyancePreferencer  r  pExcludeCredentialListdwEnterpriseAttestationdwLargeBlobSupportbPreferResidentKeyr  
bEnablePrfr  r  r  pPRFGlobalEvalr  r  bThirdPartyPaymentr  (cbPublicKeyCredentialCreationOptionsJSON(pbPublicKeyCredentialCreationOptionsJSONr  r  r  &PublicKeyCredentialCreationOptionsJSONr  r   FNr  r  require_resident_keyr   r  r  attestation_convoyencer   r   r  r   enterprise_attestationlarge_blob_supportprefer_resident_key
enable_prfr   r   prf_global_evalr   r*  r+  third_party_paymentr,  r'  +public_key_credential_creation_options_jsonr"   r.  c                 C  s  t | jj| _|| _|| _|| _|| _|| _|rt	|| _
| jdkr*|r*t|| _| jdkr8tt|| _nt|| _| jdkrK|| _|	| _|
| _| jdkrS|| _| jdkry|d urbt|| _|rvt|| _tt| | | _| j| _|| _| jdkr|| _|| _|| _d S d S )Nr8   r9   r:   r<   r5   r/  ) r}   r~   r,   rv   r   rS  r   r  rT  r   r   r$   r   r  r   rU  r   r   rV  rW  rX  rY  rZ  r#   r  r   r0  r  r[  r  rg  r.  )r   r  r_  r  r  r`  r   r  ra  rb  rc  rd  r   re  r*  rf  r,  rg  r.  r   r   r   r     sJ   









z&WebAuthNMakeCredentialOptions.__init__)$r  r  r_  r   r  r  r  r  r`  r  r   r   r  r   ra  r  rb  r  rc  r   rd  r   r   r   re  r   r*  r+  rf  r   r,  r'  rg  r"   r.  r"   )r,   r-   r.   r/   r   r   r   r   r$   r   r0   r   r   r(   r   r   rC   r   r2  rg  r.  rW   rN   rM   rQ   rS   ri   rT   rm   r   r   r   r   r   rR    sn    'rR  c                   @  s   e Zd ZdZdefdefdefdefdefdefdefd	efd
efdefdefdefdefdefdefdefdefdefdefdefde	
efdefdefdefdefdefdefgZedZedZedZed Zed!Zed"Zed#Zd$d% Zd&S )'WebAuthNCredentialAttestationz/Maps to WEBAUTHN_CREDENTIAL_ATTESTATION Struct.rv   pwszFormatTyper4  r5  cbAttestationpbAttestationdwAttestationDecodeTypepvAttestationDecodecbAttestationObjectpbAttestationObjectcbCredentialIdpbCredentialIdr   dwUsedTransportbEpAttbLargeBlobSupportedbResidentKeybPrfEnabledr>  r?  r<  r[  r   r   r   cbRegistrationResponseJSONpbRegistrationResponseJSONrB  AttestationAttestationObjectCredentialIdrE  r   RegistrationResponseJSONc                 C  rG  r   )rH  !WebAuthNFreeCredentialAttestationr$   rJ  r>   r   r   r   rK  L  rL  z%WebAuthNCredentialAttestation.__del__N)r,   r-   r.   r/   r   r   r(   r   r   r$   r   r   rC   r   rM  attestationattestation_objectcredential_idrP  r   registration_response_jsonrK  r   r   r   r   rh    sL    %rh  webauthn)winmoder7   r9   r:   )r   r   r   ru   r   r   rR  r   WebAuthNCommonAttestationrh  r3  r;   r8   )rR  r   rh  r3  r<   )rR  r   r3  WebAuthNCredentialDetailsr  )rR  rh  r3  r=   r5   )rR  r  rh  r   r/  )rR  r   r3  r  rh  WebAuthNAuthenticatorDetails)	r7   r8   r9   r:   r;   r<   r=   r5   r/  zMapping[int, Mapping[str, int]]WEBAUTHN_STRUCT_VERSIONS
class_namer   returnr  c                 C  s>   t tddD ]}|tv r| t| v rt| |    S qtd)zGet version of struct.

    :param str class_name: Struct class name.
    :returns: Version of Struct to use.
    :rtype: int
    r   zUnknown class name)rangeWEBAUTHN_API_VERSIONr  
ValueError)r  api_versionr   r   r   r}     s   r}   )r  r   r  r  )Nr/   
__future__r   r$   ctypes.wintypesr   r   r   r   r   r   enumr	   r
   typingr   r   r   LOAD_LIBRARY_SEARCH_SYSTEM32r   rB   r(   	c_wchar_pr   c_void_pr   r   	Structurer0   rD   rM   rS   rW   r[   ri   rm   rn   rr   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3  rR  rh  HRESULTWinDLLrH  WebAuthNGetApiVersionNumberr  c_bool5WebAuthNIsUserVerifyingPlatformAuthenticatorAvailableargtypesrestype#WebAuthNAuthenticatorMakeCredential!WebAuthNAuthenticatorGetAssertionr}  rI  WebAuthNGetCancellationIdWebAuthNCancelCurrentOperationWebAuthNGetErrorNamer  __annotations__r}   r   r   r   r   <module>   s   					y+ 4
	
: