§
    HŠtjÒ  ã                   ó2  — d Z ddlZddlmZ ddlZ ej        e¦  «        ZddlZddl	Z
ddlmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZmZ d	gZexZZej        d
k    rddlmZ ej        dk    rddlmZ dZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'ej(        j)        dk    s
J d¦   «         ‚ej(        j*        dk    s
J d¦   «         ‚d„ Z+ e+¦   «         Z,d„ Z- G d„ de¦  «        Z.d /                    d¦  «        Z0e0dz  dd…         Z1e0d z  dd!…         Z2 G d"„ d#e¦  «        Z3dS )$z"passlib.tests -- test passlib.totpé    N)Úpartial)Úexc)ÚunicodeÚu)ÚTestCaseÚ	time_call)Útotp)ÚTOTPÚ	AppWalletÚAES_SUPPORTÚ
EngineTest)é   r   )ÚError)r   r   Úabcdefs    ÿÚ4AOGGDBBQSYHNTUZs
   àc!„°vÎ™s   î]Ë9‡0 DÈy/¥4&äœÂÚS3JDVB7QD2R7JPXXÚJBSWY3DPEHPK3PXPs
   Hello!Þ­¾ïé   zunexpected float_info.radixé,   z#double precision unexpectedly smallc                  óä   — d} d}	 | dz  }	 t           j                              |dz
  ¦  «        j        }n# t          t          t
          f$ r Y nw xY w||k     rn|} ŒU| dz  } d}t          | |¦  «        S )z8
    helper to calc max_time_t constant (see below)
    i   @r   Té   l   Ðéë )ÚdatetimeÚutcfromtimestampÚyearÚ
ValueErrorÚOSErrorÚOverflowErrorÚmin)Úvaluer   Ú
next_valueÚ	next_yearÚmax_datetime_timestamps        úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/tests/test_totp.pyÚ_get_max_time_tr$   8   s§   € ð €EØ€DðØ˜a‘Zˆ
ð	Ý Ô)×:Ò:¸:Àa¹<ÑHÔHÔMˆIˆIøÝ�G¥]Ð3ð 	ð 	ð 	ð ˆEð	øøøð* �tÒÐØàˆð9ð> 
ˆQ�J€Eð
 *ÐÝˆuÐ,Ñ-Ô-Ð-s   Œ'4 ´AÁAc                 ó   — | dz  dz   dz  S )Né   é   é   © )Úraw_sizes    r#   Úto_b32_sizer+   i   s   € Ø�q‰L˜1Ñ Ñ"Ð"ó    c                   óP   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z		 	 dd„Z
d„ Zd„ ZdS )ÚAppWalletTestzpasslib.totp.AppWalletc                 óì  — t          ¦   «         }|                      |j        i ¦  «         |                      |j        ¦  «         dddœ}t          |¦  «        }|                      |j        |¦  «         |                      |j        ¦  «         t          d¦  «        }|                      |j        |¦  «         t          d¦  «        }|                      |j        dddœ¦  «         t          d¦  «        }|                      |j        |¦  «         |                      t          t           d¦  «         |                      t          t           d	¦  «         |                      t          t           d
ddœ¦  «         dS )z-constructor -- 'secrets' param -- input typesó   aaaó   bbb©Ú1Ú2z
 1: aaa
# comment
 
2: bbb   z"1: aaa: bbb 
# comment
 
2: bbb   s   aaa: bbbz{"1":"aaa","2":"bbb"}é{   z[123]ÚaaaÚ N)	r   ÚassertEqualÚ_secretsÚassertFalseÚhas_secretsÚ
assertTrueÚassertRaisesÚ	TypeErrorr   )ÚselfÚwalletÚrefs      r#   Útest_secrets_typesz AppWalletTest.test_secrets_typesv   s_  € õ ‘”ˆØ×Ò˜œ¨"Ñ-Ô-Ð-Ø×Ò˜Ô+Ñ,Ô,Ð,ð  Ð(Ð(ˆÝ˜3‘”ˆØ×Ò˜œ¨#Ñ.Ô.Ð.Ø�Š˜Ô*Ñ+Ô+Ð+õ Ð?Ñ@Ô@ˆØ×Ò˜œ¨#Ñ.Ô.Ð.õ ÐBÑCÔCˆØ×Ò˜œ°À&Ð*IÐ*IÑJÔJÐJõ Ð2Ñ3Ô3ˆØ×Ò˜œ¨#Ñ.Ô.Ð.ð 	×Ò�)¥Y°Ñ4Ô4Ð4ð 	×Ò�)¥Y°Ñ8Ô8Ð8ð 	×Ò�*¥i°uÀ2Ð1FÐ1FÑGÔGÐGÐGÐGr,   c           	      ó¬  — ddddœ}t          |¦  «        }|                      |j        |¦  «         t          t          d¦  «        dt          d¦  «        dt          d¦  «        di¦  «        }|                      |j        |¦  «         t          ddddœ¦  «        }|                      |j        |¦  «         |                      t
          t           d	d
i¦  «         t          ddi¦  «        }|                      t          t           dd
i¦  «         |                      t          t           dd
i¦  «         t          t          d
¦  «        dddœ¦  «        }|                      |j        |¦  «         |                      t
          t           ddi¦  «         |                      t
          t           ddi¦  «         |                      t
          t           dg i¦  «         dS )z9constructor -- 'secrets' param -- tag/value normalizationr0   r1   s   ccc)r3   Ú02ÚCr3   rD   rE   )r   rD   rE   )r   r6   z1-2_3.4z-abczab*$Úbbbr5   N)r   r8   r9   r   r=   r>   r   )r?   rA   r@   s      r#   Útest_secrets_tagszAppWalletTest.test_secrets_tags¨   s¬  € ð  &¨vÐ6Ð6ˆÝ˜3‘”ˆØ×Ò˜œ¨#Ñ.Ô.Ð.õ �A˜c™FœF F­A¨d©G¬G°V½Q¸s¹V¼VÀVÐLÑMÔMˆØ×Ò˜œ¨#Ñ.Ô.Ð.õ ˜v¨V¸&ÐAÐAÑBÔBˆØ×Ò˜œ¨#Ñ.Ô.Ð.ð 	×Ò�)¥Y°°u°Ñ>Ô>Ð>õ ˜I vÐ.Ñ/Ô/ˆð 	×Ò�*¥i°&¸%°ÑAÔAÐAØ×Ò�*¥i°&¸%°ÑAÔAÐAõ ¥ 5¡¤°¸VÐDÐDÑEÔEˆØ×Ò˜œ¨#Ñ.Ô.Ð.ð 	×Ò�)¥Y°°c°
Ñ;Ô;Ð;Ø×Ò�)¥Y°°d°Ñ<Ô<Ð<Ø×Ò�)¥Y°°b°	Ñ:Ô:Ð:Ð:Ð:r,   c                 ó  — t          dddœ¦  «        }|                      |j        d¦  «         |                      |                     |j        ¦  «        d¦  «         t          ddddœ¦  «        }|                      |j        d¦  «         |                      |                     |j        ¦  «        d	¦  «         t          ddddœd
¬¦  «        }|                      |j        d
¦  «         |                      |                     |j        ¦  «        d¦  «         |                      t
          t           ddddœd¬¦  «         t          ¦   «         }|                      |j        d¦  «         |                      t
          |j        d¦  «         dS )z"constructor -- 'default_tag' paramÚoneÚtwo)r3   rD   rD   s   twor6   )r3   rD   ÚArK   r0   r3   )Údefault_tags   oneÚBN)r   r8   rL   Ú
get_secretr=   ÚKeyError)r?   r@   s     r#   Útest_default_tagzAppWalletTest.test_default_tagÍ   s‡  € õ  ¨eÐ4Ð4Ñ5Ô5ˆØ×Ò˜Ô+¨TÑ2Ô2Ð2Ø×Ò˜×*Ò*¨6Ô+=Ñ>Ô>ÀÑGÔGÐGõ  ¨e¸%Ð@Ð@ÑAÔAˆØ×Ò˜Ô+¨SÑ1Ô1Ð1Ø×Ò˜×*Ò*¨6Ô+=Ñ>Ô>ÀÑGÔGÐGõ  ¨e¸%Ð@Ð@ÈcÐRÑRÔRˆØ×Ò˜Ô+¨SÑ1Ô1Ð1Ø×Ò˜×*Ò*¨6Ô+=Ñ>Ô>ÀÑGÔGÐGð 	×Ò�(¥I°UÀ%ÈeÐ/TÐ/TØ&)ð 	ñ 	+ô 	+ð 	+õ ‘”ˆØ×Ò˜Ô+¨TÑ2Ô2Ð2Ø×Ò�( FÔ$5°tÑ<Ô<Ð<Ð<Ð<r,   Nc                 ó–   — t           r|o |¦   «          d S  d S |o|                      t          |¦  «         |                      d¦  «        ‚)Nz$'cryptography' package not installed)r   r=   ÚRuntimeErrorÚskipTest)r?   Úcanarys     r#   Úrequire_aes_supportz!AppWalletTest.require_aes_supportí   sT   € Ýð 	HØÐ�v�v‘x”x�x�x�xÐÐÐàÐ>�t×(Ò(­°vÑ>Ô>øØ—-’-Ð FÑGÔGÐGr,   c                 ó  — t          t          t          dœ¦  «        }t          ddddd¬¦  «        }|                      t          |j        |¦  «        ¬¦  «         |                      |                     |¦  «        d	         t          ¦  «         t          ddd
dd¬¦  «        }|                      |                     |¦  «        d	         t          ¦  «         t          ddddd¬¦  «        }|                      |                     |¦  «        d	         t          ¦  «         | 
                    ¦   «         }|                     d¬¦  «         |                      |                     |¦  «        d	         d¦  «         | 
                    ¦   «         }|                     d¬¦  «         |                      t          |j        |¦  «         | 
                    ¦   «         }|                     d¬¦  «         |                      t          |j        |¦  «         dS )z.decrypt_key()r2   r   é   Ú6D7N7W53O7HHS37NLUFQÚMHCTEGSNPFN5CGBJr3   ©ÚvÚcÚsÚkÚt©rT   r   ÚSPZJ54Y6IPUD2BYA4C6AÚZGDXXTVQOWYLC2AUr&   ÚFCCTARTIJWE7CPQHUDKAÚ D2DRS32YESGHHINWFFCELKN7Z6NAHM4Mr4   ©r_   s
   ¯D6.F7ëQÚ3éç  )r[   N)r   ÚPASS1ÚPASS2ÚdictrU   r   Údecrypt_keyr8   ÚKEY1_RAWÚKEY2_RAWÚcopyÚupdater=   rO   r   )r?   r@   ÚCIPHER1ÚCIPHER2ÚCIPHER3Útemps         r#   Útest_decrypt_keyzAppWalletTest.test_decrypt_keyô   sò  € õ ¥­UÐ3Ð3Ñ4Ô4ˆõ ˜˜bÐ$:Ø+¨sð4ñ 4ô 4ˆà× Ò ­°Ô0BÀGÑ(LÔ(LÐ ÑMÔMÐMð 	×Ò˜×+Ò+¨GÑ4Ô4°QÔ7½ÑBÔBÐBõ ˜˜bÐ$:Ø+¨sð4ñ 4ô 4ˆà×Ò˜×+Ò+¨GÑ4Ô4°QÔ7½ÑBÔBÐBõ ˜˜aÐ#9Ø;¸sðDñ Dô Dˆà×Ò˜×+Ò+¨GÑ4Ô4°QÔ7½ÑBÔBÐBð �|Š|‰~Œ~ˆØ�Š�cˆÑÔÐØ×Ò˜×+Ò+¨DÑ1Ô1°!Ô4Ð6OÑPÔPÐPð �|Š|‰~Œ~ˆØ�Š�cˆÑÔÐØ×Ò�( FÔ$6¸Ñ=Ô=Ð=ð �|Š|‰~Œ~ˆØ�Š�cˆÑÔÐØ×Ò�* fÔ&8¸$Ñ?Ô?Ð?Ð?Ð?r,   c                 óN  — |                       ¦   «          t          t          t          dœd¬¦  «        }t	          ddddd¬¦  «        }|                      |                     |¦  «        d         ¦  «         |                     ¦   «         }|                     d¬	¦  «         |  	                    |                     |¦  «        d         ¦  «         |                     ¦   «         }|                     d
