ó
    ¬†ªjƒ  ã                  ó^   • S SK Jr  S SKrS SKrS SKrS SKr " S S5      r " S S5      rS rg)é    )ÚannotationsNc                  ó@   • \ rS rSrSS	S jjrS
S jrSS jrSS jrSrg)ÚTOTPVerifieré   c                ó†   • Xl         X l        X0l        X@l        XPl        X`l        SU l        [        5       U l        / U l	        g ©Nr   )
ÚsecretÚ	time_stepÚdigitsÚwindowÚmax_attemptsÚreplay_protectionÚfailed_attemptsÚsetÚused_countersÚevents)Úselfr	   r
   r   r   r   r   s          Úh/mnt/data/sec005_macroa_work/out/PO082_SEC-005/F2-L1/SEC-005/lab/SEC005-LAB1/learner/src/totp_fixture.pyÚ__init__ÚTOTPVerifier.__init__   s;   € ØŒ¨9œNÀ&´kÐV\Ì+Ðp|Ô^oØ0ÔÀq°$Ô2FÔ]`Ó]bÈ$ÔJ\ÐprÐdhÕdoó    c                ó„  • [         R                  " SU5      n[        R                  " U R                  U[
        R                  5      R                  5       o3S   S-  nX4   S-  S-  X4S-      S-  S-  -  X4S	-      S-  S
-  -  X4S-      S-  -  n[        USU R                  -  -  5      R                  U R                  5      $ )Nz>Qéÿÿÿÿé   é   é   é   éÿ   é   é   é   é   é
   )ÚstructÚpackÚhmacÚnewr	   ÚhashlibÚsha1ÚdigestÚstrr   Úzfill)r   ÚcounterÚmsgr*   ÚoffÚbinarys         r   Úcode_for_counterÚTOTPVerifier.code_for_counter   s¹   € Ü�KŠK˜˜WÓ%ˆÜ�xŠx˜Ÿ™ C¬¯©Ó5×<Ñ<Ó>ˆÈ2ÁJÈtÁOÀØ‘˜TÑ! BÑ&¨&°Q±©-¸Ñ*<¸rÑ)AÑBÀVÐPQÉEÁ]ÐSWÑEWÐZ[ÑD[Ñ\Ð^dÐijÑejÑ^kÐlpÑ^pÑqˆÜ�6˜2˜tŸ{™{™?Ñ+Ó,×2Ñ2°4·;±;Ó?Ð?r   c                óP   • U R                  [        U5      U R                  -  5      $ ©N)r1   Úintr
   )r   Ú	unix_times     r   Úcode_atÚTOTPVerifier.code_at   s    € Ø×$Ñ$¤S¨£^°T·^±^Ñ%CÓDÐDr   c                óø  • U R                   U R                  :¼  a  U R                  R                  SS05        g[	        U5      U R
                  -  n[        U R                  * U R                  S-   5       HÅ  nX4-   nUS:  a  M  [        R                  " U R                  U5      [        U5      5      (       d  ME  U R                  (       a/  XPR                  ;   a   U R                  R                  SUS.5          gU R                  R                  U5        SU l         U R                  R                  S	XTS
.5          g   U =R                   S-  sl         U R                  R                  SU R                   S.5        g)NÚeventÚATTEMPT_LIMIT_REACHED)Fr;   r   r   ÚTOTP_REPLAY_REJECTED)r:   r-   )Fr<   ÚTOTP_ACCEPTED)r:   r-   Údelta)Tr=   ÚTOTP_REJECTED)r:   r   )Fr?   )r   r   r   Úappendr5   r
   Úranger   r&   Úcompare_digestr1   r+   r   r   Úadd)r   Ú	candidater6   Úcenterr>   Úctrs         r   ÚverifyÚTOTPVerifier.verify   s0  € Ø×Ñ ×!2Ñ!2Ó2Ø�K‰K×Ñ Ð(?Ð@ÔAÐJgÜ�9‹~˜tŸ~™~Ñ-ˆÜ˜DŸK™K˜<¨¯©°A©Ö6ˆEØ‘ˆCØ�1‹u‘hÜ×"Ò" 4×#8Ñ#8¸Ó#=¼cÀ)»n×MÓMØ×)×)¨c×5GÑ5GÓ.GØ—K‘K×&Ñ&Ð0FÐQTÑ'UÔVÑ_{Ø×"Ñ"×&Ñ& sÔ+À!¨TÔ-AØ—‘×"Ñ"¨OÀcÑ#XÔYÑbvñ 7ð 	×Ò˜aÑÕ §¡×!3Ñ!3¸_Ð_c×_sÑ_sÑ4tÔ!uð  Tr   )	r   r   r   r   r   r	   r
   r   r   N)é   r!   r   r"   T)r	   Úbytes)r-   r5   Úreturnr+   )r6   r5   rK   r+   )rD   r+   r6   r5   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r1   r7   rG   Ú__static_attributes__© r   r   r   r      s   † ösô@ô
