§
    HŠtj2# ã                   ó0  — d Z ddlmZ ddlmZ erddlmZ nddlm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mZ ddlmZmZmZmZm Z m!Z! ddl"m#c m$Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z0m1Z2m3Z3 ej4         5                    ej4         6                    e7¦  «        ¦  «        Z8d„ Z9 G d„ de'¦  «        Z:ddl;Z;ddl<Z< G d„ de%j=        ¦  «        Z> G d„ de%j=        ¦  «        Z? G d„ de'¦  «        Z@dS )ztests for passlib.contexté    )Úwith_statement)ÚPY3)ÚNoSectionErrorN)Úpartial)Úhash)ÚCryptContextÚLazyCryptContext)ÚPasslibConfigWarningÚPasslibHashWarning)ÚtickÚ
to_unicode)ÚirangeÚuÚunicodeÚstr_to_uasciiÚPY2ÚPY26)ÚTestCaseÚset_fileÚTICK_RESOLUTIONÚ
quicksleepÚ	time_callÚhandler_derived_from)Úregister_crypt_handler_pathÚ_has_crypt_handlerÚ_unload_handler_nameÚget_crypt_handlerc                 ó�   — |                       ¦   «         }|D ]}|                     |¦  «         Œ|r|                     |¦  «         |S ©N)ÚcopyÚupdate)ÚfirstÚargsÚkwdsÚtargetÚargs        úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/tests/test_context.pyÚmerge_dictsr(   &   sR   € Ø�ZŠZ‰\Œ\€FØð ð ˆØ�Š�cÑÔÐÐØð Ø�Š�dÑÔÐØ€Mó    c                   óº  ‡ — e Zd ZdZg d¢Zd„ eD ¦   «         Z eedddddd	¬
¦  «        Z eee¬¦  «        Z	 e
d¦  «        Z e
d¦  «        Zej                             ed¦  «        Ze                      e
d¦  «         e
d¦  «        ¦  «        Zej                             ed¦  «        Ze                      e
d¦  «         e
d¦  «        ¦  «                             d¦  «        Zej                             ed¦  «        Z	  edddd¬¦  «        ZdZ eee¦  «        Z ed¬¦  «        Z eee¦  «        Z eg d¢d gd!d"d#d$d%d&d%d'd(¬)¦  «        Zˆ fd*„Zd+„ Z d,„ Z!d-„ Z"d.„ Z#d/„ Z$d0„ Z%d1„ Z&d2„ Z'd3„ Z(d4„ Z)d5„ Z*d6„ Z+d7„ Z,dUd9„Z-d:„ Z.d;„ Z/d<„ Z0d=„ Z1d>„ Z2d?„ Z3d8i fd8d@d ifdAi fdBi fgZ4dC„ Z5dD„ Z6dE„ Z7dF„ Z8dVdG„Z9dH„ Z:dI„ Z;dJ„ Z<dK„ Z=dL„ Z>dM„ Z?dN„ Z@dO„ ZAdP„ ZBdQ„ ZCdR„ ZDdS„ ZEdT„ ZFˆ xZGS )WÚCryptContextTestr   )Ú	des_cryptÚ	md5_cryptÚ
bsdi_cryptÚsha512_cryptc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r   )Ú.0Únames     r'   ú
<listcomp>zCryptContextTest.<listcomp>?   s!   € ÐNÐNÐN°TÕ*¨4Ñ0Ô0ÐNÐNÐNr)   r-   çš™™™™™¹?i1u  i©a  iPÃ  é@œ  )ÚschemesÚdefaultÚall__vary_roundsÚbsdi_crypt__max_roundsÚbsdi_crypt__default_roundsÚsha512_crypt__max_roundsÚsha512_crypt__min_rounds©r7   a  [passlib]
schemes = des_crypt, md5_crypt, bsdi_crypt, sha512_crypt
default = md5_crypt
; this is using %...
all__vary_rounds = 10%%
bsdi_crypt__default_rounds = 25001
bsdi_crypt__max_rounds = 30001
sha512_crypt__max_rounds = 50000
sha512_crypt__min_rounds = 40000
zó[passlib]
schemes = des_crypt, md5_crypt, bsdi_crypt, sha512_crypt
default = md5_crypt
all__vary_rounds = 0.1
bsdi_crypt__default_rounds = 25001
bsdi_crypt__max_rounds = 30001
sha512_crypt__max_rounds = 50000
sha512_crypt__min_rounds = 40000