¬¦  «         |  	                    |                     |¦  «        d         ¦  «         dS )z$.decrypt_key() -- needs_recrypt flagr2   rW   ©Úencrypt_costr   ÚAAAAr4   rZ   r&   )r\   r3   re   N)
rU   r   rh   ri   rj   r:   rk   rn   ro   r<   )r?   r@   rA   rs   s       r#   Útest_decrypt_key_needs_recryptz,AppWalletTest.test_decrypt_key_needs_recrypt  s  € à× Ò Ñ"Ô"Ð"å¥­UÐ3Ð3À"ÐEÑEÔEˆõ �Q˜" ¨&°CÐ8Ñ8Ô8ˆØ×Ò˜×+Ò+¨CÑ0Ô0°Ô3Ñ4Ô4Ð4ð �xŠx‰zŒzˆØ�Š�aˆÑÔÐØ�Š˜×*Ò*¨4Ñ0Ô0°Ô3Ñ4Ô4Ð4ð �xŠx‰zŒzˆØ�Š�cˆÑÔÐØ�Š˜×*Ò*¨4Ñ0Ô0°Ô3Ñ4Ô4Ð4Ð4Ð4r,   r3   Fc                 ó   — |                       t          |¦  «        t          g d¢¦  «        ¦  «         |                       |d         d¦  «         |                       |d         |¦  «         |                       |d         |j        ¦  «         |                       t          |d         ¦  «        t	          |j        ¦  «        ¦  «         |                       t          |d         ¦  «        t	          t          |¦  «        ¦  «        ¦  «         |                     |¦  «        \  }}|                       ||¦  «         |                       ||¦  «         dS )	z.check encrypt_key() result has expected format)r[   r_   r\   r]   r^   r[   r   r_   r\   r]   r^   N)r8   Úsetrw   Úlenr+   Ú	salt_sizerk   )r?   Úresultr@   ÚkeyÚtagÚneeds_recryptÚ
result_keyÚresult_needs_recrypts           r#   ÚassertSaneResultzAppWalletTest.assertSaneResult0  s)  € ð 	×Ò�˜V™œ¥cÐ*CÐ*CÐ*CÑ&DÔ&DÑEÔEÐEà×Ò˜ œ aÑ(Ô(Ð(Ø×Ò˜ œ cÑ*Ô*Ð*Ø×Ò˜ œ fÔ&9Ñ:Ô:Ð:à×Ò�˜V Cœ[Ñ)Ô)­;°vÔ7GÑ+HÔ+HÑIÔIÐIØ×Ò�˜V Cœ[Ñ)Ô)­;µs¸3±x´xÑ+@Ô+@ÑAÔAÐAà+1×+=Ò+=¸fÑ+EÔ+EÑ(ˆ
Ð(Ø×Ò˜ SÑ)Ô)Ð)Ø×ÒÐ-¨}Ñ=Ô=Ð=Ð=Ð=r,   c                 óŠ  — t          dt          id¬¦  «        }|                      t          |j        t
          ¦  «        ¬¦  «         |                     t
          ¦  «        }|                      ||t
          ¦  «         |                     t
          ¦  «        }|                      ||t
          ¦  «         |                      |d         |d         ¦  «         |                      |d         |d         ¦  «         t          dt          id¬¦  «        }|                     t
          ¦  «        }|                      ||t
          ¦  «         t          t          t          dœ¦  «        }|                     t
          ¦  «        }|                      ||t
          d	¬
¦  «         t          dt          i¦  «        }d|_	        |                     t
          ¦  «        }|                      ||t
          ¦  «         |                     t          ¦  «        }|                      ||t          ¦  «         |                      t          |j        d¦  «         dS )z.encrypt_key()r3   r(   rv   r`   r]   r^   é   r2   r4   )r€   é@   r,   N)r   rh   rU   r   Úencrypt_keyrl   r„   ÚassertNotEqualri   r}   rm   r=   r   )r?   r@   r~   ÚotherÚwallet2s        r#   Útest_encrypt_keyzAppWalletTest.test_encrypt_keyA  sô  € õ ˜C¥˜<°aÐ8Ñ8Ô8ˆØ× Ò ­°Ô0BÅHÑ(MÔ(MÐ ÑNÔNÐNð ×#Ò#¥HÑ-Ô-ˆØ×Ò˜f f­hÑ7Ô7Ð7ð ×"Ò"¥8Ñ,Ô,ˆØ×Ò˜f f­hÑ7Ô7Ð7Ø×Ò˜E #œJ¨¨s¬Ñ4Ô4Ð4Ø×Ò˜E #œJ¨¨s¬Ñ4Ô4Ð4õ ˜S¥%˜L°qÐ9Ñ9Ô9ˆØ×$Ò$¥XÑ.Ô.ˆØ×Ò˜f g­xÑ8Ô8Ð8õ ¥%­eÐ4Ð4Ñ5Ô5ˆØ×$Ò$¥XÑ.Ô.ˆØ×Ò˜f g­x¸SÐÑAÔAÐAõ ˜S¥%˜LÑ)Ô)ˆØˆÔØ×$Ò$¥XÑ.Ô.ˆØ×Ò˜f g­xÑ8Ô8Ð8ð ×#Ò#¥HÑ-Ô-ˆØ×Ò˜f f­hÑ7Ô7Ð7ð 	×Ò�* fÔ&8¸#Ñ>Ô>Ð>Ð>Ð>r,   c                 ó‚  — |                       ¦   «          t          ddi¦  «        }|xj        dz  c_        t          t	          |j        t          ¦  «        d¬¦  «        \  }}|xj        dz  c_        t          t	          |j        t          ¦  «        d¬¦  «        \  }}|                      ||dz  |dz  dz  ¬	¦  «         d
S )z verify cost parameter via timingr3   r6   r   r   )Úmaxtimer   r&   ç      à?)ÚdeltaN)rU   r   rw   r   r   rˆ   rl   ÚassertAlmostEqual)r?   r@   r�   Ú_Údelta2s        r#   Útest_encrypt_cost_timingz&AppWalletTest.test_encrypt_cost_timingj  sÆ   € à× Ò Ñ"Ô"Ð"õ ˜C ˜<Ñ(Ô(ˆØÐÔ˜qÑ ÐÔÝ�W VÔ%7½ÑBÔBÈAÐNÑNÔN‰ˆˆqð 	ÐÔ˜qÑ ÐÔÝ�g fÔ&8½(ÑCÔCÈQÐOÑOÔO‰	ˆ�ð 	×Ò˜v u¨Q¡w°u¸Q±wÀ±mÐÑDÔDÐDÐDÐDr,   ©N)r3   F)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionPrefixrB   rG   rP   rU   rt   ry   r„   rŒ   r”   r)   r,   r#   r.   r.   o   sÇ   € € € € € Ø0Ðð0Hð 0Hð 0Hðd!;ð !;ð !;ðJ=ð =ð =ð@Hð Hð Hð Hð$@ð $@ð $@ðL5ð 5ð 5ð, 9<Ø',ð>ð >ð >ð >ð"'?ð '?ð '?ðREð Eð Eð Eð Er,   r.   Ú12345678901234567890Úasciié    r'   r‡   c                   ó¸  ‡ — e Zd ZdZdZˆ fd„Zd„ Zdfd„Zd„ Z e	dd	d
d¬¦  «        Z
 e	dd¬¦  «        dddddg e	dd¬¦  «        dddddg e	dd¬¦  «        ddg e	edd	¬¦  «        dd d!d"d#d$g e	edd%¬¦  «        d&d'd(d)d*d+g e	edd,¬¦  «        d-d.d/d0d1d2g e	d3d¬¦  «        d4d5g e	d3d6d7¬8¦  «        d9g e	edd:¬;¦  «        d<g e	edd%d:¬=¦  «        d>g e	edd,d:¬=¦  «        d?ggZd@„ ZdA„ ZdB„ ZdC„ ZdD„ ZdE„ ZdF„ ZdG„ ZdH„ ZdI„ ZdJ„ ZdfdK„ZdL„ ZdM„ ZdN„ ZdO„ ZdP„ ZdQ„ Z dgdT„Z!dU„ Z"dV„ Z#dW„ Z$dX„ Z%	 dfdY„Z&	 dfdZ„Z'd[„ Z(d\„ Z)d]„ Z*d^„ Z+d_„ Z,d`„ Z-da„ Z.db„ Z/dc„ Z0dd„ Z1de„ Z2ˆ xZ3S )hÚTotpTestz3
    common code shared by TotpTest & HotpTest
    zpasslib.totp.TOTPc                 óæ   •— t          t          | ¦  «                             ¦   «          ddlm} |                     ¦   «          |                      t          d|                      ¦   «         ¦  «         d S )Nr   )Úlookup_hashÚrng)	Úsuperrž   ÚsetUpÚpasslib.crypto.digestr    Úclear_cacheÚ	patchAttrÚtotp_moduleÚ	getRandom)r?   r    Ú	__class__s     €r#   r£   zTotpTest.setUp˜  sm   ø€ Ý�h˜ÑÔ×#Ò#Ñ%Ô%Ð%ð 	6Ð5Ð5Ð5Ð5Ð5Ø×ÒÑ!Ô!Ð!ð 	�Š•{ E¨4¯>ª>Ñ+;Ô+;Ñ<Ô<Ð<Ð<Ð<r,   c                 ó^   — |                       ¦   «                              ¦   «         t          z  S )zY
        helper to generate random epoch time
        :returns float: epoch time
        )r¨   ÚrandomÚ
max_time_t©r?   s    r#   ÚrandtimezTotpTest.randtime¥  s%   € ð
 �~Š~ÑÔ×&Ò&Ñ(Ô(­:Ñ5Ð5r,   Nc                 óX  — |                       ¦   «         }d|vrd|d<   |                     d|                     dd¦  «        ¦  «         |                     d|                     g d¢¦  «        ¦  «         |                     d	|                     dd
¦  «        ¦  «          |pt          di |¤ŽS )z@
        helper which generates a random TOTP instance.
        r   TÚnewÚdigitsr†   é
   Úalg)Úsha1Úsha256Úsha512Úperiodéx   r)   )r¨   Ú
