
    <[j                        d dl mZ d dlZd dlmZ d dlmZ d dl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dS )    )annotationsN)x509)default_backend)bytes_eq   )CoseKey)sha256websafe_decode   )AttestationAttestationResultAttestationTypeInvalidDatacatch_builtinsc                  2    e Zd ZdZdd	dZed             ZdS )
AndroidSafetynetAttestationzandroid-safetynetFallow_rootedboolc                    || _         d S N)r   )selfr   s     a/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fido2/attestation/android.py__init__z$AndroidSafetynetAttestation.__init__2   s    (    c                   |d         }d |                     d          D             \  }}}t          j        |                    d                    }| j        s|d         durt          d          t          ||z             }	t          |	t          |d                             st          d	          t          j        |                    d                    }d
 |d         D             }
t          j
        |
d         t                                }|j                            t          j        j                  }|d         j        dk    rt          d          t#          j        |d                                       |                                                              |                    dd          d         |           t/          t0          j        |
          S )Nresponsec              3  4   K   | ]}t          |          V  d S r   r
   .0xs     r   	<genexpr>z5AndroidSafetynetAttestation.verify.<locals>.<genexpr>8   s*      KKaq 1 1KKKKKKr      .utf8ctsProfileMatchTzctsProfileMatch must be true!noncezNonce does not match!c                ,    g | ]}t          |          S  r   r   s     r   
<listcomp>z6AndroidSafetynetAttestation.verify.<locals>.<listcomp>A   s     666Q~a  666r   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cns                r   r9   z"AndroidSafetynetAttestation.verify5   s   
#KK399T??KKKz'..0011  	?T*;%<D%H%H=>>>	,< <==tG}(E(EFF 	75666z&--//0066$u+666-c!fo6G6GHH\001IJJa5;...MNNNe%%;;DOO<M<MNNUUJJtQ"C	
 	
 	
 !!6<<<r   N)F)r   r   )__name__
__module____qualname__FORMATr   r   r9   r(   r   r   r   r   /   sM         F) ) ) ) ) = = ^= = =r   r   )
__future__r   r-   cryptographyr   cryptography.hazmat.backendsr   ,cryptography.hazmat.primitives.constant_timer   coser   utilsr	   r
   baser   r   r   r   r   r   r(   r   r   <module>rR      s   8 # " " " " "        8 8 8 8 8 8 A A A A A A       * * * * * * * *             = = = = =+ = = = = =r   