zsample1.cfgú
z
zsample1b.cfgú	[passlib]z
[mypolicy]úutf-16zsample1c.cfgFiIq  i¹ˆ  iy  iÈ¯  )Úbsdi_crypt__min_roundsr:   r;   r=   zŒ[passlib]
bsdi_crypt__min_rounds = 29001
bsdi_crypt__max_rounds = 35001
bsdi_crypt__default_rounds = 31001
sha512_crypt__min_rounds = 45000
r/   ©r8   )r,   r-   Úphpassr.   Úsha256_cryptr,   rE   é   é   r   é¸  éÐ  ÚHé   )r7   Ú
deprecatedr8   r:   r;   Úbsdi_crypt__vary_roundsÚsha256_crypt__max_roundsÚsha256_crypt__min_roundsÚsha256_crypt__default_roundsÚphpass__identÚphpass__default_roundsc                 óª   •— t          t          | ¦  «                             ¦   «          t          j        dd¦  «         t          j        dd¦  «         d S )NÚignorez The 'all' scheme is deprecated.*z4.*'scheme' keyword is deprecated as of Passlib 1.7.*)Úsuperr+   ÚsetUpÚwarningsÚfilterwarnings)ÚselfÚ	__class__s    €r'   rV   zCryptContextTest.setUp²   sN   ø€ ÝÕ Ñ%Ô%×+Ò+Ñ-Ô-Ð-ÝÔ Ð*LÑMÔMÐMÝÔ Ð*`ÑaÔaÐaÐaÐar)   c                 óî  — t          ¦   «         }|                      |                     ¦   «         i ¦  «         t          di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         t          di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         t          di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         t          di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         t          t          d¦  «        g¬¦  «        }|                      |                     ¦   «         d¦  «         dS )ztest class constructorrE   r>   )rE   Nr1   )	r   ÚassertEqualÚto_dictÚsample_1_dictÚsample_1_resolved_dictÚsample_2_dictÚsample_3_dictr   r7   ©rY   Úctxs     r'   Útest_01_constructorz$CryptContextTest.test_01_constructorº   sQ  € õ ‰nŒnˆØ×Ò˜Ÿš™œ¨Ñ+Ô+Ð+õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ð9Ð9˜TÔ8Ð9Ð9ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ ¥A nÑ$5Ô$5Ð#6Ð7Ñ7Ô7ˆØ×Ò˜Ÿš™œÐ(9Ñ:Ô:Ð:Ð:Ð:r)   c                 ó”  — t          j        | j        ¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        | j        ¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        | j                             d¦  «        ¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        | j        ¦  «        }|                      |                     ¦   «         | j        ¦  «         t          j        | j	        dd¬¦  «        }|                      |                     ¦   «         | j        ¦  «         |  
                    t          t           j        d¦  «         |  
                    t          t           j        | j        d¬¦  «         dS )ztest from_string() constructorúutf-8ÚmypolicyrA   ©ÚsectionÚencodingNÚfakesection©ri   )r   Úfrom_stringÚsample_1_unicoder\   r]   r^   Úsample_1_unnormalizedÚencodeÚsample_1b_unicodeÚsample_1c_bytesÚassertRaisesÚ	TypeErrorr   rb   s     r'   Útest_02_from_stringz$CryptContextTest.test_02_from_stringÕ   s†  € õ Ô& tÔ'<Ñ=Ô=ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ô& tÔ'AÑBÔBˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ô& tÔ'<×'CÒ'CÀGÑ'LÔ'LÑMÔMˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ô& tÔ'=Ñ>Ô>ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ô& tÔ';ÀZØ.6ð8ñ 8ô 8ˆà×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;ð 	×Ò�)¥\Ô%=¸tÑDÔDÐDð 	×Ò�.­,Ô*BØÔ/¸ð 	ñ 	Hô 	Hð 	Hð 	Hð 	Hr)   c                 ó  — t           j                             | j        ¦  «        st	          d| j        z  ¦  «        ‚t          j        | j        ¦  «        }|                      |                     ¦   «         | j	        ¦  «         t          j        | j
        ¦  «        }|                      |                     ¦   «         | j	        ¦  «         t          j        | j        dd¬¦  «        }|                      |                     ¦   «         | j	        ¦  «         |                      t          t
          j        t           j                             t          d¦  «        ¦  «         |                      t           t
          j        | j        d¬¦  «         dS )	ztest from_path() constructorzcan't find data file: %rrg   rA   rh   zsample1xxx.cfgrk   rl   N)ÚosÚpathÚexistsÚsample_1_pathÚRuntimeErrorr   Ú	from_pathr\   r]   r^   Úsample_1b_pathÚsample_1c_pathrs   ÚEnvironmentErrorÚjoinÚherer   rb   s     r'   Útest_03_from_pathz"CryptContextTest.test_03_from_pathó   s[  € õ Œw�~Š~˜dÔ0Ñ1Ô1ð 	PÝÐ9¸DÔ<NÑNÑOÔOÐOõ Ô$ TÔ%7Ñ8Ô8ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ô$ TÔ%8Ñ9Ô9ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ô$ TÔ%8À*Ø.6ð8ñ 8ô 8ˆà×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;ð 	×ÒÕ*­LÔ,BÝœ'Ÿ,š,¥tÐ-=Ñ>Ô>ñ	@ô 	@ð 	@ð 	×Ò�.­,Ô*@ØÔ,°mð 	ñ 	Eô 	Eð 	Eð 	Eð 	Er)   c                 ó6  — t          di | j        ¤Ž} |j        di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         |                      |                     ¦   «         | j        ¦  «          |j        di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         |                      |                     ¦   «         | j        ¦  «          |j        di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         |                     ¦   «         }|  	                    ||¦  «         |                      |                     ¦   «         | j        ¦  «         |                      |                     ¦   «         | j        ¦  «          |j
        di | j        ¤Ž |                      |                     ¦   «         | j        ¦  «         |                      |                     ¦   «         | j        ¦  «         dS )ztest copy() methodNr1   )r   r^   r    r`   r\   r]   Úsample_12_dictra   Úsample_123_dictÚassertIsNotr!   )rY   Úcc1Úcc2Úcc2bÚcc3Úcc4s         r'   Útest_04_copyzCryptContextTest.test_04_copy  sÝ  € åÐ0Ð0˜TÔ/Ð0Ð0ˆð ˆcŒhÐ,Ð,˜Ô+Ð,Ð,ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ¨Ô(;Ñ<Ô<Ð<ð ˆsŒxÐ-Ð-˜$Ô,Ð-Ð-ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ¨Ô)<Ñ=Ô=Ð=ð ˆcŒhÐ,Ð,˜Ô+Ð,Ð,ˆØ×Ò˜Ÿš™œ¨Ô(<Ñ=Ô=Ð=ð �hŠh‰jŒjˆØ×Ò˜˜cÑ"Ô"Ð"Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;ð 	ˆŒ
Ð(Ð(�TÔ'Ð(Ð(Ð(Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ¨Ô(;Ñ<Ô<Ð<Ð<Ð<r)   c                 ón   — t          di | j        ¤Ž}|                      t          |¦  «        d¦  «         dS )ztest repr()z!^<CryptContext at 0x-?[0-9a-f]+>$Nr1   )r   r^   ÚassertRegexÚrepr)rY   r‡   s     r'   Útest_09_reprzCryptContextTest.test_09_repr+  s;   € åÐ0Ð0˜TÔ/Ð0Ð0ˆà×Ò�˜c™œÐ$GÑHÔHÐHÐHÐHr)   c                 ó¼  — t          ¦   «         }|                     | j        ¦  «         |                      |                     ¦   «         | j        ¦  «         |                     | j        ¦  «         |                      |                     ¦   «         | j        ¦  «         |                     | j                             d¦  «        ¦  «         |                      |                     ¦   «         | j        ¦  «         |                      t          |j        d¦  «         t          di | j        ¤Ž}|                     i d¬¦  «         |                      |                     ¦   «         | j        ¦  «         t          ¦   «         }|                     | j        ¦  «         |                     | j	        ¦  «         |                      |                     ¦   «         | j	        ¦  «         dS )z test load() / load_path() methodrf   NT)r!   r1   )
r   Úloadr^   r\   r]   rn   rp   rs   rt   r`   rb   s     r'   Útest_10_loadzCryptContextTest.test_10_load4  sŠ  € õ ‰nŒnˆð 	�Š�Ô#Ñ$Ô$Ð$Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;ð 	�Š�Ô&Ñ'Ô'Ð'Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;ð 	�Š�Ô&×-Ò-¨gÑ6Ô6Ñ7Ô7Ð7Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;ð 	×Ò�) S¤X¨tÑ4Ô4Ð4õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ�Š�˜DˆÑ!Ô!Ð!Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ ‰nŒnˆØ�Š�Ô#Ñ$Ô$Ð$Ø�Š�Ô#Ñ$Ô$Ð$Ø×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;Ð;Ð;r)   c                 ó  — t          ddgdd¬¦  «        }|                     ¦   «         }|                      t          |j        d¬¦  «         |                      |                     ¦   «         |¦  «         |                      t          |j        d¬¦  «         |                      |                     ¦   «         |¦  «         |                      t          |j        d	¬
¦  «         |                      |                     ¦   «         |¦  «         dS )z$test load() errors restore old stater,   rE   iˆ  r5   )rP   r9   T)Útoo__many__key__parts)Úfake_context_optioni'  ©rO   N)r   Ú	to_stringrs   rt   r!   r\   ÚKeyErrorÚ
ValueError)rY   ÚccÚresults      r'   Útest_11_load_rollbackz&CryptContextTest.test_11_load_rollback_  sñ   € õ ˜;¨Ð7Ø)-Ø ðñ ô ˆð —’‘”ˆð 	×Ò�) R¤YÀdÐÑKÔKÐKØ×Ò˜Ÿš™œ¨Ñ0Ô0Ð0ð
 	×Ò�( B¤IÀ4ÐÑHÔHÐHØ×Ò˜Ÿš™œ¨Ñ0Ô0Ð0ð 	×Ò�* b¤iÈ%ÐÑPÔPÐPØ×Ò˜Ÿš™œ¨Ñ0Ô0Ð0Ð0Ð0r)   c                 óö  — t          di | j        ¤Ž}|                     ¦   «          |                      |                     ¦   «         | j        ¦  «         t          di | j        ¤Ž} |j        di | j        ¤Ž |                      |                     ¦   «         | j        ¦  «          |j        di | j        ¤Ž |                      |                     ¦   «         | j        ¦  «         t          di | j        ¤Ž}|                     | j        ¦  «         |                      |                     ¦   «         | j        ¦  «         t          di | j        ¤Ž}|                     | j	        ¦  «         |                      |                     ¦   «         | j        ¦  «         |  
                    t          |j        i i ¦  «         |  
                    t          |j        i dg¬¦  «         |  
                    t          |j        d¦  «         dS )ztest update() methodr,   r>   Nr1   )r   r^   r!   r\   r]   r`   r„   ra   r…   Úsample_2_unicoders   rt   rb   s     r'   Útest_12_updatezCryptContextTest.test_12_updatew  s×  € õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ�
Š
‰ŒˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;õ Ð0Ð0˜TÔ/Ð0Ð0ˆØˆŒ
Ð(Ð(�TÔ'Ð(Ð(Ð(Ø×Ò˜Ÿš™œ¨Ô(;Ñ<Ô<Ð<ð 	ˆŒ
Ð(Ð(�TÔ'Ð(Ð(Ð(Ø×Ò˜Ÿš™œ¨Ô(<Ñ=Ô=Ð=õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ�
Š
�4Ô%Ñ&Ô&Ð&Ø×Ò˜Ÿš™œ¨Ô(;Ñ<Ô<Ð<õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ�
Š
�4Ô(Ñ)Ô)Ð)Ø×Ò˜Ÿš™œ¨Ô(;Ñ<Ô<Ð<ð 	×Ò�) S¤Z°°RÑ8Ô8Ð8Ø×Ò�) S¤Z°¸k¸]ÐÑKÔKÐKð 	×Ò�) S¤Z°Ñ6Ô6Ð6Ð6Ð6r)   c                 óâ  — d„ }|                       t          t          d¬¦  «         |                       t          t          d¬¦  «         |                       t          t          d¬¦  «         |                       t          t          d¬¦  «         |                       t          t          d¬¦  «         |                       t          t          d	¬
¦  «          | j         t          |fi ddi¤Ž t          d&i dddœ¤Ž}|                      |                     d¦  «        d¦  «         t          d¬¦  «        }|                       |d¬¦  «        |¦  «         |                       |d¬¦  «        |¦  «         |                       |d¬¦  «        |¦  «         |                       |d&i ddi¤Ž|¦  «         |                       |d&i ddi¤Ž|¦  «         t          d¬¦  «        }|                       |d¬¦  «        |¦  «         |                       |d&i ddi¤Ž|¦  «         t          d¬¦  «        }|                       |d¬¦  «        |¦  «         |                       |d¬¦  «        |¦  «         |                       |d&i ddi¤Ž|¦  «         |                       |d&i ddi¤Ž|¦  «         t          d¬¦  «        }|                       |d¬¦  «        |¦  «         |                       |d&i ddi¤Ž|¦  «         t          ddgd¬ ¦  «        }|                       t          |j        d¬!¦  «         |                       t          t          dgd"¬#¦  «         |                       t          t          dgd"¬$¦  «         d%S )'ztest basic option parsingc                  ó>   — t          di | ¤Ž                     ¦   «         S )Nr1   ©r   r]   )r$   s    r'   Úparsez/CryptContextTest.test_20_options.<locals>.parsež  s"   € ÝÐ'Ð' $Ð'Ð'×/Ò/Ñ1Ô1Ð1r)   r5   )Ú__Úx)Údefault__scheme__)Ú__option)Údefault____option)Ú__scheme__optioni0u  )Ú!category__scheme__option__invalidzadmin.context__schemesr-   úmd5_crypt,des_cryptr,   )r7   zadmin.context__defaultÚadminrC   )Úcontext__default)Údefault__context__defaultzcontext.defaultzdefault.context.default©Úadmin__context__defaultzadmin.context.default©r9   )Údefault__all__vary_roundszall.vary_roundszdefault.all.vary_rounds)Úadmin__all__vary_roundszadmin.all.vary_roundsrD   ÚP)rQ   )Úmd5_crypt__identÚxx)r7   Údes_crypt__salt)r7   Ú	all__saltNr1   )rs   rt   r   r™   r\   Údefault_schemeÚdictr    )rY   r¤   rc   rœ   s       r'   Útest_20_optionsz CryptContextTest.test_20_optionsœ  s-  € ð	2ð 	2ð 	2ð 	×Ò�)¥\°cÐÑ:Ô:Ð:Ø×Ò�)¥\ÀSÐÑIÔIÐIð 	×Ò�)¥\¸CÐÑ@Ô@Ð@Ø×Ò�)¥\ÀSÐÑIÔIÐIð 	×Ò�)¥\ÀCÐÑHÔHÐHð 	×Ò�)¥\Ø>Cð 	ñ 	Eô 	Eð 	Eð
 	ˆÔ�( Eð 	Dð 	DØ5°kÐBð	Dð 	Dð 	Dåð Eð EÐ(=Ø7BðDð Dð Eð Eˆà×Ò˜×+Ò+¨GÑ4Ô4°kÑBÔBÐBõ ˜kÐ*Ñ*Ô*ˆØ×Ò˜˜ {Ð3Ñ3Ô3°VÑ<Ô<Ð<Ø×Ò˜˜°Ð<Ñ<Ô<¸fÑEÔEÐEØ×Ò˜˜¸ÐEÑEÔEÀvÑNÔNÐNØ×Ò˜˜ÐAÐAÐ"3°KÐ!@ÐAÐAÀ6ÑJÔJÐJØ×Ò˜˜ÐIÐIÐ";¸KÐ!HÐIÐIÈ6ÑRÔRÐRõ ¨kÐ:Ñ:Ô:ˆØ×Ò˜˜°{ÐCÑCÔCÀVÑLÔLÐLØ×Ò˜˜ÐGÐGÐ"9¸+Ð!FÐGÐGÈÑPÔPÐPõ  sÐ+Ñ+Ô+ˆØ×Ò˜˜°Ð4Ñ4Ô4°fÑ=Ô=Ð=Ø×Ò˜˜¸Ð=Ñ=Ô=¸vÑFÔFÐFØ×Ò˜˜Ð9Ð9Ð"3°CÐ!8Ð9Ð9¸6ÑBÔBÐBØ×Ò˜˜ÐAÐAÐ";¸CÐ!@ÐAÐAÀ6ÑJÔJÐJõ ¨cÐ2Ñ2Ô2ˆØ×Ò˜˜°sÐ;Ñ;Ô;¸VÑDÔDÐDØ×Ò˜˜Ð?Ð?Ð"9¸#Ð!>Ð?Ð?ÀÑHÔHÐHõ ˜H kÐ2À#ÐFÑFÔFˆØ×Ò�( C¤H¸sÐÑCÔCÐCð 	×Ò�(¥L¸;¸-ØBFð 	ñ 	Hô 	Hð 	Hà×Ò�(¥L¸;¸-Ø<@ð 	ñ 	Bô 	Bð 	Bð 	Bð 	Br)   c                 ó„  — t          d¬¦  «        }|                      |                     ¦   «         d¦  «         t          ddg¬¦  «        }|                      |                     ¦   «         d¦  «         t          d¬¦  «        }|                      |                     ¦   «         d¦  «         t          t          j        t          j        g¬¦  «        }|                      |                     ¦   «         d¦  «         |                      t          t           t          j	        g¬¦  «          G d„ d	t          j	        ¦  «        }|                      t          t           |g¬¦  «          G d
„ dt          j	        ¦  «        }|                      t          t           ||g¬¦  «         |                      t          t           dg¬¦  «         dS )z%test 'schemes' context option parsingNr>   r1   r,   r-   )r,   r-   z des_crypt, md5_crypt, c                   ó   — e Zd ZdZdS )ú2CryptContextTest.test_21_schemes.<locals>.namelessN©Ú__name__Ú
__module__Ú__qualname__r3   r1   r)   r'   Únamelessr¿   ÿ  s   € € € € € ØˆDˆDˆDr)   rÄ   c                   ó   — e Zd ZdZdS )ú1CryptContextTest.test_21_schemes.<locals>.dummy_1Údummy_1NrÀ   r1   r)   r'   rÇ   rÆ     s   € € € € € ØˆDˆDˆDr)   rÇ   )Úadmin__context__schemes)r   r\   r7   r   r,   r-   rs   rt   ÚuhÚStaticHandlerrš   r™   )rY   r›   rÄ   rÇ   s       r'   Útest_21_schemesz CryptContextTest.test_21_schemesè  sÅ  € õ  $Ð'Ñ'Ô'ˆØ×Ò˜Ÿš™œ rÑ*Ô*Ð*õ  ;°Ð"<Ð=Ñ=Ô=ˆØ×Ò˜Ÿš™œÐ'AÑBÔBÐBõ Ð";Ð<Ñ<Ô<ˆØ×Ò˜Ÿš™œÐ'AÑBÔBÐBõ ¥4¤>µ4´>Ð"BÐCÑCÔCˆØ×Ò˜Ÿš™œÐ'AÑBÔBÐBð 	×Ò�)¥\½BÔ<LÐ;MÐÑNÔNÐNð	ð 	ð 	ð 	ð 	•rÔ'ñ 	ô 	ð 	à×Ò�*¥l¸X¸JÐÑGÔGÐGð	ð 	ð 	ð 	ð 	•bÔ&ñ 	ô 	ð 	à×Ò�(¥L¸7ÀGÐ:LÐÑMÔMÐMð 	×Ò�(¥LØ3>°-ð 	ñ 	Aô 	Að 	Að 	Að 	Ar)   c                 ó,  — dd„}t          dg¬¦  «        }|                     ddg¬¦  «         |                       ||¦  «        dg¦  «         t          dgddg¬¦  «        }|                       ||¦  «        dg¦  «         |                      t          t           t
          j        gddg¬¦  «         t          dg d	¢¬¦  «        }|                       ||¦  «        ddg¦  «         |                      t          t           dgdg¬
¦  «         |                      t          t           dgdg¬
¦  «         |                      t          t           ddgddg¬¦  «         |                      t          t           ddgdd¬¦  «         |                      t          t           ddgdd¬¦  «         |                      t          t           ddgdd¬¦  «         |                      t          t           ddgdd¬¦  «         t          ddgddg ¬¦  «         |                      t          t           d¬¦  «         t          dgddgdg¬¦  «        }|                       ||¦  «        dg¦  «         |                       ||d¦  «        dg¦  «         |                       ||d¦  «        dg¦  «         t          dgddgg ¬¦  «        }|                       ||¦  «        dg¦  «         |                       ||d¦  «        dg¦  «         |                       ||d¦  «        g ¦  «         dS )z(test 'deprecated' context option parsingNc                 óH   ‡ ‡— ˆˆ fd„‰                       ¦   «         D ¦   «         S )Nc                 óJ   •— g | ]}‰                      |‰¦  «        j        ¯|‘Œ S r1   ©ÚhandlerrL   )r2   r3   Úcategoryrc   s     €€r'   r4   zGCryptContextTest.test_22_deprecated.<locals>.getdep.<locals>.<listcomp>  s>   ø€ ð ?ð ?ð ?˜TØ—{’{ 4¨Ñ2Ô2Ô=ð?�Dð ?ð ?ð ?r)   r>   ©rc   rÑ   s   ``r'   Úgetdepz3CryptContextTest.test_22_deprecated.<locals>.getdep  s;   øø€ ð?ð ?ð ?ð ?ð ? S§[¢[¡]¤]ð ?ñ ?ô ?ð ?r)   r-   ©rL   r,   r>   )rL   r7   r¬   )r-   r,   rE   ©r7   rL   )r7   Úadmin__context__deprecated)r7   r8   rL   )r7   r8   rÖ   )r7   r±   rL   )r7   r±   rÖ   )r7   rL   r±   rÖ   é{   )rL   r7   rÖ   Úuserr­   r   )	r   r!   r\   rs   rt   r   r-   r™   rš   )rY   rÓ   r›   s      r'   Útest_22_deprecatedz#CryptContextTest.test_22_deprecated  sÖ  € ð	?ð 	?ð 	?ð 	?õ
  k ]Ð3Ñ3Ô3ˆØ
�	Š	˜;¨Ð4ˆ	Ñ5Ô5Ð5Ø×Ò˜˜ ™œ [ MÑ2Ô2Ð2õ  k ]¸[È+Ð<VÐWÑWÔWˆØ×Ò˜˜ ™œ k ]Ñ3Ô3Ð3ð 	×Ò�)¥\½t¼~Ð>NØ#.°Ð"<ð 	ñ 	>ô 	>ð 	>õ Ð%:ÐDnÐDnÐDnÐoÑoÔoˆØ×Ò˜˜ ™œ k°;Ð%?Ñ@Ô@Ð@ð 	×Ò�(¥L¸;¸-Ø>I¸]ð 	ñ 	Lô 	Lð 	Lð 	×Ò�*¥lØ#. -Ø&1 ]ð 	ñ 	4ô 	4ð 	4ð 	×Ò�*¥lØ#.°Ð"<Ø6AÀ;Ð5Oð 	ñ 	Qô 	Qð 	Qð 	×Ò�*¥lØ#.°Ð"<Ø"-Ø%0ð 	ñ 	2ô 	2ð 	2ð 	×Ò�*¥lØ#.°Ð"<Ø"-Ø5@ð 	ñ 	Bô 	Bð 	Bð 	×Ò�*¥lØ#.°Ð"<Ø2=Ø%0ð 	ñ 	2ô 	2ð 	2ð 	×Ò�*¥lØ#.°Ð"<Ø2=Ø5@ð 	ñ 	Bô 	Bð 	Bõ 	Ø#.°Ð"<Ø%0Ø2=Ø57ð		9ñ 	9ô 	9ð 	9ð 	×Ò�)¥\¸cÐÑBÔBÐBõ  k ]Ø#.°Ð"<Ø6A°]ðñ ô ˆð 	×Ò˜˜ ™œ k ]Ñ3Ô3Ð3Ø×Ò˜˜  FÑ+Ô+¨k¨]Ñ;Ô;Ð;Ø×Ò˜˜  GÑ,Ô,¨{¨mÑ<Ô<Ð<õ  k ]Ø#.°Ð"<Ø57ðñ ô ˆð 	×Ò˜˜ ™œ k ]Ñ3Ô3Ð3Ø×Ò˜˜  FÑ+Ô+¨k¨]Ñ;Ô;Ð;Ø×Ò˜˜  GÑ,Ô,¨bÑ1Ô1Ð1Ð1Ð1r)   c                 ó&  — |                       t          d¬¦  «                             ¦   «         t          d¬¦  «        ¦  «         t          dddg¬¦  «        }|                       |                     ¦   «         d¦  «         t          t
          j        ddg¬¦  «        }|                       |                     ¦   «         d¦  «         t          ddg¬¦  «        }|                       |                     ¦   «         d¦  «         |                     d¬¦  «         |                       |                     ¦   «         d¦  «         |                      t          t          dgd¬¦  «         |                      t          t          d¬¦  «         t          dddgd¬	¦  «        }|                       |                     ¦   «         d¦  «         |                       |                     d
¦  «        d¦  «         |                       |                     d¦  «        d¦  «         dS )z%test 'default' context option parsingr-   rC   r,   )r8   r7   r>   rÔ   )r7   r8   é   )r8   r7   r±   rØ   r­   N)r\   r   r]   r»   rº   r   r-   r!   rs   r™   rt   rb   s     r'   Útest_23_defaultz CryptContextTest.test_23_defaulth  s  € ð 	×Ò�¨kÐ:Ñ:Ô:×BÒBÑDÔDÝ kÐ2Ñ2Ô2ñ	4ô 	4ð 	4õ  ;¸ÀkÐ8RÐSÑSÔSˆØ×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;õ ¥4¤>¸KÈÐ;UÐVÑVÔVˆØ×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;õ  K°Ð#=Ð>Ñ>Ô>ˆØ×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;Ø�
Š
˜kˆ
Ñ*Ô*Ð*Ø×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;ð 	×Ò�(¥L¸;¸-Ø:Eð 	ñ 	Gô 	Gð 	Gð 	×Ò�)¥\¸1ÐÑ=Ô=Ð=õ  ;Ø$/°Ð#=Ø3>ð@ñ @ô @ˆð 	×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;Ø×Ò˜×+Ò+¨FÑ3Ô3°[ÑAÔAÐAØ×Ò˜×+Ò+¨GÑ4Ô4°kÑBÔBÐBÐBÐBr)   c                 óB  — d„ }|                        |d¦  «        d¦  «         |                        |d¦  «        d¦  «         |                        |d¦  «        d¦  «         |                        |d¦  «        d¦  «         |                        |d¦  «        d¦  «         dS )z&test 'vary_rounds' hash option parsingc                 óR   — t          | ¬¦  «                             ¦   «         d         S )Nr²   r9   r£   )Úvs    r'   r¤   z3CryptContextTest.test_24_vary_rounds.<locals>.parse�  s%   € Ý°Ð3Ñ3Ô3×;Ò;Ñ=Ô=Ð>PÔQÐQr)   r5   z0.1z10%iè  Ú1000N)r\   )rY   r¤   s     r'   Útest_24_vary_roundsz$CryptContextTest.test_24_vary_rounds�  s¶   € ð	Rð 	Rð 	Rð 	×Ò˜˜˜s™œ SÑ)Ô)Ð)Ø×Ò˜˜˜u™œ sÑ+Ô+Ð+ð 	×Ò˜˜˜u™œ sÑ+Ô+Ð+ð 	×Ò˜˜˜t™œ dÑ+Ô+Ð+Ø×Ò˜˜˜v™œ¨Ñ-Ô-Ð-Ð-Ð-r)   Nc                 óP   — |                       t          ||¦  «        |¬¦  «         d S )N)Úmsg)Ú
assertTruer   )rY   rÐ   Úbaserã   s       r'   ÚassertHandlerDerivedFromz)CryptContextTest.assertHandlerDerivedFrom¡  s)   € Ø�ŠÕ,¨W°dÑ;Ô;ÀˆÑEÔEÐEÐEÐEr)   c                 óì  — t          ¦   «         }|                      |                     ¦   «         d¦  «         |                      |                     d¬¦  «        d¦  «         t          di | j        ¤Ž}|                      |                     ¦   «         t	          | j        ¦  «        ¦  «         |                      |                     dd¬¦  «        t	          | j        ¦  «        ¦  «         t          |                     d¬¦  «        | j        ¦  «        D ](\  }}|                      t          ||¦  «        ¦  «         Œ)t          di | j
        ¤Ž}|                      |                     ¦   «         d¦  «         dS )ztest schemes() methodr1   T©Úresolve©ré   ÚunconfiguredN)r   r\   r7   r^   ÚtupleÚsample_1_schemesÚsample_1_handlersÚziprä   r   r`   )rY   rc   rœ   Úcorrects       r'   Útest_30_schemesz CryptContextTest.test_30_schemes¤  sM  € õ
 ‰nŒnˆØ×Ò˜Ÿš™œ¨Ñ+Ô+Ð+Ø×Ò˜Ÿš¨T˜Ñ2Ô2°BÑ7Ô7Ð7õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš™œ­¨dÔ.CÑ(DÔ(DÑEÔEÐEØ×Ò˜Ÿš¨TÀ˜ÑEÔEÅuÈTÔMcÑGdÔGdÑeÔeÐeÝ" 3§;¢;°t ;Ñ#<Ô#<¸dÔ>TÑUÔUð 	Cð 	C‰OˆF�GØ�OŠOÕ0°¸ÑAÔAÑBÔBÐBÐBõ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš™œ¨Ñ+Ô+Ð+Ð+Ð+r)   c                 ó‚  — t          ¦   «         }|                      t          |j        ¦  «         t          di | j        ¤Ž}|                      |                     ¦   «         d¦  «         |                      |                     dd¬¦  «        t          j        ¦  «         |                      |                     d¬¦  «        t          j        ¦  «         t          di | j	        ¤Ž}|                      t          |j        ¦  «         t          | j
        ¬¦  «        }|                      |                     ¦   «         d¦  «         dS )	ztest default_scheme() methodr-   Trê   rè   r>   r,   Nr1   )r   rs   r™   rº   r^   r\   r   r-   ræ   r`   rí   rb   s     r'   Útest_31_default_schemez'CryptContextTest.test_31_default_scheme¸  s"  € õ
 ‰nŒnˆØ×Ò�( CÔ$6Ñ7Ô7Ð7õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;Ø×Ò˜×+Ò+°DÀtÐ+ÑLÔLÍdÌnÑ]Ô]Ð]Ø×%Ò% c×&8Ò&8ÀÐ&8Ñ&FÔ&FÍÌÑWÔWÐWõ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò�( CÔ$6Ñ7Ô7Ð7õ  4Ô#8Ð9Ñ9Ô9ˆØ×Ò˜×+Ò+Ñ-Ô-¨{Ñ;Ô;Ð;Ð;Ð;r)   c                 óP  — t          ¦   «         }|                      t          |j        ¦  «         |                      t          |j        d¦  «         t          di | j        ¤Ž}|                      |                     d¬¦  «        t          j        ¦  «         |                      |                     ¦   «         t          j        ¦  «         |                      |                     dd¬¦  «        t          j	        ¦  «         |                      |                     d¦  «        t          j	        ¦  «         |                      t          |j        d¦  «         t          dd¬¦  «        }|                      |                     d¬¦  «        t          j
        ¦  «         |                      |                     ¦   «         t          j
        ¦  «         |                      |                     dd¬	¦  «        t          j
        ¦  «         |                      |                     d¬
¦  «        t          j
        ¦  «         |                      |                     dd¬	¦  «        t          j        ¦  «         |                      |                     d¬
¦  «        t          j
        ¦  «         t          r†|                      |                     t          d¦  «        d¬	¦  «        t          j
        ¦  «         |                      |                     t          d¦  «        d¬	¦  «        t          j        ¦  «         dS dS )ztest handler() methodr-   T)rë   r,   Úmysql323úsha256_crypt,md5_cryptr°   Ústaff)rÑ   rë   ©rÑ   r­   Nr1   )r   rs   r™   rÐ   r^   r\   r   r-   ræ   r,   rE   r   r   rb   s     r'   Útest_32_handlerz CryptContextTest.test_32_handlerÐ  s€  € õ ‰nŒnˆØ×Ò�( C¤KÑ0Ô0Ð0Ø×Ò�( C¤K°Ñ=Ô=Ð=õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš°$˜Ñ7Ô7½¼ÑHÔHÐHØ×%Ò% c§k¢k¡m¤mµT´^ÑDÔDÐDð 	×Ò˜Ÿš [¸t˜ÑDÔDÅdÄnÑUÔUÐUØ×%Ò% c§k¢k°+Ñ&>Ô&>ÅÄÑOÔOÐOð 	×Ò�( C¤K°Ñ<Ô<Ð<õ Ð3È[ÐYÑYÔYˆØ×Ò˜Ÿš°$˜Ñ7Ô7½Ô9JÑKÔKÐKØ×%Ò% c§k¢k¡m¤mµTÔ5FÑGÔGÐGà×Ò˜Ÿš¨gÀD˜ÑIÔIÍ4ÔK\Ñ]Ô]Ð]Ø×%Ò% c§k¢k¸7 kÑ&CÔ&CÅTÔEVÑWÔWÐWà×Ò˜Ÿš¨gÀD˜ÑIÔIÍ4Ì>ÑZÔZÐZØ×%Ò% c§k¢k¸7 kÑ&CÔ&CÅTÔEVÑWÔWÐWõ ð 	bØ×Ò˜SŸ[š[µ!°G±*´*È4˜[ÑPÔPÕRVÔRcÑdÔdÐdØ×Ò˜SŸ[š[µ!°G±*´*È4˜[ÑPÔPÕRVÔR`ÑaÔaÐaÐaÐað	bð 	br)   c                 óæ  — dd„}t          dg d¢ddgddd	dd