setdefaultÚrandintÚchoicer
   )r?   ÚclsÚkwdsr¡   s       r#   ÚrandotpzTotpTest.randotp¬  s¬   € ð �nŠnÑÔˆØ˜ÐÐØˆD�‰KØ�Š˜ #§+¢+¨a°Ñ"4Ô"4Ñ5Ô5Ð5Ø�Š˜˜sŸzšzÐ*FÐ*FÐ*FÑGÔGÑHÔHÐHØ�Š˜ #§+¢+¨b°#Ñ"6Ô"6Ñ7Ô7Ð7Ø��•tÐ$Ð$˜tÐ$Ð$Ð$r,   c                 óÎ  — |                       ¦   «         }|                       ¦   «         }|                      |j        |j        d¦  «         t          d¦  «        D ](}|j        |j        k    r n*|                       ¦   «         }Œ)|                      d¦  «         t          d¦  «        D ])}|j        |j        k    r dS |                       ¦   «         }Œ*|                      d¦  «         dS )z,
        internal test -- randotp()
        zkey not randomized:r²   zdigits not randomizedzalg not randomizedN)r¾   r‰   r   Úranger±   Úfailr³   )r?   Úotp1Úotp2r’   s       r#   Útest_randotpzTotpTest.test_randotp¸  sÝ   € ð �|Š|‰~Œ~ˆØ�|Š|‰~Œ~ˆà×Ò˜DœH d¤hÐ0EÑFÔFÐFõ �r‘”ð 	/ð 	/ˆAØŒ{˜dœkÒ)Ð)Ø�Ø—<’<‘>”>ˆDˆDà�IŠIÐ-Ñ.Ô.Ð.õ �r‘”ð 	,ð 	,ˆAØŒx˜4œ8Ò#Ð#Ø��Ø—<’<‘>”>ˆDˆDà�IŠIÐ*Ñ+Ô+Ð+Ð+Ð+r,   Úbase32r´   é   r&   )Úformatr³   r·   r±   ÚACDEFGHJKL234567r†   )r   r±   )é·¼6TÚ221105)é¸¼6TÚ178491)é¹¼6TrÌ   )éÕ¼6TrÌ   )éÖ¼6TÚ915114)rÉ   Ú20221105)rË   Ú86178491)rÍ   rÒ   )rÎ   rÒ   )rÏ   Ú03915114zS3JD-VB7Q-D2R7-JPXX)i5¹�TÚ000492)éS¹�TÚ897212Úraw)r   rÇ   r³   )é;   Ú94287082)éÅ5:BÚ07081804)éÇ5:BÚ14050471)éÒ–IÚ89005924)é ”5wÚ69279037)ì    H/P Ú65353130rµ   )rØ   Ú46119246)rÚ   Ú68084774)rÜ   Ú67062674)rÞ   Ú91819424)rà   Ú90698825)râ   Ú77737706r¶   )rØ   Ú90693936)rÚ   Ú25091201)rÜ   Ú99943326)rÞ   Ú93441116)rà   Ú38618901)râ   Ú47863826r   )iî‘þSÚ727248)i.Ñ¡TÚ122419é	   é)   )r   r±   r·   )iÐÑ¡TÚ	662331049é<   )r   rÇ   r·   )rÜ   Ú19360094)r   rÇ   r³   r·   )rÜ   Ú40857319)rÜ   Ú37023009c           	   #   ón  K  — ddl m} | j        D ]¤}| j                             ¦   «         }|                     |d         ¦  «         |dd…         D ]c}t          |¦  «        dk    r|\  }}}n|\  }}d}t                               d||||¦  «          |di |¤Ž}d|j	        ›d|›d	|›d
�}	|||||	fV — ŒdŒ¥dS )zv
        helper to iterate over test vectors.
        yields ``(totp, time, token, expires, prefix)`` tuples.
        r   ©r
   r   Nr   z+test vector: %r time=%r token=%r expires=%rzalg=ú time=ú token=z: r)   )
Úpasslib.totpr
   ÚvectorsÚvector_defaultsrn   ro   r|   ÚlogÚdebugr³   )
r?   r
   Úrowr½   ÚentryÚtimeÚtokenÚexpiresÚotpÚprefixs
             r#   Úiter_test_vectorszTotpTest.iter_test_vectors.  s  è è € ð
 	&Ð%Ð%Ð%Ð%Ð%Ø”<ð 	8ð 	8ˆCØÔ'×,Ò,Ñ.Ô.ˆDØ�KŠK˜˜AœÑÔÐØ˜Q˜R˜Rœð 8ð 8�Ý�u‘:”: ’?�?Ø+0Ñ(�D˜%  à"'‘K�D˜%Ø"�Gõ —	’	ÐGÈÈtÐUZÐ\cÑdÔdÐdØ�d�l�l˜T�l�l��Ø8;¼¸¸ÀÀÀÀuÀuÀuÐM�Ø˜4 ¨°Ð7Ð7Ð7Ð7Ð7ð8ð	8ð 	8r,   c                 ó  — |                       t          t          ¦  «         |                       t          t          dd¬¦  «         t          d¬¦  «        }t          d¬¦  «        }|                      |j        |j        ¦  «         dS )zconstructor -- 'new'  parameterÚ4aoggdbbqsyhntuzT)r   r°   ©r°   N)r=   r>   r
   r‰   r   )r?   r  rÃ   s      r#   Útest_ctor_w_newzTotpTest.test_ctor_w_newG  st   € ð 	×Ò�)¥TÑ*Ô*Ð*Ø×Ò�)¥TÐ/AÀtÐÑLÔLÐLõ �tˆn‰nŒnˆÝ˜ˆ~‰~Œ~ˆØ×Ò˜CœG T¤XÑ.Ô.Ð.Ð.Ð.r,   c                 ój  — |                       t          t          dd¬¦  «        j        ¦  «        d¦  «         |                       t          t          dd¬¦  «        j        ¦  «        d¦  «         |                       t          t          dd¬¦  «        j        ¦  «        d¦  «         |                       t          t          dd	¬
¦  «        j        ¦  «        d	¦  «         |                       t          t          dd¬
¦  «        j        ¦  «        d¦  «         |                      t
          t          ddd¬¦  «         |                      t
          t          dd¬
¦  «         |                      t          t          j	        d¬¦  «        g¦  «        5  t          dd¦  «        }ddd¦  «         dS # 1 swxY w Y   dS )z constructor -- 'size'  parameterTr´   )r°   r³   é   rµ   rœ   r¶   r‡   r²   ©r°   Úsizeé   é   )r°   r  r³   rò   z-.*for security purposes, secret key must be.*©ÚcategoryÚ
message_reÚ0A0A0A0A0A0A0A0A0AÚhexN)
r8   r|   r
   r   r=   r   ÚassertWarningListrj   r   ÚPasslibSecurityWarning)r?   r’   s     r#   Útest_ctor_w_sizezTotpTest.test_ctor_w_sizeS  sÒ  € ð 	×Ò��T d°Ð7Ñ7Ô7Ô;Ñ<Ô<¸bÑAÔAÐAØ×Ò��T d°Ð9Ñ9Ô9Ô=Ñ>Ô>ÀÑCÔCÐCØ×Ò��T d°Ð9Ñ9Ô9Ô=Ñ>Ô>ÀÑCÔCÐCð 	×Ò��T d°Ð4Ñ4Ô4Ô8Ñ9Ô9¸2Ñ>Ô>Ð>Ø×Ò��T d°Ð4Ñ4Ô4Ô8Ñ9Ô9¸2Ñ>Ô>Ð>ð 	×Ò�*¥d°¸2À6ÐÑJÔJÐJð 	×Ò�*¥d°¸1ÐÑ=Ô=Ð=ð ×#Ò#Ý�cÔ8ÐEtÐuÑuÔuð%ñ ô ð 	$ð 	$õ �V˜UÑ#Ô#ˆAð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s   Æ
F(Æ(F,Æ/F,c                 ó”  — |                       t          t          ¦  «        j        t          ¦  «         |                       t          t                               ¦   «         ¦  «        j        t          ¦  «         |                       t          d¦  «        j        t          ¦  «         |                      t          t          d¦  «         |                       t          dd¦  «        j        t          ¦  «         |                      t          t          dd¦  «         |                       t          t          d¦  «        j        t          ¦  «         dS )z,constructor -- 'key' and 'format' parametersz 4aog gdbb qsyh ntuz zao!ggdbbqsyhntuzÚe01c630c2184b076ce99r  ÚX01c630c2184b076ce99r×   N)	r8   r
   ÚKEY1r   rl   Úlowerr=   ÚBase32DecodeErrorÚBase16DecodeErrorr­   s    r#   Útest_ctor_w_key_and_formatz#TotpTest.test_ctor_w_key_and_formatk  sü   € ð 	×Ò��d™œœ­Ñ2Ô2Ð2ð 	×Ò��dŸjšj™lœlÑ+Ô+Ô/µÑ:Ô:Ð:ð 	×Ò�Ð5Ñ6Ô6Ô:½HÑEÔEÐEð 	×ÒÕ+­TÐ3EÑFÔFÐFð 	×Ò�Ð4°eÑ<Ô<Ô@Å(ÑKÔKÐKð 	×ÒÕ+­TÐ3IÈ5ÑQÔQÐQð 	×Ò��h¨Ñ.Ô.Ô2µHÑ=Ô=Ð=Ð=Ð=r,   c                 ó  — |                       t          t          d¬¦  «        j        d¦  «         |                       t          t          d¬¦  «        j        d¦  «         |                      t
          t          t          d¬¦  «         dS )zconstructor -- 'alg' parameterzSHA-256©r³   rµ   ÚSHA256zSHA-333N)r8   r
   r  r³   r=   r   r­   s    r#   Útest_ctor_w_algzTotpTest.test_ctor_w_algƒ  su   € ð 	×Ò��d¨	Ð2Ñ2Ô2Ô6¸ÑAÔAÐAØ×Ò��d¨Ð1Ñ1Ô1Ô5°xÑ@Ô@Ð@ð 	×Ò�*¥d­D°iÐÑ@Ô@Ð@Ð@Ð@r,   c                 ób  — |                       t          t          t          d¬¦  «         |                      t          t          d¬¦  «        j        d¦  «         |                      t          t          d¬¦  «        j        d¦  «         |                       t          t          t          d¬¦  «         dS )z!constructor -- 'digits' parameterr(   ©r±   r†   r²   é   N)r=   r   r
   r  r8   r±   r­   s    r#   Útest_ctor_w_digitszTotpTest.test_ctor_w_digits�  sŽ   € à×Ò�*¥d­D¸ÐÑ;Ô;Ð;Ø×Ò��d¨1Ð-Ñ-Ô-Ô4°aÑ8Ô8Ð8Ø×Ò��d¨2Ð.Ñ.Ô.Ô5°rÑ:Ô:Ð:Ø×Ò�*¥d­D¸ÐÑ<Ô<Ð<Ð<Ð<r,   c                 óþ  — |                       t          t          ¦  «        j        d¦  «         |                       t          t          d¬¦  «        j        d¦  «         |                      t
          t          t          d¬¦  «         |                      t
          t          t          d¬¦  «         |                      t          t          t          d¬¦  «         |                      t          t          t          d¬¦  «         dS )	z!constructor -- 'period' parameterrÆ   é?   ©r·   ç      ø?Úabcr   éÿÿÿÿN)r8   r
   r  r·   r=   r>   r   r­   s    r#   Útest_ctor_w_periodzTotpTest.test_ctor_w_period”  sÉ   € ð 	×Ò��d™œÔ*¨BÑ/Ô/Ð/ð 	×Ò��d¨2Ð.Ñ.Ô.Ô5°rÑ:Ô:Ð:ð 	×Ò�)¥T­4¸ÐÑ<Ô<Ð<Ø×Ò�)¥T­4¸ÐÑ>Ô>Ð>ð 	×Ò�*¥d­D¸ÐÑ;Ô;Ð;Ø×Ò�*¥d­D¸ÐÑ<Ô<Ð<Ð<Ð<r,   c                 ó  — |                       t          t          ¦  «        j        d¦  «         |                       t          t          d¬¦  «        j        d¦  «         |                      t
          t          t          d¬¦  «         dS )z constructor -- 'label' parameterNzfoo@bar)Úlabelzfoo:bar)r8   r
   r  r4  r=   r   r­   s    r#   Útest_ctor_w_labelzTotpTest.test_ctor_w_label¥  sj   € à×Ò��d™œÔ)¨4Ñ0Ô0Ð0Ø×Ò��d¨)Ð4Ñ4Ô4Ô:¸IÑFÔFÐFØ×Ò�*¥d­D¸	ÐÑBÔBÐBÐBÐBr,   c                 ó  — |                       t          t          ¦  «        j        d¦  «         |                       t          t          d¬¦  «        j        d¦  «         |                      t
          t          t          d¬¦  «         dS )z!constructor -- 'issuer' parameterNzfoo.com©Úissuerzfoo.com:bar)r8   r
   r  r8  r=   r   r­   s    r#   Útest_ctor_w_issuerzTotpTest.test_ctor_w_issuer«  sj   € à×Ò��d™œÔ*¨DÑ1Ô1Ð1Ø×Ò��d¨9Ð5Ñ5Ô5Ô<¸iÑHÔHÐHØ×Ò�*¥d­D¸ÐÑGÔGÐGÐGÐGr,   c                 ó  — |                       t          t          ¦  «        j        d¦  «         |                        t          j        d¬¦  «        t          ¦  «        j        d¦  «         |                      t          t          j        d¬¦  «         |                      t          t          j        d¬¦  «         |                      t          t          j        d¬¦  «         |                      t          t          j        d¬¦  «         dS )	zusing() -- 'period' parameterrÆ   r-  r.  r/  r0  r   r1  N)r8   r
   r  r·   Úusingr=   r>   r   r­   s    r#   Útest_using_w_periodzTotpTest.test_using_w_period·  sÔ   € ð 	×Ò��d™œÔ*¨BÑ/Ô/Ð/ð 	×ÒÐ.�œ¨2Ð.Ñ.Ô.­tÑ4Ô4Ô;¸RÑ@Ô@Ð@ð 	×Ò�)¥T¤Z¸ÐÑ<Ô<Ð<Ø×Ò�)¥T¤Z¸ÐÑ>Ô>Ð>ð 	×Ò�*¥d¤j¸ÐÑ;Ô;Ð;Ø×Ò�*¥d¤j¸ÐÑ<Ô<Ð<Ð<Ð<r,   c                 ó  ‡— |                       ¦   «         }|                      |j        t          j        ¦  «         |                      |                     d¦  «        t          t          j        ¦   «         ¦  «        ¦  «         dgŠˆfd„}|                       t          j	        |¬¦  «        ¬¦  «        }|  
                    |                     d¦  «        d¦  «         |  
                    |                     d¦  «        d¦  «         |                      t          t          j	        d¬¦  «         d	}|                      t          |t          j	        d