E÷Tr   r   c                  óP   • \ rS rSrS
S jrSS jrSS jrSS jrSS jrSS jr	Sr
g	)ÚRecoveryCodeStoreé   c                ó:   • Xl         SU l        0 U l        / U l        g r   )ÚpepperÚ
generationÚ_digestsr   )r   rV   s     r   r   ÚRecoveryCodeStore.__init__   s   € ØŒ¨A˜DœO¸R¨t¬}ÈRÀÅr   c                óš   • [         R                  " U R                  UR                  5       [        R
                  5      R                  5       $ r4   )r&   r'   rV   Úencoder(   Úsha256Ú	hexdigest)r   Úcodes     r   Ú_digestÚRecoveryCodeStore._digest    s,   € Ü�xŠx˜Ÿ™ D§K¡K£M´'·.±.ÓA×KÑKÓMÐMr   c                óþ   • U =R                   S-  sl         U Vs0 s H  o R                  U5      S_M     snU l        U R                  R	                  SU R                   [        U5      S.5        [        U5      $ s  snf )Nr   FÚRECOVERY_SET_ISSUED)r:   rW   Úcount)rW   r_   rX   r   r@   ÚlenÚlist)r   ÚcodesÚcs      r   ÚissueÚRecoveryCodeStore.issue"   se   € Ø�Š˜Ñ�Ù6;Ó<²e°—|‘| A“ uÒ,±eÑ<ˆŒØ�‰×ÑÐ$9ÀtÇÁÔ_bÐchÓ_iÑjÔkÜ�E‹{Ðùò =s   šA:c                ó,  • U R                  U5      nX R                  ;  d  U R                  U   (       a)  U R                  R                  SU R                  S.5        gSU R                  U'   U R                  R                  SU R                  S.5        g)NÚRECOVERY_CODE_REUSED_OR_INVALID)r:   rW   )Frk   TÚRECOVERY_ACCEPTED)Trl   )r_   rX   r   r@   rW   )r   r^   Úds      r   ÚconsumeÚRecoveryCodeStore.consume'   sx   € Ø
�,‰,�tÓ
ˆØ—M‘MÓ! T§]¡]°1×%5Ø�K‰K×ÑÐ(IÐW[×WfÑWfÑgÔhð  rYØˆ�‰�aÑØ�‰×ÑÐ$7ÀTÇ_Á_ÑUÔVÐ_wr   c                óž   • U R                   n0 U l        U R                  U5      nU R                  R	                  SX R                   S.5        U$ )NÚRECOVERY_SET_REGENERATED)r:   Úold_generationÚnew_generation)rW   rX   rh   r   r@   )r   rf   rr   Úissueds       r   Ú
regenerateÚRecoveryCodeStore.regenerate-   sJ   € Ø—‘ˆØˆŒØ�z‰z˜%Ó ˆØ�‰×ÑÐ$>ÐP^×pÑpñ  Aô  	BØˆr   c                óX   ^• [        U R                  5      m[        U4S jU 5       5      $ )Nc              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr4   rQ   )Ú.0rg   Ústates     €r   Ú	<genexpr>Ú=RecoveryCodeStore.state_contains_plaintext.<locals>.<genexpr>5   s   øé € Ð-¢u !˜–:¢uùs   ƒ)ÚreprrX   Úany)r   rf   rz   s     @r   Ústate_contains_plaintextÚ*RecoveryCodeStore.state_contains_plaintext3   s"   ø€ Ü�4—=‘=Ó!ˆÜÔ-¡uÓ-Ó-Ð-r   )rX   r   rW   rV   N)s   SEC005_SYNTHETIC_LOCAL_PEPPER)r^   r+   rK   r+   )rf   ú	list[str])r^   r+   )rf   r�   rK   Úbool)rL   rM   rN   rO   r   r_   rh   rn   ru   r   rP   rQ   r   r   rS   rS      s#   † ôPôNôô
xô÷.r   rS   c                 ó
   • / SQ$ )N))é;   Ú94287082)iÅ5:BÚ07081804)iÇ5:BÚ14050471)iÒ–IÚ89005924)i ”5wÚ69279037)l    H/P Ú65353130rQ   rQ   r   r   Úrfc_vectors_sha1r‹   7   s   € ò Vð  Vr   )	Ú
__future__r   r(   r&   r$   Úsecretsr   rS   r‹   rQ   r   r   Ú<module>rŽ      s*   ðÝ "ß %× %÷Tñ T÷2.ñ .ó4Vr   