gddd¬¦
  «
        }|                      |j        j        d¦  «         |                       ||d¦  «        t	          ddd	¬¦  «        ¦  «         |                       ||dd¦  «        t	          ddd	¬¦  «        ¦  «         |                       ||dd¦  «        t	          dd¬¦  «        ¦  «         |                       ||d¦  «        t	          dd¬¦  «        ¦  «         |                       ||dd¦  «        t	          dd¬¦  «        ¦  «         |                       ||dd¦  «        t	          dd¬¦  «        ¦  «         |                       ||d
¦  «        t	          d¬¦  «        ¦  «         |                       ||d
d¦  «        t	          d¬¦  «        ¦  «         |                       ||d
d¦  «        t	          dd¬¦  «        ¦  «         dS )z*test internal _get_record_options() methodNc                 óD   — | j                              ||¦  «        d         S )Nr   )Ú_configÚ_get_record_options_with_flag)rc   ÚschemerÑ   s      r'   Úoptionsz1CryptContextTest.test_33_options.<locals>.options÷  s   € Ø”;×<Ò<¸VÀXÑNÔNÈqÔQÐQr)   T)r/   r,   r.   r/   r,   r5   çš™™™™™É?i N  r.   çš™™™™™©?g333333Ó?r6   )
Útruncate_errorr7   rL   r9   rM   r<   rÖ   r´   Úadmin__bsdi_crypt__vary_roundsÚadmin__sha512_crypt__max_rounds)r­   )rL   Úvary_roundsÚ
max_roundsrØ   r­   )r  r  )rL   r  )r  )r  rL   r   )r   r\   rü   Ú
categoriesr»   )rY   rÿ   r‹   s      r'   Útest_33_optionsz CryptContextTest.test_33_optionsô  sÎ  € ð	Rð 	Rð 	Rð 	Rõ
 ØØBÐBÐBØ(¨+Ð6Ø"Ø$'Ø',Ø+6¸Ð)FØ&*Ø+.Ø.3ð
ñ 
ô 
ˆð 	×Ò˜œÔ/°Ñ<Ô<Ð<ð 	×Ò˜˜  nÑ5Ô5µtØØØð8
ñ 8
ô 8
ñ 	ô 	ð 	ð 	×Ò˜˜  n°fÑ=Ô=½tØØØð@
ñ @
ô @
ñ 	ô 	ð 	ð 	×Ò˜˜  n°gÑ>Ô>ÅàØðA
ñ A
ô A
ñ 	ô 	ð 	ð 	×Ò˜˜  kÑ2Ô2µDØØð5
ñ 5
ô 5
ñ 	ô 	ð 	ð
 	×Ò˜˜  k°6Ñ:Ô:½DØØð=
ñ =
ô =
ñ 	ô 	ð 	ð
 	×Ò˜˜  k°7Ñ;Ô;½TØØð>
ñ >
ô >
ñ 	ô 	ð 	ð 	×Ò˜˜  lÑ3Ô3µTØð6
ñ 6
ô 6
ñ 	ô 	ð 	ð 	×Ò˜˜  l°FÑ;Ô;½TØð>
ñ >
ô >
ñ 	ô 	ð 	ð 	×Ò˜˜  l°GÑ<Ô<½dØØð?
ñ ?
ô ?
ñ 	ô 	ð 	ð 	ð 	r)   c                 óà   — t          di | j        ¤Ž}|                      |                     ¦   «         | j        ¦  «         |                      |                     d¬¦  «        | j        ¦  «         dS )ztest to_dict() methodTrè   Nr1   )r   r^   r\   r]   r_   rb   s     r'   Útest_34_to_dictz CryptContextTest.test_34_to_dictC  sh   € õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ×Ò˜Ÿš™œ¨Ô(:Ñ;Ô;Ð;Ø×Ò˜Ÿš¨T˜Ñ2Ô2°DÔ4OÑPÔPÐPÐPÐPr)   c                 ó  — t          d
i | j        ¤Ž}|                     ¦   «         }t          s|                      || j        ¦  «         t          j        |¦  «        }|                      |                     ¦   «         | j        ¦  «         |                     d¬¦  «        }|                      ||                     dd¦  «        ¦  «         ddl	m
} t          |dg¦  «        }|                     ¦   «         }|                      |d¦  «         d	S )ztest to_string() methodzpassword-securityrl   r@   z[password-security]r   )ÚUnsaltedHashr-   zM# NOTE: the 'unsalted_test_hash' handler\(s\) are not registered with PasslibNr1   )r   r^   r˜   r   r\   rn   rm   r]   ÚreplaceÚ!passlib.tests.test_utils_handlersr  rŽ   )rY   rc   ÚdumpÚctx2Úotherr  Úctx3s          r'   Útest_35_to_stringz"CryptContextTest.test_35_to_stringJ  s  € õ Ð0Ð0˜TÔ/Ð0Ð0ˆØ�}Š}‰Œˆõ ð 	:Ø×Ò˜T 4Ô#8Ñ9Ô9Ð9õ Ô'¨Ñ-Ô-ˆØ×Ò˜Ÿš™œ¨Ô);Ñ<Ô<Ð<ð —’Ð&9�Ñ:Ô:ˆØ×Ò˜ §¢¨[Ð9NÑ OÔ OÑPÔPÐPð 	CÐBÐBÐBÐBÐBÝ˜\¨;Ð7Ñ8Ô8ˆØ�~Š~ÑÔˆØ×Ò˜ð  Cñ 	Dô 	Dð 	Dð 	Dð 	Dr)   rþ   rÛ   r1   c                 óŽ  — t           j        t           j        t           j        g}t	          |d¬¦  «        }|D ]õ}|                      d|j        ¬¦  «        }|                      |                     |¦  «        |j        ¦  «         |                      |                     |dd¬¦  «        |¦  «         |                      |                     |d¬¦  «        |¦  «         |  	                    | 
                    d|¦  «        ¦  «         |                      | 
                    d|¦  «        ¦  «         Œö|                      d¦  «        }|                      |                     |¦  «        d	¦  «         |                     d