„ ¬¦  «         |                      t          |t          j	        d„ ¬¦  «         dS )zusing -- 'now' parameterNgHáz®Ç^@c                  ó4   •— ‰ dxx         dz  cc<   ‰ d         S )Nr   r   r)   )Úcounters   €r#   Únowz&TotpTest.test_using_w_now.<locals>.nowÔ  s"   ø€ Ø�AˆJˆJŒJ˜!‰OˆJˆJ‰JØ˜1”:Ðr,   ©r@  )r¼   é~   é   r5   z)now\(\) function must return non-negativec                  ó   — dS )Nr0  r)   r)   r,   r#   ú<lambda>z+TotpTest.test_using_w_now.<locals>.<lambda>á  s   € Èu€ r,   c                  ó   — dS )Nr1  r)   r)   r,   r#   rE  z+TotpTest.test_using_w_now.<locals>.<lambda>ä  s   € Èr€ r,   )r¾   ÚassertIsr@  Ú_timer  r‘   Únormalize_timeÚintr
   r;  r8   r=   r>   ÚassertRaisesRegexÚAssertionError)r?   r  r@  Úmsg_rer?  s       @r#   Útest_using_w_nowzTotpTest.test_using_w_nowÈ  sX  ø€ ð �lŠl‰nŒnˆØ�Š�c”g�uœzÑ*Ô*Ð*Ø×Ò˜s×1Ò1°$Ñ7Ô7½½U¼Z¹\¼\Ñ9JÔ9JÑKÔKÐKð �(ˆð	ð 	ð 	ð 	ð 	ð �lŠl�tœz¨cÐ2Ñ2Ô2ˆlÑ3Ô3ˆà×Ò˜×+Ò+¨DÑ1Ô1°3Ñ7Ô7Ð7Ø×Ò˜×+Ò+¨DÑ1Ô1°3Ñ7Ô7Ð7ð 	×Ò�)¥T¤Z°SÐÑ9Ô9Ð9ð >ˆØ×Ò�~¨vµt´zÀ}À}ÐÑUÔUÐUð 	×Ò�~¨vµt´zÀzÀzÐÑRÔRÐRÐRÐRr,   c                 ó   — |€|                       d¬¦  «        }|                      |                     t          d¦  «        ¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      t
          |j        d	¦  «         |                      t
          |j        d¦  «         |                      t          j        |j        d
¦  «         |                      t          j        |j        d¦  «         |                      t          j        |j        d¦  «         dS )z$normalize_token() -- instance methodNé   r)  Ú1234567s   1234567i‡Ö iG” Ú0234567g    ‡Ö2AÚ123456Ú01234567iNa¼ )r¾   r8   Únormalize_tokenr   r=   r>   r   ÚMalformedTokenError©r?   r  s     r#   Útest_normalize_token_instancez&TotpTest.test_normalize_token_instanceê  sR  € àˆ;Ø—,’, a�,Ñ(Ô(ˆCð 	×Ò˜×,Ò,­Q¨y©\¬\Ñ:Ô:¸IÑFÔFÐFØ×Ò˜×,Ò,¨ZÑ8Ô8¸)ÑDÔDÐDð 	×Ò˜×,Ò,¨WÑ5Ô5°yÑAÔAÐAð 	×Ò˜×,Ò,¨VÑ4Ô4°iÑ@Ô@Ð@ð 	×Ò�) SÔ%8¸)ÑDÔDÐDØ×Ò�) SÔ%8¸$Ñ?Ô?Ð?ð 	×Ò�#Ô1°3Ô3FÈÑQÔQÐQð 	×Ò�#Ô1°3Ô3FÈ
ÑSÔSÐSØ×Ò�#Ô1°3Ô3FÈÑQÔQÐQÐQÐQr,   c                 óX   — |                       t          j        d¬¦  «        ¬¦  «         dS )z!normalize_token() -- class methodrP  r)  )r  N)rX  r
   r;  r­   s    r#   Útest_normalize_token_classz#TotpTest.test_normalize_token_class  s,   € à×*Ò*­t¬zÀÐ/CÑ/CÔ/CÐ*ÑDÔDÐDÐDÐDr,   c                 óJ  ‡— t          j        ¦   «         }|                      |¦  «        }t          d¦  «        D �]G}|                      ¦   «         Št          ‰¦  «        }|                      |                     ‰¦  «        |¦  «         |                      |                     |dz   ¦  «        |¦  «         |                      |                     |¦  «        |¦  «         t          j         	                    ‰¦  «        }|                      |                     |¦  «        |¦  «         |j
        }	 t          ˆfd„¦  «        |_
        |                      |                     d¦  «        |¦  «         ||_
        �Œ=# ||_
        w xY w|                      t          |j        d¦  «         dS )znormalize_time()r²   r�   c                  ó   •— ‰ S r•   r)   ©r  s   €r#   rE  z.TotpTest.test_normalize_time.<locals>.<lambda>  s   ø€ °t€ r,   NÚ1234)r
   r;  r¾   rÀ   r®   rJ  r8   rI  r   r   r@  Ústaticmethodr=   r>   )r?   ÚTotpFactoryr  r’   ÚtintÚdtÚorigr  s          @r#   Útest_normalize_timezTotpTest.test_normalize_time  sx  ø€ å”j‘l”lˆØ�lŠl˜;Ñ'Ô'ˆå�r‘”ð 	'ñ 	'ˆAØ—=’=‘?”?ˆDÝ�t‘9”9ˆDà×Ò˜S×/Ò/°Ñ5Ô5°tÑ<Ô<Ð<Ø×Ò˜S×/Ò/°°s±
Ñ;Ô;¸TÑBÔBÐBà×Ò˜S×/Ò/°Ñ5Ô5°tÑ<Ô<Ð<åÔ"×3Ò3°DÑ9Ô9ˆBØ×Ò˜S×/Ò/°Ñ3Ô3°TÑ:Ô:Ð:à”?ˆDð'Ý".¨|¨|¨|¨|Ñ"<Ô"<�”Ø× Ò  ×!3Ò!3°DÑ!9Ô!9¸4Ñ@Ô@Ð@à"&�”‘ø $�”Ð&Ð&Ð&Ð&à×Ò�) SÔ%7¸Ñ@Ô@Ð@Ð@Ð@s   Ä-A E6Å6	E?c                 óò  — |                       ¦   «         }t          t          d¦  «        }|                      |j        t          ¦  «         |                      |j        d¦  «         |                      |j        t          ¦  «         |                      |                     ¦   «         d¦  «         |                      |                     d¬¦  «        d¦  «         |                      |                     d¬¦  «        t          ¦  «         |                      |                     d¬	¦  «        d
¦  «         t          d| 	                    dd¦  «        ¬¦  «        }|j        }|j        }|                     ¦   «         }dS )z pretty_key() and .key attributesr×   r  z4AOG-GDBB-QSYH-NTUZú )Úsepz4AOG GDBB QSYH NTUZFr  )rÇ   ze01c-630c-2184-b076-ce99Tr²   r  r  N)
r¨   r
   rl   r8   r   Úhex_keyÚ
base32_keyr  Ú
pretty_keyrº   )r?   r¡   r  r’   s       r#   Útest_key_attrszTotpTest.test_key_attrs&  s?  € à�nŠnÑÔˆõ •8˜UÑ#Ô#ˆØ×Ò˜œ¥(Ñ+Ô+Ð+Ø×Ò˜œÐ&<Ñ=Ô=Ð=Ø×Ò˜œ­Ñ.Ô.Ð.ð 	×Ò˜ŸšÑ)Ô)Ð+@ÑAÔAÐAØ×Ò˜Ÿš¨C˜Ñ0Ô0Ð2GÑHÔHÐHØ×Ò˜Ÿš¨E˜Ñ2Ô2µDÑ9Ô9Ð9Ø×Ò˜Ÿš¨u˜Ñ5Ô5Ð7QÑRÔRÐRõ �t #§+¢+¨b°"Ñ"5Ô"5Ð6Ñ6Ô6ˆØŒKˆØŒNˆØ�NŠNÑÔˆˆˆr,   c                 ó  — ddl m}m}  |d¦  «        }|                     d¦  «        }|                      ||¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |d¦  «         |                      t          |¦  «        d	¦  «         |                      |d         d¦  «         |                      |d
         d¦  «         |  
                    t          |j        d¦  «         |  
                    t          |j        d	¦  «         |                      |¦  «         d„ |_        |                      |j        d¦  «         |                      |j        ¦  «         d„ |_        |                      |j        d¦  «         |                      |j        ¦  «         |                     d¦  «        }|                      ||¦  «         |                      ||¦  «         |                     d¦  «        }|                      ||¦  «         |                      ||¦  «         |                     d¦  «        }|                      ||¦  «         dS )zgenerate() -- TotpToken() classr   )r
   Ú	TotpTokenÚs3jdvb7qd2r7jpxxrÕ   rÖ   iµÒéT¹�T)rÖ   ro  r   r   éýÿÿÿc                  ó   — dS )Ng  àTn'ÕAr)   r)   r,   r#   rE  z*TotpTest.test_totp_token.<locals>.<lambda>T  s   € ˜<€ r,   r�   c                  ó   — dS )NiU¹�Tr)   r)   r,   r#   rE  z*TotpTest.test_totp_token.<locals>.<lambda>X  s   € ˜:€ r,   i7¹�TiWº�TN)rý   r
   rm  ÚgenerateÚassertIsInstancer8   r  r?  Úexpire_timer|   r=   Ú
