Ë
    àU.jÒ  ã                   ó.  — 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jP                  jR                  dk(  sJ d«       ‚ejP                  jT                  dk\  sJ d«       ‚d„ Z+ e+«       Z,d„ Z- G d„ de«      Z.dj_                  d«      Z0e0dz  dd Z1e0d z  dd! Z2 G d"„ d#e«      Z3y)$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                   j                  |dz
  «      j                  }||k  rn|} Œ;| dz  } d}t        | |«      S # t        t        t
        f$ r Y Œ)w xY w)z8
    helper to calc max_time_t constant (see below)
    i   @r   é   l   Ðéë )ÚdatetimeÚutcfromtimestampÚyearÚ
ValueErrorÚOSErrorÚOverflowErrorÚmin)Úvaluer   Ú
next_valueÚ	next_yearÚmax_datetime_timestamps        úYC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/tests/test_totp.pyÚ_get_max_time_tr$   8   s•   € ð €EØ€DØ
Ø˜a‘Zˆ
ð	Ü ×)Ñ)×:Ñ:¸:Àa¹<ÓH×MÑMˆIð, �tÒØàˆð9 ð> 
ˆQ�J€Eð
 *ÐÜˆuÐ,Ó-Ð-øôC œG¤]Ð3ò 	ñ ð	ús   Œ,A ÁA+Á*A+c                 ó   — | dz  dz   dz  S )Né   é   é   © )Úraw_sizes    r#   Úto_b32_sizer+   i   s   € Ø�q‰L˜1Ñ Ñ"Ð"ó    c                   óN   — 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y)ÚAppWalletTestzpasslib.totp.AppWalletc                 ó¬  — t        «       }| j                  |j                  i «       | j                  |j                  «       dddœ}t        |«      }| j                  |j                  |«       | j                  |j                  «       t        d«      }| j                  |j                  |«       t        d«      }| j                  |j                  dddœ«       t        d«      }| j                  |j                  |«       | j                  t        t         d«       | j                  t        t         d	«       | j                  t        t         d
ddœ«       y)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ˆØ×Ñ˜Ÿ™°À&Ñ*IÔJô Ð2Ó3ˆØ×Ñ˜Ÿ™¨#Ô.ð 	×Ñœ)¤Y°Ô4ð 	×Ñœ)¤Y°Ô8ð 	×Ñœ*¤i°uÀ2Ñ1FÕGr,   c           	      ó"  — ddddœ}t        |«      }| j                  |j                  |«       t        t        d«      dt        d«      dt        d«      di«      }| j                  |j                  |«       t        ddddœ«      }| j                  |j                  |«       | j	                  t
        t         d	d
i«       t        ddi«      }| j	                  t        t         dd
i«       | j	                  t        t         dd
i«       t        t        d
«      dddœ«      }| j                  |j                  |«       | j	                  t
        t         ddi«       | j	                  t
        t         ddi«       | j	                  t
        t         dg i«       y)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¨   sS  € ð  &¨vÑ6ˆÜ˜3“ˆØ×Ñ˜Ÿ™¨#Ô.ô œA˜c›F F¬A¨d«G°V¼Q¸s»VÀVÐLÓMˆØ×Ñ˜Ÿ™¨#Ô.ô ˜v¨V¸&ÑAÓBˆØ×Ñ˜Ÿ™¨#Ô.ð 	×Ñœ)¤Y°°u°Ô>ô ˜I vÐ.Ó/ˆð 	×Ñœ*¤i°&¸%°ÔAØ×Ñœ*¤i°&¸%°ÔAô ¤ 5£°¸VÑDÓEˆØ×Ñ˜Ÿ™¨#Ô.ð 	×Ñœ)¤Y°°c°
Ô;Ø×Ñœ)¤Y°°d°Ô<Ø×Ñœ)¤Y°°b°	Õ:r,   c                 óÚ  — t        dddœ«      }| j                  |j                  d«       | j                  |j                  |j                  «      d«       t        ddddœ«      }| j                  |j                  d«       | j                  |j                  |j                  «      d	«       t        ddddœd
¬«      }| j                  |j                  d
«       | j                  |j                  |j                  «      d«       | j	                  t
        t         ddddœd¬«       t        «       }| j                  |j                  d«       | j	                  t
        |j                  d«       y)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Ó5ˆØ×Ñ˜×+Ñ+¨TÔ2Ø×Ñ˜×*Ñ*¨6×+=Ñ+=Ó>ÀÔGô  ¨e¸%Ñ@ÓAˆØ×Ñ˜×+Ñ+¨SÔ1Ø×Ñ˜×*Ñ*¨6×+=Ñ+=Ó>ÀÔGô  ¨e¸%Ñ@ÈcÔRˆØ×Ñ˜×+Ñ+¨SÔ1Ø×Ñ˜×*Ñ*¨6×+=Ñ+=Ó>ÀÔGð 	×Ñœ(¤I°UÀ%ÈeÑ/TØ&)ð 	ô 	+ô “ˆØ×Ñ˜×+Ñ+¨TÔ2Ø×Ñœ( F×$5Ñ$5°tÕ<r,   Nc                 ó€   — t         r|xr	  |«        y  y |xr | j                  t        |«       | j                  d«      ‚)Nz$'cryptography' package not installed)r   r=   ÚRuntimeErrorÚskipTest)r?   Úcanarys     r#   Úrequire_aes_supportz!AppWalletTest.require_aes_supportí   s8   € ÝØÒ‘v•xÑàÒ>�t×(Ñ(¬°vÓ>øØ—-‘-Ð FÓGÐGr,   c                 ód  — t        t        t        dœ«      }t        ddddd¬«      }| j	                  t        |j                  |«      ¬«       | j                  |j                  |«      d	   t        «       t        ddd
