o
    s–h³  ã                   @  s†   d dl mZ ddlmZmZmZmZmZmZm	Z	 ddl
mZ d dlmZ d dlmZ d dlmZ e d	¡Zd
d„ ZG dd„ deƒZdS )é    )Úannotationsé   )ÚAttestationÚAttestationTypeÚAttestationResultÚInvalidDataÚInvalidSignatureÚcatch_builtinsÚ_validate_cert_commoné   )ÚCoseKey)Úx509)r   )Údefault_backendz1.3.6.1.4.1.45724.1.1.4c           	      C  sê   t | ƒ | j tjj¡}|stdƒ‚| j tjj¡}|s tdƒ‚| j tjj¡}|s.tdƒ‚|d }|j	dkr;tdƒ‚| j tjj
¡}|sItdƒ‚z | j t¡}|jrWtdƒ‚|j	j	dd … }||krgtd	ƒ‚W d S  tjyt   Y d S w )
NzSubject must have C set!zSubject must have O set!z3Subject must have OU = "Authenticator Attestation"!r   zAuthenticator AttestationzSubject must have CN set!z/AAGUID extension must not be marked as criticalr   zDAAGUID in Authenticator data does not match attestation certificate!)r
   ÚsubjectÚget_attributes_for_oidr   ÚNameOIDÚCOUNTRY_NAMEr   ÚORGANIZATION_NAMEÚORGANIZATIONAL_UNIT_NAMEÚvalueÚCOMMON_NAMEÚ
extensionsÚget_extension_for_oidÚ
OID_AAGUIDÚcriticalÚExtensionNotFound)	ÚcertÚaaguidÚcÚoÚousÚouÚcnÚextÚ
ext_aaguid© r%   úS/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/attestation/packed.pyÚ_validate_packed_cert1   s:   
ÿÿÿr'   c                   @  s   e Zd ZdZedd„ ƒZdS )ÚPackedAttestationÚpackedc           	      C  sÂ   d|v rt dƒ‚|d }| d¡}|r1t |d tƒ ¡}t||jjƒ t 	|¡ 
| ¡ ¡}tj}nt |jj¡}|j|krAtdƒ‚tj}z| || |d ¡ t||pTg ƒW S  ty`   tƒ ‚w )NÚ
ecdaaKeyIdzECDAA not implementedÚalgÚx5cr   zWrong algorithm of public key!Úsig)ÚNotImplementedErrorÚgetr   Úload_der_x509_certificater   r'   Úcredential_datar   r   Úfor_algÚfrom_cryptography_keyÚ
public_keyr   ÚBASICÚparseÚ	ALGORITHMr   ÚSELFÚverifyr   Ú_InvalidSignaturer   )	ÚselfÚ	statementÚ	auth_dataÚclient_data_hashr+   r,   r   Úpub_keyÚatt_typer%   r%   r&   r9   W   s&   

ÿzPackedAttestation.verifyN)Ú__name__Ú
__module__Ú__qualname__ÚFORMATr	   r9   r%   r%   r%   r&   r(   T   s    r(   N)Ú
__future__r   Úbaser   r   r   r   r   r	   r
   Úcoser   Úcryptographyr   Úcryptography.exceptionsr:   Úcryptography.hazmat.backendsr   ÚObjectIdentifierr   r'   r(   r%   r%   r%   r&   Ú<module>   s   $	
#