IndexErrorÚ__getitem__r<   r@  Ú	remainingÚvalidr:   ÚassertIsNotr‰   )r?   r
   rm  r  r~   Úresult2Úresult3Úresult4s           r#   Útest_totp_tokenzTotpTest.test_totp_token?  sj  € à0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ð ˆdÐ%Ñ&Ô&ˆØ—’˜jÑ)Ô)ˆØ×Ò˜f iÑ0Ô0Ð0Ø×Ò˜œ xÑ0Ô0Ð0Ø×Ò˜œ¨Ñ2Ô2Ð2à×Ò˜Ô+¨ZÑ8Ô8Ð8Ø×Ò˜Ð!7Ñ8Ô8Ð8Ø×Ò�˜V™œ aÑ(Ô(Ð(Ø×Ò˜ œ HÑ-Ô-Ð-Ø×Ò˜ œ JÑ/Ô/Ð/Ø×Ò�* fÔ&8¸"Ñ=Ô=Ð=Ø×Ò�* fÔ&8¸!Ñ<Ô<Ð<Ø�Š˜ÑÔÐð (Ð'ˆŒØ×Ò˜Ô)¨3Ñ/Ô/Ð/Ø�Š˜œÑ%Ô%Ð%à%Ð%ˆŒØ×Ò˜Ô)¨1Ñ-Ô-Ð-Ø×Ò˜œÑ&Ô&Ð&ð —,’,˜zÑ*Ô*ˆØ×Ò˜ &Ñ)Ô)Ð)Ø×Ò˜ &Ñ)Ô)Ð)ð —,’,˜zÑ*Ô*ˆØ×Ò˜ &Ñ)Ô)Ð)Ø×Ò˜ &Ñ)Ô)Ð)ð —,’,˜zÑ*Ô*ˆØ×Ò˜G VÑ,Ô,Ð,Ð,Ð,r,   c                 óœ  ‡— ddl m}  |d¬¦  «        }|                      ¦   «         Š|                     ‰¦  «        }|j        }|                      |t          ¦  «         |j        dz  }|                      |                     |dz   ¦  «        j        |¦  «         |  	                    |                     |dz   ¦  «        j        |¦  «         t          j
                             ‰¦  «        }|                      t          |                     |¦  «        ¦  «        t          ‰¦  «        ¦  «         |                      |                     |¦  «        j        |¦  «           |j        ˆfd„¬¦  «        |j        ¬	¦  «        }|                      |                     ¦   «         j        |¦  «         |                      t"          |j        d
¦  «         dS )z
generate()r   rú   Tr  rÆ   é   c                  ó   •— ‰ S r•   r)   r]  s   €r#   rE  z(TotpTest.test_generate.<locals>.<lambda>„  s   ø€  d€ r,   rA  )r   r1  N)rý   r
   r®   rs  r  rt  r   r?  r8   r‰   r   r   rJ  rI  r;  ri  r=   r   )	r?   r
   r  r~   r  Ú
start_timerb  rÃ   r  s	           @r#   Útest_generatezTotpTest.test_generatej  s¢  ø€ à%Ð%Ð%Ð%Ð%Ð%ð ˆd�tˆn‰nŒnˆØ�}Š}‰ŒˆØ—’˜dÑ#Ô#ˆØ”ˆØ×Ò˜e¥WÑ-Ô-Ð-Ø”^ bÑ(ˆ
ð 	×Ò˜Ÿš j°2¡oÑ6Ô6Ô<¸eÑDÔDÐDð 	×Ò˜CŸLšL¨°b©Ñ9Ô9Ô?ÀÑGÔGÐGõ Ô×/Ò/°Ñ5Ô5ˆØ×Ò�˜S×/Ò/°Ñ3Ô3Ñ4Ô4µc¸$±i´iÑ@Ô@Ð@ð 	×Ò˜Ÿš bÑ)Ô)Ô/°Ñ7Ô7Ð7ð ,ˆzˆtŒz˜l˜l˜l˜lÐ+Ñ+Ô+°´Ð?Ñ?Ô?ˆØ×Ò˜Ÿš™œÔ.°Ñ6Ô6Ð6ð 	×Ò�* c¤l°BÑ7Ô7Ð7Ð7Ð7r,   c                 ó(  — |                       ¦   «         D ]|\  }}}}}|                     |¦  «        }|                      |j        ||¬¦  «         |                      |j        ||j        z  |¬¦  «         |r|                      |j        |¦  «         Œ}dS )zgenerate() -- reference vectors©ÚmsgN)r	  rs  r8   r  r?  r·   ru  )r?   r  r  r  r  r  r~   s          r#   Ú!test_generate_w_reference_vectorsz*TotpTest.test_generate_w_reference_vectorsŠ  s¦   € à15×1GÒ1GÑ1IÔ1Ið 	>ð 	>Ñ-ˆC��u˜g và—\’\ $Ñ'Ô'ˆFØ×Ò˜Vœ\¨5°fÐÑ=Ô=Ð=Ø×Ò˜Vœ^¨T°S´ZÑ-?ÀVÐÑLÔLÐLØð >Ø× Ò  Ô!3°WÑ=Ô=Ð=øð	>ð 	>r,   r   r7   c                 ó$  — ddl m} |                      ||¦  «         |                      |j        t          ¦  «         |                      |j        j        |¦  «         |                      |j        ||dz   ¬¦  «         ||z  }||z   }	|                      |j        |	|dz   ¬¦  «         |                      |j	        ||dz   ¬¦  «         |                      |j
        ||dz   ¬¦  «         |                      |j        ||z   ¦  «         |	dz   |z  }
|                      |j        |
¦  «         |                      |j        |
|z   ¦  «         |                      t          |¦  «        d	¦  «         |                      ||	|f¦  «         |                      t           |j        d
¦  «         |                      |d         |	¦  «         |                      |d         |¦  «         |                      t           |j        d	¦  «         |                      |¦  «         d S )Nr   ©Ú	TotpMatchz matched time:r…  z matched counter:z expected counter:z	 skipped:r   r   rp  )rý   rŠ  rt  r	   r
   r8   r·   r  r?  Úexpected_counterÚskippedÚcache_secondsru  Ú
cache_timer|   r=   rv  rw  r<   )r?   Úmatchr  rŒ  r·   Úwindowr†  rŠ  Úexpectedr?  ru  s              r#   ÚassertTotpMatchzTotpTest.assertTotpMatch˜  s   € Ø*Ð*Ð*Ð*Ð*Ð*ð 	×Ò˜e YÑ/Ô/Ð/ð 	×Ò˜eœj­$Ñ/Ô/Ð/Ø×Ò˜œÔ*¨FÑ3Ô3Ð3ð 	×Ò˜œ T¨sÐ5EÑ/EÐÑFÔFÐFØ˜6‘>ˆØ˜WÑ$ˆØ×Ò˜œ¨°SÐ;NÑ5NÐÑOÔOÐOØ×Ò˜Ô/°¸sÐEYÑ?YÐÑZÔZÐZØ×Ò˜œ¨°S¸;Ñ5FÐÑGÔGÐGØ×Ò˜Ô,¨f°v©oÑ>Ô>Ð>Ø ‘{ fÑ,ˆØ×Ò˜Ô*¨KÑ8Ô8Ð8Ø×Ò˜Ô)¨;¸Ñ+?Ñ@Ô@Ð@ð 	×Ò�˜U™œ QÑ'Ô'Ð'Ø×Ò˜ ¨$ Ñ0Ô0Ð0Ø×Ò�* eÔ&7¸Ñ<Ô<Ð<Ø×Ò˜˜qœ 7Ñ+Ô+Ð+Ø×Ò˜˜qœ 4Ñ(Ô(Ð(Ø×Ò�* eÔ&7¸Ñ;Ô;Ð;ð 	�Š˜ÑÔÐÐÐr,   c                 ó¸   ‡— dŠd} t          j        ˆfd„¬¦  «        t          ¦  «        }|                     |‰¦  «        }|                      |‰d¬¦  «         dS )z!match() -- valid TotpMatch objecté…kÚ781501c                  ó   •— ‰ dz   S ©Ni€Q r)   r]  s   €r#   rE  z8TotpTest.test_totp_match_w_valid_token.<locals>.<lambda>½  ó   ø€  T¨IÑ%5€ r,   rA  r   ©r  rŒ  N©r
   r;  ÚKEY3r�  r’  ©r?   r  r  r~   r  s       @r#   Útest_totp_match_w_valid_tokenz&TotpTest.test_totp_match_w_valid_token¹  sg   ø€ àˆØˆØ6�dŒjÐ5Ð5Ð5Ð5Ð6Ñ6Ô6µtÑ<Ô<ˆØ—’˜5 $Ñ'Ô'ˆØ×Ò˜V¨$¸ÐÑ:Ô:Ð:Ð:Ð:r,   c                 óÐ   ‡— ddl m} dŠd} t          j        ˆfd„¬¦  «        t          ¦  «        }|                     |‰dz
  ¦  «        }|                      |‰dz
  d¬	¦  «         d
S )z3match() -- valid TotpMatch object with future tokenr   r‰  r”  r•  c                  ó   •— ‰ dz   S r—  r)   r]  s   €r#   rE  z8TotpTest.test_totp_match_w_older_token.<locals>.<lambda>Ç  r˜  r,   rA  rÆ   r   r™  N)rý   rŠ  r
   r;  r›  r�  r’  )r?   rŠ  r  r  r~   r  s        @r#   Útest_totp_match_w_older_tokenz&TotpTest.test_totp_match_w_older_tokenÁ  s�   ø€ à*Ð*Ð*Ð*Ð*Ð*àˆØˆØ6�dŒjÐ5Ð5Ð5Ð5Ð6Ñ6Ô6µtÑ<Ô<ˆØ—’˜5 $¨¡)Ñ,Ô,ˆØ×Ò˜V¨$°©)¸QÐÑ?Ô?Ð?Ð?Ð?r,   c                 óÄ   ‡— dŠd} t          j        ˆfd„¬¦  «        t          ¦  «        }|                     |‰dz   ¦  «        }|                      |‰dz   d¬¦  «         dS )	z1match() -- valid TotpMatch object with past tokenr”  r•  c                  ó   •— ‰ dz   S r—  r)   r]  s   €r#   rE  z6TotpTest.test_totp_match_w_new_token.<locals>.<lambda>Ï  r˜  r,   rA  rÆ   r1  r™  Nrš  rœ  s       @r#   Útest_totp_match_w_new_tokenz$TotpTest.test_totp_match_w_new_tokenË  so   ø€ àˆØˆØ6�dŒjÐ5Ð5Ð5Ð5Ð6Ñ6Ô6µtÑ<Ô<ˆØ—’˜5 $¨¡)Ñ,Ô,ˆØ×Ò˜V¨$°©)¸RÐÑ@Ô@Ð@Ð@Ð@r,   c                 ó°   ‡— dŠd} t          j        ˆfd„¬¦  «        t          ¦  «        }|                      t          j        |j        |‰dz   ¦  «         dS )z#match() -- invalid TotpMatch objectr”  r•  c                  ó   •— ‰ dz   S r—  r)   r]  s   €r#   rE  z:TotpTest.test_totp_match_w_invalid_token.<locals>.<lambda>×  r˜  r,   rA  rõ   N)r
   r;  r›  r=   r   ÚInvalidTokenErrorr�  )r?   r  r  r  s      @r#   Útest_totp_match_w_invalid_tokenz(TotpTest.test_totp_match_w_invalid_tokenÓ  s\   ø€ àˆØˆØ6�dŒjÐ5Ð5Ð5Ð5Ð6Ñ6Ô6µtÑ<Ô<ˆØ×Ò�#Ô/°´¸EÀ4È"Á9ÑMÔMÐMÐMÐMr,   c                 óú   — d|j         ›d|j        ›d|j        ›d|›d|›d|›d�} |j        ||fi |¤Ž}|                      ||                     |¦  «        |j        |                     dd	¦  «        ||¬