dd¬«      }| j                  |j                  |«      d	   t        «       t        ddddd¬«      }| j                  |j                  |«      d	   t        «       |j                  «       }|j                  d¬«       | j                  |j                  |«      d	   d«       |j                  «       }|j                  d¬«       | j                  t        |j                  |«       |j                  «       }|j                  d¬«       | j                  t        |j                  |«       y)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Ó4ˆô ˜˜bÐ$:Ø+¨sô4ˆà× Ñ ¬°×0BÑ0BÀGÓ(LÐ ÔMð 	×Ñ˜×+Ñ+¨GÓ4°QÑ7¼ÔBô ˜˜bÐ$:Ø+¨sô4ˆà×Ñ˜×+Ñ+¨GÓ4°QÑ7¼ÔBô ˜˜aÐ#9Ø;¸sôDˆà×Ñ˜×+Ñ+¨GÓ4°QÑ7¼ÔBð �|‰|‹~ˆØ�‰�cˆÔØ×Ñ˜×+Ñ+¨DÓ1°!Ñ4Ð6OÔPð �|‰|‹~ˆØ�‰�cˆÔØ×Ñœ( F×$6Ñ$6¸Ô=ð �|‰|‹~ˆØ�‰�cˆÔØ×Ñœ* f×&8Ñ&8¸$Õ?r,   c                 óÎ  — | j                  «        t        t        t        dœd¬«      }t	        ddddd¬«      }| j                  |j                  |«      d   «       |j                  «       }|j                  d¬	«       | j                  |j                  |«      d   «       |j                  «       }|j                  d
¬«       | j                  |j                  |«      d   «       y)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À"ÔEˆô �Q˜" ¨&°CÔ8ˆØ×Ñ˜×+Ñ+¨CÓ0°Ñ3Ô4ð �x‰x‹zˆØ�‰�aˆÔØ�‰˜×*Ñ*¨4Ó0°Ñ3Ô4ð �x‰x‹zˆØ�‰�cˆÔØ�‰˜×*Ñ*¨4Ó0°Ñ3Õ4r,   c                 ó  — | j                  t        |«      t        g d¢«      «       | j                  |d   d«       | j                  |d   |«       | j                  |d   |j                  «       | j                  t        |d   «      t	        |j
                  «      «       | j                  t        |d   «      t	        t        |«      «      «       |j                  |«      \  }}| j                  ||«       | j                  ||«       y)	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Ó&DÔEà×Ñ˜ ™ aÔ(Ø×Ñ˜ ™ cÔ*Ø×Ñ˜ ™ f×&9Ñ&9Ô:à×Ñœ˜V C™[Ó)¬;°v×7GÑ7GÓ+HÔIØ×Ñœ˜V C™[Ó)¬;´s¸3³xÓ+@ÔAà+1×+=Ñ+=¸fÓ+EÑ(ˆ
Ð(Ø×Ñ˜ SÔ)Ø×ÑÐ-¨}Õ=r,   c                 ó¶  — t        dt        id¬«      }| j                  t        |j                  t
        «      ¬«       |j	                  t
        «      }| j                  ||t
        «       |j	                  t
        «      }| j                  ||t
        «       | j                  |d   |d   «       | j                  |d   |d   «       t        dt        id¬«      }|j	                  t
        «      }| j                  ||t
        «       t        t        t        dœ«      }|j	                  t
        «      }| j                  ||t
        d	¬
«       t        dt        i«      }d|_	        |j	                  t
        «      }| j                  ||t
        «       |j	                  t        «      }| j                  ||t        «       | j                  t        |j                  d«       y)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ˆØ× Ñ ¬°×0BÑ0BÄHÓ(MÐ ÔNð ×#Ñ#¤HÓ-ˆØ×Ñ˜f f¬hÔ7ð ×"Ñ"¤8Ó,ˆØ×Ñ˜f f¬hÔ7Ø×Ñ˜E #™J¨¨s©Ô4Ø×Ñ˜E #™J¨¨s©Ô4ô ˜S¤%˜L°qÔ9ˆØ×$Ñ$¤XÓ.ˆØ×Ñ˜f g¬xÔ8ô ¤%¬eÑ4Ó5ˆØ×$Ñ$¤XÓ.ˆØ×Ñ˜f g¬x¸SÐÔAô ˜S¤%˜LÓ)ˆØˆÔØ×$Ñ$¤XÓ.ˆØ×Ñ˜f g¬xÔ8ð ×#Ñ#¤HÓ-ˆØ×Ñ˜f f¬hÔ7ð 	×Ñœ* f×&8Ñ&8¸#Õ>r,   c                 ól  — | j                  «        t        ddi«      }|xj                  dz  c_        t        t	        |j
                  t        «      d¬«      \  }}|xj                  dz  c_        t        t	        |j
                  t        «      d¬«      \  }}| j                  ||dz  |dz  dz  ¬	«       y
)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Ñ%7¼ÓBÈAÔN‰ˆˆqð 	×Ò˜qÑ ÕÜœg f×&8Ñ&8¼(ÓCÈQÔO‰	ˆ�ð 	×Ñ˜v u¨Q¡w°u¸Q±wÀ±mÐÕDr,   ©N)r3   F)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionPrefixrB   rG   rP   rU   rt   ry   r„   rŒ   r”   r)   r,   r#   r.   r.   o   sF   „ Ø0Ðò0Hòd!;òJ=ó@Hò$@òL5ð, 9<Ø',ó>ò"'?óREr,   r.   Ú12345678901234567890Úasciié    r'   r‡   c                   óp  ‡ — e Zd ZdZdZˆ fd„Zd„ Zdcd„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.d/d0d1g e	d2d¬«      d3d4g e	d2d5d6¬7«      d8g e	edd9¬:«      d;g e	edd$d9¬<«      d=g e	edd+d9¬<«      d>ggZd?„ Zd@„ ZdA„ ZdB„ ZdC„ ZdD„ ZdE„ ZdF„ ZdG„ ZdH„ ZdI„ ZdcdJ„ZdK„ ZdL„ ZdM„ ZdN„ ZdO„ ZdP„ Z dddQ„Z!dR„ Z"dS„ Z#dT„ Z$dU„ Z%	 dcdV„Z&	 dcdW„Z'dX„ Z(dY„ Z)dZ„ Z*d[„ Z+d\„ Z,d]„ Z-d^„ Z.d_„ Z/d`„ Z0da„ Z1db„ Z2ˆ xZ3S )eÚTotpTestz3
    common code shared by TotpTest & HotpTest
    zpasslib.totp.TOTPc                 ó    •— t         t        | �  «        ddlm} |j                  «        | j                  t        d| j                  «       «       y )Nr   )Úlookup_hashÚrng)	Úsuperrž   ÚsetUpÚpasslib.crypto.digestr    Úclear_cacheÚ	patchAttrÚtotp_moduleÚ	getRandom)r?   r    Ú	__class__s     €r#   r£   zTotpTest.setUp˜  s:   ø€ ÜŒh˜Ñ#Ô%õ 	6Ø×ÑÔ!ð 	�‰”{ E¨4¯>©>Ó+;Õ<r,   c                 óL   — | j                  «       j                  «       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,   c                 ó"  — | j                  «       }d|vrd|d<   |j                  d|j                  dd«      «       |j                  d|j                  g d¢«      «       |j                  d	|j                  dd