|                     ¦   «         ¦  «        }|                      |                     |¦  «        d	¦  «         |                     d
|                     ¦   «         d	¬¦  «        }|                      |                     |¦  «        d	¦  «         |                      t          |j        d
|                     ¦   «         d¬¦  «         dS )z-test basic hash/identify/verify functionalityé   ©r;   Útest©rþ   Trê   rè   Únotestr-   Úsecretr,   N)r   r-   r,   r.   r   r3   r\   Úidentifyræ   rä   ÚverifyÚassertFalseÚgenhashÚ	genconfigrs   rš   )rY   Úhandlersr›   ÚcryptÚhs        r'   Útest_40_basiczCryptContextTest.test_40_basicq  sà  € å”N¥D¤NµD´OÐDˆÝ˜(¸qÐAÑAÔAˆð ð 	5ð 	5ˆEØ—’˜ u¤z�Ñ2Ô2ˆAØ×Ò˜RŸ[š[¨™^œ^¨U¬ZÑ8Ô8Ð8Ø×Ò˜RŸ[š[¨°DÀt˜[ÑLÔLÈeÑTÔTÐTØ×)Ò)¨"¯+ª+°aÀ¨+Ñ*FÔ*FÈÑNÔNÐNØ�OŠO˜BŸIšI f¨aÑ0Ô0Ñ1Ô1Ð1Ø×Ò˜RŸYšY x°Ñ3Ô3Ñ4Ô4Ð4Ð4ð �GŠG�F‰OŒOˆØ×Ò˜Ÿš Q™œ¨Ñ5Ô5Ð5ð �JŠJ�x §¢¡¤Ñ0Ô0ˆØ×Ò˜Ÿš Q™œ¨Ñ5Ô5Ð5à�JŠJ�x §¢¡¤¸ˆJÑDÔDˆØ×Ò˜Ÿš Q™œ¨Ñ5Ô5Ð5à×Ò�* b¤j°(¸B¿LºL¹N¼NÐS^ÐÑ_Ô_Ð_Ð_Ð_r)   c                 óŽ  — t          ddgddd¬¦  «        }|                      |                     ¦   «                              d¦  «        ¦  «         |                      |                     d¬¦  «                             d	¦  «        ¦  «         |                      |                     dd
¬¦  «                             d¦  «        ¦  «         |                      |                     dd¬¦  «                             d	¦  «        ¦  «         |                      |                     dddd¬¦  «        d¦  «         t
          r¨|                     d¬¦  «        }|                      |                     t          d
¦  «        ¬¦  «                             d¦  «        ¦  «         |                      |                     t          d¦  «        ¬¦  «                             d	¦  «        ¦  «         |                      t          t          ¦   «         j        ¦  «         |                      t          t          ¦   «         j        d¬¦  «         |                      t          |j        d¬¦  «         |                      t          |j        dd¬¦  «         |                      t          |j        d¬¦  «         |                      t          |j        d¬¦  «         dS )ztest genconfig() methodr-   rD   rJ   rK   rµ   )r7   rQ   rR   Úadmin__phpass__identz$1$r  z$H$5r­   )rþ   rÑ   z$P$5r÷   ú........é   )rþ   ÚsaltÚroundsÚidentz"$P$6........22zGEuacuPOqEpYPDeR0R/rC   rø   ÚfakerÛ   N)r   rä   r  Ú
startswithr\   r   r    r   rs   r™   rt   ©rY   r›   Úc2s      r'   Útest_41_genconfigz"CryptContextTest.test_41_genconfigŒ  s_  € å ;°Ð"9Ø(+Ø12Ø/2ðñ ô ˆð 	�Š˜Ÿš™œ×1Ò1°%Ñ8Ô8Ñ9Ô9Ð9ð 	�Š˜Ÿš¨H˜Ñ5Ô5×@Ò@ÀÑHÔHÑIÔIÐIð 	�Š˜Ÿš¨H¸w˜ÑGÔG×RÒRÐSYÑZÔZÑ[Ô[Ð[Ø�Š˜Ÿš¨H¸w˜ÑGÔG×RÒRÐSYÑZÔZÑ[Ô[Ð[ð 	×ÒØ�LŠL ¨u¸QÀcˆLÑJÔJØ0ñ	ô 	ð 	õ ð 	RØ—’ �Ñ*Ô*ˆBØ�OŠO˜BŸLšLµ!°G±*´*˜LÑ=Ô=×HÒHÈÑPÔPÑQÔQÐQØ�OŠO˜BŸLšLµ!°G±*´*˜LÑ=Ô=×HÒHÈÑPÔPÑQÔQÐQð 	×Ò�(¥L¡N¤NÔ$<Ñ=Ô=Ð=Ø×Ò�(¥L¡N¤NÔ$<À[ÐÑQÔQÐQð 	×Ò�( B¤L¸ÐÑ@Ô@Ð@Ø×Ò�) R¤\¸!ÀgÐÑNÔNÐNØ×Ò�) R¤\¸!ÐÑ<Ô<Ð<ð 	×Ò�) R¤\¸AÐÑ>Ô>Ð>Ð>Ð>r)   c                 ó®  — t          dg¦  «        }|                     d¦  «        }| j        D ] \  }} | j        t          |j        ||fi |¤Ž Œ!t          dg¦  «        }| j        D ]#\  }}|€Œ | j        t          |j        d|fi |¤Ž Œ$t          dg¦  «        }|                      t          |j        dd¦  «         |                      t          t          ¦   «         j        dd¦  «         |                      t          |j        d|d¬¦  «         |                      t          |j        d|d	¬¦  «         |                      t          |j        d|d	¬
¦  «         dS )ztest genhash() methodr,   ÚstubNr  rõ   r   r+  r  rÛ   rø   )r   r   Únonstring_vectorsrs   rt   r  r™   r  )rY   r›   r   r  r$   Úconfigs         r'   Útest_42_genhashz CryptContextTest.test_42_genhash½  sv  € õ ˜;˜-Ñ(Ô(ˆØ�wŠw�v‰ŒˆØ Ô2ð 	Kð 	K‰LˆF�DØˆDÔ�i¨¬°V¸TÐJÐJÀTÐJÐJÐJÐJõ ˜;˜-Ñ(Ô(ˆØ Ô2ð 	Oð 	O‰LˆF�DØˆ|ð ØˆDÔ�i¨¬°X¸vÐNÐNÈÐNÐNÐNÐNõ ˜:˜,Ñ'Ô'ˆØ×Ò�) R¤Z°¸Ñ>Ô>Ð>ð 	×Ò�(¥L¡N¤NÔ$:¸HÀfÑMÔMÐMð 	×Ò�( B¤J°¸$ÀvÐÑNÔNÐNØ×Ò�) R¤Z°¸4ÈÐÑJÔJÐJð 	×Ò�) R¤\°8¸TÈAÐÑNÔNÐNÐNÐNr)   c                 óŽ  — t          di | j        ¤Ž}|                     d¦  «        }|                       |j        d¦  «        ¦  «         |                      |                     d|¦  «        ¦  «         |                      |                     d|¦  «        ¦  «         |                      t          |j	        d¬¦  «         t          dg¦  «        }| j
        D ]\  }} | j        t          |j        |fi |¤Ž Œ |                      t          t          ¦   «         j        d¦  «         |                      t          |j        dd¬	¦  «         d
S )ztest hash() methodÚpasswordz$5$rounds=3000$Ú	passwordxi   ©rP   r,   r  rÛ   rø   Nr1   )r   Úsample_4_dictr   rä   r,  r  r  rs   rš   r    r2  rt   r™   )rY   r›   r   r  r$   s        r'   Útest_43_hashzCryptContextTest.test_43_hashá  sI  € õ Ð/Ð/˜DÔ.Ð/Ð/ˆØ�wŠw�zÑ"Ô"ˆØ�Š˜˜œÐ(9Ñ:Ô:Ñ;Ô;Ð;Ø�Š˜Ÿ	š	 *¨dÑ3Ô3Ñ4Ô4Ð4Ø×Ò˜Ÿš ;°Ñ5Ô5Ñ6Ô6Ð6ð 	×Ò�* b¤gØ7;ð 	ñ 	=ô 	=ð 	=õ ˜;˜-Ñ(Ô(ˆØ Ô2ð 	Bð 	B‰LˆF�DØˆDÔ�i¨¬°&ÐAÐA¸DÐAÐAÐAÐAð 	×Ò�(¥L¡N¤NÔ$7¸ÑBÔBÐBð 	×Ò�) R¤W¨hÀÐÑCÔCÐCÐCÐCr)   c           	      ó†  — t          di | j        ¤Ž}|                      dg¦  «        5  |                      |                     ddd¬¦  «        d¦  «         ddd¦  «         n# 1 swxY w Y   |                      dg¦  «        5  |                      |                     dddd¬	¦  «        d
¦  «         ddd¦  «         n# 1 swxY w Y   |                      dg¦  «        5  |                      |                     ddd¬¦  «        d¦  «         ddd¦  «         n# 1 swxY w Y   |                      dg¦  «        5  |                      |                     ddd¬¦  «        d¦  «         ddd¦  «         n# 1 swxY w Y   |                      t          |j        dd¬¦  «         |                      t          |j        dd¬¦  «         dS )z;test hash() method -- legacy 'scheme' and settings keywordsú"passing settings to.*is deprecatedr6  rD   r&  )rþ   r(  z"$H$5........De04R5Egz0aq8Tf.1eVhY/Nrµ   )rþ   r(  r*  z"$P$5........De04R5Egz0aq8Tf.1eVhY/éÏ  Únacl©r)  r(  z?$5$rounds=1999$nacl$nmfwJIxqj0csloAAvSER0B8LU0ERCAbhmMug4Twl609éÑ  z?$5$rounds=2001$nacl$8PdeoPL4aXQnJ0woHhqgIw/efyfCKC2WHneOpnvF.31r  r+  r  rÛ   r1   )r   r9  ÚassertWarningListr\   r   rs   r™   rt   )rY   Úuse_16_legacyr›   s      r'   Útest_43_hash_legacyz$CryptContextTest.test_43_hash_legacyý  sÜ  € åÐ/Ð/˜DÔ.Ð/Ð/ˆð  ×#Ò#Ð%IÐ$JÑKÔKð 	ð 	Ø×ÒØ—’˜
¨8¸%�Ñ@Ô@Ø4ñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
 ×#Ò#Ð%IÐ$JÑKÔKð 	ð 	Ø×ÒØ—’˜