¦  «         dS )z,helper to test otp.match() output is correctúkey=ú alg=ú period=rü   ú
 gen_time=rû   ú:r�  rÆ   )r  r·   r�  rŒ  r†  N)ri  r³   r·   r�  r’  rI  Úget)	r?   Úexpect_skippedr  r  r  Úgen_timer½   r†  r~   s	            r#   ÚassertVerifyMatcheszTotpTest.assertVerifyMatchesÞ  sª   € € ð
 Œ~ˆ~ˆ~˜sœw˜w˜w¨¬
¨
¨
°E°E°E¸8¸8¸8ÀTÀTÀTðKˆà�”˜5 $Ð/Ð/¨$Ð/Ð/ˆØ×Ò˜VØ"%×"4Ò"4°TÑ":Ô":Ø$'¤JØ$(§H¢H¨X°rÑ$:Ô$:Ø%3Ø!$ð 	ñ 	&ô 	&ð 	&ð 	&ð 	&r,   c                 óz   — d|j         ›d|j        ›d|j        ›d|›d|›d|›d�} | j        ||j        ||fd|i|¤ŽS )	z/helper to test otp.match() throws correct errorr©  rª  r«  rü   r¬  rû   r­  Ú__msg__)ri  r³   r·   r=   r�  )r?   Ú	exc_classr  r  r  r°  r½   r†  s           r#   ÚassertVerifyRaiseszTotpTest.assertVerifyRaisesì  so   € € ð Œ~ˆ~ˆ~˜sœw˜w˜w¨¬
¨
¨
°E°E°E¸8¸8¸8ÀTÀTÀTðKˆà ˆtÔ  ¨C¬I°u¸dð 6ð 6Ø),ð6Ø04ð6ð 6ð 	6r,   c                 óX  — |                       ¦   «         }|j        }|                      ¦   «         }|                     |¦  «        j        }t          ||¬¦  «        }t          | j        fi |¤Ž}t          | j        fi |¤Ž} |t          j
        |||z
  d¬¦  «          |d|||z
  |¬¦  «          |d|||z
  d|z  ¬¦  «          |d||d¬¦  «          |t          j
        |||z   d¬¦  «          |d|||z   |¬¦  «          |d|||z   d|z  ¬¦  «          |t          j
        ||d|z  z   d¬¦  «          |t          j
        ||d|z  z   |¬¦  «          |d||d|z  z   d|z  ¬¦  «         t          j                             |¦  «        } |d||d¬¦  «          |t          |d¦  «         dS )	z)match() -- 'time' and 'window' parameters©r  r°  r   ©r�  r   r   r1  éþÿÿÿN)r¾   r·   r®   rs  r  rj   r   r±  rµ  r   r¦  r   r   r   )	r?   r  r·   r  r  ÚcommonÚassertMatchesr=   rb  s	            r#   Útest_match_w_windowzTotpTest.test_match_w_windowö  s  € ð �lŠl‰nŒnˆØ”ˆØ�}Š}‰ŒˆØ—’˜TÑ"Ô"Ô(ˆÝ˜#¨Ð-Ñ-Ô-ˆÝ Ô 8ÐCÐC¸FÐCÐCˆÝ˜tÔ6ÐAÐA¸&ÐAÐAˆð 	ˆ•SÔ*¨E°4¸&±=ÈÐKÑKÔKÐKØˆ�b˜% ¨¡°vÐ>Ñ>Ô>Ð>Øˆ�b˜% ¨¡°q¸6±zÐBÑBÔBÐBð 	ˆ�a˜ ¨QÐ/Ñ/Ô/Ð/ð 	ˆ•SÔ*¨E°4¸&±=ÈÐKÑKÔKÐKØˆ�b˜% ¨¡°vÐ>Ñ>Ô>Ð>Øˆ�b˜% ¨¡°q¸6±zÐBÑBÔBÐBð 	ˆ•SÔ*¨E°4¸!¸f¹*Ñ3DÈQÐOÑOÔOÐOØˆ•SÔ*¨E°4¸!¸f¹*Ñ3DÈVÐTÑTÔTÐTØˆ�b˜% ¨¨F©
Ñ!2¸1¸v¹:ÐFÑFÔFÐFõ Ô×/Ò/°Ñ5Ô5ˆØˆ�a˜ ¨1Ð-Ñ-Ô-Ð-ð 	ˆ•Z ¨Ñ+Ô+Ð+Ð+Ð+r,   c                 óò  — |                       ¦   «         }|j        }|                      ¦   «         }t          ||¬¦  «        }t	          | j        fi |¤Ž}t	          | j        fi |¤Ž}d|z  }|                     ||z
  ¦  «        j        } |t          j
        ||d¬¦  «          |d||d| ¬¦  «         |                     ||z   ¦  «        j        }	 |t          j
        |	|d¬¦  «          |d|	|d|¬¦  «         dS )zmatch() -- 'skew' parametersr·  r   r   r¸  rp  )r�  ÚskewN)r¾   r·   r®   rj   r   r±  rµ  rs  r  r   r¦  )
r?   r  r·   r  rº  r»  r=   r¾  Úbehind_tokenÚahead_tokens
             r#   Útest_match_w_skewzTotpTest.test_match_w_skew&  s  € ð �lŠl‰nŒnˆØ”ˆØ�}Š}‰ŒˆÝ˜#¨Ð-Ñ-Ô-ˆÝ Ô 8ÐCÐC¸FÐCÐCˆÝ˜tÔ6ÐAÐA¸&ÐAÐAˆð �6‰zˆØ—|’| D¨4¡KÑ0Ô0Ô6ˆØˆ•SÔ*¨L¸$ÀqÐIÑIÔIÐIØˆ�b˜,¨°Q¸d¸UÐCÑCÔCÐCð —l’l 4¨$¡;Ñ/Ô/Ô5ˆØˆ•SÔ*¨K¸ÀaÐHÑHÔHÐHØˆ�b˜+ t°A¸DÐAÑAÔAÐAÐAÐAr,   c                 óŒ  — |                       ¦   «         }|j        }|                      ¦   «         }|                     |¦  «        }|j        }|j        }|j        }t          ||¬¦  «        }t          | j	        fi |¤Ž}	t          | j
        fi |¤Ž}
 |	d|||z   |¬¦  «          |	d|||z   |dz
  |¬¦  «          |
t          j        ||d|z  z   ||¬¦  «          |
t          j        |||z   ||¬¦  «        }|                      |j        |¦  «          |
t          j        |||d¬¦  «        }|                      |j        |¦  «         dS )	z0match() -- 'reuse' and 'last_counter' parametersr·  r1  r¸  r   )Úlast_counterr�  r   r   N)r¾   r·   r®   rs  r  r?  ru  rj   r   r±  rµ  r   r¦  ÚUsedTokenErrorr8   )r?   r  r·   r  Útdatar  r?  ru  rº  r»  r=   Úerrs               r#   Útest_match_w_reusezTotpTest.test_match_w_reuse=  s–  € ð �lŠl‰nŒnˆØ”ˆØ�}Š}‰ŒˆØ—’˜TÑ"Ô"ˆØ”ˆØ”-ˆØÔ'ˆÝ˜#¨Ð-Ñ-Ô-ˆÝ Ô 8ÐCÐC¸FÐCÐCˆÝ˜tÔ6ÐAÐA¸&ÐAÐAˆð 	ˆ�b˜% ¨¡°vÐ>Ñ>Ô>Ð>ð 	ˆ�b˜% ¨¡¸WÀQ¹YØ#ð	%ñ 	%ô 	%ð 	%ð
 	ˆ•SÔ*¨E°4¸!¸f¹*Ñ3DØ")°&ð	:ñ 	:ô 	:ð 	:ð
 ˆl�3Ô-¨u°d¸V±mØ(/¸ð@ñ @ô @ˆà×Ò˜œ¨+Ñ6Ô6Ð6ð ˆl�3Ô-¨u°dØ(/¸ð;ñ ;ô ;ˆà×Ò˜œ¨+Ñ6Ô6Ð6Ð6Ð6r,   c                 ó~  — t          d¦  «        }|j        }d}|                       |d|¦  «        ¦  «         |                       |d|¦  «        ¦  «         |                      t          j        |d|¦  «         |                      t          j        |d|¦  «         |                      t          j        |d|¦  «         dS )	zmatch() -- token normalizationÚotxl2f5cctbprpzxéý6Tz    3 32-136  s   332136Ú12345Ú12345XÚ0123456N)r
   r�  r<   r=   r   rV  )r?   r  r�  r  s       r#   Ú test_match_w_token_normalizationz)TotpTest.test_match_w_token_normalizationf  sÂ   € õ Ð%Ñ&Ô&ˆØ”	ˆØˆð 	�Š˜˜Ð.°Ñ5Ô5Ñ6Ô6Ð6ð 	�Š˜˜˜i¨Ñ.Ô.Ñ/Ô/Ð/ð 	×Ò�#Ô1°5¸'À4ÑHÔHÐHð 	×Ò�#Ô1°5¸(ÀDÑIÔIÐIð 	×Ò�#Ô1°5¸)ÀTÑJÔJÐJÐJÐJr,   c                 ó(  — |                       ¦   «         D ]|\  }}}}}|j        } |||¦  «        }|                      |¦  «         |                      |j        ||j        z  |¬¦  «         |                      t          j        |||dz   d¬¦  «         Œ}dS )zmatch() -- reference vectorsr…  éd   r   r¸  N)	r	  r�  r<   r8   r?  r·   r=   r   r¦  )r?   r  r  r  r  r†  r�  r~   s           r#   Útest_match_w_reference_vectorsz'TotpTest.test_match_w_reference_vectors|  s²   € à.2×.DÒ.DÑ.FÔ.Fð 
	Yð 
	YÑ*ˆC��u˜g sà”IˆEð �U˜5 $Ñ'Ô'ˆFØ�OŠO˜FÑ#Ô#Ð#Ø×Ò˜Vœ^¨T°S´ZÑ-?ÀSÐÑIÔIÐIð ×Ò�cÔ3°U¸EÀ4È#Á:ÐVWÐÑXÔXÐXÐXð
	Yð 
	Yr,   c                 óR  ‡— ddl m} dŠ |j        ˆfd„¬¦  «        }t          ddd¬	¦  «        }|                     d
