o
    sh                     @  s   d dl mZ ddlmZ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 d dlmZ d d	lmZ d d
lZG dd deZd
S )    )annotations   )AttestationAttestationTypeAttestationResultInvalidDatacatch_builtins   )CoseKey)sha256websafe_decode)x509)default_backend)bytes_eqNc                   @  s(   e Zd ZdZd
dddZedd Zd	S )AndroidSafetynetAttestationzandroid-safetynetFallow_rootedboolc                 C  s
   || _ d S N)r   )selfr    r   T/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/attestation/android.py__init__2   s   
z$AndroidSafetynetAttestation.__init__c                 C  s  |d }dd | dD \}}}t|d}| js&|d dur&tdt|| }	t|	t|d	 s9td
t|d}dd |d D }
t	
|
d t }|jt	jj}|d jdkrftdt|d | |ddd | ttj|
S )Nresponsec                 s  s    | ]}t |V  qd S r   r   .0xr   r   r   	<genexpr>8   s    z5AndroidSafetynetAttestation.verify.<locals>.<genexpr>   .utf8ctsProfileMatchTzctsProfileMatch must be true!noncezNonce does not match!c                 S  s   g | ]}t |qS r   r   r   r   r   r   
<listcomp>A   s    z6AndroidSafetynetAttestation.verify.<locals>.<listcomp>x5cr   zattest.android.comz-Certificate not issued to attest.android.com!algr   )splitjsonloadsdecoder   r   r   r   r   r   load_der_x509_certificater   subjectget_attributes_for_oidNameOIDCOMMON_NAMEvaluer
   for_namefrom_cryptography_key
public_keyverifyrsplitr   r   BASIC)r   	statement	auth_dataclient_data_hashjwtheaderpayloadsigdataexpected_noncer#   certcnr   r   r   r2   5   s$   z"AndroidSafetynetAttestation.verifyN)F)r   r   )__name__
__module____qualname__FORMATr   r   r2   r   r   r   r   r   /   s
    r   )
__future__r   baser   r   r   r   r   coser
   utilsr   r   cryptographyr   cryptography.hazmat.backendsr   ,cryptography.hazmat.primitives.constant_timer   r&   r   r   r   r   r   <module>   s   