¨8¸%Às�ÑKÔKØ4ñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×#Ò#Ð%IÐ$JÑKÔKð 	ð 	Ø×ÒØ—’˜
¨4°f�Ñ=Ô=ØQñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×#Ò#Ð%IÐ$JÑKÔKð 	ð 	Ø×ÒØ—’˜
¨4°f�Ñ=Ô=ØQñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò�( B¤G¨X¸fÐÑEÔEÐEØ×Ò�) R¤W¨h¸qÐÑAÔAÐAÐAÐAsG   ¨-A!Á!A%Á(A%Â.B<Â<C ÃC Ã-DÄDÄDÄ7-E0Å0E4Å7E4c                 ó0  — g d¢}t          |d¬¦  «        }|                      |                     d¦  «        d¦  «         |                      t          |j        dd¬¦  «         t          dg¦  «        }| j        D ]\  }} | j        t          |j        |fi |¤Ž Œ t          ¦   «         }|                      |                     d	¦  «        d¦  «         |                      t          |j        d	d¬¦  «         |                      t          |j        dd
¬¦  «         dS )ztest identify() border cases©r-   r,   r.   r  r  z$9$232323123$1287319827NT)Úrequiredr,   r   rÛ   rø   )	r   r\   r  rs   rš   r2  rt   ÚassertIsr™   )rY   r   r›   r   r$   s        r'   Útest_44_identifyz!CryptContextTest.test_44_identify.  s#  € à;Ð;Ð;ˆÝ˜(¸qÐAÑAÔAˆð 	×Ò˜ŸšÐ%>Ñ?Ô?ÀÑFÔFÐFØ×Ò�* b¤kÐ3LÐW[ÐÑ\Ô\Ð\õ ˜;˜-Ñ(Ô(ˆØÔ0ð 	Dð 	D‰JˆD�$ØˆDÔ�i¨¬°dÐCÐC¸dÐCÐCÐCÐCõ ‰^Œ^ˆØ�Š�b—k’k &Ñ)Ô)¨4Ñ0Ô0Ð0Ø×Ò�( B¤K°À$ÐÑGÔGÐGð 	×Ò�) R¤[°$ÀÐÑCÔCÐCÐCÐCr)   c                 óè  — g d¢}t          |d¬¦  «        }t          j                             d¦  «        }|                      |                     d|¦  «        ¦  «         |                      |                     d|¦  «         ¦  «         |                      |                     d|d¬¦  «        ¦  «         |                      |                     d|d¬¦  «         ¦  «         |                      t          |j        d|d¬¦  «         |                      t          |j        d	d
¦  «         t          dg¦  «        }|                     d	¦  «        x}}| j        D ] \  }} | j        t          |j        ||fi |¤Ž Œ!|  	                    |                     |d¦  «        ¦  «         t          dg¦  «        }| j        D ]#\  }}|€Œ | j        t          |j        d|fi |¤Ž Œ$|                      t          t          ¦   «         j        dd¦  «         |                      t          |j        d|d¬¦  «         |                      t          |j        d|d¬¦  «         |                      t          |j        d|d¬¦  «         dS )ztest verify() scheme kwdrE  r  r  r  r  r-   r  r.   r1  z$6$232323123$1287319827r,   Nr  r   r+  rÛ   rø   )r   r   r-   rä   r  rs   rš   r2  rt   r  r™   )rY   r   r›   r"  Úrefhashr  r$   s          r'   Útest_45_verifyzCryptContextTest.test_45_verifyH  sv  € à;Ð;Ð;ˆÝ˜(¸qÐAÑAÔAˆåŒN×Ò Ñ'Ô'ˆð 	�Š˜Ÿ	š	 &¨!Ñ,Ô,Ñ-Ô-Ð-Ø�Š˜BŸIšI h°Ñ2Ô2Ð2Ñ3Ô3Ð3ð 	�Š˜Ÿ	š	 &¨!°K˜	Ñ@Ô@ÑAÔAÐAØ�Š˜BŸIšI h°¸+˜IÑFÔFÐFÑGÔGÐGð 	×Ò�* b¤i°¸À<ÐÑPÔPÐPð 	×Ò�* b¤i°Ð9RÑSÔSÐSõ ˜;˜-Ñ(Ô(ˆØ—g’g˜f‘o”oÐ%ˆˆGØ Ô2ð 	Gð 	G‰LˆF�DØˆDÔ�i¨¬°F¸AÐFÐFÀÐFÐFÐFÐFð 	×Ò˜Ÿš 6¨4Ñ0Ô0Ñ1Ô1Ð1õ ˜;˜-Ñ(Ô(ˆØÔ-ð 	Ið 	I‰GˆAˆtØˆyØØˆDÔ�i¨¬°H¸aÐHÐHÀ4ÐHÐHÐHÐHð 	×Ò�(¥L¡N¤NÔ$9¸8ÀVÑLÔLÐLð 	×Ò�( B¤I¨x¸ÈÐÑPÔPÐPØ×Ò�) R¤Y°¸'È!ÐÑLÔLÐLð 	×Ò�) R¤Y°¸'ÈAÐÑNÔNÐNÐNÐNr)   c                 óÖ  ‡— t          di | j        ¤Ž}|                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         g Š G ˆfd„dt
          j        ¦  «        }t          |g¦  «        }|                     d	¦  «        x}}|                      |                     |¦  «        ¦  «         |                      ‰|d
fg¦  «         ‰d
d
…= |                      |                     |d¬¦  «        ¦  «         |                      ‰|dfg¦  «         ‰d
d
…= |                      |                     |d¬¦  «        ¦  «         |                      ‰|dfg¦  «         ‰d
d
…= t          dg¦  «        }| j	        D ]\  }} | j
        t          |j        |fi |¤Ž Œ |  
                    t          t          ¦   «         j        d¦  «         |  
                    t          |j        |d¬¦  «         |  
                    t          |j        |d¬¦  «         |  
                    t          |j        |d¬¦  «         d
S )ztest needs_update() methodÚ9XXD4trGYeGJAz"$1$J8HC2RCr$HcmM.7NxB2weSvlw2FgzU0zK$5$rounds=1999$jD81UCoo.zI.UETs$Y7qSTQ6mTiU9qZB4fRr43wRgQq4V.5AAf7F97Pzxey/zK$5$rounds=2000$228SSRje04cnNCaQ$YGV4RYu.5sNiBvorQDlO0WWQjyJVGKBcJXz3OtyQ2u8zK$5$rounds=3000$fS9iazEwTKi7QPW4$VasgBC8FqlOvD7x2HhABaMXCTh9jwHclPA9j5YQdns.zK$5$rounds=3001$QlFHHifXvpFX4PLs$/0ekt7lSs/lOikSerQ0M/1porEHxYq7W/2hdFpxA3fAc                   ó:   •— e Zd ZdZdZedˆ fd„	¦   «         Zd„ ZdS )ú4CryptContextTest.test_46_needs_update.<locals>.dummyÚdummyú@Nc                 ó>   •— ‰                      ||f¦  «         |dk    S )NÚnu)Úappend)Úclsr   r  Úcheck_states      €r'   Úneeds_updatezACryptContextTest.test_46_needs_update.<locals>.dummy.needs_update“  s%   ø€ à×"Ò" D¨& >Ñ2Ô2Ð2Ø ’~Ð%r)   c                 ó¶   — ddl m} t          |t          ¦  «        r|                     d¦  «        }t           ||¦  «                             ¦   «         ¦  «        S )Nr   )Úmd5rf   )ÚhashlibrY  Ú
isinstancer   rp   r   Ú	hexdigest)rY   r  rY  s      r'   Ú_calc_checksumzCCryptContextTest.test_46_needs_update.<locals>.dummy._calc_checksum˜  sY   € Ø'Ð'Ð'Ð'Ð'Ð'Ý˜f¥gÑ.Ô.ð 4Ø#Ÿ]š]¨7Ñ3Ô3�FÝ$ S S¨¡[¤[×%:Ò%:Ñ%<Ô%<Ñ=Ô=Ð=r)   r   )rÁ   rÂ   rÃ   r3   Ú_hash_prefixÚclassmethodrW  r]  )rV  s   €r'   rP  rO  �  sV   ø€ € € € € ØˆDØˆLàð&ð &ð &ð &ð &ñ Œ[ð&ð>ð >ð >ð >ð >r)   rP  r  NÚbob)r  rS  r,   r   r+  r  rÛ   rø   r1   )r   r9  rä   rW  r  rÉ   rÊ   r   r\   r2  rs   rt   r™   )rY   r›   rP  rc   r   rJ  r$   rV  s          @r'   Útest_46_needs_updatez%CryptContextTest.test_46_needs_update{  sÿ  ø€ åÐ/Ð/˜DÔ.Ð/Ð/ˆð 	�Š˜Ÿš¨Ñ8Ô8Ñ9Ô9Ð9Ø×Ò˜ŸšÐ)MÑNÔNÑOÔOÐOð 	�Š˜ŸšÐ(uÑvÔvÑwÔwÐwØ×Ò˜ŸšÐ)vÑwÔwÑxÔxÐxð 	×Ò˜ŸšÐ)vÑwÔwÑxÔxÐxØ�Š˜ŸšÐ(uÑvÔvÑwÔwÐwð
 ˆð	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>•BÔ$ñ 	>ô 	>ð 	>õ  ˜E˜7Ñ#Ô#ˆØŸš FÑ+Ô+Ð+ˆˆwØ×Ò˜×)Ò)¨$Ñ/Ô/Ñ0Ô0Ð0Ø×Ò˜¨¨T { mÑ4Ô4Ð4Ø˜˜˜ˆNð 	×Ò˜×)Ò)¨$°uÐ)Ñ=Ô=Ñ>Ô>Ð>Ø×Ò˜¨¨U | nÑ5Ô5Ð5Ø˜˜˜ˆNð 	�Š˜×(Ò(¨°dÐ(Ñ;Ô;Ñ<Ô<Ð<Ø×Ò˜¨¨T { mÑ4Ô4Ð4Ø˜˜˜ˆNõ ˜;˜-Ñ(Ô(ˆØÔ0ð 	Hð 	H‰JˆD�$ØˆDÔ�i¨¬¸$ÐGÐGÀ$ÐGÐGÐGÐGð 	×Ò�(¥L¡N¤NÔ$?ÀÑHÔHÐHð 	×Ò�( B¤O°WÀVÐÑLÔLÐLØ×Ò�) R¤_°gÀaÐÑHÔHÐHð 	×Ò�) R¤_°gÈÐÑJÔJÐJÐJÐJr)   c                 óª  — t          di | j        ¤Ž}|                     d¦  «                             d¦  «        }|                     d¦  «                             d¦  «        }|                     d|¦  «        \  }}|                      |¦  «         |                      |d¦  «         |                     d|¦  «        \  }}|                      |¦  «         |                      |d¦  «         |                     d|¦  «        \  }}|                      |¦  «         |                      |                     |¦  «        d¦  «         |                     d|¦  «        \  }}|                      |¦  «         |                      |d¦  «         t          dg¦  «        }|                     d¦  «        x}}| j	        D ] \  }}	 | j
        t          |j        ||fi |	¤Ž Œ!|                      |                     |d¦  «        d¦  «         t          dg¦  «        }| j	        D ]#\  }}	|€Œ | j
        t          |j        d|fi |	¤Ž Œ$|  
                    t          t          ¦   «         j        dd	¦  «         |  
                    t          |j        d|d
¬¦  «         |  
                    t          |j        d|d¬¦  «         |  
                    t          |j        d|d¬¦  «         dS )ztest verify_and_update()r,   r6  rE   Ú	wrongpassNr1  ©FNr  r   r+  r  rÛ   rø   r1   )r   r9  rÐ   r   Úverify_and_updater  rG  rä   r  r2  rs   rt   r\   r™   )