|¦  «        }|                      |‰¬¦  «         t          ddd¬	¦  «        }|                      t          j        |j        d|¦  «         t          dd¬¦  «        }|                      t          |j        d|¦  «         d}|                     d
|¦  «        }|                      |‰¬¦  «         d}|                     d
|¦  «        }|                      |‰¬¦  «         dS )zverify()r   rú   rÊ  c                  ó   •— ‰ S r•   r)   r]  s   €r#   rE  z&TotpTest.test_verify.<locals>.<lambda>•  s   ø€ ¨T€ r,   rA  r   r	   rÉ  ©r[   Útyper   Ú332136r]  Ú332155©r[   rÕ  z3{"v": 1, "type": "totp", "key": "otxl2f5cctbprpzx"}z,otpauth://totp/Label?secret=otxl2f5cctbprpzxN)
rý   r
   r;  rj   Úverifyr’  r=   r   r¦  r   )r?   r
   r`  Úsource1r�  Úsource1jsonÚ
source1urir  s          @r#   Útest_verifyzTotpTest.test_verify�  sU  ø€ ð
 	&Ð%Ð%Ð%Ð%Ð%àˆØ �d”j \ \ \ \Ð2Ñ2Ô2ˆõ ˜ Ð-?Ð@Ñ@Ô@ˆØ×"Ò" 8¨WÑ5Ô5ˆØ×Ò˜U¨ÐÑ.Ô.Ð.õ ˜ Ð-?Ð@Ñ@Ô@ˆØ×Ò�#Ô/°Ô1CÀXÈwÑWÔWÐWõ ˜ Ð(Ñ(Ô(ˆØ×Ò�* kÔ&8¸(ÀGÑLÔLÐLð LˆØ×"Ò" 8¨[Ñ9Ô9ˆØ×Ò˜U¨ÐÑ.Ô.Ð.ð Dˆ
Ø×"Ò" 8¨ZÑ8Ô8ˆØ×Ò˜U¨ÐÑ.Ô.Ð.Ð.Ð.r,   c                 ól  — ddl m} |j        } |t          d¦  «        ¦  «        }|                      |j        t          ¦  «          |d¦  «        }|                      |j        t          ¦  «          |t          ddt          ¬¦  «        ¦  «        }|                      |j        t          ¦  «          |t          d¦  «        ¦  «        }|                      |j        t          ¦  «          |d	¦  «        }|                      |j        t          ¦  «         |  	                     ||¦  «        |¦  «         t          ¦   «         } |j        |¬
¦  «                             |¦  «        }|                      ||¦  «         |                      |                     ¦   «         |                     ¦   «         ¦  «          |j        |¬
¦  «                             |¦  «        }|  	                    ||¦  «         |                      t          |t          d¦  «        ¦  «         |                      t          |d¦  «         dS )zfrom_source()r   rú   úNotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=ExamplesN   otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Exampler   r	   rÔ  z3{"v": 1, "type": "totp", "key": "JBSWY3DPEHPK3PXP"}s3   {"v": 1, "type": "totp", "key": "JBSWY3DPEHPK3PXP"})r@   Úfoos   fooN)rý   r
   Úfrom_sourcer   r8   r   ÚKEY4_RAWrj   ÚKEY4rG  r   r;  rz  Úto_dictr=   r   )r?   r
   rá  r  Úwallet1rÂ   rÃ   s          r#   Útest_from_sourcezTotpTest.test_from_source±  s  € à%Ð%Ð%Ð%Ð%Ð%ØÔ&ˆð ˆk�!ð -ñ .ô .ñ /ô /ˆà×Ò˜œ¥(Ñ+Ô+Ð+ð ˆkð ,ñ -ô -ˆà×Ò˜œ¥(Ñ+Ô+Ð+ð ˆk�$ ¨µTÐ:Ñ:Ô:Ñ;Ô;ˆØ×Ò˜œ¥(Ñ+Ô+Ð+ð ˆk�!ÐQÑRÔRÑSÔSˆØ×Ò˜œ¥(Ñ+Ô+Ð+ð ˆkÐPÑQÔQˆØ×Ò˜œ¥(Ñ+Ô+Ð+ð 	�Š�k�k #Ñ&Ô&¨Ñ,Ô,Ð,õ ‘+”+ˆØˆtŒz Ð)Ñ)Ô)×5Ò5°cÑ:Ô:ˆØ×Ò˜˜sÑ#Ô#Ð#Ø×Ò˜Ÿš™œ¨¯ª©¬Ñ7Ô7Ð7ð ˆtŒz Ð)Ñ)Ô)×5Ò5°dÑ;Ô;ˆØ�Š�d˜DÑ!Ô!Ð!ð 	×Ò�* kµ1°U±8´8Ñ<Ô<Ð<Ø×Ò�* k°6Ñ:Ô:Ð:Ð:Ð:r,   c                 óŒ  — ddl m} |j        } |d¦  «        }|                      ||¦  «         |                      |j        t          ¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |j	        d¦  «         |                      |j
        d¦  «         |                      |j        d¦  «          |d	¦  «        }|                      |j        t          ¦  «         |                      t          |d
¦  «         |                      t          |d¦  «          |d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «          |d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «          |d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      t          |j        d¦  «          |d¦  «        }|                      |j	        d¦  «         |                      t          |d¦  «          |d¦  «        }|                      |j        d¦  «         |                      t          |d¦  «         |                      t          |d¦  «         |                      t          |d¦  «          |d¦  «        }|                      |j
        d¦  «         |                      t          |d¦  «         |                      t          |d¦  «         |                      t!          t"          j        d ¬!¦  «        g¦  «        5   |d"¦  «        }d#d#d#¦  «         n# 1 swxY w Y   |                      |j        t(          ¦  «         |                      |j
        d¦  «         d#S )$z
from_uri()r   rú   rß  úalice@google.comÚExampler´   rÆ   r†   zNotpauth://totp/Example:alice@google.com?secret=jbswy3dpehpk3pxp&issuer=Examplez0otpauth://totp/Example:alice@google.com?digits=6z?otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHP@3PXPzOotpauth://totp/Provider1:Alice%20Smith?secret=JBSWY3DPEHPK3PXP&issuer=Provider1úAlice SmithÚ	Provider1zMotpauth://totp/Big%20Corporation%3A%20alice@bigco.com?secret=JBSWY3DPEHPK3PXPzalice@bigco.comzBig CorporationzOotpauth://totp/alice@bigco.com?secret=JBSWY3DPEHPK3PXP&issuer=Big%20CorporationzGotpauth://totp/Provider1:alice?secret=JBSWY3DPEHPK3PXP&issuer=Provider2zPotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA256rµ   zPotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA333zHotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=8r&   zHotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=AzJotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=%20zIotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=15zIotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&period=63r-  zHotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&period=0zIotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&period=-1z!unexpected parameters encounteredr  zQotpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&foo=bar&period=63N)rý   r
   Úfrom_urirt  r8   r   râ  r4  r8  r³   r·   r±   r=   r   r!  r  rj   r   ÚPasslibRuntimeWarningri  rã  )r?   r
   rì  r  s       r#   Útest_from_urizTotpTest.test_from_urià  s_  € à%Ð%Ð%Ð%Ð%Ð%Ø”=ˆð ˆhð (ñ )ô )ˆà×Ò˜c 4Ñ(Ô(Ð(Ø×Ò˜œ¥(Ñ+Ô+Ð+Ø×Ò˜œÐ$6Ñ7Ô7Ð7Ø×Ò˜œ YÑ/Ô/Ð/Ø×Ò˜œ &Ñ)Ô)Ð)Ø×Ò˜œ RÑ(Ô(Ð(Ø×Ò˜œ QÑ'Ô'Ð'ð ˆhð (ñ )ô )ˆà×Ò˜œ¥(Ñ+Ô+Ð+ð 	×Ò�* hÐ0bÑcÔcÐcð 	×ÒÕ+¨Xð 8Qñ 	Rô 	Rð 	Rð ˆhð *ñ +ô +ˆà×Ò˜œ MÑ2Ô2Ð2Ø×Ò˜œ [Ñ1Ô1Ð1ð ˆhð 1ñ 2ô 2ˆà×Ò˜œÐ$5Ñ6Ô6Ð6Ø×Ò˜œÐ%6Ñ7Ô7Ð7ð ˆhÐhÑiÔiˆØ×Ò˜œÐ$5Ñ6Ô6Ð6Ø×Ò˜œÐ%6Ñ7Ô7Ð7ð 	×Ò�* d¤mØcñ	eô 	eð 	eð ˆhÐiÑjÔjˆØ×Ò˜œ (Ñ+Ô+Ð+ð 	×Ò�* hð 1[ñ 	\ô 	\ð 	\ð ˆhÐaÑbÔbˆØ×Ò˜œ QÑ'Ô'Ð'ð 	×Ò�* hÐ0zÑ{Ô{Ð{Ø×Ò�* hÐ0|Ñ}Ô}Ð}Ø×Ò�* hÐ0{Ñ|Ô|Ð|ð ˆhÐbÑcÔcˆØ×Ò˜œ RÑ(Ô(Ð(ð 	×Ò�* hð 1Sñ 	Tô 	Tð 	Tð 	×Ò�* hð 1Tñ 	Uô 	Uð 	Uð ×#Ò#Ý�#Ô3Ð@cÐdÑdÔdð%
ñ ô ð 	0ð 	0ð �(ð /ñ 0ô 0ˆCð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð
 	×Ò˜œ­Ñ.Ô.Ð.Ø×Ò˜œ RÑ(Ô(Ð(Ð(Ð(s   Í&M>Í>NÎNc                 óÐ  — t          t          ddd¬¦  «        }|                      |                     dd¦  «        d¦  «         |                      t
          |j        dd¦  «         |                      |                     d¦  «        d	¦  «         d|_        |                      |                     ¦   «         d	¦  «         d|_        |                      |                     ¦   «         d¦  «         |                      t
          |j        d
¦  «         |                      t
          |j        dd¦  «         |                      t          t          d¬¦  «                             d¦  «        d¦  «         |                      t          t          d¬¦  «                             d¦  «        d¦  «         |                      t          t          d¬¦  «                             d¦  «        d¦  «         dS )zto_uri()r´   r†   rÆ   ©r³   r±   r·   rè  úExample OrgzZotpauth://totp/Example%20Org:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example%20OrgNz7otpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXPzlabel:with:semicolonszissuer:with:semicolonsrµ   r%  zHotpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&algorithm=SHA256r&   r)  z@otpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&digits=8r-  r.  zAotpauth://totp/alice@google.com?secret=JBSWY3DPEHPK3PXP&period=63)r
   rã  r8   Úto_urir=   r   r4  r8  rW  s     r#   Útest_to_urizTotpTest.test_to_uriW  sô  € õ •4˜V¨A°bÐ9Ñ9Ô9ˆØ×Ò˜ŸšÐ$6¸ÑFÔFð0ñ	1ô 	1ð 	1ð
 	×Ò�* c¤j°$¸ÑFÔFÐFð 	×Ò˜ŸšÐ$6Ñ7Ô7ØRñ	Tô 	Tð 	Tð 'ˆŒ	Ø×Ò˜Ÿš™œØRñ	Tô 	Tð 	Tð #ˆŒ
Ø×Ò˜Ÿš™œð1ñ	2ô 	2ð 	2ð
 	×Ò�* c¤jÐ2IÑJÔJÐJð 	×Ò�* c¤jÐ2DÐF^Ñ_Ô_Ð_ð
 	×Ò��d¨Ð1Ñ1Ô1×8Ò8Ð9KÑLÔLð,ñ	-ô 	-ð 	-ð 	×Ò��d¨1Ð-Ñ-Ô-×4Ò4Ð5GÑHÔHð$ñ	%ô 	%ð 	%ð 	×Ò��d¨2Ð.Ñ.Ô.×5Ò5Ð6HÑIÔIð%ñ	&ô 	&ð 	&ð 	&ð 	&r,   c           
      ó(	  — ddl m} |j        } |t          ddt          dd¬¦  «        ¦  «        }|                      ||¦  «         |                      |j        t          ¦  «         |                      |j	        d¦  «         |                      |j
        d¦  «         |                      |j        d¦  «         |                      |j        d	¦  «         |                      |j        d
¦  «         |                      t          |t          dt          ¬¦  «        ¦  «         |                      t          |t          ddt          ¬¦  «        ¦  «         |                      t          |t          ddt          ¬¦  «        ¦  «         |                      t          |t          dt          ¬¦  «        ¦  «          |t          ddt                               ¦   «         dd¬¦  «        ¦  «        }|                      |j        t          ¦  «         |                      t          |t          dd¬¦  «        ¦  «         |                      t"          |t          ddd¬¦  «        ¦  «          |t          ddt          dd¬¦  «        ¦  «        }|                      |j	        d¦  «         |                      |j
        d¦  «          |t          ddt          d¬¦  «        ¦  «        }|                      |j        d¦  «         |                      t          |t          ddt          d¬¦  «        ¦  «          |t          ddt          d¬¦  «        ¦  «        }|                      |j        d¦  «         |                      t$          |t          ddt          d¬¦  «        ¦  «         |                      t          |t          ddt          d¬¦  «        ¦  «          |t          ddt          d¬¦  «        ¦  «        }|                      |j        d¦  «         |                      t          |t          ddt          d¬¦  «        ¦  «         |                      t          |t          ddt          d¬¦  «        ¦  «         |                      t$          |t          ddt          d¬¦  «        ¦  «         dS ) zfrom_dict()r   rú   r   r	   rè  ré  ©r[   rÕ  r   r4  r8  r´   rÆ   r†   )rÕ  r   rÔ  rg   )r[   r   rØ  zJBSWY3DPEHP@3PXPrê  rë  rµ   ©r[   rÕ  r   r³   Úsha333r&   ©r[   rÕ  r   r±   rK   é   r-  ©r[   rÕ  r   r·   r1  r5   )r[   rÕ  r   ÚINVALIDN)rý   r
   Ú	from_dictrj   rã  rt  r8   r   râ  r4  r8  r³   r·   r±   r=   r   r   r!  r>   )r?   r
   rü  r  s       r#   Útest_from_dictzTotpTest.test_from_dict”  s5  € à%Ð%Ð%Ð%Ð%Ð%Ø”Nˆ	ð
 ˆi�˜q vµ4Ð?QÐZcÐdÑdÔdÑeÔeˆØ×Ò˜c 4Ñ(Ô(Ð(Ø×Ò˜œ¥(Ñ+Ô+Ð+Ø×Ò˜œÐ$6Ñ7Ô7Ð7Ø×Ò˜œ YÑ/Ô/Ð/Ø×Ò˜œ &Ñ)Ô)Ð)Ø×Ò˜œ RÑ(Ô(Ð(Ø×Ò˜œ QÑ'Ô'Ð'ð 	×Ò�* iµ¸6ÅtÐ1LÑ1LÔ1LÑMÔMÐMð 	×Ò�* iµ¸ÀÍDÐ1QÑ1QÔ1QÑRÔRÐRØ×Ò�* iµ¸À&ÍdÐ1SÑ1SÔ1SÑTÔTÐTð 	×Ò�* iµ¸½tÐ1DÑ1DÔ1DÑEÔEÐEð ˆi�˜q vµ4·:²:±<´<ÐGYÐbkÐlÑlÔlÑmÔmˆØ×Ò˜œ¥(Ñ+Ô+Ð+ð 	×Ò�* iµ¸ÀÐ1GÑ1GÔ1GÑHÔHÐHð 	×ÒÕ+¨YÝ ¨Ð5GÐHÑHÔHñ	Jô 	Jð 	Jð ˆi�˜q vµ4¸}ÐU`ÐaÑaÔaÑbÔbˆØ×Ò˜œ MÑ2Ô2Ð2Ø×Ò˜œ [Ñ1Ô1Ð1ð ˆi�˜q vµ4¸XÐFÑFÔFÑGÔGˆØ×Ò˜œ (Ñ+Ô+Ð+ð 	×Ò�* iµ¸ÀÍDÐV^Ð1_Ñ1_Ô1_Ñ`Ô`Ð`ð ˆi�˜q vµ4ÀÐBÑBÔBÑCÔCˆØ×Ò˜œ QÑ'Ô'Ð'ð 	×Ò�) Yµ°q¸vÍ4ÐX[Ð0\Ñ0\Ô0\Ñ]Ô]Ð]Ø×Ò�* iµ¸ÀÍDÐY[Ð1\Ñ1\Ô1\Ñ]Ô]Ð]ð ˆi�˜q vµ4ÀÐCÑCÔCÑDÔDˆØ×Ò˜œ RÑ(Ô(Ð(ð 	×Ò�* iµ¸ÀÍDÐYZÐ1[Ñ1[Ô1[Ñ\Ô\Ð\Ø×Ò�* iµ¸ÀÍDÐY[Ð1\Ñ1\Ô1\Ñ]Ô]Ð]ð
 	×Ò�) Yµ°q¸vÍ4ÐY\Ð0]Ñ0]Ô0]Ñ^Ô^Ð^Ð^Ð^r,   c           
      ó  — t          t          ddd¬¦  «        }|                      |                     ¦   «         t	          ddt          ¬¦  «        ¦  «         t          t          ddddd	¬
¦  «        }|                      |                     ¦   «         t	          ddt          dd	¬¦  «        ¦  «         t          t          dddd¬¦  «        }|                      |                     ¦   «         t	          ddt          d¬¦  «        ¦  «         t          t          dddd	¬¦  «        }|                      |                     ¦   «         t	          ddt          d	¬¦  «        ¦  «         t          j        d	¬¦  «        } |t          ¦  «        }|                      |                     ¦   «         t	          ddt          ¬¦  «        ¦  «          |t          d	¬¦  «        }|                      |                     ¦   «         t	          ddt          ¬¦  «        ¦  «         |                      t          t          d¬¦  «                             ¦   «         t	          ddt          d¬¦  «        ¦  «         |                      t          t          d¬¦  «                             ¦   «         t	          ddt          d¬¦  «        ¦  «         |                      t          t          d¬¦  «                             ¦   «         t	          ddt          d¬¦  «        ¦  «         dS )z	to_dict()r´   r†   rÆ   rð  r   r	   rÔ  rè  rñ  )r³   r±   r·   r4  r8  rõ  )r³   r±   r·   r4  )r[   rÕ  r   r4  )r³   r±   r·   r8  )r[   rÕ  r   r8  r7  rµ   r%  rö  r&   r)  rø  r-  r.  rú  N)r
   rã  r8   rä  rj   r;  )r?   r  r`  s      r#   Útest_to_dictzTotpTest.test_to_dictò  sñ  € õ •4˜V¨A°bÐ9Ñ9Ô9ˆØ×Ò˜Ÿš™œ­¨q°vÅ4Ð(HÑ(HÔ(HÑIÔIÐIõ •4˜V¨A°bØ+°MðCñ Cô Cˆà×Ò˜Ÿš™œÝ ¨µDØ$6¸}ðNñ Nô Nñ	Oô 	Oð 	Oõ
 •4˜V¨A°bØ+ð-ñ -ô -ˆà×Ò˜Ÿš™œÝ ¨µDØ$6ð8ñ 8ô 8ñ	9ô 	9ð 	9õ
 •4˜V¨A°bØ'ð)ñ )ô )ˆà×Ò˜Ÿš™œÝ ¨µDØ%2ð4ñ 4ô 4ñ	5ô 	5ð 	5õ
 ”j¨Ð6Ñ6Ô6ˆØˆk�$ÑÔˆØ×Ò˜Ÿš™œ­¨q°vÅ4Ð(HÑ(HÔ(HÑIÔIÐIð ˆk�$ }Ð5Ñ5Ô5ˆØ×Ò˜Ÿš™œ­°¸ÅDÐ)IÑ)IÔ)IÑJÔJÐJð
 	×Ò��d¨Ð1Ñ1Ô1×9Ò9Ñ;Ô;Ý ¨µD¸hÐGÑGÔGñ	Iô 	Ið 	Ið 	×Ò��d¨1Ð-Ñ-Ô-×5Ò5Ñ7Ô7Ý ¨µDÀÐCÑCÔCñ	Eô 	Eð 	Eð 	×Ò��d¨2Ð.Ñ.Ô.×6Ò6Ñ8Ô8Ý ¨µDÀÐDÑDÔDñ	Fô 	Fð 	Fð 	Fð 	Fr,   r•   )r   rÆ   rÆ   r7   )4r–   r—   r˜   Ú__doc__r™   r£   r®   r¾   rÄ   rj   rÿ   ÚRFC_KEY_BYTES_20ÚRFC_KEY_BYTES_32ÚRFC_KEY_BYTES_64rþ   r	  r  r  r#  r'  r+  r2  r5  r9  r<  rN  rX  rZ  rd  rk  r~  rƒ  r‡  r’  r�  r   r£  r§  r±  rµ  r¼  rÁ  rÇ  rÎ  rÑ  rÝ  ræ  rî  ró  rý  rÿ  Ú__classcell__)r©   s   @r#   rž   rž   ‹  s©  ø€ € € € € ðð ð ,Ðð