«      «        |xs 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Ô5Ø�‰˜˜sŸz™zÒ*FÓGÔHØ�‰˜ #§+¡+¨b°#Ó"6Ô7Ø�’”tÑ$˜tÑ$Ð$r,   c                 óÂ  — | j                  «       }| j                  «       }| j                  |j                  |j                  d«       t        d«      D ]-  }|j                  |j                  k7  r n#| j                  «       }Œ/ | j                  d«       t        d«      D ]-  }|j                  |j                  k7  r y| j                  «       }Œ/ | j                  d«       y)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™H d§h¡hÐ0EÔFô �r–ˆAØ�{‰{˜dŸk™kÒ)ÙØ—<‘<“>‰Dð ð
 �I‰IÐ-Ô.ô �r–ˆAØ�x‰x˜4Ÿ8™8Ò#ÙØ—<‘<“>‰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           	   #   ób  K  — ddl m} | j                  D ]–  }| j                  j	                  «       }|j                  |d   «       |dd D ]^  }t        |«      dk(  r|\  }}}n|\  }}d}t        j                  d||||«        |di |¤Ž}d|j                  ›d|›d	|›d
�}	|||||	f–— Œ` Œ˜ y­w)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·   è ø€ õ
 	&Ø—<”<ˆCØ×'Ñ'×,Ñ,Ó.ˆDØ�K‰K˜˜A™ÔØ˜Q˜R›�Ü�u“: ’?Ø+0Ñ(�D˜%¡à"'‘K�D˜%Ø"�Gô —	‘	ÐGÈÈtÐUZÐ\cÔdÙ‘l˜T‘l‘Ø8;¿»ÂÂuÐM�Ø˜4 ¨°Ð7Ó7ñ !ñ  ùs   ‚B-B/c                 óî   — | j                  t        t        «       | j                  t        t        dd¬«       t        d¬«      }t        d¬«      }| j                  |j                  |j                  «       y)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  sX   € ð 	×Ñœ)¤TÔ*Ø×Ñœ)¤TÐ/AÀtÐÔLô �tŒnˆÜ˜Œ~ˆØ×Ñ˜CŸG™G T§X¡XÕ.r,   c                 óò  — | j                  t        t        dd¬«      j                  «      d«       | j                  t        t        dd¬«      j                  «      d«       | j                  t        t        dd¬«      j                  «      d«       | j                  t        t        dd	¬
«      j                  «      d	«       | j                  t        t        dd¬
«      j                  «      d«       | j	                  t
        t        ddd¬«       | j	                  t
        t        dd¬
«       | j                  t        t        j                  d¬«      g«      5  t        dd«      }ddd«       y# 1 sw Y   yxY w)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×;Ñ;Ó<¸bÔAØ×ÑœœT d°Ô9×=Ñ=Ó>ÀÔCØ×ÑœœT d°Ô9×=Ñ=Ó>ÀÔCð 	×ÑœœT d°Ô4×8Ñ8Ó9¸2Ô>Ø×ÑœœT d°Ô4×8Ñ8Ó9¸2Ô>ð 	×Ñœ*¤d°¸2À6ÐÔJð 	×Ñœ*¤d°¸1ÐÔ=ð ×#Ñ#Üœc×8Ñ8ÐEtÔuð%õ ô �V˜UÓ#ˆA÷÷ ñ ús   ÅE-Å-E6c                 óD  — | j                  t        t        «      j                  t        «       | j                  t        t        j                  «       «      j                  t        «       | j                  t        d«      j                  t        «       | j                  t        t        d«       | j                  t        dd«      j                  t        «       | j                  t        t        dd«       | j                  t        t        d«      j                  t        «       y)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ð 	×ÑœœdŸj™j›lÓ+×/Ñ/´Ô:ð 	×ÑœÐ5Ó6×:Ñ:¼HÔEð 	×ÑÔ+¬TÐ3EÔFð 	×ÑœÐ4°eÓ<×@Ñ@Ä(ÔKð 	×ÑÔ+¬TÐ3IÈ5ÔQð 	×Ñœœh¨Ó.×2Ñ2´HÕ=r,   c                 óò   — | j                  t        t        d¬«      j                  d«       | j                  t        t        d¬«      j                  d«       | j	                  t
        t        t        d¬«       y)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ƒ  sW   € ð 	×Ñœœd¨	Ô2×6Ñ6¸ÔAØ×Ñœœd¨Ô1×5Ñ5°xÔ@ð 	×Ñœ*¤d¬D°iÐÕ@r,   c                 ó4  — | j                  t        t        t        d¬«       | j	                  t        t        d¬«      j
                  d«       | j	                  t        t        d¬«      j
                  d«       | j                  t        t        t        d¬«       y)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�  sj   € à×Ñœ*¤d¬D¸ÐÔ;Ø×Ñœœd¨1Ô-×4Ñ4°aÔ8Ø×Ñœœd¨2Ô.×5Ñ5°rÔ:Ø×Ñœ*¤d¬D¸ÐÕ<r,   c                 ó´  — | j                  t        t        «      j                  d«       | j                  t        t        d¬«      j                  d«       | j	                  t
        t        t        d¬«       | j	                  t
        t        t        d¬«       | j	                  t        t        t        d¬«       | j	                  t        t        t        d¬«       y)	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Ñ5°rÔ:ð 	×Ñœ)¤T¬4¸ÐÔ<Ø×Ñœ)¤T¬4¸ÐÔ>ð 	×Ñœ*¤d¬D¸ÐÔ;Ø×Ñœ*¤d¬D¸ÐÕ<r,   c                 óî   — | j                  t        t        «      j                  d«       | j                  t        t        d¬«      j                  d«       | j	                  t
        t        t        d¬«       y)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¥  sP   € à×Ñœœd›×)Ñ)¨4Ô0Ø×Ñœœd¨)Ô4×:Ñ:¸IÔFØ×Ñœ*¤d¬D¸	ÐÕBr,   c                 óî   — | j                  t        t        «      j                  d«       | j                  t        t        d¬«      j                  d«       | j	                  t
        t        t        d¬«       y)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«  sP   € à×Ñœœd›×*Ñ*¨DÔ1Ø×Ñœœd¨9Ô5×<Ñ<¸iÔHØ×Ñœ*¤d¬D¸ÐÕGr,   c                 óú  — | j                  t        t        «      j                  d«       | j                   t        j                  d¬«      t        «      j                  d«       | j                  t        t        j                  d¬«       | j                  t        t        j                  d¬«       | j                  t        t        j                  d¬«       | j                  t        t        j                  d¬«       y)	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×;Ñ;¸RÔ@ð 	×Ñœ)¤T§Z¡Z¸ÐÔ<Ø×Ñœ)¤T§Z¡Z¸ÐÔ>ð 	×Ñœ*¤d§j¡j¸ÐÔ;Ø×Ñœ*¤d§j¡j¸ÐÕ<r,   c                 óÂ  ‡— | j                  «       }| j                  |j                  t        j                  «       | j                  |j                  d«      t        t        j                  «       «      «       dgŠˆfd„}| j                  t        j                  |¬«      ¬«      }| j                  |j                  d«      d«       | j                  |j                  d«      d«       | j                  t        t        j                  d¬«       d	}| j                  t        |t        j                  d
„ ¬«       | j                  t        |t        j                  d„ ¬«       y)zusing -- 'now' parameterNgHáz®Ç^@c                  ó(   •— ‰ 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˜!‰O‹JØ˜1‘:Ðr,   ©r@  )r¼   é~   é   r5   z)now\(\) function must return non-negativec                   ó   — y)Nr0  r)   r)   r,   r#   Ú<lambda>z+TotpTest.test_using_w_now.<locals>.<lambda>á  s   € Èur,   c                   ó   — y)Nr1  r)   r)   r,   r#   rE  z+TotpTest.test_using_w_now.<locals>.<lambda>ä  s   € Èrr,   )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È  s  ø€ ð �l‰l‹nˆØ�‰�c—g‘gœuŸz™zÔ*Ø×Ñ˜s×1Ñ1°$Ó7¼¼U¿Z¹Z»\Ó9JÔKð �(ˆô	ð �l‰lœtŸz™z¨cÔ2ˆlÓ3ˆà×Ñ˜×+Ñ+¨DÓ1°3Ô7Ø×Ñ˜×+Ñ+¨DÓ1°3Ô7ð 	×Ñœ)¤T§Z¡Z°SÐÔ9ð >ˆØ×Ñœ~¨v´t·z±zÁ}ÐÔUð 	×Ñœ~¨v´t·z±zÁzÐÕRr,   c                 óÌ  — |€| j                  d¬«      }| j                  |j                  t        d«      «      d«       | j                  |j                  d«      d«       | j                  |j                  d«      d«       | j                  |j                  d«      d«       | j	                  t
        |j                  d	«       | j	                  t
        |j                  d«       | j	                  t        j                  |j                  d
«       | j	                  t        j                  |j                  d«       | j	                  t        j                  |j                  d«       y)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ê  s  € àˆ;Ø—,‘, a�,Ó(ˆCð 	×Ñ˜×,Ñ,¬Q¨y«\Ó:¸IÔFØ×Ñ˜×,Ñ,¨ZÓ8¸)ÔDð 	×Ñ˜×,Ñ,¨WÓ5°yÔAð 	×Ñ˜×,Ñ,¨VÓ4°iÔ@ð 	×Ñœ) S×%8Ñ%8¸)ÔDØ×Ñœ) S×%8Ñ%8¸$Ô?ð 	×Ñœ#×1Ñ1°3×3FÑ3FÈÔQð 	×Ñœ#×1Ñ1°3×3FÑ3FÈ
ÔSØ×Ñœ#×1Ñ1°3×3FÑ3FÈÕQr,   c                 óP   — | j                  t        j                  d¬«      ¬«       y)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©zÀÔ/CÐ*ÕDr,   c                 óà  ‡— t        j                  «       }| j                  |«      }t        d«      D �]  }| j	                  «       Št        ‰«      }| j                  |j                  ‰«      |«       | j                  |j                  |dz   «      |«       | j                  |j                  |«      |«       t        j                  j                  ‰«      }| j                  |j                  |«      |«       |j                  }	 t        ˆfd„«      |_
        | j                  |j                  d«      |«       ||_
        �Œ | j                  t        |j                  d«       y# ||_
        w xY w)znormalize_time()r²   r�   c                  ó   •— ‰ S r•   r)   ©r  s   €r#   rE  z.TotpTest.test_normalize_time.<locals>.<lambda>  s   ø€ ±tr,   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  s%  ø€ ä—j‘j“lˆØ�l‰l˜;Ó'ˆä�r—ˆAØ—=‘=“?ˆDÜ�t“9ˆDà×Ñ˜S×/Ñ/°Ó5°tÔ<Ø×Ñ˜S×/Ñ/°°s±
Ó;¸TÔBà×Ñ˜S×/Ñ/°Ó5°tÔ<ä×"Ñ"×3Ñ3°DÓ9ˆBØ×Ñ˜S×/Ñ/°Ó3°TÔ:à—?‘?ˆDð'Ü".«|Ó"<�”Ø× Ñ  ×!3Ñ!3°DÓ!9¸4Ô@à"&�–ð# ð& 	×Ñœ) S×%7Ñ%7¸Õ@øð #'�•ús   Ä4E$Å$	E-c                 óš  — | j                  «       }t        t        d«      }| j                  |j                  t        «       | j                  |j
                  d«       | j                  |j                  t        «       | j                  |j                  «       d«       | j                  |j                  d¬«      d«       | j                  |j                  d¬«      t        «       | j                  |j                  d¬	«      d
«       t        d|j                  dd«      ¬«      }|j
                  }|j                  }|j                  «       }y)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Ø×Ñ˜Ÿ™¨C˜Ó0Ð2GÔHØ×Ñ˜Ÿ™¨E˜Ó2´DÔ9Ø×Ñ˜Ÿ™¨u˜Ó5Ð7QÔRô �t #§+¡+¨b°"Ó"5Ô6ˆØ�K‰KˆØ�N‰NˆØ�N‰NÓ‰r,   c                 ó|  — ddl m}m}  |d«      }|j                  d«      }| j	                  ||«       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       | j                  |d«       | j                  t        |«      d	«       | j                  |d   d«       | j                  |d
   d«       | j                  t        |j                  d«       | j                  t        |j                  d	«       | j                  |«       d„ |_        | j                  |j                  d«       | j                  |j                   «       d„ |_        | j                  |j                  d«       | j#                  |j                   «       |j                  d«      }| j%                  ||«       | j                  ||«       |j                  d«      }| j%                  ||«       | j                  ||«       |j                  d«      }| j'                  ||«       y)zgenerate() -- TotpToken() classr   )r
   Ú	TotpTokenÚs3jdvb7qd2r7jpxxrÕ   rÖ   iµÒéT¹�T)rÖ   ro  r   r   éýÿÿÿc                   ó   — y)Ng  àTn'ÕAr)   r)   r,   r#   rE  z*TotpTest.test_totp_token.<locals>.<lambda>T  s   € ˜<r,   r�   c                   ó   — y)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?  sÕ  € ç0ñ Ð%Ó&ˆØ—‘˜jÓ)ˆØ×Ñ˜f iÔ0Ø×Ñ˜Ÿ™ xÔ0Ø×Ñ˜Ÿ™¨Ô2à×Ñ˜×+Ñ+¨ZÔ8Ø×Ñ˜Ð!7Ô8Ø×Ñœ˜V› aÔ(Ø×Ñ˜ ™ HÔ-Ø×Ñ˜ ™ JÔ/Ø×Ñœ* f×&8Ñ&8¸"Ô=Ø×Ñœ* f×&8Ñ&8¸!Ô<Ø�‰˜Ôñ (ˆŒØ×Ñ˜×)Ñ)¨3Ô/Ø�‰˜Ÿ™Ô%á%ˆŒØ×Ñ˜×)Ñ)¨1Ô-Ø×Ñ˜Ÿ™Ô&ð —,‘,˜zÓ*ˆØ×Ñ˜ &Ô)Ø×Ñ˜ &Ô)ð —,‘,˜zÓ*ˆØ×Ñ˜ &Ô)Ø×Ñ˜ &Ô)ð —,‘,˜zÓ*ˆØ×Ñ˜G VÕ,r,   c                 ó^  ‡— ddl m}  |d¬«      }| j                  «       Š|j                  ‰«      }|j                  }| j                  |t        «       |j                  dz  }| j                  |j                  |dz   «      j                  |«       | j                  |j                  |dz   «      j                  |«       t        j                  j                  ‰«      }| j                  t        |j                  |«      «      t        ‰«      «       | j                  |j                  |«      j                  |«         |j                  ˆfd„¬«      |j                  ¬	«      }| j                  |j                  «       j                  |«       | j!                  t"        |j                  d
«       y)z
generate()r   rú   Tr  rÆ   é   c                  ó   •— ‰ S r•   r)   r]  s   €r#   rE  z(TotpTest.test_generate.<locals>.<lambda>„  s   ø€ ¡dr,   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  sI  ø€ å%ñ �tŒnˆØ�}‰}‹ˆØ—‘˜dÓ#ˆØ—‘ˆØ×Ñ˜e¤WÔ-Ø—^‘^ bÑ(ˆ
ð 	×Ñ˜Ÿ™ j°2¡oÓ6×<Ñ<¸eÔDð 	×Ñ˜CŸL™L¨°b©Ó9×?Ñ?ÀÔGô ×Ñ×/Ñ/°Ó5ˆØ×Ñœ˜S×/Ñ/°Ó3Ó4´c¸$³iÔ@ð 	×Ñ˜Ÿ™ bÓ)×/Ñ/°Ô7ð ,ˆzˆt�z‰z›lÔ+°·±Ô?ˆØ×Ñ˜Ÿ™›×.Ñ.°Ô6ð 	×Ñœ* c§l¡l°BÕ7r,   c                 ó,  — | j                  «       D ]�  \  }}}}}|j                  |«      }| j                  |j                  ||¬«       | j                  |j                  ||j
                  z  |¬«       |sŒf| j                  |j                  |«       Œƒ y)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Ñ-ˆC��u˜g và—\‘\ $Ó'ˆFØ×Ñ˜VŸ\™\¨5°fÐÔ=Ø×Ñ˜VŸ^™^¨T°S·Z±ZÑ-?ÀVÐÔLÚØ× Ñ  ×!3Ñ!3°WÕ=ñ 2Jr,   c                 óø  — ddl m} | j                  ||«       | j                  |j                  t        «       | j                  |j                  j                  |«       | j                  |j                  ||dz   ¬«       ||z  }||z   }	| j                  |j                  |	|dz   ¬«       | j                  |j                  ||dz   ¬«       | j                  |j                  ||dz   ¬«       | j                  |j                  ||z   «       |	dz   |z  }
| j                  |j                  |
«       | j                  |j                  |
|z   «       | j                  t        |«      d	«       | j                  ||	|f«       | j                  t         |j"                  d
«       | j                  |d   |	«       | j                  |d   |«       | j                  t         |j"                  d	«       | j%                  |«       y )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™j¬$Ô/Ø×Ñ˜Ÿ™×*Ñ*¨FÔ3ð 	×Ñ˜Ÿ™ T¨sÐ5EÑ/EÐÔFØ˜6‘>ˆØ˜WÑ$ˆØ×Ñ˜Ÿ™¨°SÐ;NÑ5NÐÔOØ×Ñ˜×/Ñ/°¸sÐEYÑ?YÐÔZØ×Ñ˜Ÿ™¨°S¸;Ñ5FÐÔGØ×Ñ˜×,Ñ,¨f°v©oÔ>Ø ‘{ fÑ,ˆØ×Ñ˜×*Ñ*¨KÔ8Ø×Ñ˜×)Ñ)¨;¸Ñ+?Ô@ð 	×Ñœ˜U› QÔ'Ø×Ñ˜ ¨$ Ô0Ø×Ñœ* e×&7Ñ&7¸Ô<Ø×Ñ˜˜q™ 7Ô+Ø×Ñ˜˜q™ 4Ô(Ø×Ñœ* e×&7Ñ&7¸Ô;ð 	�‰˜Õr,   c                 ó    ‡— dŠd} t        j                  ˆfd„¬«      t        «      }|j                  |‰«      }| j	                  |‰d¬«       y)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Ò%5r,   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¹  sH   ø€ àˆØˆØ6Œd�j‰jÓ5Ô6´tÓ<ˆØ—‘˜5 $Ó'ˆØ×Ñ˜V¨$¸ÐÕ:r,   c                 ó¸   ‡— ddl m} dŠd} t        j                  ˆfd„¬«      t        «      }|j                  |‰dz
  «      }| j                  |‰dz
  d¬	«       y
)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Á  sS   ø€ å*àˆØˆØ6Œd�j‰jÓ5Ô6´tÓ<ˆØ—‘˜5 $¨¡)Ó,ˆØ×Ñ˜V¨$°©)¸QÐÕ?r,   c                 ó¬   ‡— dŠd} t        j                  ˆfd„¬«      t        «      }|j                  |‰dz   «      }| j	                  |‰dz   d¬«       y)	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Ë  sP   ø€ àˆØˆØ6Œd�j‰jÓ5Ô6´tÓ<ˆØ—‘˜5 $¨¡)Ó,ˆØ×Ñ˜V¨$°©)¸RÐÕ@r,   c                 ó²   ‡— dŠd} t        j                  ˆfd„¬«      t        «      }| j                  t        j
                  |j                  |‰dz   «       y)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Ó  sE   ø€ àˆØˆØ6Œd�j‰jÓ5Ô6´tÓ<ˆØ×Ñœ#×/Ñ/°·±¸EÀ4È"Á9ÕMr,   c                 ó  — d|j                   ›d|j                  ›d|j                  ›d|›d|›d|›d�} |j                  ||fi |¤Ž}| j	                  ||j                  |«      |j                  |j                  dd	«      ||¬
«       y)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Þ  sz   � ð
 �~‹~˜sŸw›w¨¯
«
²Eº8ÂTðKˆà�—‘˜5 $Ñ/¨$Ñ/ˆØ×Ñ˜VØ"%×"4Ñ"4°TÓ":Ø$'§J¡JØ$(§H¡H¨X°rÓ$:Ø%3Ø!$ð 	õ 	&r,   c                 ó¬   — 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ì  sV   � ð �~‹~˜sŸw›w¨¯
«
²Eº8ÂTðKˆà ˆt× Ñ  ¨C¯I©I°u¸dñ 6Ø),ð6Ø04ñ6ð 	6r,   c                 ó0  — | j                  «       }|j                  }| j                  «       }|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                  j                  |«      } |d||d¬«        |t        |d«       y)	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ˆØ—‘ˆØ�}‰}‹ˆØ—‘˜TÓ"×(Ñ(ˆÜ˜#¨Ô-ˆÜ × 8Ñ 8ÑC¸FÑCˆÜ˜t×6Ñ6ÑA¸&ÑAˆñ 	”S×*Ñ*¨E°4¸&±=ÈÕKÙ�b˜% ¨¡°vÕ>Ù�b˜% ¨¡°q¸6±zÕBñ 	�a˜ ¨QÕ/ñ 	”S×*Ñ*¨E°4¸&±=ÈÕKÙ�b˜% ¨¡°vÕ>Ù�b˜% ¨¡°q¸6±zÕBñ 	”S×*Ñ*¨E°4¸!¸f¹*Ñ3DÈQÕOÙ”S×*Ñ*¨E°4¸!¸f¹*Ñ3DÈVÕTÙ�b˜% ¨¨F©
Ñ!2¸1¸v¹:ÕFô ×Ñ×/Ñ/°Ó5ˆÙ�a˜ ¨1Õ-ñ 	”Z ¨Õ+r,   c                 óî  — | j                  «       }|j                  }| j                  «       }t        ||¬«      }t	        | j
                  fi |¤Ž}t	        | j                  fi |¤Ž}d|z  }|j                  ||z
  «      j                  } |t        j                  ||d¬«        |d||d| ¬«       |j                  ||z   «      j                  }	 |t        j                  |	|d¬«        |d|	|d|¬«       y)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ˆØ—‘ˆØ�}‰}‹ˆÜ˜#¨Ô-ˆÜ × 8Ñ 8ÑC¸FÑCˆÜ˜t×6Ñ6ÑA¸&ÑAˆð �6‰zˆØ—|‘| D¨4¡KÓ0×6Ñ6ˆÙ”S×*Ñ*¨L¸$ÀqÕIÙ�b˜,¨°Q¸d¸UÕCð —l‘l 4¨$¡;Ó/×5Ñ5ˆÙ”S×*Ñ*¨K¸ÀaÕHÙ�b˜+ t°A¸DÖAr,   c                 ó   — | j                  «       }|j                  }| j                  «       }|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                  |j                  |«        |
t        j                  |||d¬«      }| j                  |j                  |«       y)	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ˆØ—‘ˆØ�}‰}‹ˆØ—‘˜TÓ"ˆØ—‘ˆØ—-‘-ˆØ×'Ñ'ˆÜ˜#¨Ô-ˆÜ × 8Ñ 8ÑC¸FÑCˆÜ˜t×6Ñ6ÑA¸&ÑAˆñ 	�b˜% ¨¡°vÕ>ñ 	�b˜% ¨¡¸WÀQ¹YØ#õ	%ñ
 	”S×*Ñ*¨E°4¸!¸f¹*Ñ3DØ")°&õ	:ñ
 œ3×-Ñ-¨u°d¸V±mØ(/¸ô@ˆà×Ñ˜Ÿ™¨+Ô6ñ œ3×-Ñ-¨u°dØ(/¸ô;ˆà×Ñ˜Ÿ™¨+Õ6r,   c                 ób  — t        d«      }|j                  }d}| j                   |d|«      «       | j                   |d|«      «       | j                  t        j
                  |d|«       | j                  t        j
                  |d|«       | j                  t        j
                  |d|«       y)	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Ô6ð 	�‰™˜i¨Ó.Ô/ð 	×Ñœ#×1Ñ1°5¸'À4ÔHð 	×Ñœ#×1Ñ1°5¸(ÀDÔIð 	×Ñœ#×1Ñ1°5¸)ÀTÕJr,   c                 ó*  — | j                  «       D ]€  \  }}}}}|j                  } |||«      }| j                  |«       | j                  |j                  ||j
                  z  |¬«       | j                  t        j                  |||dz   d¬«       Œ‚ y)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Ñ*ˆC��u˜g sà—I‘IˆEñ ˜5 $Ó'ˆFØ�O‰O˜FÔ#Ø×Ñ˜VŸ^™^¨T°S·Z±ZÑ-?ÀSÐÔIð ×Ñœc×3Ñ3°U¸EÀ4È#Á:ÐVWÐÕXñ /Gr,   c                 ó  ‡— ddl m} dŠ |j                  ˆfd„¬«      }t        ddd¬	«      }|j	                  d
|«      }| j                  |‰¬«       t        ddd¬	«      }| j                  t        j                  |j                  d|«       t        dd¬«      }| j                  t        |j                  d|«       d}|j	                  d
|«      }| j                  |‰¬«       d}|j	                  d
|«      }| j                  |‰¬«       y)zverify()r   rú   rÊ  c                  ó   •— ‰ S r•   r)   r]  s   €r#   rE  z&TotpTest.test_verify.<locals>.<lambda>•  s   ø€ ©Tr,   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�  s  ø€ õ
 	&àˆØ �d—j‘j£\Ô2ˆô ˜ Ð-?Ô@ˆØ×"Ñ" 8¨WÓ5ˆØ×Ñ˜U¨ÐÔ.ô ˜ Ð-?Ô@ˆØ×Ñœ#×/Ñ/°×1CÑ1CÀXÈwÔWô ˜ Ô(ˆØ×Ñœ* k×&8Ñ&8¸(ÀGÔLð LˆØ×"Ñ" 8¨[Ó9ˆØ×Ñ˜U¨ÐÔ.ð Dˆ
Ø×"Ñ" 8¨ZÓ8ˆØ×Ñ˜U¨ÐÕ.r,   c                 óÚ  — ddl m} |j                  } |t        d«      «      }| j	                  |j
                  t        «        |d«      }| j	                  |j
                  t        «        |t        ddt        ¬«      «      }| j	                  |j
                  t        «        |t        d«      «      }| j	                  |j
                  t        «        |d	«      }| j	                  |j
                  t        «       | j                   ||«      |«       t        «       } |j                  |¬
«      j                  |«      }| j                  ||«       | j	                  |j                  «       |j                  «       «        |j                  |¬
«      j                  |«      }| j                  ||«       | j                  t        |t        d«      «       | j                  t        |d«       y)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‹  € å%Ø×&Ñ&ˆñ œ!ð -ó .ó /ˆà×Ñ˜Ÿ™¤(Ô+ñ ð ,ó -ˆà×Ñ˜Ÿ™¤(Ô+ñ œ$ ¨´TÔ:Ó;ˆØ×Ñ˜Ÿ™¤(Ô+ñ œ!ÐQÓRÓSˆØ×Ñ˜Ÿ™¤(Ô+ñ ÐPÓQˆØ×Ñ˜Ÿ™¤(Ô+ð 	�‰‘k #Ó&¨Ô,ô “+ˆØˆt�z‰z Ô)×5Ñ5°cÓ:ˆØ×Ñ˜˜sÔ#Ø×Ñ˜Ÿ™›¨¯©«Ô7ð ˆt�z‰z Ô)×5Ñ5°dÓ;ˆØ�‰�d˜DÔ!ð 	×Ñœ* k´1°U³8Ô<Ø×Ñœ* k°6Õ:r,   c                 ó  — ddl m} |j                  } |d«      }| j                  ||«       | j	                  |j
                  t        «       | j	                  |j                  d«       | j	                  |j                  d«       | j	                  |j                  d«       | j	                  |j                  d«       | j	                  |j                  d«        |d	«      }| j	                  |j
                  t        «       | j                  t        |d
«       | j                  t        |d«        |d«      }| j	                  |j                  d«       | j	                  |j                  d«        |d«      }| j	                  |j                  d«       | j	                  |j                  d«        |d«      }| j	                  |j                  d«       | j	                  |j                  d«       | j                  t        |j                  d«        |d«      }| j	                  |j                  d«       | j                  t        |d«        |d«      }| j	                  |j                  d«       | j                  t        |d«       | j                  t        |d«       | j                  t        |d«        |d«      }| j	                  |j                  d«       | j                  t        |d«       | j                  t        |d«       | j                  t!        t"        j$                  d ¬!«      g«      5   |d"«      }d#d#d#«       | j	                  |j&                  t(        «       | j	                  |j                  d«       y## 1 sw Y   ŒFxY w)$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%  € å%Ø—=‘=ˆñ ð (ó )ˆà×Ñ˜c 4Ô(Ø×Ñ˜Ÿ™¤(Ô+Ø×Ñ˜Ÿ™Ð$6Ô7Ø×Ñ˜Ÿ™ YÔ/Ø×Ñ˜Ÿ™ &Ô)Ø×Ñ˜Ÿ™ RÔ(Ø×Ñ˜Ÿ™ QÔ'ñ ð (ó )ˆà×Ñ˜Ÿ™¤(Ô+ð 	×Ñœ* hÐ0bÔcð 	×ÑÔ+¨Xð 8Qô 	Rñ ð *ó +ˆà×Ñ˜Ÿ™ MÔ2Ø×Ñ˜Ÿ™ [Ô1ñ ð 1ó 2ˆà×Ñ˜Ÿ™Ð$5Ô6Ø×Ñ˜Ÿ™Ð%6Ô7ñ ÐhÓiˆØ×Ñ˜Ÿ™Ð$5Ô6Ø×Ñ˜Ÿ™Ð%6Ô7ð 	×Ñœ* d§m¡mØcô	eñ ÐiÓjˆØ×Ñ˜Ÿ™ (Ô+ð 	×Ñœ* hð 1[ô 	\ñ ÐaÓbˆØ×Ñ˜Ÿ™ QÔ'ð 	×Ñœ* hÐ0zÔ{Ø×Ñœ* hÐ0|Ô}Ø×Ñœ* hÐ0{Ô|ñ ÐbÓcˆØ×Ñ˜Ÿ™ RÔ(ð 	×Ñœ* hð 1Sô 	Tð 	×Ñœ* hð 1Tô 	Uð ×#Ñ#Üœ#×3Ñ3Ð@cÔdð%
õ ñ ð /ó 0ˆC÷ð
 	×Ñ˜Ÿ™¬Ô.Ø×Ñ˜Ÿ™ RÕ(÷ð ús   Ì1	M?Í?Nc                 ó6  — t        t        ddd¬«      }| j                  |j                  dd«      d«       | j	                  t
        |j                  dd«       | j                  |j                  d«      d	«       d|_        | j                  |j                  «       d	«       d|_        | j                  |j                  «       d«       | j	                  t
        |j                  d
«       | j	                  t
        |j                  dd«       | j                  t        t        d¬«      j                  d«      d«       | j                  t        t        d¬«      j                  d«      d«       | j                  t        t        d¬«      j                  d«      d«       y)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  si  € ô ”4˜V¨A°bÔ9ˆØ×Ñ˜Ÿ™Ð$6¸ÓFð0ô	1ð
 	×Ñœ* c§j¡j°$¸ÔFð 	×Ñ˜Ÿ™Ð$6Ó7ØRô	Tð 'ˆŒ	Ø×Ñ˜Ÿ™›ØRô	Tð #ˆŒ
Ø×Ñ˜Ÿ™›ð1ô	2ð
 	×Ñœ* c§j¡jÐ2IÔJð 	×Ñœ* c§j¡jÐ2DÐF^Ô_ð
 	×Ñœœd¨Ô1×8Ñ8Ð9KÓLð,ô	-ð 	×Ñœœd¨1Ô-×4Ñ4Ð5GÓHð$ô	%ð 	×Ñœœd¨2Ô.×5Ñ5Ð6HÓIð%õ	&r,   c           
      óè  — ddl m} |j                  } |t        ddt        dd¬«      «      }| j                  ||«       | j                  |j                  t        «       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d	«       | j                  |j                  d
«       | j                  t        |t        dt        ¬«      «       | j                  t        |t        ddt        ¬«      «       | j                  t        |t        ddt        ¬«      «       | j                  t        |t        dt        ¬«      «        |t        ddt        j!                  «       dd¬«      «      }| j                  |j                  t        «       | j                  t        |t        dd¬«      «       | j                  t"        |t        ddd¬«      «        |t        ddt        dd¬«      «      }| j                  |j                  d«       | j                  |j                  d«        |t        ddt        d¬«      «      }| j                  |j                  d«       | j                  t        |t        ddt        d¬«      «        |t        ddt        d¬«      «      }| j                  |j                  d«       | j                  t$        |t        ddt        d¬«      «       | j                  t        |t        ddt        d¬«      «        |t        ddt        d¬«      «      }| j                  |j                  d«       | j                  t        |t        ddt        d¬«      «       | j                  t        |t        ddt        d¬«      «       | j                  t$        |t        ddt        d¬«      «       y) 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”  s  € å%Ø—N‘Nˆ	ñ
 œ˜q v´4Ð?QÐZcÔdÓeˆØ×Ñ˜c 4Ô(Ø×Ñ˜Ÿ™¤(Ô+Ø×Ñ˜Ÿ™Ð$6Ô7Ø×Ñ˜Ÿ™ YÔ/Ø×Ñ˜Ÿ™ &Ô)Ø×Ñ˜Ÿ™ RÔ(Ø×Ñ˜Ÿ™ QÔ'ð 	×Ñœ* i´¸6ÄtÔ1LÔMð 	×Ñœ* i´¸ÀÌDÔ1QÔRØ×Ñœ* i´¸À&ÌdÔ1SÔTð 	×Ñœ* i´¸¼tÔ1DÔEñ œ˜q v´4·:±:³<ÐGYÐbkÔlÓmˆØ×Ñ˜Ÿ™¤(Ô+ð 	×Ñœ* i´¸ÀÔ1GÔHð 	×ÑÔ+¨YÜ ¨Ð5GÔHô	Jñ œ˜q v´4¸}ÐU`ÔaÓbˆØ×Ñ˜Ÿ™ MÔ2Ø×Ñ˜Ÿ™ [Ô1ñ œ˜q v´4¸XÔFÓGˆØ×Ñ˜Ÿ™ (Ô+ð 	×Ñœ* i´¸ÀÌDÐV^Ô1_Ô`ñ œ˜q v´4ÀÔBÓCˆØ×Ñ˜Ÿ™ QÔ'ð 	×Ñœ) Y´°q¸vÌ4ÐX[Ô0\Ô]Ø×Ñœ* i´¸ÀÌDÐY[Ô1\Ô]ñ œ˜q v´4ÀÔCÓDˆØ×Ñ˜Ÿ™ RÔ(ð 	×Ñœ* i´¸ÀÌDÐYZÔ1[Ô\Ø×Ñœ* i´¸ÀÌDÐY[Ô1\Ô]ð
 	×Ñœ) Y´°q¸vÌ4ÐY\Ô0]Õ^r,   c           
      óÌ  — t        t        ddd¬«      }| j                  |j                  «       t	        ddt        ¬«      «       t        t        ddddd	¬
«      }| j                  |j                  «       t	        ddt        dd	¬«      «       t        t        dddd¬«      }| j                  |j                  «       t	        ddt        d¬«      «       t        t        dddd	¬«      }| j                  |j                  «       t	        ddt        d	¬«      «       t        j
                  d	¬«      } |t        «      }| j                  |j                  «       t	        ddt        ¬«      «        |t        d	¬«      }| j                  |j                  «       t	        ddt        ¬«      «       | j                  t        t        d¬«      j                  «       t	        ddt        d¬«      «       | j                  t        t        d¬«      j                  «       t	        ddt        d¬«      «       | j                  t        t        d¬«      j                  «       t	        ddt        d¬«      «       y)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ˆØ×Ñ˜Ÿ™›¬¨q°vÄ4Ô(HÔIô ”4˜V¨A°bØ+°MôCˆà×Ñ˜Ÿ™›Ü ¨´DØ$6¸}ôNô	Oô
 ”4˜V¨A°bØ+ô-ˆà×Ñ˜Ÿ™›Ü ¨´DØ$6ô8ô	9ô
 ”4˜V¨A°bØ'ô)ˆà×Ñ˜Ÿ™›Ü ¨´DØ%2ô4ô	5ô
 —j‘j¨Ô6ˆÙœ$ÓˆØ×Ñ˜Ÿ™›¬¨q°vÄ4Ô(HÔIñ œ$ }Ô5ˆØ×Ñ˜Ÿ™›¬°¸ÄDÔ)IÔJð
 	×Ñœœd¨Ô1×9Ñ9Ó;Ü ¨´D¸hÔGô	Ið 	×Ñœœd¨1Ô-×5Ñ5Ó7Ü ¨´DÀÔCô	Eð 	×Ñœœd¨2Ô.×6Ñ6Ó8Ü ¨´DÀÔDõ	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ž   ‹  sN  ø„ ñð ,Ðô
=ò6ó
%ò,ñ<  (°¸rÈ!ÔL€Oñ 
Ð$¨QÔ	/à"Ø"Ø"Ø"Ø"ð	
ñ 
Ð$¨QÔ	/à$Ø$Ø$Ø$Ø$ð	
ñ 
Ð'°Ô	2Ø"Ø"ð	
ñ 
Ð"¨5°fÔ	=ØØ$Ø$Ø$Ø$Ø%ð	
ñ 
Ð"¨5°hÔ	?ØØ$Ø$Ø$Ø$Ø%ð	
ñ 
Ð"¨5°hÔ	?ØØ$Ø$Ø$Ø$Ø%ð	
ñ 
Ð$¨QÔ	/Ð1GÐI_Ð`Ù	Ð$¨Q°rÔ	:Ð<UÐVñ 
Ð"¨5¸Ô	<Ð>VÐWÙ	Ð"¨5°hÀrÔ	JÐLdÐeÙ	Ð"¨5°hÀrÔ	JÐLdÐeðaR€Gòh8ò2
/ò$ò0>ò0Aò=ò=ò"CòHò=ò"SóDRò4EòAò<ò2)-òV8ò@>óòB;ò@òAòNð +/ó&ð )-ó6ò.,ò`Bò.'7òRKò,Yò"/òH*;ò^u)òn8&òz\_ö|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     sN  ðÙ (ó
 Ý Û Ð'�g×'Ñ'¨Ó1�Û 
Û õ ß +ß 3å 'ß 5Ñ 5ð ð€ð )2Ð 1Ð Ð%Ø×Ñ�uÒÝ3Ø×Ñ�uÒÝ3à€Ø€Ø€Ø-€ØC€Ø€Ø€Ø$€ð ‡~�~×Ñ˜qÒ Ð ?Ð"?Ó ?Ð Ø
‡~�~×Ñ "Ò$Ð KÐ&KÓ KÐ$ò+.ñ^ Ó€
ò#ôJE�Hô JEðj *×0Ñ0°Ó9Ð Ø$ QÑ&¨¨Ð,Ð Ø$ QÑ&¨¨Ð,Ð ô
`Fˆxõ `Fr,   