rY   r›   Úh1Úh2ÚokÚnew_hashr   rJ  r  r$   s
             r'   Útest_47_verify_and_updatez*CryptContextTest.test_47_verify_and_updateÂ  sè  € åÐ/Ð/˜DÔ.Ð/Ð/ˆð �ZŠZ˜Ñ$Ô$×)Ò)¨*Ñ5Ô5ˆØ�ZŠZ˜Ñ'Ô'×,Ò,¨ZÑ8Ô8ˆð ×+Ò+¨K¸Ñ<Ô<‰ˆˆHØ×Ò˜ÑÔÐØ�Š�h Ñ%Ô%Ð%ð ×+Ò+¨K¸Ñ<Ô<‰ˆˆHØ×Ò˜ÑÔÐØ�Š�h Ñ%Ô%Ð%ð ×+Ò+¨J¸Ñ;Ô;‰ˆˆHØ�Š˜ÑÔÐØ�Š˜Ÿš HÑ-Ô-¨~Ñ>Ô>Ð>ð ×+Ò+¨J¸Ñ;Ô;‰ˆˆHØ�Š˜ÑÔÐØ�Š�h Ñ%Ô%Ð%õ ˜;˜-Ñ(Ô(ˆØŸš ™œÐ(ˆˆwØ Ô2ð 	Uð 	U‰LˆF�DØˆDÔ�i¨Ô)=¸vÀtÐTÐTÈtÐTÐTÐTÐTð 	×Ò˜×-Ò-¨f°dÑ;Ô;¸]ÑKÔKÐKõ ˜;˜-Ñ(Ô(ˆØÔ0ð 	Wð 	W‰JˆD�$Øˆ|ØØˆDÔ�i¨Ô)=¸xÈÐVÐVÐQUÐVÐVÐVÐVð 	×Ò�(¥L¡N¤NÔ$DÀhÐPVÑWÔWÐWð 	×Ò�( BÔ$8¸(ÀGÐTZÐÑ[Ô[Ð[Ø×Ò�) RÔ%9¸8ÀWÐUVÐÑWÔWÐWð 	×Ò�) RÔ%9¸8ÀWÐWXÐÑYÔYÐYÐYÐYr)   c                 óH
  — ddl m}m}m} |                     d¦  «        }|                     dd¬¦  «        }|                     dd¬¦  «        }t          ||g¦  «        }|                      |j        t          ¦   «         ¦  «         |  	                    | 
                    |                     d¦  «        ¦  «        d¦  «         |  	                    |                     d|¦  «        ¦  «         |                      |                     d|¦  «        d¦  «         |                      d	g¦  «        5  |                      t          |j        dd¬¦  «         d
d
d
¦  «         n# 1 swxY w Y   |                      t          |j        d|d¬¦  «         |                      t          |j        d|d¬¦  «         t          ||g¦  «        }|                      |j        t          dg¦  «        ¦  «         |  	                    | 
                    |                     d¦  «        ¦  «        d¦  «         |  	                    |                     d|¦  «        ¦  «         |                      |                     d|¦  «        d¦  «         |  	                    | 
                    |                     dd¬¦  «        ¦  «        d¦  «         |  	                    |                     d|d¬¦  «        ¦  «         |                      |                     d|d¬¦  «        d¦  «         |                      d	g¦  «        5  |                      t          |j        dd¬¦  «         d
d
d
¦  «         n# 1 swxY w Y   |                      t          |j        d|d¬¦  «         |                      t          |j        d|d¬¦  «         t          ||gd¬¦  «        }	|                      |	j        t          dg¦  «        ¦  «         |                      t          |	j        d¦  «         |                      t          |	j        d|¦  «         |                      t          |	j        d|¦  «         |                      |	                     dd¬¦  «        |¦  «         |  	                    |	                     d|d¬¦  «        ¦  «         |                      |	                     d|d¬¦  «        d¦  «         |                      |	                     d|d¬¦  «        d¦  «         |                      |	                     d|d¬¦  «        d|f¦  «         d
S )zLhash(), verify(), and verify_and_update() -- discard unused context keywordsr   )r,   r-   Úpostgres_md5r1  Úroot)rØ   r­   r,   )TNr<  NrØ   )ÚbadkwdÚautorÔ   rd  T)Úpasslib.hashr,   r-   rl  r   r   r\   Úcontext_kwdsÚseträ   r  r  re  rA  rs   rt   )
rY   r,   r-   rl  Údes_hashÚpg_root_hashÚpg_admin_hashr‡   rˆ   rŠ   s
             r'   Útest_48_context_kwdsz%CryptContextTest.test_48_context_kwdsü  sw  € ð
 	DÐCÐCÐCÐCÐCÐCÐCÐCÐCØ—>’> &Ñ)Ô)ˆØ#×(Ò(¨°fÐ(Ñ=Ô=ˆØ$×)Ò)¨&°wÐ)Ñ?Ô?ˆõ
 ˜I yÐ1Ñ2Ô2ˆØ×Ò˜Ô)­3©5¬5Ñ1Ô1Ð1ð 	�Š˜	×*Ò*¨3¯8ª8°FÑ+;Ô+;Ñ<Ô<¸kÑJÔJÐJØ�Š˜Ÿ
š
 6¨8Ñ4Ô4Ñ5Ô5Ð5Ø×Ò˜×.Ò.¨v°xÑ@Ô@À,ÑOÔOÐOð ×#Ò#Ð%IÐ$JÑKÔKð 	Hð 	HØ×Ò�i¨¬°6ÀÐÑGÔGÐGð	Hð 	Hð 	Hñ 	Hô 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Høøøð 	Hð 	Hð 	Hð 	Hà×Ò�) S¤Z°¸ÈÐÑOÔOÐOØ×Ò�) SÔ%:¸FÀHÐSYÐÑZÔZÐZõ
 ˜I |Ð4Ñ5Ô5ˆØ×Ò˜Ô)­3°¨x©=¬=Ñ9Ô9Ð9ð 	�Š˜	×*Ò*¨3¯8ª8°FÑ+;Ô+;Ñ<Ô<¸kÑJÔJÐJØ�Š˜Ÿ
š
 6¨8Ñ4Ô4Ñ5Ô5Ð5Ø×Ò˜×.Ò.¨v°xÑ@Ô@À,ÑOÔOÐOð 	�Š˜	×*Ò*¨3¯8ª8°FÀ¨8Ñ+HÔ+HÑIÔIÈ;ÑWÔWÐWØ�Š˜Ÿ
š
 6¨8¸&˜
ÑAÔAÑBÔBÐBØ×Ò˜×.Ò.¨v°xÀfÐ.ÑMÔMÈ|Ñ\Ô\Ð\ð ×#Ò#Ð%IÐ$JÑKÔKð 	Jð 	JØ×Ò�i¨¬°6À&ÐÑIÔIÐIð	Jð 	Jð 	Jñ 	Jô 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jøøøð 	Jð 	Jð 	Jð 	Jà×Ò�) S¤Z°¸È&ÐÑQÔQÐQØ×Ò�) SÔ%:¸FÀHÐU[ÐÑ\Ô\Ð\õ
 ˜L¨)Ð4ÀÐHÑHÔHˆØ×Ò˜Ô)­3°¨x©=¬=Ñ9Ô9Ð9ð 	×Ò�) S¤X¨vÑ6Ô6Ð6Ø×Ò�) S¤Z°¸ÑFÔFÐFØ×Ò�) SÔ%:¸FÀLÑQÔQÐQð 	×Ò˜Ÿš &¨v˜Ñ6Ô6¸ÑEÔEÐEØ�Š˜Ÿ
š
 6¨<¸f˜