=ð =ð =ð =ð =ð6ð 6ð 6ð
%ð 
%ð 
%ð 
%ð,ð ,ð ,ð< �d (°¸rÈ!ÐLÑLÔL€Oð 
ˆÐ$¨QÐ	/Ñ	/Ô	/à"Ø"Ø"Ø"Ø"ð	
ð 
ˆÐ$¨QÐ	/Ñ	/Ô	/à$Ø$Ø$Ø$Ø$ð	
ð 
ˆÐ'°Ð	2Ñ	2Ô	2Ø"Ø"ð	
ð 
ˆÐ"¨5°fÐ	=Ñ	=Ô	=ØØ$Ø$Ø$Ø$Ø%ð	
ð 
ˆÐ"¨5°hÐ	?Ñ	?Ô	?ØØ$Ø$Ø$Ø$Ø%ð	
ð 
ˆÐ"¨5°hÐ	?Ñ	?Ô	?ØØ$Ø$Ø$Ø$Ø%ð	
ð 
ˆÐ$¨QÐ	/Ñ	/Ô	/Ð1GÐI_Ð`Ø	ˆÐ$¨Q°rÐ	:Ñ	:Ô	:Ð<UÐVð 
ˆÐ"¨5¸Ð	<Ñ	<Ô	<Ð>VÐWØ	ˆÐ"¨5°hÀrÐ	JÑ	JÔ	JÐLdÐeØ	ˆÐ"¨5°hÀrÐ	JÑ	JÔ	JÐLdÐeðaR€Gðh8ð 8ð 8ð2
/ð 
/ð 
/ð$ð $ð $ð0>ð >ð >ð0Að Að Að=ð =ð =ð=ð =ð =ð"Cð Cð CðHð Hð Hð=ð =ð =ð"Sð Sð SðDRð Rð Rð Rð4Eð Eð EðAð Að Að<ð ð ð2)-ð )-ð )-ðV8ð 8ð 8ð@>ð >ð >ðð ð ð ðB;ð ;ð ;ð@ð @ð @ðAð Að AðNð Nð Nð +/ð&ð &ð &ð &ð )-ð6ð 6ð 6ð 6ð.,ð .,ð .,ð`Bð Bð Bð.'7ð '7ð '7ðRKð Kð Kð,Yð Yð Yð"/ð /ð /ðH*;ð *;ð *;ð^u)ð u)ð u)ðn8&ð 8&ð 8&ðz\_ð \_ð \_ð|9Fð 9Fð 9Fð 9Fð 9Fð 9Fð 9Fr,   rž   )4r   r   Ú	functoolsr   ÚloggingÚ	getLoggerr–   r   Úsysr  rH  Úpasslibr   Úpasslib.utils.compatr   r   Úpasslib.tests.utilsr   r   r	   r§   rý   r
   r   r   Ú__all__r>   r!  r"  Úversion_infoÚbinasciir   rh   ri   r  rl   rm   r›  rã  râ  Ú
float_infoÚradixÚmant_digr$   r¬   r+   r.   Úencoder  r  r  rž   r)   r,   r#   ú<module>r     s}  ðØ (Ð (ð
 €€€Ø Ð Ð Ð Ð Ð Ø €€€Ð'�gÔ'¨Ñ1Ô1�Ø 
€
€
€
Ø Ð Ð Ð ð Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ð ð€ð )2Ð 1Ð Ð%ØÔ�uÒÐØ3Ð3Ð3Ð3Ð3Ð3ØÔ�uÒÐØ3Ð3Ð3Ð3Ð3Ð3à€Ø€Ø€Ø-€ØC€Ø€Ø€Ø$€ð „~Ô˜qÒ Ð Ð Ð"?Ñ Ô Ð Ø
„~Ô "Ò$Ð$Ð$Ð&KÑ$Ô$Ð$ð+.ð +.ð +.ð^ ˆ_ÑÔ€
ð#ð #ð #ðJEð JEð JEð JEð JE�Hñ JEô JEð JEðj *×0Ò0°Ñ9Ô9Ð Ø$ QÑ&¨¨¨Ô,Ð Ø$ QÑ&¨¨¨Ô,Ð ð
`Fð `Fð `Fð `Fð `Fˆxñ `Fô `Fð `Fð `Fð `Fr,   