ÑEÔEÑFÔFÐFØ×Ò˜×.Ò.¨v°|È&Ð.ÑQÔQÐS_Ñ`Ô`Ð`ð 	×Ò˜×.Ò.¨v°|È'Ð.ÑRÔRÐTaÑbÔbÐbð 	×Ò˜×.Ò.¨v°xÀfÐ.ÑMÔMØ Ð-ñ	/ô 	/ð 	/ð 	/ð 	/s$   Ä+$EÅEÅ"EÌ"$MÍMÍMc                 óJ  — t          dgddd¬¦  «        }d}|                     dd¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      t          gdz  ¦  «        5  |                     d	dd	¬
¦  «        }ddd¦  «         n# 1 swxY w Y   |                      | 	                    d¬¦  «        d|z   ¦  «         |                      g ¦  «        5  |                      | 	                    dd¬¦  «        d|z   ¦  «         ddd¦  «         n# 1 swxY w Y   |                      | 	                    dd¬¦  «        d|z   ¦  «         |                      | 	                    dd¬¦  «        d|z   ¦  «         |                      t          gdz  ¦  «        5  |                     t          d¦  «        d	z   dt          d¦  «        d	z   ¬¦  «        }ddd¦  «         n# 1 swxY w Y   |                      | 	                    d¬¦  «        d|z   ¦  «         |                      g ¦  «        5  |                      | 	                    dd¬¦  «        d|z   ¦  «         ddd¦  «         n# 1 swxY w Y   |                      | 	                    dd¬¦  «        d|z   ¦  «         |                      | 	                    dd¬¦  «        d|z   ¦  «         |                      | 	                    d¬¦  «        d|z   ¦  «         t          j        j        }|                     d|dz  ¬¦  «        }|                      | 	                    d¬¦  «        d||fz  ¦  «         |                     dd¬¦  «        }|                      | 	                    d¬¦  «        d|z   ¦  «         |                      t          |j        d¬ ¦  «         |                     d¬ ¦  «         |                     d¬ ¦  «         |                      t          |j        d¬ ¦  «         t          dg¬!¦  «        }|                      t          |j        dd¬"¦  «         |                      t          t           d#¬$¦  «         |                      t          t           d#¬%¦  «         |                      t          t           d#¬&¦  «         |                      t          t           d#¬ ¦  «         t          j                             ¦   «         }|                      t"          t           d|¬$¦  «         |                      t"          t           d|¬%¦  «         |                      t"          t           d|¬&¦  «         |                      t"          t           d|¬ ¦  «         dS )'ztest rounds limitsrE   rI   rH   iÄ	  ©r7   rO   rN   rP   z+...........................................Né   iô  )rO   rN   rP   r>  ©r(  z$5$rounds=1000$nacl$r=  r?  z$5$rounds=1999$nacl$z$5$rounds=2000$nacl$r@  z$5$rounds=2001$nacl$g    eÍÍA)rN   rO   rP   z$5$rounds=999999999$nacl$i¹  z$5$rounds=3001$nacl$z$5$rounds=3000$nacl$i·  z$5$rounds=2999$nacl$z$5$rounds=2500$nacl$rÛ   )rP   rN   z$5$rounds=%d$nacl$%sr8  r>   )rO   rN   r¦   r—   )rN   r²   )r   Ú_get_recordr\   Úmin_desired_roundsÚmax_desired_roundsÚdefault_roundsrA  r   r    r  Úintr   rE   rs   rš   ÚdatetimeÚnowrt   )rY   r›   ÚSTUBÚcustom_handlerr.  ÚdfÚbads          r'   Útest_50_rounds_limitsz&CryptContextTest.test_50_rounds_limitsQ  så  € å >Ð"2Ø37Ø37Ø7;ðñ ô ˆð =ˆð Ÿš¨¸Ñ=Ô=ˆØ×Ò˜Ô:¸DÑAÔAÐAØ×Ò˜Ô:¸DÑAÔAÐAØ×Ò˜Ô6¸Ñ=Ô=Ð=ð ×#Ò#Õ%7Ð$8¸Ñ$:Ñ;Ô;ð 	>ð 	>Ø—’°#ÐPTØ9<ð ñ >ô >ˆBð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>ð 	×Ò˜Ÿš¨6˜Ñ2Ô2Ð4JÈTÑ4QÑRÔRÐRð ×#Ò# BÑ'Ô'ð 	Wð 	WØ×ÒØ—’ D¨v�Ñ6Ô6Ð8NÐQUÑ8UñWô Wð Wð	Wð 	Wð 	Wñ 	Wô 	Wð 	Wð 	Wð 	Wð 	Wð 	Wð 	Wøøøð 	Wð 	Wð 	Wð 	Wð
 	×ÒØ�LŠL ¨6ˆLÑ2Ô2Ð4JÈTÑ4Qñ	Sô 	Sð 	Sð 	×ÒØ�LŠL ¨6ˆLÑ2Ô2Ð4JÈTÑ4Qñ	Sô 	Sð 	Sð ×#Ò#Õ%7Ð$8¸Ñ$:Ñ;Ô;ð 	Gð 	GØ—’µ#°c±(´(¸3±,ÐY]Ý9<¸S¹¼À#¹ð ñ Gô GˆBð	Gð 	Gð 	Gñ 	Gô 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gøøøð 	Gð 	Gð 	Gð 	Gð 	×Ò˜Ÿš¨6˜Ñ2Ô2Ð4OÐRVÑ4VÑWÔWÐWð ×#Ò# BÑ'Ô'ð 	Wð 	WØ×ÒØ—’ D¨v�Ñ6Ô6Ð8NÐQUÑ8UñWô Wð Wð	Wð 	Wð 	Wñ 	Wô 	Wð 	Wð 	Wð 	Wð 	Wð 	Wð 	Wøøøð 	Wð 	Wð 	Wð 	Wð
 	×ÒØ�LŠL ¨6ˆLÑ2Ô2Ð4JÈTÑ4Qñ	Sô 	Sð 	Sð 	×ÒØ�LŠL ¨6ˆLÑ2Ô2Ð4JÈTÑ4Qñ	Sô 	Sð 	Sð 	×Ò˜Ÿš¨6˜Ñ2Ô2Ð4JÈTÑ4QÑRÔRÐRõ ÔÔ-ˆØ�WŠW°$ÐQSÐUVÑQVˆWÑWÔWˆØ×Ò˜Ÿš¨6˜Ñ2Ô2Ð4JÈbÐRVÈZÑ4WÑXÔXÐXð �WŠW°$ÐQUˆWÑVÔVˆØ×Ò˜Ÿš¨6˜Ñ2Ô2Ð4JÈTÑ4QÑRÔRÐRð
 	×Ò�* b¤gÈDÐÑQÔQÐQØ
�Š¨TˆÑ2Ô2Ð2Ø
�Š¨TˆÑ2Ô2Ð2Ø×Ò�* b¤gÈDÐÑQÔQÐQõ  >Ð"2Ð3Ñ3Ô3ˆð 	×Ò�* b¤gÈØ37ð 	ñ 	9ô 	9ð 	9ð 	×Ò�*¥lÈSÐÑQÔQÐQØ×Ò�*¥lÈSÐÑQÔQÐQØ×Ò�*¥lÀSÐÑIÔIÐIØ×Ò�*¥lÐQTÐÑUÔUÐUõ Ô×#Ò#Ñ%Ô%ˆØ×Ò�)¥\°>Ð\_ÐÑ`Ô`Ð`Ø×Ò�)¥\°>Ð\_ÐÑ`Ô`Ð`Ø×Ò�)¥\°>ÐTWÐÑXÔXÐXØ×Ò�)¥\°>Ð`cÐÑdÔdÐdÐdÐdsH   ÂCÃCÃCÄ/E	Å	EÅEÇ9HÈHÈHÉ /JÊJÊ"Jc                 óV  — t          dgddd¬¦  «        }|                      t          |j        d¬¦  «         |                      t          |j        d¬¦  «         |                      t          |j        d	¬¦  «         |                     d
¬¦  «        }|                      |                     dd¦  «        j        d
¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d
¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         dS )ztest linear vary roundsrE   iË  iÕ  rI   rx  éÿÿÿÿr²   ú-1%ú101%r   Nú0%rÛ   r=  r@  éd   z0.1%gü©ñÒMbP?iÎ  iÒ  ú100%ç      ð?©r   rs   rš   r    r\   r{  r  Úassert_rounds_ranger-  s      r'   Útest_51_linear_vary_roundsz+CryptContextTest.test_51_linear_vary_roundsÇ  s�  € å >Ð"2Ø37Ø37Ø7;ðñ ô ˆð 	×Ò�* b¤gÀÐÑCÔCÐCØ×Ò�* b¤gÀÐÑFÔFÐFØ×Ò�* b¤gÀÐÑGÔGÐGð �WŠW aˆWÑ(Ô(ˆØ×Ò˜Ÿš¨¸Ñ=Ô=ÔIÈ1ÑMÔMÐMØ× Ò   ^°T¸4Ñ@Ô@Ð@à�WŠW dˆWÑ+Ô+ˆØ×Ò˜Ÿš¨¸Ñ=Ô=ÔIÈ1ÑMÔMÐMØ× Ò   ^°T¸4Ñ@Ô@Ð@ð �WŠW aˆWÑ(Ô(ˆØ×Ò˜Ÿš¨¸Ñ=Ô=ÔIÈ1ÑMÔMÐMØ× Ò   ^°T¸4Ñ@Ô@Ð@Ø�WŠW cˆWÑ*Ô*ˆØ×Ò˜Ÿš¨¸Ñ=Ô=ÔIÈ3ÑOÔOÐOØ× Ò   ^°T¸4Ñ@Ô@Ð@ð �WŠW fˆWÑ-Ô-ˆØ×Ò˜Ÿš¨¸Ñ=Ô=ÔIÈ5ÑQÔQÐQØ× Ò   ^°T¸4Ñ@Ô@Ð@Ø�WŠW fˆWÑ-Ô-ˆØ×Ò˜Ÿš¨¸Ñ=Ô=ÔIÈ3ÑOÔOÐOØ× Ò   ^°T¸4Ñ@Ô@Ð@Ð@Ð@r)   c                 óÊ  — t          dgddd¬¦  «        }|                      t          |j        d¬¦  «         |                      t          |j        d¬¦  «         |                      t          |j        d	¬¦  «         |                     d
¬¦  «        }|                      |                     dd¦  «        j        d
¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d
¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         |                     d¬¦  «        }|                      |                     dd¦  «        j        d¦  «         |                      |ddd¦  «         dS )ztest log2 vary roundsÚbcrypté   rG   é   )r7   Úbcrypt__min_roundsÚbcrypt__max_roundsÚbcrypt__default_roundsrˆ  r²   r‰  rŠ  r   Nr‹  rÛ   é   é   rŒ  z1%g{®Gáz„?z49%g\�Âõ(\ß?z50%g      à?r�  rŽ  r�  r-  s      r'   Útest_52_log2_vary_roundsz)CryptContextTest.test_52_log2_vary_roundsí  s(  € å 8 *Ø-/Ø-/Ø13ðñ ô ˆð 	×Ò�* b¤gÀÐÑCÔCÐCØ×Ò�* b¤gÀÐÑFÔFÐFØ×Ò�* b¤gÀÐÑGÔGÐGð �WŠW aˆWÑ(Ô(ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀQÑGÔGÐGØ× Ò   X¨r°2Ñ6Ô6Ð6à�WŠW dˆWÑ+Ô+ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀQÑGÔGÐGØ× Ò   X¨r°2Ñ6Ô6Ð6ð �WŠW aˆWÑ(Ô(ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀQÑGÔGÐGØ× Ò   X¨r°2Ñ6Ô6Ð6Ø�WŠW cˆWÑ*Ô*ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀSÑIÔIÐIØ× Ò   X¨r°2Ñ6Ô6Ð6ð �WŠW dˆWÑ+Ô+ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀTÑJÔJÐJØ× Ò   X¨r°2Ñ6Ô6Ð6à�WŠW eˆWÑ,Ô,ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀTÑJÔJÐJØ× Ò   X¨r°2Ñ6Ô6Ð6à�WŠW eˆWÑ,Ô,ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀSÑIÔIÐIØ× Ò   X¨r°2Ñ6Ô6Ð6à�WŠW fˆWÑ-Ô-ˆØ×Ò˜Ÿš¨°$Ñ7Ô7ÔCÀSÑIÔIÐIØ× Ò   X¨r°2Ñ6Ô6Ð6Ð6Ð6r)   c                 óº  — |                      |¦  «        }|j        dd…         |j        z  }t          ¦   «         }t	          d¦  «        D ]H}|                     ||¬¦  «        }	|                     |	¦  «        j        }
|                     |
¦  «         ŒI|  	                    t          |¦  «        |d¦  «         |  	                    t          |¦  «        |d¦  «         dS )z2helper to check vary_rounds covers specified ranger   rÛ   i,  rz  z"vary_rounds had wrong lower limit:z"vary_rounds had wrong upper limit:N)rÐ   Údefault_salt_charsÚmax_salt_sizerr  r   r  rm   r)  Úaddr\   ÚminÚmax)rY   Úcontextrþ   ÚlowerÚupperrÐ   r(  ÚseenÚir"  Úrs              r'   r�  z$CryptContextTest.assert_rounds_range  sÏ   € ð —/’/ &Ñ)Ô)ˆØÔ)¨!¨A¨#Ô.°Ô1FÑFˆÝ‰uŒuˆÝ˜‘”ð 	ð 	ˆAØ×!Ò! &¨tÐ!Ñ4Ô4ˆAØ×#Ò# AÑ&Ô&Ô-ˆAØ�HŠH�Q‰KŒKˆKˆKØ×Ò�˜T™œ EÐ+OÑPÔPÐPØ×Ò�˜T™œ EÐ+OÑPÔPÐPÐPÐPr)   c                 ó°  — t          j        ddt          ¬¦  «         t          dg¬¦  «        }|                      |j        d¦  «         |                      |                     d¬¦  «        j        d¦  «         |                      |                     d	¬¦  «        j        d¦  «         |                      |                     d
¬¦  «        j        d¦  «         dS )zharden_verify -- parsingrT   z.*harden_verify.*rø   rE   r>   NÚ )Úharden_verifyÚtrueÚfalse)rW   rX   ÚDeprecationWarningr   r\   rª  Úusingrb   s     r'   Útest_harden_verify_parsingz+CryptContextTest.test_harden_verify_parsing-  sÍ   € åÔ Ð*=Ý);ð	=ñ 	=ô 	=ð 	=õ  NÐ#3Ð4Ñ4Ô4ˆØ×Ò˜Ô*¨DÑ1Ô1Ð1Ø×Ò˜Ÿš°˜Ñ4Ô4ÔBÀDÑIÔIÐIØ×Ò˜Ÿš°˜Ñ8Ô8ÔFÈÑMÔMÐMØ×Ò˜Ÿš°˜Ñ9Ô9ÔGÈÑNÔNÐNÐNÐNr)   c                 óü   — d}d}t                                ¦   «         }||_        t          |g¬¦  «        }|                     ¦   «          t          |j        ¦  «        \  }}|                      ||||z  ¬¦  «         dS )z'
        dummy_verify() method
        r  r   r>   )ÚdeltaN)Ú	DelayHashr®  Údelayr   Údummy_verifyr   ÚassertAlmostEqual)rY   ÚexpectedÚaccuracyrÐ   rc   ÚelapsedÚ_s          r'   Útest_dummy_verifyz"CryptContextTest.test_dummy_verify9  s‚   € ð
 ˆØˆÝ—/’/Ñ#Ô#ˆØ ˆŒÝ G 9Ð-Ñ-Ô-ˆØ×ÒÑÔÐÝ˜sÔ/Ñ0Ô0‰
ˆ�Ø×Ò˜w¨¸À8Ñ8KÐÑLÔLÐLÐLÐLr)   c                 óT  — dd„}t          dd¬¦  «        }|                       ||d¦  «        g d¢¦  «         |                       ||d¦  «        g d¢¦  «         |                     d¬	¦  «         |                       ||d¦  «        g d
¢¦  «         |                       ||d¦  «        g d
¢¦  «         |                     d¬¦  «         |                       ||d¦  «        g d
¢¦  «         |                       ||d¦  «        g d¢¦  «         t          dgd¬¦  «        }|                       ||d¦  «        dg¦  «         |                       ||d¦  «        dg¦  «         |                      t          t           dd¬¦  «         |                      t          t           dd¬¦  «         dS )z+test deprecated='auto' is handled correctlyNc                 óH   ‡ ‡— ˆˆ fd„‰                       ¦   «         D ¦   «         S )Nc                 óF   •— g | ]}‰                      |‰¦  «        j        ‘ŒS r1   rÏ   )r2   rþ   rÑ   rc   s     €€r'   r4   zLCryptContextTest.test_61_autodeprecate.<locals>.getstate.<locals>.<listcomp>Q  s*   ø€ ÐYÐYÐYÀ�C—K’K ¨Ñ1Ô1Ô<ÐYÐYÐYr)   r>   rÒ   s   ``r'   Úgetstatez8CryptContextTest.test_61_autodeprecate.<locals>.getstateP  s)   øø€ ØYÐYÐYÐYÐYÈ3Ï;Ê;É=Ì=ÐYÑYÔYÐYr)   z sha256_crypt,md5_crypt,des_cryptro  rÔ   )FTTr­   r-   rC   )TFTr,   r°   )TTFrE   Frö   zauto,md5_cryptzmd5_crypt,autor   )r   r\   r!   rs   rš   )rY   r¾  rc   s      r'   Útest_61_autodeprecatez&CryptContextTest.test_61_autodeprecateM  s
  € ð	Zð 	Zð 	Zð 	Zõ Ð=È&ÐQÑQÔQˆØ×Ò˜˜ #¨$Ñ/Ô/Ð1DÐ1DÐ1DÑEÔEÐEØ×Ò˜˜ # wÑ/Ô/Ð1DÐ1DÐ1DÑEÔEÐEð 	�
Š
˜;ˆ
Ñ'Ô'Ð'Ø×Ò˜˜ #¨$Ñ/Ô/Ð1DÐ1DÐ1DÑEÔEÐEØ×Ò˜˜ # wÑ/Ô/Ð1DÐ1DÐ1DÑEÔEÐEð 	�
Š
¨;ˆ
Ñ7Ô7Ð7Ø×Ò˜˜ #¨$Ñ/Ô/Ð1DÐ1DÐ1DÑEÔEÐEØ×Ò˜˜ # wÑ/Ô/Ð1DÐ1DÐ1DÑEÔEÐEõ ˜NÐ+¸Ð?Ñ?Ô?ˆØ×Ò˜˜ #¨$Ñ/Ô/°%°Ñ9Ô9Ð9Ø×Ò˜˜ # wÑ/Ô/°%°Ñ9Ô9Ð9ð 	×Ò�*¥lÐ4LØ%5ð 	ñ 	7ô 	7ð 	7à×Ò�*¥lÐ4LØ%5ð 	ñ 	7ô 	7ð 	7ð 	7ð 	7r)   c                 ó,  — ddl m} ddlm}m} t          dg¦  «        }t          ddg¦  «        }|                     d¦  «        }|                     d¦  «        }|                      t          d|j	        ¦  «         |                      t          d|j	        |¦  «         |                      t          d|j	        |¦  «         | 	                    ¦   «         }|  
                    ||j        ¦  «         | 	                    |¦  «        }	|  
                    |	|j        |z   ¦  «         | 	                    |¦  «        }
|  
                    |
|j        |z   ¦  «         |  
                    | 	                    |	¦  «        |	¦  «         |                      |                     |¦  «        ¦  «         |                      ||j        |¦  «         |                      ||j        |¦  «         |                      ||j        |	¦  «         |                      |                     |¦  «        ¦  «         |                      ||j        |¦  «         |                      |                     |¦  «        ¦  «         |                      |                     |	¦  «        ¦  «         |                      ||j        d¦  «         |                      t"          |j        d	¦  «         |  
                    |                     |¦  «        |¦  «         |                      ||j        |¦  «         |                      ||j        |¦  «         |                      ||j        |	¦  «         |                      ||j        d¦  «         |                      t"          |j        d	¦  «         |  
                    |                     |¦  «        |¦  «         |                      ||j        |¦  «         |                      t$          d
|j        |¦  «         |  
                    |                     |	¦  «        |¦  «         d	S )zdisabled hash supportr   )ÚUnknownHashError)r-   Úunix_disabledr,   rÂ  Úfoozno disabled hasher presentr©  Nzcannot restore original hash)Úpasslib.excrÁ  rp  r-   rÂ  r   r   ÚassertRaisesRegexr{   Údisabler\   Údefault_markerrä   Ú
is_enabledrs   r  Úenablert   rš   )rY   rÁ  r-   rÂ  rc   r  Úh_refÚh_otherÚh_disÚ	h_dis_refÚh_dis_others              r'   Útest_disabled_hashesz%CryptContextTest.test_disabled_hashesm  sÛ  € ð
 	1Ð0Ð0Ð0Ð0Ð0Ø9Ð9Ð9Ð9Ð9Ð9Ð9Ð9å˜K˜=Ñ)Ô)ˆÝ˜[¨/Ð:Ñ;Ô;ˆØ—’˜‘”ˆØ—.’. Ñ'Ô'ˆð 	×Ò�|Ð-IØ"œ{ñ	,ô 	,ð 	,à×Ò�|Ð-IØ"œ{¨Eñ	3ô 	3ð 	3à×Ò�|Ð-IØ"œ{¨Gñ	5ô 	5ð 	5ð —’‘”ˆØ×Ò˜ Ô <Ñ=Ô=Ð=Ø—L’L Ñ'Ô'ˆ	Ø×Ò˜ MÔ$@À5Ñ$HÑIÔIÐIà—l’l 7Ñ+Ô+ˆØ×Ò˜ mÔ&BÀWÑ&LÑMÔMÐMð 	×Ò˜Ÿš iÑ0Ô0°)Ñ<Ô<Ð<ð 	�Š˜Ÿš uÑ-Ô-Ñ.Ô.Ð.Ø×ÒÐ*¨C¬N¸GÑDÔDÐDØ×ÒÐ*¨C¬N¸EÑBÔBÐBØ×ÒÐ*¨C¬N¸IÑFÔFÐFð 	�Š˜Ÿš¨Ñ.Ô.Ñ/Ô/Ð/Ø×ÒÐ*¨C¬N¸GÑDÔDÐDØ×Ò˜Ÿš¨Ñ/Ô/Ñ0Ô0Ð0Ø×Ò˜Ÿš¨Ñ3Ô3Ñ4Ô4Ð4ð 	×ÒÐ*¨C¬J¸Ñ;Ô;Ð;Ø×Ò�) S¤Z°Ñ6Ô6Ð6Ø×Ò˜Ÿš EÑ*Ô*¨EÑ2Ô2Ð2Ø×ÒÐ*¨C¬J¸Ñ@Ô@Ð@Ø×ÒÐ*¨C¬J¸Ñ>Ô>Ð>Ø×ÒÐ*¨C¬J¸	ÑBÔBÐBð 	×ÒÐ*¨C¬J¸Ñ;Ô;Ð;Ø×Ò�) T¤[°$Ñ7Ô7Ð7Ø×Ò˜Ÿš UÑ+Ô+¨UÑ3Ô3Ð3Ø×ÒÐ*¨D¬K¸ÑAÔAÐAØ×Ò�zÐ+IØ#œ{¨Eñ	3ô 	3ð 	3à×Ò˜Ÿš YÑ/Ô/°Ñ7Ô7Ð7Ð7Ð7r)   r   ©F)HrÁ   rÂ   rÃ   ÚdescriptionPrefixrí   rî   r»   r^   r(   r_   r   ro   rn   rw   rx   r€   r�   rz   r  rq   r}   rp   rr   r~   r   r`   rŸ   r„   ra   r…   r9  rV   rd   ru   r‚   rŒ   r�   r“   r�   r    r¼   rË   rÙ   rÜ   rá   ræ   rñ   ró   rù   r  r
  r  r2  r#  r/  r4  r:  rC  rH  rK  ra  rj  rv  r†  r‘  r›  r�  r¯  rº  r¿  rÏ  Ú__classcell__)rZ   s   @r'   r+   r+   1   s*  ø€ € € € € Ø&Ðð PÐOÐOÐØNÐNÐ=MÐNÑNÔNÐà�DØ"ØØØ!&Ø%*Ø#(Ø#(ðñ ô €Mð )˜[¨Ø3DðFñ Fô FÐð ˜Að 
ñ 
ô 
Ðð �qð 
ñ 
ô 
Ðð" ”G—L’L  }Ñ5Ô5€Mð )×0Ò0°°°4±´¸!¸!¸F¹)¼)ÑDÔDÐØ”W—\’\ $¨Ñ7Ô7€Nð '×.Ò.¨q¨q°©~¬~Ø/0¨q°©¬ñ@ô @ß@FÂÀxÑ@PÔ@Pð à”W—\’\ $¨Ñ7Ô7€Nð2ð �Dà!&Ø!&Ø%*à!&ðñ ô €MðÐð !�[ °Ñ>Ô>€Nð
 �DØðñ ô €Mð
 "�k .°-Ñ@Ô@€Oð
 �Dð#ð #ð #à"Ð%Ø Ø!#Ø%'Ø"#Ø#'Ø#'Ø'+ØØ!"ðñ ô €Mð$bð bð bð bð bð;ð ;ð ;ð6Hð Hð Hð<Eð Eð Eð6=ð =ð =ð:Ið Ið Ið)<ð )<ð )<ðV1ð 1ð 1ð0 7ð  7ð  7ðJJBð JBð JBðX"Að "Að "AðHZ2ð Z2ð Z2ðx#Cð #Cð #CðJ.ð .ð .ð(Fð Fð Fð Fð,ð ,ð ,ð(<ð <ð <ð0"bð "bð "bðHMð Mð Mð^Qð Qð QðDð Dð DðB 
ˆrˆ
Ø	�˜+Ð&Ð'Ø	
ˆBˆØ	ˆRˆð	
Ðð`ð `ð `ð6.?ð .?ð .?ðb"Oð "Oð "OðHDð Dð Dð8/Bð /Bð /Bð /BðbDð Dð Dð41Oð 1Oð 1OðfEKð EKð EKðN8Zð 8Zð 8ZðtF/ð F/ð F/ðjteð teð teðl$Að $Að $AðL-7ð -7ð -7ð^Qð Qð Qð"
Oð 
Oð 
OðMð Mð Mð(7ð 7ð 7ð@H8ð H8ð H8ð H8ð H8ð H8ð H8r)   r+   c                   óH   — e Zd ZdZdZej        ZdZdZ	 e
d¦  «        Zd„ ZdS )r²  z-dummy hasher which delays by specified amountÚ
delay_hashé(   r   z$x$c                 óô   — t          j        | j        ¦  «         t          |t          ¦  «        r|                     d¦  «        }t          t          j        d|z   ¦  «         	                    ¦   «         ¦  «        S )Nrf   s   prefix)
ÚtimeÚsleepr³  r[  r   rp   r   rZ  Úsha1r\  )rY   r  s     r'   r]  zDelayHash._calc_checksumÅ  s`   € ÝŒ
�4”:ÑÔÐÝ�f�gÑ&Ô&ð 	,Ø—]’] 7Ñ+Ô+ˆFÝ�Wœ\¨)°fÑ*<Ñ=Ô=×GÒGÑIÔIÑJÔJÐJr)   N)rÁ   rÂ   rÃ   Ú__doc__r3   rÉ   ÚLOWER_HEX_CHARSÚchecksum_charsÚchecksum_sizer³  r   r^  r]  r1   r)   r'   r²  r²  ½  sR   € € € € € Ø7Ð7Ø€DØÔ'€NØ€MØ€EØ�1�U‘8”8€LðKð Kð Kð Kð Kr)   r²  c                   ó   — e Zd Zd ZdS )Údummy_2NrÀ   r1   r)   r'   rß  rß  Î  s   € € € € € Ø€D€D€Dr)   rß  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚLazyCryptContextTestr	   c                 óZ   — t          d¦  «         |                      t           d¦  «         d S )Nrß  )Úunload_handler_nameÚ
addCleanup)rY   s    r'   rV   zLazyCryptContextTest.setUpÔ  s+   € å˜IÑ&Ô&Ð&Ø�ŠÕ+¨YÑ7Ô7Ð7Ð7Ð7r)   c                 óâ  — |                       t          d¦  «        ¦  «         t          dd¦  «         t          t	          ddg¦  «        dg¬¦  «        }|                       t          dd¦  «        ¦  «         |                      |                     ¦   «         d¦  «         |                      |                     d¦  «        j	        ¦  «         |                      t          dd¦  «        ¦  «         dS )ztest plain kwdsrß  úpasslib.tests.test_contextr,   rÔ   T©rß  r,   N)
r  Úhas_crypt_handlerr   r	   Úiterr\   r7   rä   rÐ   rL   )rY   r›   s     r'   Útest_kwd_constructorz)LazyCryptContextTest.test_kwd_constructorÙ  sÓ   € à×ÒÕ*¨9Ñ5Ô5Ñ6Ô6Ð6Ý# IÐ/KÑLÔLÐLå�d I¨{Ð#;Ñ<Ô<È+ÈÐWÑWÔWˆà×ÒÕ*¨9°dÑ;Ô;Ñ<Ô<Ð<à×Ò˜Ÿš™œÐ'?Ñ@Ô@Ð@Ø�Š˜Ÿ
š
 ;Ñ/Ô/Ô:Ñ;Ô;Ð;à�ŠÕ)¨)°TÑ:Ô:Ñ;Ô;Ð;Ð;Ð;r)   c                 óÐ  ‡ — ‰                       t          d¦  «        ¦  «         t          dd¦  «         d	ˆ fd„	}t          |d¬¦  «        }‰                       t          dd¦  «        ¦  «         ‰                      |                     ¦   «         d¦  «         ‰                      |                     d¦  «        j        ¦  «         ‰                      t          dd¦  «        ¦  «         d S )
Nrß  ræ  Fc                 óp   •— ‰                      | ¦  «         t          t          ddg¦  «        dg¬¦  «        S )Nrß  r,   rÕ   )rä   r»   ré  )ÚflagrY   s    €r'   Úonloadz>LazyCryptContextTest.test_callable_constructor.<locals>.onloadë  s7   ø€ Ø�OŠO˜DÑ!Ô!Ð!Ý¥ i°Ð%=Ñ >Ô >ÈKÈ=ÐYÑYÔYÐYr)   T)rî  rí  rç  r,   rÐ  )	r  rè  r   r	   r\   r7   rä   rÐ   rL   )rY   rî  r›   s   `  r'   Útest_callable_constructorz.LazyCryptContextTest.test_callable_constructorç  së   ø€ Ø×ÒÕ*¨9Ñ5Ô5Ñ6Ô6Ð6Ý# IÐ/KÑLÔLÐLð	Zð 	Zð 	Zð 	Zð 	Zð 	Zõ  V°$Ð7Ñ7Ô7ˆà×ÒÕ*¨9°dÑ;Ô;Ñ<Ô<Ð<à×Ò˜Ÿš™œÐ'?Ñ@Ô@Ð@Ø�Š˜Ÿ
š
 ;Ñ/Ô/Ô:Ñ;Ô;Ð;à�ŠÕ)¨)°TÑ:Ô:Ñ;Ô;Ð;Ð;Ð;r)   N)rÁ   rÂ   rÃ   rÑ  rV   rê  rï  r1   r)   r'   rá  rá  Ñ  sG   € € € € € Ø*Ðð8ð 8ð 8ð
<ð <ð <ð<ð <ð <ð <ð <r)   rá  )ArÚ  Ú
__future__r   Úpasslib.utils.compatr   Úconfigparserr   ÚConfigParserr€  Ú	functoolsr   ÚloggingÚ	getLoggerrÁ   Úlogrw   rW   Úpasslibr   Úpasslib.contextr   r	   rÄ  r
   r   Úpasslib.utilsr   r   r   r   r   r   r   r   Úpasslib.utils.handlersÚutilsr   rÉ   Úpasslib.tests.utilsr   r   r   r   r   r   Úpasslib.registryr   r   rè  r   rã  r   rx   ÚabspathÚdirnameÚ__file__r�   r(   r+   rZ  r×  rÊ   r²  rß  rá  r1   r)   r'   ú<module>r     s   ðØ Ð ð
 &Ð %Ð %Ð %Ð %Ð %Ø $Ð $Ð $Ð $Ð $Ð $Øð ,Ø+Ð+Ð+Ð+Ð+Ð+Ð+à+Ð+Ð+Ð+Ð+Ð+Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ð'�gÔ'¨Ñ1Ô1�Ø 	€	€	€	Ø €€€ð Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #ðNð Nð Nð Nð Nð Nð Nð Nð Nð Nð Nð Nð Nð Nð Nð Nðð ð ð ð ð ð ð ð ð ð ð ð 
„w‡‚�r”w—’ xÑ0Ô0Ñ1Ô1€ðð ð ðD8ð D8ð D8ð D8ð D8�xñ D8ô D8ð D8ðT4 Ð Ð Ð Ð Ð Ð Ð ðKð Kð Kð Kð K�Ô ñ Kô Kð Kð"ð ð ð ð ˆbÔñ ô ð ð%<ð %<ð %<ð %<ð %<˜8ñ %<ô %<ð %<ð %<ð %<r)   