Ë
    àU.j2# ã                   ó2  — 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jh                  jk                  ejh                  jm                  e7«      «      Z8d„ Z9 G d„ de'«      Z:ddl;Z;ddl<Z< G d„ de%jz                  «      Z> G d„ de%jz                  «      Z? G d„ de'«      Z@y)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                 ó|   — | j                  «       }|D ]  }|j                  |«       Œ |r|j                  |«       |S ©N)ÚcopyÚupdate)ÚfirstÚargsÚkwdsÚtargetÚargs        ú\C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/tests/test_context.pyÚmerge_dictsr(   &   s7   € Ø�Z‰Z‹\€FÛˆØ�‰�cÕð áØ�‰�dÔØ€Mó    c                   óŠ  ‡— e Zd ZdZg d¢ZeD � ��cg c]  }t        |«      ‘Œ c}}} Z eedddddd¬	«      Z e	ee¬
«      Z
 ed«      Z ed«      Zej                  j!                  ed«      Zej'                   ed«       ed«      «      Zej                  j!                  ed«      Zej'                   ed«       ed«      «      j-                  d«      Zej                  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%d.„ Z&d/„ Z'd0„ Z(d1„ Z)d2„ Z*d3„ Z+d4„ Z,d5„ Z-dSd7„Z.d8„ Z/d9„ Z0d:„ Z1d;„ Z2d<„ Z3d=„ Z4d6i fd6d>difd?i fd@i fgZ5dA„ Z6dB„ Z7dC„ Z8dD„ Z9dTdE„Z:dF„ Z;dG„ Z<dH„ Z=dI„ Z>dJ„ Z?dK„ Z@dL„ ZAdM„ ZBdN„ ZCdO„ ZDdP„ ZEdQ„ ZFdR„ ZGˆxZHS c c}}} w )UÚCryptContextTestr   )Ú	des_cryptÚ	md5_cryptÚ
bsdi_cryptÚsha512_cryptr-   çš™™™™™¹?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©r2   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.cfgiIq  i¹ˆ  iy  iÈ¯  )Úbsdi_crypt__min_roundsr5   r6   r8   zŒ[passlib]
bsdi_crypt__min_rounds = 29001
bsdi_crypt__max_rounds = 35001
bsdi_crypt__default_rounds = 31001
sha512_crypt__min_rounds = 45000
r/   ©r3   )r,   r-   Úphpassr.   Úsha256_cryptr,   r@   é   é   r   é¸  éÐ  ÚHé   )r2   Ú
deprecatedr3   r5   r6   Ú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«       y )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'   rQ   zCryptContextTest.setUp²   s3   ø€ ÜÔ Ñ+Ô-Ü×Ñ Ð*LÔMÜ×Ñ Ð*`Õar)   c                 ó¼  — t        «       }| j                  |j                  «       i «       t        di | j                  ¤Ž}| j                  |j                  «       | j                  «       t        di | j                  ¤Ž}| j                  |j                  «       | j                  «       t        di | j
                  ¤Ž}| j                  |j                  «       | j
                  «       t        di | j                  ¤Ž}| j                  |j                  «       | j                  «       t        t        d«      g¬«      }| j                  |j                  «       d«       y)ztest class constructorr@   r9   )r@   N© )	r   ÚassertEqualÚto_dictÚsample_1_dictÚsample_1_resolved_dictÚsample_2_dictÚsample_3_dictr   r2   ©rT   Úctxs     r'   Útest_01_constructorz$CryptContextTest.test_01_constructorº   s  € ô ‹nˆØ×Ñ˜Ÿ™›¨Ô+ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô Ñ9˜T×8Ñ8Ñ9ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ¤A nÓ$5Ð#6Ô7ˆØ×Ñ˜Ÿ™›Ð(9Õ:r)   c                 ó®  — t        j                  | j                  «      }| j                  |j	                  «       | j
                  «       t        j                  | j                  «      }| j                  |j	                  «       | j
                  «       t        j                  | j                  j                  d«      «      }| j                  |j	                  «       | j
                  «       t        j                  | j                  «      }| j                  |j	                  «       | j
                  «       t        j                  | j                  dd¬«      }| j                  |j	                  «       | j
                  «       | j                  t        t         j                  d«       | j                  t        t         j                  | j                  d¬«       y)ztest from_string() constructorúutf-8Úmypolicyr<   ©ÚsectionÚencodingNÚfakesection©re   )r   Úfrom_stringÚsample_1_unicoderX   rY   rZ   Úsample_1_unnormalizedÚencodeÚsample_1b_unicodeÚsample_1c_bytesÚassertRaisesÚ	TypeErrorr   r^   s     r'   Útest_02_from_stringz$CryptContextTest.test_02_from_stringÕ   s]  € ô ×&Ñ& t×'<Ñ'<Ó=ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ×&Ñ& t×'AÑ'AÓBˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ×&Ñ& t×'<Ñ'<×'CÑ'CÀGÓ'LÓMˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ×&Ñ& t×'=Ñ'=Ó>ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ×&Ñ& t×';Ñ';ÀZØ.6ô8ˆà×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ð 	×Ñœ)¤\×%=Ñ%=¸tÔDð 	×Ñœ.¬,×*BÑ*BØ×/Ñ/¸ð 	õ 	Hr)   c                 ó2  — t         j                  j                  | j                  «      st	        d| j                  z  «      ‚t        j                  | j                  «      }| j                  |j                  «       | j                  «       t        j                  | j                  «      }| j                  |j                  «       | j                  «       t        j                  | j                  dd¬«      }| j                  |j                  «       | j                  «       | j                  t        t
        j                  t         j                  j                  t        d«      «       | j                  t         t
        j                  | j                  d¬«       y)	ztest from_path() constructorzcan't find data file: %rrc   r<   rd   zsample1xxx.cfgrg   rh   N)ÚosÚpathÚexistsÚsample_1_pathÚRuntimeErrorr   Ú	from_pathrX   rY   rZ   Úsample_1b_pathÚsample_1c_pathro   ÚEnvironmentErrorÚjoinÚherer   r^   s     r'   Útest_03_from_pathz"CryptContextTest.test_03_from_pathó   s.  € ô �w‰w�~‰~˜d×0Ñ0Ô1ÜÐ9¸D×<NÑ<NÑNÓOÐOô ×$Ñ$ T×%7Ñ%7Ó8ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ×$Ñ$ T×%8Ñ%8Ó9ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ×$Ñ$ T×%8Ñ%8À*Ø.6ô8ˆà×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ð 	×ÑÔ*¬L×,BÑ,BÜŸ'™'Ÿ,™,¤tÐ-=Ó>ô	@ð 	×Ñœ.¬,×*@Ñ*@Ø×,Ñ,°mð 	õ 	Er)   c                 óF  — t        di | j                  ¤Ž} |j                  di | j                  ¤Ž}| j	                  |j                  «       | j                  «       | j	                  |j                  «       | j                  «        |j                  di | j                  ¤Ž}| j	                  |j                  «       | j                  «       | j	                  |j                  «       | j                  «        |j                  di | j                  ¤Ž}| j	                  |j                  «       | j                  «       |j                  «       }| j                  ||«       | j	                  |j                  «       | j                  «       | j	                  |j                  «       | j                  «        |j                  di | j                  ¤Ž | j	                  |j                  «       | j                  «       | j	                  |j                  «       | j                  «       y)ztest copy() methodNrW   )r   rZ   r    r\   rX   rY   Úsample_12_dictr]   Úsample_123_dictÚassertIsNotr!   )rT   Úcc1Úcc2Úcc2bÚcc3Úcc4s         r'   Útest_04_copyzCryptContextTest.test_04_copy  s˜  € äÑ0˜T×/Ñ/Ñ0ˆð ˆc�h‰hÑ,˜×+Ñ+Ñ,ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;Ø×Ñ˜Ÿ™›¨×(;Ñ(;Ô<ð ˆs�x‰xÑ-˜$×,Ñ,Ñ-ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;Ø×Ñ˜Ÿ™›¨×)<Ñ)<Ô=ð ˆc�h‰hÑ,˜×+Ñ+Ñ,ˆØ×Ñ˜Ÿ™›¨×(<Ñ(<Ô=ð �h‰h‹jˆØ×Ñ˜˜cÔ"Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ð 	ˆ�
‰
Ñ(�T×'Ñ'Ò(Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;Ø×Ñ˜Ÿ™›¨×(;Ñ(;Õ<r)   c                 ód   — t        di | j                  ¤Ž}| j                  t        |«      d«       y)ztest repr()z!^<CryptContext at 0x-?[0-9a-f]+>$NrW   )r   rZ   ÚassertRegexÚrepr)rT   rƒ   s     r'   Útest_09_reprzCryptContextTest.test_09_repr+  s*   € äÑ0˜T×/Ñ/Ñ0ˆà×Ñœ˜c›Ð$GÕHr)   c                 óŽ  — t        «       }|j                  | j                  «       | j                  |j	                  «       | j                  «       |j                  | j
                  «       | j                  |j	                  «       | j                  «       |j                  | j
                  j                  d«      «       | j                  |j	                  «       | j                  «       | j                  t        |j                  d«       t        di | j                  ¤Ž}|j                  i d¬«       | j                  |j	                  «       | j                  «       t        «       }|j                  | j                  «       |j                  | j                  «       | j                  |j	                  «       | j                  «       y)z test load() / load_path() methodrb   NT)r!   rW   )
r   ÚloadrZ   rX   rY   rj   rl   ro   rp   r\   r^   s     r'   Útest_10_loadzCryptContextTest.test_10_load4  sH  € ô ‹nˆð 	�‰�×#Ñ#Ô$Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ð 	�‰�×&Ñ&Ô'Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ð 	�‰�×&Ñ&×-Ñ-¨gÓ6Ô7Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ð 	×Ñœ) S§X¡X¨tÔ4ô Ñ0˜T×/Ñ/Ñ0ˆØ�‰�˜DˆÔ!Ø×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô ‹nˆØ�‰�×#Ñ#Ô$Ø�‰�×#Ñ#Ô$Ø×Ñ˜Ÿ™›¨×(:Ñ(:Õ;r)   c                 óÐ  — t        ddgdd¬«      }|j                  «       }| j                  t        |j                  d¬«       | j                  |j                  «       |«       | j                  t        |j                  d¬«       | j                  |j                  «       |«       | j                  t        |j                  d	¬
«       | j                  |j                  «       |«       y)z$test load() errors restore old stater,   r@   iˆ  r0   )rK   r4   T)Útoo__many__key__parts)Úfake_context_optioni'  ©rJ   N)r   Ú	to_stringro   rp   r!   rX   ÚKeyErrorÚ
ValueError)rT   ÚccÚresults      r'   Útest_11_load_rollbackz&CryptContextTest.test_11_load_rollback_  s»   € ô ˜;¨Ð7Ø)-Ø ôˆð —‘“ˆð 	×Ñœ) R§Y¡YÀdÐÔKØ×Ñ˜Ÿ™›¨Ô0ð
 	×Ñœ( B§I¡IÀ4ÐÔHØ×Ñ˜Ÿ™›¨Ô0ð 	×Ñœ* b§i¡iÈ%ÐÔPØ×Ñ˜Ÿ™›¨Õ0r)   c                 ó  — t        di | j                  ¤Ž}|j                  «        | j                  |j	                  «       | j                  «       t        di | j                  ¤Ž} |j                  di | j
                  ¤Ž | j                  |j	                  «       | j                  «        |j                  di | j                  ¤Ž | j                  |j	                  «       | j                  «       t        di | j                  ¤Ž}|j                  | j
                  «       | j                  |j	                  «       | j                  «       t        di | j                  ¤Ž}|j                  | j                  «       | j                  |j	                  «       | j                  «       | j                  t        |j                  i i «       | j                  t        |j                  i dg¬«       | j                  t        |j                  d«       y)ztest update() methodr,   r9   NrW   )r   rZ   r!   rX   rY   r\   r€   r]   r�   Úsample_2_unicodero   rp   r^   s     r'   Útest_12_updatezCryptContextTest.test_12_updatew  sŽ  € ô Ñ0˜T×/Ñ/Ñ0ˆØ�
‰
ŒØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;ô Ñ0˜T×/Ñ/Ñ0ˆØˆ�
‰
Ñ(�T×'Ñ'Ò(Ø×Ñ˜Ÿ™›¨×(;Ñ(;Ô<ð 	ˆ�
‰
Ñ(�T×'Ñ'Ò(Ø×Ñ˜Ÿ™›¨×(<Ñ(<Ô=ô Ñ0˜T×/Ñ/Ñ0ˆØ�
‰
�4×%Ñ%Ô&Ø×Ñ˜Ÿ™›¨×(;Ñ(;Ô<ô Ñ0˜T×/Ñ/Ñ0ˆØ�
‰
�4×(Ñ(Ô)Ø×Ñ˜Ÿ™›¨×(;Ñ(;Ô<ð 	×Ñœ) S§Z¡Z°°RÔ8Ø×Ñœ) S§Z¡Z°¸k¸]ÐÔKð 	×Ñœ) S§Z¡Z°Õ6r)   c                 ó¼  — d„ }| j                  t        t        d¬«       | j                  t        t        d¬«       | j                  t        t        d¬«       | j                  t        t        d¬«       | j                  t        t        d¬«       | j                  t        t        d	¬
«        | j                   t        |fi ddi¤Ž t        d&i dddœ¤Ž}| j	                  |j                  d«      d«       t        d¬«      }| j	                   |d¬«      |«       | j	                   |d¬«      |«       | j	                   |d¬«      |«       | j	                   |d&i ddi¤Ž|«       | j	                   |d&i ddi¤Ž|«       t        d¬«      }| j	                   |d¬«      |«       | j	                   |d&i ddi¤Ž|«       t        d¬«      }| j	                   |d¬«      |«       | j	                   |d¬«      |«       | j	                   |d&i ddi¤Ž|«       | j	                   |d&i ddi¤Ž|«       t        d¬«      }| j	                   |d¬«      |«       | j	                   |d&i ddi¤Ž|«       t        ddgd¬ «      }| j                  t        |j                  d¬!«       | j                  t        t        dgd"¬#«       | j                  t        t        dgd"¬$«       y%)'ztest basic option parsingc                  ó4   — t        di | ¤Žj                  «       S )NrW   ©r   rY   )r$   s    r'   Úparsez/CryptContextTest.test_20_options.<locals>.parsež  s   € ÜÑ' $Ñ'×/Ñ/Ó1Ð1r)   r0   )Ú__Úx)Údefault__scheme__)Ú__option)Údefault____option)Ú__scheme__optioni0u  )Ú!category__scheme__option__invalidzadmin.context__schemesr-   úmd5_crypt,des_cryptr,   )r2   zadmin.context__defaultÚadminr>   )Úcontext__default)Údefault__context__defaultzcontext.defaultzdefault.context.default©Úadmin__context__defaultzadmin.context.default©r4   )Údefault__all__vary_roundszall.vary_roundszdefault.all.vary_rounds)Úadmin__all__vary_roundszadmin.all.vary_roundsr?   ÚP)rL   )Úmd5_crypt__identÚxx)r2   Údes_crypt__salt)r2   Ú	all__saltNrW   )ro   rp   r   r•   rX   Údefault_schemeÚdictr    )rT   r    r_   r˜   s       r'   Útest_20_optionsz CryptContextTest.test_20_optionsœ  sÓ  € ò	2ð 	×Ñœ)¤\°cÐÔ:Ø×Ñœ)¤\ÀSÐÔIð 	×Ñœ)¤\¸CÐÔ@Ø×Ñœ)¤\ÀSÐÔIð 	×Ñœ)¤\ÀCÐÔHð 	×Ñœ)¤\Ø>Cð 	ô 	Eð
 	ˆ×Ñœ( Eñ 	DØ5°kÐBò	Däñ EÐ(=Ø7BñDñ Eˆà×Ñ˜×+Ñ+¨GÓ4°kÔBô ˜kÔ*ˆØ×Ñ™ {Ô3°VÔ<Ø×Ñ™°Ô<¸fÔEØ×Ñ™¸ÔEÀvÔNØ×Ñ™ÑAÐ"3°KÐ!@ÑAÀ6ÔJØ×Ñ™ÑIÐ";¸KÐ!HÑIÈ6ÔRô ¨kÔ:ˆØ×Ñ™°{ÔCÀVÔLØ×Ñ™ÑGÐ"9¸+Ð!FÑGÈÔPô  sÔ+ˆØ×Ñ™°Ô4°fÔ=Ø×Ñ™¸Ô=¸vÔFØ×Ñ™Ñ9Ð"3°CÐ!8Ñ9¸6ÔBØ×Ñ™ÑAÐ";¸CÐ!@ÑAÀ6ÔJô ¨cÔ2ˆØ×Ñ™°sÔ;¸VÔDØ×Ñ™Ñ?Ð"9¸#Ð!>Ñ?ÀÔHô ˜H kÐ2À#ÔFˆØ×Ñœ( C§H¡H¸sÐÔCð 	×Ñœ(¤L¸;¸-ØBFð 	ô 	Hà×Ñœ(¤L¸;¸-Ø<@ð 	õ 	Br)   c                 ó  — t        d¬«      }| j                  |j                  «       d«       t        ddg¬«      }| j                  |j                  «       d«       t        d¬«      }| j                  |j                  «       d«       t        t        j                  t        j
                  g¬«      }| j                  |j                  «       d«       | j                  t        t         t        j                  g¬«        G d„ d	t        j                  «      }| j                  t        t         |g¬«        G d
„ dt        j                  «      }| j                  t        t         ||g¬«       | j                  t        t         dg¬«       y)z%test 'schemes' context option parsingNr9   rW   r,   r-   )r,   r-   z des_crypt, md5_crypt, c                   ó   — e Zd ZdZy)ú2CryptContextTest.test_21_schemes.<locals>.namelessN©Ú__name__Ú
__module__Ú__qualname__ÚnamerW   r)   r'   Únamelessr»   ÿ  s   „ Ø‰Dr)   rÁ   c                   ó   — e Zd ZdZy)ú1CryptContextTest.test_21_schemes.<locals>.dummy_1Údummy_1Nr¼   rW   r)   r'   rÄ   rÃ     s   „ Ø‰Dr)   rÄ   )Úadmin__context__schemes)r   rX   r2   r   r,   r-   ro   rp   ÚuhÚStaticHandlerr–   r•   )rT   r—   rÁ   rÄ   s       r'   Útest_21_schemesz CryptContextTest.test_21_schemesè  s4  € ô  $Ô'ˆØ×Ñ˜Ÿ™› rÔ*ô  ;°Ð"<Ô=ˆØ×Ñ˜Ÿ™›Ð'AÔBô Ð";Ô<ˆØ×Ñ˜Ÿ™›Ð'AÔBô ¤4§>¡>´4·>±>Ð"BÔCˆØ×Ñ˜Ÿ™›Ð'AÔBð 	×Ñœ)¤\¼B×<LÑ<LÐ;MÐÔNô	”r×'Ñ'ô 	à×Ñœ*¤l¸X¸JÐÔGô	”b×&Ñ&ô 	à×Ñœ(¤L¸7ÀGÐ:LÐÔMð 	×Ñœ(¤LØ3>°-ð 	õ 	Ar)   c                 ó  — dd„}t        dg¬«      }|j                  ddg¬«       | j                   ||«      dg«       t        dgddg¬«      }| j                   ||«      dg«       | j                  t        t         t
        j                  gddg¬«       t        dg d	¢¬«      }| j                   ||«      ddg«       | j                  t        t         dgdg¬
«       | j                  t        t         dgdg¬
«       | j                  t        t         ddgddg¬«       | j                  t        t         ddgdd¬«       | j                  t        t         ddgdd¬«       | j                  t        t         ddgdd¬«       | j                  t        t         ddgdd¬«       t        ddgddg ¬«       | j                  t        t         d¬«       t        dgddgdg¬«      }| j                   ||«      dg«       | j                   ||d«      dg«       | j                   ||d«      dg«       t        dgddgg ¬«      }| j                   ||«      dg«       | j                   ||d«      dg«       | j                   ||d«      g «       y)z(test 'deprecated' context option parsingNc                 ó€   — | j                  «       D �cg c]   }| j                  ||«      j                  r|‘Œ" c}S c c}w r   ©r2   ÚhandlerrG   )r_   ÚcategoryrÀ   s      r'   Úgetdepz3CryptContextTest.test_22_deprecated.<locals>.getdep  s?   € Ø%(§[¡[¤]ó ?¡]˜TØ—{‘{ 4¨Ó2×=Ò=ò  ]ñ ?ð ?ùò ?s   “%;r-   ©rG   r,   r9   )rG   r2   r¨   )r-   r,   r@   ©r2   rG   )r2   Úadmin__context__deprecated)r2   r3   rG   )r2   r3   rÑ   )r2   r­   rG   )r2   r­   rÑ   )r2   rG   r­   rÑ   é{   )rG   r2   rÑ   Úuserr©   r   )	r   r!   rX   ro   rp   r   r-   r•   r–   )rT   rÎ   r—   s      r'   Útest_22_deprecatedz#CryptContextTest.test_22_deprecated  sÆ  € ó	?ô
  k ]Ô3ˆØ
�	‰	˜;¨Ð4ˆ	Ô5Ø×Ñ™ › [ MÔ2ô  k ]¸[È+Ð<VÔWˆØ×Ñ™ › k ]Ô3ð 	×Ñœ)¤\¼t¿~¹~Ð>NØ#.°Ð"<ð 	ô 	>ô Ð%:ÒDnÔoˆØ×Ñ™ › k°;Ð%?Ô@ð 	×Ñœ(¤L¸;¸-Ø>I¸]ð 	ô 	Lð 	×Ñœ*¤lØ#. -Ø&1 ]ð 	ô 	4ð 	×Ñœ*¤lØ#.°Ð"<Ø6AÀ;Ð5Oð 	ô 	Qð 	×Ñœ*¤lØ#.°Ð"<Ø"-Ø%0ð 	ô 	2ð 	×Ñœ*¤lØ#.°Ð"<Ø"-Ø5@ð 	ô 	Bð 	×Ñœ*¤lØ#.°Ð"<Ø2=Ø%0ð 	ô 	2ð 	×Ñœ*¤lØ#.°Ð"<Ø2=Ø5@ð 	ô 	Bô 	Ø#.°Ð"<Ø%0Ø2=Ø57õ		9ð 	×Ñœ)¤\¸cÐÔBô  k ]Ø#.°Ð"<Ø6A°]ôˆð 	×Ñ™ › k ]Ô3Ø×Ñ™  FÓ+¨k¨]Ô;Ø×Ñ™  GÓ,¨{¨mÔ<ô  k ]Ø#.°Ð"<Ø57ôˆð 	×Ñ™ › k ]Ô3Ø×Ñ™  FÓ+¨k¨]Ô;Ø×Ñ™  GÓ,¨bÕ1r)   c                 ó\  — | j                  t        d¬«      j                  «       t        d¬«      «       t        dddg¬«      }| j                  |j	                  «       d«       t        t
        j                  ddg¬«      }| j                  |j	                  «       d«       t        ddg¬«      }| j                  |j	                  «       d«       |j                  d¬«       | j                  |j	                  «       d«       | j                  t        t        dgd¬«       | j                  t        t        d¬«       t        dddgd¬	«      }| j                  |j	                  «       d«       | j                  |j	                  d
«      d«       | j                  |j	                  d«      d«       y)z%test 'default' context option parsingr-   r>   r,   )r3   r2   r9   rÏ   )r2   r3   é   )r3   r2   r­   rÓ   r©   N)rX   r   rY   r·   r¶   r   r-   r!   ro   r•   rp   r^   s     r'   Útest_23_defaultz CryptContextTest.test_23_defaulth  sz  € ð 	×Ñœ¨kÔ:×BÑBÓDÜ kÔ2ô	4ô  ;¸ÀkÐ8RÔSˆØ×Ñ˜×+Ñ+Ó-¨{Ô;ô ¤4§>¡>¸KÈÐ;UÔVˆØ×Ñ˜×+Ñ+Ó-¨{Ô;ô  K°Ð#=Ô>ˆØ×Ñ˜×+Ñ+Ó-¨{Ô;Ø�
‰
˜kˆ
Ô*Ø×Ñ˜×+Ñ+Ó-¨{Ô;ð 	×Ñœ(¤L¸;¸-Ø:Eð 	ô 	Gð 	×Ñœ)¤\¸1ÐÔ=ô  ;Ø$/°Ð#=Ø3>ô@ˆð 	×Ñ˜×+Ñ+Ó-¨{Ô;Ø×Ñ˜×+Ñ+¨FÓ3°[ÔAØ×Ñ˜×+Ñ+¨GÓ4°kÕBr)   c                 óú   — d„ }| j                   |d«      d«       | j                   |d«      d«       | j                   |d«      d«       | j                   |d«      d«       | j                   |d«      d«       y)z&test 'vary_rounds' hash option parsingc                 ó<   — t        | ¬«      j                  «       d   S )Nr®   r4   rŸ   )Úvs    r'   r    z3CryptContextTest.test_24_vary_rounds.<locals>.parse�  s   € Ü°Ô3×;Ñ;Ó=Ð>PÑQÐQr)   r0   z0.1z10%iè  Ú1000N)rX   )rT   r    s     r'   Útest_24_vary_roundsz$CryptContextTest.test_24_vary_rounds�  sr   € ò	Rð 	×Ñ™˜s› SÔ)Ø×Ñ™˜u› sÔ+ð 	×Ñ™˜u› sÔ+ð 	×Ñ™˜t› dÔ+Ø×Ñ™˜v›¨Õ-r)   Nc                 ó>   — | j                  t        ||«      |¬«       y )N)Úmsg)Ú
assertTruer   )rT   rÌ   ÚbaserÞ   s       r'   ÚassertHandlerDerivedFromz)CryptContextTest.assertHandlerDerivedFrom¡  s   € Ø�‰Ô,¨W°dÓ;ÀˆÕEr)   c                 ó”  — t        «       }| j                  |j                  «       d«       | j                  |j                  d¬«      d«       t        di | j                  ¤Ž}| j                  |j                  «       t	        | j
                  «      «       | j                  |j                  dd¬«      t	        | j                  «      «       t        |j                  d¬«      | j                  «      D ]   \  }}| j                  t        ||«      «       Œ" t        di | j                  ¤Ž}| j                  |j                  «       d«       y)ztest schemes() methodrW   T©Úresolve©rä   ÚunconfiguredN)r   rX   r2   rZ   ÚtupleÚsample_1_schemesÚsample_1_handlersÚziprß   r   r\   )rT   r_   r˜   Úcorrects       r'   Útest_30_schemesz CryptContextTest.test_30_schemes¤  s   € ô
 ‹nˆØ×Ñ˜Ÿ™›¨Ô+Ø×Ñ˜Ÿ™¨T˜Ó2°BÔ7ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™›¬¨d×.CÑ.CÓ(DÔEØ×Ñ˜Ÿ™¨TÀ˜ÓEÄuÈT×McÑMcÓGdÔeÜ" 3§;¡;°t ;Ó#<¸d×>TÑ>TÖU‰OˆF�GØ�O‰OÔ0°¸ÓAÕBð  Vô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™›¨Õ+r)   c                 óZ  — t        «       }| j                  t        |j                  «       t        di | j                  ¤Ž}| j                  |j                  «       d«       | j                  |j                  dd¬«      t        j                  «       | j                  |j                  d¬«      t        j                  «       t        di | j                  ¤Ž}| j                  t        |j                  «       t        | j                  ¬«      }| j                  |j                  «       d«       y)	ztest default_scheme() methodr-   Trå   rã   r9   r,   NrW   )r   ro   r•   r¶   rZ   rX   r   r-   rá   r\   rè   r^   s     r'   Útest_31_default_schemez'CryptContextTest.test_31_default_scheme¸  së   € ô
 ‹nˆØ×Ñœ( C×$6Ñ$6Ô7ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜×+Ñ+Ó-¨{Ô;Ø×Ñ˜×+Ñ+°DÀtÐ+ÓLÌdÏnÉnÔ]Ø×%Ñ% c×&8Ñ&8ÀÐ&8Ó&FÌÏÉÔWô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñœ( C×$6Ñ$6Ô7ô  4×#8Ñ#8Ô9ˆØ×Ñ˜×+Ñ+Ó-¨{Õ;r)   c                 óÒ  — t        «       }| j                  t        |j                  «       | j                  t        |j                  d«       t        di | j                  ¤Ž}| j                  |j                  d¬«      t        j                  «       | j                  |j                  «       t        j                  «       | j                  |j                  dd¬«      t        j                  «       | j                  |j                  d«      t        j                  «       | j                  t        |j                  d«       t        dd¬«      }| j                  |j                  d¬«      t        j                  «       | j                  |j                  «       t        j                  «       | j                  |j                  dd¬	«      t        j                  «       | j                  |j                  d¬
«      t        j                  «       | j                  |j                  dd¬	«      t        j                  «       | j                  |j                  d¬
«      t        j                  «       t        ru| j                  |j                  t        d«      d¬	«      t        j                  «       | j                  |j                  t        d«      d¬	«      t        j                  «       yy)ztest handler() methodr-   T)ræ   r,   Úmysql323úsha256_crypt,md5_cryptr¬   Ústaff)rÍ   ræ   ©rÍ   r©   NrW   )r   ro   r•   rÌ   rZ   rX   r   r-   rá   r,   r@   r   r   r^   s     r'   Útest_32_handlerz CryptContextTest.test_32_handlerÐ  s  € ô ‹nˆØ×Ñœ( C§K¡KÔ0Ø×Ñœ( C§K¡K°Ô=ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™°$˜Ó7¼¿¹ÔHØ×%Ñ% c§k¡k£m´T·^±^ÔDð 	×Ñ˜Ÿ™ [¸t˜ÓDÄdÇnÁnÔUØ×%Ñ% c§k¡k°+Ó&>ÄÇÁÔOð 	×Ñœ( C§K¡K°Ô<ô Ð3È[ÔYˆØ×Ñ˜Ÿ™°$˜Ó7¼×9JÑ9JÔKØ×%Ñ% c§k¡k£m´T×5FÑ5FÔGà×Ñ˜Ÿ™¨gÀD˜ÓIÌ4×K\ÑK\Ô]Ø×%Ñ% c§k¡k¸7 kÓ&CÄT×EVÑEVÔWà×Ñ˜Ÿ™¨gÀD˜ÓIÌ4Ï>É>ÔZØ×%Ñ% c§k¡k¸7 kÓ&CÄT×EVÑEVÔWõ Ø×Ñ˜SŸ[™[´!°G³*È4˜[ÓPÔRV×RcÑRcÔdØ×Ñ˜SŸ[™[´!°G³*È4˜[ÓPÔRV×R`ÑR`Õað r)   c                 ó"  — dd„}t        dg d¢ddgddd	dd
gddd¬«
      }| j                  |j                  j                  d«       | j                   ||d«      t	        ddd	¬«      «       | j                   ||dd«      t	        ddd	¬«      «       | j                   ||dd«      t	        dd¬«      «       | j                   ||d«      t	        dd¬«      «       | j                   ||dd«      t	        dd¬«      «       | j                   ||dd«      t	        dd¬«      «       | j                   ||d
«      t	        d¬«      «       | j                   ||d
d«      t	        d¬«      «       | j                   ||d
d«      t	        dd¬«      «       y)z*test internal _get_record_options() methodNc                 ó@   — | j                   j                  ||«      d   S )Nr   )Ú_configÚ_get_record_options_with_flag)r_   ÚschemerÍ   s      r'   Úoptionsz1CryptContextTest.test_33_options.<locals>.options÷  s   € Ø—;‘;×<Ñ<¸VÀXÓNÈqÑQÐQr)   T)r/   r,   r.   r/   r,   r0   çš™™™™™É?i N  r.   çš™™™™™©?g333333Ó?r1   )
Útruncate_errorr2   rG   r4   rH   r7   rÑ   r°   Úadmin__bsdi_crypt__vary_roundsÚadmin__sha512_crypt__max_rounds)r©   )rG   Úvary_roundsÚ
max_roundsrÓ   r©   )r   r  )rG   rý   )r   )r   rG   r   )r   rX   r÷   Ú
categoriesr·   )rT   rú   r‡   s      r'   Útest_33_optionsz CryptContextTest.test_33_optionsô  s¼  € ó	Rô
 ØÚBØ(¨+Ð6Ø"Ø$'Ø',Ø+6¸Ð)FØ&*Ø+.Ø.3ô
ˆð 	×Ñ˜Ÿ™×/Ñ/°Ô<ð 	×Ñ™  nÓ5´tØØØô8
ô 	ð 	×Ñ™  n°fÓ=¼tØØØô@
ô 	ð 	×Ñ™  n°gÓ>ÄàØôA
ô 	ð 	×Ñ™  kÓ2´DØØô5
ô 	ð
 	×Ñ™  k°6Ó:¼DØØô=
ô 	ð
 	×Ñ™  k°7Ó;¼TØØô>
ô 	ð 	×Ñ™  lÓ3´TØô6
ô 	ð 	×Ñ™  l°FÓ;¼TØô>
ô 	ð 	×Ñ™  l°GÓ<¼dØØô?
õ 	r)   c                 óÚ   — t        di | j                  ¤Ž}| j                  |j                  «       | j                  «       | j                  |j                  d¬«      | j                  «       y)ztest to_dict() methodTrã   NrW   )r   rZ   rX   rY   r[   r^   s     r'   Útest_34_to_dictz CryptContextTest.test_34_to_dictC  sT   € ô Ñ0˜T×/Ñ/Ñ0ˆØ×Ñ˜Ÿ™›¨×(:Ñ(:Ô;Ø×Ñ˜Ÿ™¨T˜Ó2°D×4OÑ4OÕPr)   c                 óâ  — t        d
i | j                  ¤Ž}|j                  «       }t        s| j	                  || j
                  «       t        j                  |«      }| j	                  |j                  «       | j                  «       |j                  d¬«      }| j	                  ||j                  dd«      «       ddl	m
} t        |dg«      }|j                  «       }| j                  |d«       y	)ztest to_string() methodzpassword-securityrh   r;   z[password-security]r   )ÚUnsaltedHashr-   zM# NOTE: the 'unsalted_test_hash' handler\(s\) are not registered with PasslibNrW   )r   rZ   r”   r   rX   rj   ri   rY   ÚreplaceÚ!passlib.tests.test_utils_handlersr  rŠ   )rT   r_   ÚdumpÚctx2Úotherr  Úctx3s          r'   Útest_35_to_stringz"CryptContextTest.test_35_to_stringJ  sÒ   € ô Ñ0˜T×/Ñ/Ñ0ˆØ�}‰}‹ˆõ Ø×Ñ˜T 4×#8Ñ#8Ô9ô ×'Ñ'¨Ó-ˆØ×Ñ˜Ÿ™›¨×);Ñ);Ô<ð —‘Ð&9�Ó:ˆØ×Ñ˜ §¡¨[Ð9NÓ OÔPõ 	CÜ˜\¨;Ð7Ó8ˆØ�~‰~ÓˆØ×Ñ˜ð  Cõ 	Dr)   rù   rÖ   rW   c                 óü  — t         j                  t         j                  t         j                  g}t	        |d¬«      }|D ]Ó  }|j                  d|j
                  ¬«      }| j                  |j                  |«      |j
                  «       | j                  |j                  |dd¬«      |«       | j                  |j                  |d¬«      |«       | j                  |j                  d|«      «       | j                  |j                  d|«      «       ŒÕ |j                  d«      }| j                  |j                  |«      d	«       |j                  d
|j                  «       «      }| j                  |j                  |«      d	«       |j                  d
|j                  «       d	¬«      }| j                  |j                  |«      d	«       | j                  t        |j                  d
|j                  «       d¬«       y)z-test basic hash/identify/verify functionalityé   ©r6   Útest©rù   Trå   rã   Únotestr-   Úsecretr,   N)r   r-   r,   r.   r   rÀ   rX   Úidentifyrá   rß   ÚverifyÚassertFalseÚgenhashÚ	genconfigro   r–   )rT   Úhandlersr—   ÚcryptÚhs        r'   Útest_40_basiczCryptContextTest.test_40_basicq  s}  € ä—N‘N¤D§N¡N´D·O±OÐDˆÜ˜(¸qÔAˆó ˆEØ—‘˜ u§z¡z�Ó2ˆAØ×Ñ˜RŸ[™[¨›^¨U¯Z©ZÔ8Ø×Ñ˜RŸ[™[¨°DÀt˜[ÓLÈeÔTØ×)Ñ)¨"¯+©+°aÀ¨+Ó*FÈÔNØ�O‰O˜BŸI™I f¨aÓ0Ô1Ø×Ñ˜RŸY™Y x°Ó3Õ4ð ð �G‰G�F‹OˆØ×Ñ˜Ÿ™ Q›¨Ô5ð �J‰J�x §¡£Ó0ˆØ×Ñ˜Ÿ™ Q›¨Ô5à�J‰J�x §¡£¸ˆJÓDˆØ×Ñ˜Ÿ™ Q›¨Ô5à×Ñœ* b§j¡j°(¸B¿L¹L»NÐS^ÐÕ_r)   c                 óº  — t        ddgddd¬«      }| j                  |j                  «       j                  d«      «       | j                  |j                  d¬«      j                  d	«      «       | j                  |j                  dd
¬«      j                  d«      «       | j                  |j                  dd¬«      j                  d	«      «       | j	                  |j                  dddd¬«      d«       t
        r„|j                  d¬«      }| j                  |j                  t        d
«      ¬«      j                  d«      «       | j                  |j                  t        d«      ¬«      j                  d	«      «       | j                  t        t        «       j                  «       | j                  t        t        «       j                  d¬«       | j                  t        |j                  d¬«       | j                  t        |j                  dd¬«       | j                  t        |j                  d¬«       | j                  t        |j                  d¬«       y)ztest genconfig() methodr-   r?   rE   rF   r±   )r2   rL   rM   Úadmin__phpass__identz$1$r  z$H$5r©   )rù   rÍ   z$P$5rò   ú........é   )rù   ÚsaltÚroundsÚidentz"$P$6........22zGEuacuPOqEpYPDeR0R/r>   ró   ÚfakerÖ   N)r   rß   r  Ú
startswithrX   r   r    r   ro   r•   rp   ©rT   r—   Úc2s      r'   Útest_41_genconfigz"CryptContextTest.test_41_genconfigŒ  sÔ  € ä ;°Ð"9Ø(+Ø12Ø/2ôˆð 	�‰˜Ÿ™›×1Ñ1°%Ó8Ô9ð 	�‰˜Ÿ™¨H˜Ó5×@Ñ@ÀÓHÔIð 	�‰˜Ÿ™¨H¸w˜ÓG×RÑRÐSYÓZÔ[Ø�‰˜Ÿ™¨H¸w˜ÓG×RÑRÐSYÓZÔ[ð 	×ÑØ�L‰L ¨u¸QÀcˆLÓJØ0ô	õ Ø—‘ �Ó*ˆBØ�O‰O˜BŸL™L´!°G³*˜LÓ=×HÑHÈÓPÔQØ�O‰O˜BŸL™L´!°G³*˜LÓ=×HÑHÈÓPÔQð 	×Ñœ(¤L£N×$<Ñ$<Ô=Ø×Ñœ(¤L£N×$<Ñ$<À[ÐÔQð 	×Ñœ( B§L¡L¸ÐÔ@Ø×Ñœ) R§\¡\¸!ÀgÐÔNØ×Ñœ) R§\¡\¸!ÐÔ<ð 	×Ñœ) R§\¡\¸AÐÕ>r)   c                 óÄ  — t        dg«      }|j                  d«      }| j                  D ])  \  }} | j                  t        |j
                  ||fi |¤Ž Œ+ t        dg«      }| j                  D ],  \  }}|€Œ	 | j                  t        |j
                  d|fi |¤Ž Œ. t        dg«      }| j                  t        |j
                  dd«       | j                  t        t        «       j
                  dd«       | j                  t        |j
                  d|d¬«       | j                  t        |j
                  d|d	¬«       | j                  t        |j                  d|d	¬
«       y)ztest genhash() methodr,   ÚstubNr  rð   r   r&  r  rÖ   ró   )r   r   Únonstring_vectorsro   rp   r  r•   r  )rT   r—   r   r  r$   Úconfigs         r'   Útest_42_genhashz CryptContextTest.test_42_genhash½  s:  € ô ˜;˜-Ó(ˆØ�w‰w�v‹ˆØ ×2Ô2‰LˆF�DØˆD×Ñœi¨¯©°V¸TÑJÀTÓJð 3ô ˜;˜-Ó(ˆØ ×2Ô2‰LˆF�DØˆ|ð ØˆD×Ñœi¨¯©°X¸vÑNÈÓNð 3ô ˜:˜,Ó'ˆØ×Ñœ) R§Z¡Z°¸Ô>ð 	×Ñœ(¤L£N×$:Ñ$:¸HÀfÔMð 	×Ñœ( B§J¡J°¸$ÀvÐÔNØ×Ñœ) R§Z¡Z°¸4ÈÐÔJð 	×Ñœ) R§\¡\°8¸TÈAÐÕNr)   c                 óx  — t        di | j                  ¤Ž}|j                  d«      }| j                   |j                  d«      «       | j                  |j                  d|«      «       | j                  |j                  d|«      «       | j                  t        |j                  d¬«       t        dg«      }| j                  D ](  \  }} | j                  t        |j                  |fi |¤Ž Œ* | j                  t        t        «       j                  d«       | j                  t        |j                  dd¬	«       y
)ztest hash() methodÚpasswordz$5$rounds=3000$Ú	passwordxi   ©rK   r,   r  rÖ   ró   NrW   )r   Úsample_4_dictr   rß   r'  r  r  ro   r–   r    r-  rp   r•   )rT   r—   r   r  r$   s        r'   Útest_43_hashzCryptContextTest.test_43_hashá  s  € ô Ñ/˜D×.Ñ.Ñ/ˆØ�w‰w�zÓ"ˆØ�‰˜˜Ÿ™Ð(9Ó:Ô;Ø�‰˜Ÿ	™	 *¨dÓ3Ô4Ø×Ñ˜Ÿ™ ;°Ó5Ô6ð 	×Ñœ* b§g¡gØ7;ð 	ô 	=ô ˜;˜-Ó(ˆØ ×2Ô2‰LˆF�DØˆD×Ñœi¨¯©°&ÑA¸DÓAð 3ð 	×Ñœ(¤L£N×$7Ñ$7¸ÔBð 	×Ñœ) R§W¡W¨hÀÐÕCr)   c           	      ó  — t        di | j                  ¤Ž}| j                  dg«      5  | j                  |j	                  ddd¬«      d«       ddd«       | j                  dg«      5  | j                  |j	                  dddd¬	«      d
«       ddd«       | j                  dg«      5  | j                  |j	                  ddd¬«      d«       ddd«       | j                  dg«      5  | j                  |j	                  ddd¬«      d«       ddd«       | j                  t        |j                  dd¬«       | j                  t        |j                  dd¬«       y# 1 sw Y   �ŒxY w# 1 sw Y   ŒÛxY w# 1 sw Y   Œ¨xY w# 1 sw Y   ŒuxY w)z;test hash() method -- legacy 'scheme' and settings keywordsú"passing settings to.*is deprecatedr1  r?   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Ö   rW   )r   r4  ÚassertWarningListrX   r   ro   r•   rp   )rT   Úuse_16_legacyr—   s      r'   Útest_43_hash_legacyz$CryptContextTest.test_43_hash_legacyý  sk  € äÑ/˜D×.Ñ.Ñ/ˆð  ×#Ñ#Ð%IÐ$JÕKØ×ÑØ—‘˜
¨8¸%�Ó@Ø4ô÷ Lð
 ×#Ñ#Ð%IÐ$JÕKØ×ÑØ—‘˜
¨8¸%Às�ÓKØ4ô÷ Lð ×#Ñ#Ð%IÐ$JÕKØ×ÑØ—‘˜
¨4°f�Ó=ØQô÷ Lð ×#Ñ#Ð%IÐ$JÕKØ×ÑØ—‘˜
¨4°f�Ó=ØQô÷ Lð 	×Ñœ( B§G¡G¨X¸fÐÔEØ×Ñœ) R§W¡W¨h¸qÐÕA÷; LÑKú÷
 LÐKú÷ LÐKú÷ LÐKús/   ¨%EÁ'&E'Â'%E3Ã&%E?ÅE$Å'E0Å3E<Å?Fc                 ó  — g d¢}t        |d¬«      }| j                  |j                  d«      d«       | j                  t        |j                  dd¬«       t        dg«      }| j
                  D ](  \  }} | j                  t        |j                  |fi |¤Ž Œ* t        «       }| j                  |j                  d	«      d«       | j                  t        |j                  d	d¬«       | j                  t        |j                  dd
¬«       y)ztest identify() border cases©r-   r,   r.   r  r  z$9$232323123$1287319827NT)Úrequiredr,   r   rÖ   ró   )	r   rX   r  ro   r–   r-  rp   ÚassertIsr•   )rT   r  r—   r   r$   s        r'   Útest_44_identifyz!CryptContextTest.test_44_identify.  sã   € â;ˆÜ˜(¸qÔAˆð 	×Ñ˜Ÿ™Ð%>Ó?ÀÔFØ×Ñœ* b§k¡kÐ3LÐW[ÐÔ\ô ˜;˜-Ó(ˆØ×0Ô0‰JˆD�$ØˆD×Ñœi¨¯©°dÑC¸dÓCð 1ô ‹^ˆØ�‰�b—k‘k &Ó)¨4Ô0Ø×Ñœ( B§K¡K°À$ÐÔGð 	×Ñœ) R§[¡[°$ÀÐÕCr)   c                 ó®  — g d¢}t        |d¬«      }t        j                  j                  d«      }| j                  |j	                  d|«      «       | j                  |j	                  d|«       «       | j                  |j	                  d|d¬«      «       | j                  |j	                  d|d¬«       «       | j                  t        |j                  d|d¬«       | j                  t        |j                  d	d
«       t        dg«      }|j                  d	«      x}}| j                  D ])  \  }} | j
                  t        |j                  ||fi |¤Ž Œ+ | j                  |j	                  d«      «       t        dg«      }| j                  D ],  \  }}|€Œ	 | j
                  t        |j                  d|fi |¤Ž Œ. | j                  t        t        «       j                  dd«       | j                  t        |j                  d|d¬«       | j                  t        |j                  d|d¬«       | j                  t        |j                  d|d¬«       y)ztest verify() scheme kwdr@  r  r  r  r  r-   r  r.   r,  z$6$232323123$1287319827r,   Nr  r   r&  rÖ   ró   )r   r   r-   rß   r  ro   r–   r-  rp   r  r•   )rT   r  r—   r  Úrefhashr  r$   s          r'   Útest_45_verifyzCryptContextTest.test_45_verifyH  sÿ  € â;ˆÜ˜(¸qÔAˆä�N‰N×Ñ Ó'ˆð 	�‰˜Ÿ	™	 &¨!Ó,Ô-Ø�‰˜BŸI™I h°Ó2Ð2Ô3ð 	�‰˜Ÿ	™	 &¨!°K˜	Ó@ÔAØ�‰˜BŸI™I h°¸+˜IÓFÐFÔGð 	×Ñœ* b§i¡i°¸À<ÐÔPð 	×Ñœ* b§i¡i°Ð9RÔSô ˜;˜-Ó(ˆØ—g‘g˜f“oÐ%ˆˆGØ ×2Ô2‰LˆF�DØˆD×Ñœi¨¯©°F¸AÑFÀÓFð 3ð 	×Ñ˜Ÿ™ 6¨4Ó0Ô1ô ˜;˜-Ó(ˆØ×-Ô-‰GˆAˆtØˆyØØˆD×Ñœi¨¯©°H¸aÑHÀ4ÓHð .ð 	×Ñœ(¤L£N×$9Ñ$9¸8ÀVÔLð 	×Ñœ( B§I¡I¨x¸ÈÐÔPØ×Ñœ) R§Y¡Y°¸'È!ÐÔLð 	×Ñœ) R§Y¡Y°¸'ÈAÐÕNr)   c                 ó6  ‡— t        di | j                  ¤Ž}| j                  |j                  d«      «       | j	                  |j                  d«      «       | j                  |j                  d«      «       | j	                  |j                  d«      «       | j	                  |j                  d«      «       | j                  |j                  d«      «       g Š G ˆfd„dt
        j                  «      }t        |g«      }|j                  d	«      x}}| j	                  |j                  |«      «       | j                  ‰|d
fg«       ‰d
d
…= | j	                  |j                  |d¬«      «       | j                  ‰|dfg«       ‰d
d
…= | j                  |j                  |d¬«      «       | j                  ‰|dfg«       ‰d
d
…= t        dg«      }| j                  D ](  \  }} | j                  t        |j                  |fi |¤Ž Œ* | j                  t        t        «       j                  d«       | j                  t        |j                  |d¬«       | j                  t        |j                  |d¬«       | j                  t        |j                  |d¬«       y
)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                   ó2   •— e Zd ZdZdZedˆ fd„	«       Zd„ Zy)ú4CryptContextTest.test_46_needs_update.<locals>.dummyÚdummyÚ@Nc                 ó4   •— ‰j                  ||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Ø ‘~Ð%r)   c                 óŽ   — ddl m} t        |t        «      r|j	                  d«      }t         ||«      j                  «       «      S )Nr   )Úmd5rb   )ÚhashlibrT  Ú
isinstancer   rl   r   Ú	hexdigest)rT   r  rT  s      r'   Ú_calc_checksumzCCryptContextTest.test_46_needs_update.<locals>.dummy._calc_checksum˜  s5   € Ý'Ü˜f¤gÔ.Ø#Ÿ]™]¨7Ó3�FÜ$¡S¨£[×%:Ñ%:Ó%<Ó=Ð=r)   r   )r½   r¾   r¿   rÀ   Ú_hash_prefixÚclassmethodrR  rX  )rQ  s   €r'   rK  rJ  �  s$   ø„ ØˆDØˆLàô&ó ð&ó>r)   rK  r  NÚbob)r  rN  r,   r   r&  r  rÖ   ró   rW   )r   r4  rß   rR  r  rÆ   rÇ   r   rX   r-  ro   rp   r•   )rT   r—   rK  r_   r   rE  r$   rQ  s          @r'   Útest_46_needs_updatez%CryptContextTest.test_46_needs_update{  s=  ø€ äÑ/˜D×.Ñ.Ñ/ˆð 	�‰˜Ÿ™¨Ó8Ô9Ø×Ñ˜Ÿ™Ð)MÓNÔOð 	�‰˜Ÿ™Ð(uÓvÔwØ×Ñ˜Ÿ™Ð)vÓwÔxð 	×Ñ˜Ÿ™Ð)vÓwÔxØ�‰˜Ÿ™Ð(uÓvÔwð
 ˆö	>”B×$Ñ$ô 	>ô  ˜E˜7Ó#ˆØŸ™ FÓ+Ð+ˆˆwØ×Ñ˜×)Ñ)¨$Ó/Ô0Ø×Ñ˜¨¨T { mÔ4ØšˆNð 	×Ñ˜×)Ñ)¨$°uÐ)Ó=Ô>Ø×Ñ˜¨¨U | nÔ5ØšˆNð 	�‰˜×(Ñ(¨°dÐ(Ó;Ô<Ø×Ñ˜¨¨T { mÔ4ØšˆNô ˜;˜-Ó(ˆØ×0Ô0‰JˆD�$ØˆD×Ñœi¨¯©¸$ÑGÀ$ÓGð 1ð 	×Ñœ(¤L£N×$?Ñ$?ÀÔHð 	×Ñœ( B§O¡O°WÀVÐÔLØ×Ñœ) R§_¡_°gÀaÐÔHð 	×Ñœ) R§_¡_°gÈÐÕJr)   c                 ó8  — t        di | j                  ¤Ž}|j                  d«      j                  d«      }|j                  d«      j                  d«      }|j	                  d|«      \  }}| j                  |«       | j                  |d«       |j	                  d|«      \  }}| j                  |«       | j                  |d«       |j	                  d|«      \  }}| j                  |«       | j                  |j                  |«      d«       |j	                  d|«      \  }}| j                  |«       | j                  |d«       t        dg«      }|j                  d«      x}}| j                  D ])  \  }}	 | j                  t        |j                  ||fi |	¤Ž Œ+ | j                  |j	                  d«      d«       t        dg«      }| j                  D ],  \  }}	|€Œ	 | j                  t        |j                  d|fi |	¤Ž Œ. | j                  t        t        «       j                  dd	«       | j                  t        |j                  d|d
¬«       | j                  t        |j                  d|d¬«       | j                  t        |j                  d|d¬«       y)ztest verify_and_update()r,   r1  r@   Ú	wrongpassNr,  ©FNr  r   r&  r  rÖ   ró   rW   )r   r4  rÌ   r   Úverify_and_updater  rB  rß   r  r-  ro   rp   rX   r•   )
rT   r—   Úh1Úh2ÚokÚnew_hashr   rE  r  r$   s
             r'   Útest_47_verify_and_updatez*CryptContextTest.test_47_verify_and_updateÂ  sa  € äÑ/˜D×.Ñ.Ñ/ˆð �Z‰Z˜Ó$×)Ñ)¨*Ó5ˆØ�Z‰Z˜Ó'×,Ñ,¨ZÓ8ˆð ×+Ñ+¨K¸Ó<‰ˆˆHØ×Ñ˜ÔØ�‰�h Ô%ð ×+Ñ+¨K¸Ó<‰ˆˆHØ×Ñ˜ÔØ�‰�h Ô%ð ×+Ñ+¨J¸Ó;‰ˆˆHØ�‰˜ÔØ�‰˜Ÿ™ HÓ-¨~Ô>ð ×+Ñ+¨J¸Ó;‰ˆˆHØ�‰˜ÔØ�‰�h Ô%ô ˜;˜-Ó(ˆØŸ™ ›Ð(ˆˆwØ ×2Ô2‰LˆF�DØˆD×Ñœi¨×)=Ñ)=¸vÀtÑTÈtÓTð 3ð 	×Ñ˜×-Ñ-¨f°dÓ;¸]ÔKô ˜;˜-Ó(ˆØ×0Ô0‰JˆD�$Øˆ|ØØˆD×Ñœi¨×)=Ñ)=¸xÈÑVÐQUÓVð 1ð 	×Ñœ(¤L£N×$DÑ$DÀhÐPVÔWð 	×Ñœ( B×$8Ñ$8¸(ÀGÐTZÐÔ[Ø×Ñœ) R×%9Ñ%9¸8ÀWÐUVÐÔWð 	×Ñœ) R×%9Ñ%9¸8ÀWÐWXÐÕYr)   c                 óô  — ddl m}m}m} |j	                  d«      }|j	                  dd¬«      }|j	                  dd¬«      }t        ||g«      }| j                  |j                  t        «       «       | j                  |j                  |j	                  d«      «      d«       | j                  |j                  d|«      «       | j                  |j                  d|«      d«       | j                  d	g«      5  | j                  t        |j                  dd¬«       d
d
d
«       | j                  t        |j                  d|d¬«       | j                  t        |j                  d|d¬«       t        ||g«      }| j                  |j                  t        dg«      «       | j                  |j                  |j	                  d«      «      d«       | j                  |j                  d|«      «       | j                  |j                  d|«      d«       | j                  |j                  |j	                  dd¬«      «      d«       | j                  |j                  d|d¬«      «       | j                  |j                  d|d¬«      d«       | j                  d	g«      5  | j                  t        |j                  dd¬«       d
d
d
«       | j                  t        |j                  d|d¬«       | j                  t        |j                  d|d¬«       t        ||gd¬«      }	| j                  |	j                  t        dg«      «       | j                  t        |	j                  d«       | j                  t        |	j                  d|«       | j                  t        |	j                  d|«       | j                  |	j	                  dd¬«      |«       | j                  |	j                  d|d¬«      «       | j                  |	j                  d|d¬«      d«       | j                  |	j                  d|d¬«      d«       | j                  |	j                  d|d¬«      d|f«       y
# 1 sw Y   �ŒFxY w# 1 sw Y   �Œ®xY w)zLhash(), verify(), and verify_and_update() -- discard unused context keywordsr   )r,   r-   Úpostgres_md5r,  Úroot)rÓ   r©   r,   )TNr7  NrÓ   )ÚbadkwdÚautorÏ   r_  T)Úpasslib.hashr,   r-   rg  r   r   rX   Úcontext_kwdsÚsetrß   r  r  r`  r<  ro   rp   )
rT   r,   r-   rg  Údes_hashÚpg_root_hashÚpg_admin_hashrƒ   r„   r†   s
             r'   Útest_48_context_kwdsz%CryptContextTest.test_48_context_kwdsü  sÎ  € ÷
 	DÑCØ—>‘> &Ó)ˆØ#×(Ñ(¨°fÐ(Ó=ˆØ$×)Ñ)¨&°wÐ)Ó?ˆô
 ˜I yÐ1Ó2ˆØ×Ñ˜×)Ñ)¬3«5Ô1ð 	�‰˜	×*Ñ*¨3¯8©8°FÓ+;Ó<¸kÔJØ�‰˜Ÿ
™
 6¨8Ó4Ô5Ø×Ñ˜×.Ñ.¨v°xÓ@À,ÔOð ×#Ñ#Ð%IÐ$JÕKØ×Ñœi¨¯©°6ÀÐÔG÷ Là×Ñœ) S§Z¡Z°¸ÈÐÔOØ×Ñœ) S×%:Ñ%:¸FÀHÐSYÐÔZô
 ˜I |Ð4Ó5ˆØ×Ñ˜×)Ñ)¬3°¨x«=Ô9ð 	�‰˜	×*Ñ*¨3¯8©8°FÓ+;Ó<¸kÔJØ�‰˜Ÿ
™
 6¨8Ó4Ô5Ø×Ñ˜×.Ñ.¨v°xÓ@À,ÔOð 	�‰˜	×*Ñ*¨3¯8©8°FÀ¨8Ó+HÓIÈ;ÔWØ�‰˜Ÿ
™
 6¨8¸&˜
ÓAÔBØ×Ñ˜×.Ñ.¨v°xÀfÐ.ÓMÈ|Ô\ð ×#Ñ#Ð%IÐ$JÕKØ×Ñœi¨¯©°6À&ÐÔI÷ Là×Ñœ) S§Z¡Z°¸È&ÐÔQØ×Ñœ) S×%:Ñ%:¸FÀHÐU[ÐÔ\ô
 ˜L¨)Ð4ÀÔHˆØ×Ñ˜×)Ñ)¬3°¨x«=Ô9ð 	×Ñœ) S§X¡X¨vÔ6Ø×Ñœ) S§Z¡Z°¸ÔFØ×Ñœ) S×%:Ñ%:¸FÀLÔQð 	×Ñ˜Ÿ™ &¨v˜Ó6¸ÔEØ�‰˜Ÿ
™
 6¨<¸f˜
ÓEÔFØ×Ñ˜×.Ñ.¨v°|È&Ð.ÓQÐS_Ô`ð 	×Ñ˜×.Ñ.¨v°|È'Ð.ÓRÐTaÔbð 	×Ñ˜×.Ñ.¨v°xÀfÐ.ÓMØ Ð-õ	/÷_ LÑKú÷, LÑKús   Ã8$Q Ê$Q-Ñ Q*Ñ-Q7c                 óÄ	  — t        dgddd¬«      }d}|j                  dd«      }| j                  |j                  d«       | j                  |j                  d«       | j                  |j
                  d«       | j                  t        gdz  «      5  |j                  d	dd	¬
«      }ddd«       | j                  j                  d¬«      d|z   «       | j                  g «      5  | j                  |j                  dd¬«      d|z   «       ddd«       | j                  |j                  dd¬«      d|z   «       | j                  |j                  dd¬«      d|z   «       | j                  t        gdz  «      5  |j                  t        d«      d	z   dt        d«      d	z   ¬«      }ddd«       | j                  |j                  d¬«      d|z   «       | j                  g «      5  | j                  |j                  dd¬«      d|z   «       ddd«       | j                  |j                  dd¬«      d|z   «       | j                  |j                  dd¬«      d|z   «       | j                  |j                  d¬«      d|z   «       t        j                  j
                  }|j                  d|dz  ¬«      }| j                  |j                  d¬«      d||fz  «       |j                  dd¬«      }| j                  |j                  d¬«      d|z   «       | j                  t        |j                  d¬ «       |j                  d¬ «       |j                  d¬ «       | j                  t        |j                  d¬ «       t        dg¬!«      }| j                  t        |j                  dd¬"«       | j                  t        t         d#¬$«       | j                  t        t         d#¬%«       | j                  t        t         d#¬&«       | j                  t        t         d#¬ «       t        j                  j!                  «       }| j                  t"        t         d|¬$«       | j                  t"        t         d|¬%«       | j                  t"        t         d|¬&«       | j                  t"        t         d|¬ «       y# 1 sw Y   �Œ	xY w# 1 sw Y   �Œ±xY w# 1 sw Y   �Œ$xY w# 1 sw Y   �ŒÌxY w)'ztest rounds limitsr@   rD   rC   iÄ	  ©r2   rJ   rI   rK   z+...........................................Né   iô  )rJ   rI   rK   r9  ©r#  z$5$rounds=1000$nacl$r8  r:  z$5$rounds=1999$nacl$z$5$rounds=2000$nacl$r;  z$5$rounds=2001$nacl$g    eÍÍA)rI   rJ   rK   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Ö   )rK   rI   z$5$rounds=%d$nacl$%sr3  r9   )rJ   rI   r¢   r“   )rI   r®   )r   Ú_get_recordrX   Úmin_desired_roundsÚmax_desired_roundsÚdefault_roundsr<  r   r    r  Úintr   r@   ro   r–   ÚdatetimeÚnowrp   )rT   r—   ÚSTUBÚcustom_handlerr)  ÚdfÚbads          r'   Útest_50_rounds_limitsz&CryptContextTest.test_50_rounds_limitsQ  s{  € ä >Ð"2Ø37Ø37Ø7;ôˆð =ˆð Ÿ™¨¸Ó=ˆØ×Ñ˜×:Ñ:¸DÔAØ×Ñ˜×:Ñ:¸DÔAØ×Ñ˜×6Ñ6¸Ô=ð ×#Ñ#Ô%7Ð$8¸Ñ$:Õ;Ø—‘°#ÐPTØ9<ð ó >ˆB÷ <ð 	×Ñ˜Ÿ™¨6˜Ó2Ð4JÈTÑ4QÔRð ×#Ñ# BÕ'Ø×ÑØ—‘ D¨v�Ó6Ð8NÐQUÑ8UôW÷ (ð
 	×ÑØ�L‰L ¨6ˆLÓ2Ð4JÈTÑ4Qô	Sð 	×ÑØ�L‰L ¨6ˆLÓ2Ð4JÈTÑ4Qô	Sð ×#Ñ#Ô%7Ð$8¸Ñ$:Õ;Ø—‘´#°c³(¸3±,ÐY]Ü9<¸S»À#¹ð ó GˆB÷ <ð 	×Ñ˜Ÿ™¨6˜Ó2Ð4OÐRVÑ4VÔWð ×#Ñ# BÕ'Ø×ÑØ—‘ D¨v�Ó6Ð8NÐQUÑ8UôW÷ (ð
 	×ÑØ�L‰L ¨6ˆLÓ2Ð4JÈTÑ4Qô	Sð 	×ÑØ�L‰L ¨6ˆLÓ2Ð4JÈTÑ4Qô	Sð 	×Ñ˜Ÿ™¨6˜Ó2Ð4JÈTÑ4QÔRô ×Ñ×-Ñ-ˆØ�W‰W°$ÐQSÐUVÑQVˆWÓWˆØ×Ñ˜Ÿ™¨6˜Ó2Ð4JÈbÐRVÈZÑ4WÔXð �W‰W°$ÐQUˆWÓVˆØ×Ñ˜Ÿ™¨6˜Ó2Ð4JÈTÑ4QÔRð
 	×Ñœ* b§g¡gÈDÐÔQØ
�‰¨TˆÔ2Ø
�‰¨TˆÔ2Ø×Ñœ* b§g¡gÈDÐÔQô  >Ð"2Ô3ˆð 	×Ñœ* b§g¡gÈØ37ð 	ô 	9ð 	×Ñœ*¤lÈSÐÔQØ×Ñœ*¤lÈSÐÔQØ×Ñœ*¤lÀSÐÔIØ×Ñœ*¤lÐQTÐÔUô ×Ñ×#Ñ#Ó%ˆØ×Ñœ)¤\°>Ð\_ÐÔ`Ø×Ñœ)¤\°>Ð\_ÐÔ`Ø×Ñœ)¤\°>ÐTWÐÔXØ×Ñœ)¤\°>Ð`cÐÕd÷w <Ñ;ú÷ (Ñ'ú÷" <Ñ;ú÷ (Ñ'ús0   ÂR.Ã%'R;Å9-SÇ$'SÒ.R8Ò;SÓSÓSc                 óÈ  — t        dgddd¬«      }| j                  t        |j                  d¬«       | j                  t        |j                  d¬«       | j                  t        |j                  d	¬«       |j                  d
¬«      }| j	                  |j                  dd«      j                  d
«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d
«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       y)ztest linear vary roundsr@   iË  iÕ  rD   rs  éÿÿÿÿr®   ú-1%ú101%r   Nú0%rÖ   r8  r;  éd   z0.1%gü©ñÒMbP?iÎ  iÒ  ú100%ç      ð?©r   ro   r–   r    rX   rv  r   Úassert_rounds_ranger(  s      r'   Útest_51_linear_vary_roundsz+CryptContextTest.test_51_linear_vary_roundsÇ  s  € ä >Ð"2Ø37Ø37Ø7;ôˆð 	×Ñœ* b§g¡gÀÐÔCØ×Ñœ* b§g¡gÀÐÔFØ×Ñœ* b§g¡gÀÐÔGð �W‰W aˆWÓ(ˆØ×Ñ˜Ÿ™¨¸Ó=×IÑIÈ1ÔMØ× Ñ   ^°T¸4Ô@à�W‰W dˆWÓ+ˆØ×Ñ˜Ÿ™¨¸Ó=×IÑIÈ1ÔMØ× Ñ   ^°T¸4Ô@ð �W‰W aˆWÓ(ˆØ×Ñ˜Ÿ™¨¸Ó=×IÑIÈ1ÔMØ× Ñ   ^°T¸4Ô@Ø�W‰W cˆWÓ*ˆØ×Ñ˜Ÿ™¨¸Ó=×IÑIÈ3ÔOØ× Ñ   ^°T¸4Ô@ð �W‰W fˆWÓ-ˆØ×Ñ˜Ÿ™¨¸Ó=×IÑIÈ5ÔQØ× Ñ   ^°T¸4Ô@Ø�W‰W fˆWÓ-ˆØ×Ñ˜Ÿ™¨¸Ó=×IÑIÈ3ÔOØ× Ñ   ^°T¸4Õ@r)   c                 ó  — t        dgddd¬«      }| j                  t        |j                  d¬«       | j                  t        |j                  d¬«       | j                  t        |j                  d	¬«       |j                  d
¬«      }| j	                  |j                  dd«      j                  d
«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d
«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       |j                  d¬«      }| j	                  |j                  dd«      j                  d«       | j                  |ddd«       y)ztest log2 vary roundsÚbcrypté   rB   é   )r2   Ú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¡gÀÐÔCØ×Ñœ* b§g¡gÀÐÔFØ×Ñœ* b§g¡gÀÐÔGð �W‰W aˆWÓ(ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀQÔGØ× Ñ   X¨r°2Ô6à�W‰W dˆWÓ+ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀQÔGØ× Ñ   X¨r°2Ô6ð �W‰W aˆWÓ(ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀQÔGØ× Ñ   X¨r°2Ô6Ø�W‰W cˆWÓ*ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀSÔIØ× Ñ   X¨r°2Ô6ð �W‰W dˆWÓ+ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀTÔJØ× Ñ   X¨r°2Ô6à�W‰W eˆWÓ,ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀTÔJØ× Ñ   X¨r°2Ô6à�W‰W eˆWÓ,ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀSÔIØ× Ñ   X¨r°2Ô6à�W‰W fˆWÓ-ˆØ×Ñ˜Ÿ™¨°$Ó7×CÑCÀSÔIØ× Ñ   X¨r°2Õ6r)   c                 ó€  — |j                  |«      }|j                  dd |j                  z  }t        «       }t	        d«      D ]A  }|j                  ||¬«      }	|j                  |	«      j                  }
|j                  |
«       ŒC | j                  t        |«      |d«       | j                  t        |«      |d«       y)z2helper to check vary_rounds covers specified ranger   rÖ   i,  ru  z"vary_rounds had wrong lower limit:z"vary_rounds had wrong upper limit:N)rÌ   Údefault_salt_charsÚmax_salt_sizerm  r   r  ri   r$  ÚaddrX   ÚminÚmax)rT   Úcontextrù   ÚlowerÚupperrÌ   r#  ÚseenÚir  Úrs              r'   r‹  z$CryptContextTest.assert_rounds_range  sª   € ð —/‘/ &Ó)ˆØ×)Ñ)¨!¨AÐ.°×1FÑ1FÑFˆÜ‹uˆÜ˜–ˆAØ×!Ñ! &¨tÐ!Ó4ˆAØ×#Ñ# AÓ&×-Ñ-ˆAØ�H‰H�Q�Kð ð 	×Ñœ˜T› EÐ+OÔPØ×Ñœ˜T› EÐ+OÕPr)   c                 ó–  — t        j                  ddt        ¬«       t        dg¬«      }| j	                  |j
                  d«       | j	                  |j                  d¬«      j
                  d«       | j	                  |j                  d	¬«      j
                  d«       | j	                  |j                  d
¬«      j
                  d«       y)zharden_verify -- parsingrO   z.*harden_verify.*ró   r@   r9   NÚ )Úharden_verifyÚtrueÚfalse)rR   rS   ÚDeprecationWarningr   rX   r¥  Úusingr^   s     r'   Útest_harden_verify_parsingz+CryptContextTest.test_harden_verify_parsing-  s    € ä×Ñ Ð*=Ü);õ	=ô  NÐ#3Ô4ˆØ×Ñ˜×*Ñ*¨DÔ1Ø×Ñ˜Ÿ™°˜Ó4×BÑBÀDÔIØ×Ñ˜Ÿ™°˜Ó8×FÑFÈÔMØ×Ñ˜Ÿ™°˜Ó9×GÑGÈÕNr)   c                 óÚ   — d}d}t         j                  «       }||_        t        |g¬«      }|j	                  «        t        |j                  «      \  }}| j                  ||||z  ¬«       y)z'
        dummy_verify() method
        rü   rû   r9   )ÚdeltaN)Ú	DelayHashr©  Údelayr   Údummy_verifyr   ÚassertAlmostEqual)rT   ÚexpectedÚaccuracyrÌ   r_   ÚelapsedÚ_s          r'   Útest_dummy_verifyz"CryptContextTest.test_dummy_verify9  sg   € ð
 ˆØˆÜ—/‘/Ó#ˆØ ˆŒÜ G 9Ô-ˆØ×ÑÔÜ˜s×/Ñ/Ó0‰
ˆ�Ø×Ñ˜w¨¸À8Ñ8KÐÕLr)   c                 óª  — dd„}t        dd¬«      }| j                   ||d«      g d¢«       | j                   ||d«      g d¢«       |j                  d¬	«       | j                   ||d«      g d
¢«       | j                   ||d«      g d
¢«       |j                  d¬«       | j                   ||d«      g d
¢«       | j                   ||d«      g d¢«       t        dgd¬«      }| j                   ||d«      dg«       | j                   ||d«      dg«       | j                  t        t         dd¬«       | j                  t        t         dd¬«       y)z+test deprecated='auto' is handled correctlyNc                 ó|   — | j                  «       D �cg c]  }| j                  ||«      j                  ‘Œ  c}S c c}w r   rË   )r_   rÍ   rù   s      r'   Úgetstatez8CryptContextTest.test_61_autodeprecate.<locals>.getstateP  s1   € ØKNÏ;É;Ì=ÓYÉ=À�C—K‘K ¨Ó1×<Ó<È=ÑYÐYùÒYs   “#9z sha256_crypt,md5_crypt,des_cryptrj  rÏ   )FTTr©   r-   r>   )TFTr,   r¬   )TTFr@   Frñ   zauto,md5_cryptzmd5_crypt,autor   )r   rX   r!   ro   r–   )rT   r¸  r_   s      r'   Útest_61_autodeprecatez&CryptContextTest.test_61_autodeprecateM  sF  € ó	Zô Ð=È&ÔQˆØ×Ñ™ #¨$Ó/Ò1DÔEØ×Ñ™ # wÓ/Ò1DÔEð 	�
‰
˜;ˆ
Ô'Ø×Ñ™ #¨$Ó/Ò1DÔEØ×Ñ™ # wÓ/Ò1DÔEð 	�
‰
¨;ˆ
Ô7Ø×Ñ™ #¨$Ó/Ò1DÔEØ×Ñ™ # wÓ/Ò1DÔEô ˜NÐ+¸Ô?ˆØ×Ñ™ #¨$Ó/°%°Ô9Ø×Ñ™ # wÓ/°%°Ô9ð 	×Ñœ*¤lÐ4LØ%5ð 	ô 	7à×Ñœ*¤lÐ4LØ%5ð 	õ 	7r)   c                 óŒ  — ddl m} ddlm}m} t        dg«      }t        ddg«      }|j                  d«      }|j                  d«      }| j                  t        d|j                  «       | j                  t        d|j                  |«       | j                  t        d|j                  |«       |j                  «       }| j                  ||j                  «       |j                  |«      }	| j                  |	|j                  |z   «       |j                  |«      }
| j                  |
|j                  |z   «       | j                  |j                  |	«      |	«       | j                  |j                  |«      «       | j                  ||j                  |«       | j                  ||j                  |«       | j                  ||j                  |	«       | j                  |j                  |«      «       | j                  ||j                  |«       | j                  |j                  |«      «       | j                  |j                  |	«      «       | j                  ||j                   d«       | j                  t"        |j                   d	«       | j                  |j!                  |«      |«       | j                  ||j                   |«       | j                  ||j                   |«       | j                  ||j                   |	«       | j                  ||j                   d«       | j                  t"        |j                   d	«       | j                  |j!                  |«      |«       | j                  ||j                   |«       | j                  t$        d
|j                   |«       | j                  |j!                  |	«      |«       y	)zdisabled hash supportr   )ÚUnknownHashError)r-   Úunix_disabledr,   r¼  Úfoozno disabled hasher presentr¤  Nzcannot restore original hash)Úpasslib.excr»  rk  r-   r¼  r   r   ÚassertRaisesRegexrw   ÚdisablerX   Údefault_markerrß   Ú
is_enabledro   r  Úenablerp   r–   )rT   r»  r-   r¼  r_   r  Úh_refÚh_otherÚh_disÚ	h_dis_refÚh_dis_others              r'   Útest_disabled_hashesz%CryptContextTest.test_disabled_hashesm  sý  € õ
 	1ß9ä˜K˜=Ó)ˆÜ˜[¨/Ð:Ó;ˆØ—‘˜“ˆØ—.‘. Ó'ˆð 	×Ñœ|Ð-IØ"Ÿ{™{ô	,à×Ñœ|Ð-IØ"Ÿ{™{¨Eô	3à×Ñœ|Ð-IØ"Ÿ{™{¨Gô	5ð —‘“ˆØ×Ñ˜ × <Ñ <Ô=Ø—L‘L Ó'ˆ	Ø×Ñ˜ M×$@Ñ$@À5Ñ$HÔIà—l‘l 7Ó+ˆØ×Ñ˜ m×&BÑ&BÀWÑ&LÔMð 	×Ñ˜Ÿ™ iÓ0°)Ô<ð 	�‰˜Ÿ™ uÓ-Ô.Ø×ÑÐ*¨C¯N©N¸GÔDØ×ÑÐ*¨C¯N©N¸EÔBØ×ÑÐ*¨C¯N©N¸IÔFð 	�‰˜Ÿ™¨Ó.Ô/Ø×ÑÐ*¨C¯N©N¸GÔDØ×Ñ˜Ÿ™¨Ó/Ô0Ø×Ñ˜Ÿ™¨Ó3Ô4ð 	×ÑÐ*¨C¯J©J¸Ô;Ø×Ñœ) S§Z¡Z°Ô6Ø×Ñ˜Ÿ™ EÓ*¨EÔ2Ø×ÑÐ*¨C¯J©J¸Ô@Ø×ÑÐ*¨C¯J©J¸Ô>Ø×ÑÐ*¨C¯J©J¸	ÔBð 	×ÑÐ*¨C¯J©J¸Ô;Ø×Ñœ) T§[¡[°$Ô7Ø×Ñ˜Ÿ™ UÓ+¨UÔ3Ø×ÑÐ*¨D¯K©K¸ÔAØ×ÑœzÐ+IØ#Ÿ{™{¨Eô	3à×Ñ˜Ÿ™ YÓ/°Õ7r)   r   ©F)Ir½   r¾   r¿   ÚdescriptionPrefixrè   r   ré   r·   rZ   r(   r[   r   rk   rj   rs   rt   r|   r}   rv   r  rm   ry   rl   rn   rz   r   r\   r›   r€   r]   r�   r4  rQ   r`   rq   r~   rˆ   rŒ   r�   r™   rœ   r¸   rÈ   rÔ   r×   rÜ   rá   rì   rî   rô   r  r  r  r-  r  r*  r/  r5  r>  rC  rF  r\  re  rq  r�  rŒ  r–  r‹  rª  rµ  r¹  rÉ  Ú__classcell__)Ú.0rÀ   r   rU   s   000@r'   r+   r+   1   s¸  ø„ Ø&Ðò PÐÙ=MÕNÑ=M°TÔ*¨4Õ0Ð=MÓNÐáØ"ØØØ!&Ø%*Ø#(Ø#(ô€Mñ )¨Ø3DôFÐñ ð 
ó 
Ðñ ð 
ó 
Ðð" —G‘G—L‘L  }Ó5€Mð )×0Ñ0±°4³¹!¸F»)ÓDÐØ—W‘W—\‘\ $¨Ó7€Nð '×.Ñ.©q°«~Ù/0°«ó@ß@FÁÀxÓ@Pð à—W‘W—\‘\ $¨Ó7€Nð ñ à!&Ø!&Ø%*à!&ô€MðÐñ ! °Ó>€Nñ
 Øô€Mñ
 " .°-Ó@€Oñ
 ò#à"Ð%Ø Ø!#Ø%'Ø"#Ø#'Ø#'Ø'+ØØ!"ô€Mô$bò;ò6Hò<Eò6=ò:Iò)<òV1ò0 7òJJBòX"AòHZ2òx#CòJ.ó(Fò,ò(<ò0"bòHMò^QòDðB 
ˆrˆ
Ø	�˜+Ð&Ð'Ø	
ˆBˆØ	ˆRˆð	
Ðò`ò6.?òb"OòHDó8/BòbDò41OòfEKòN8ZòtF/òjteòl$AòL-7ò^Qò"
OòMò(7ö@H8ùô]1 Os   ’F>r+   c                   óJ   — e Zd ZdZdZej                  ZdZdZ	 e
d«      Zd„ Zy)r­  z-dummy hasher which delays by specified amountÚ
delay_hashé(   r   z$x$c                 óà   — t        j                  | j                  «       t        |t        «      r|j                  d«      }t        t        j                  d|z   «      j                  «       «      S )Nrb   s   prefix)
ÚtimeÚsleepr®  rV  r   rl   r   rU  Úsha1rW  )rT   r  s     r'   rX  zDelayHash._calc_checksumÅ  sL   € Ü�
‰
�4—:‘:ÔÜ�fœgÔ&Ø—]‘] 7Ó+ˆFÜœWŸ\™\¨)°fÑ*<Ó=×GÑGÓIÓJÐJr)   N)r½   r¾   r¿   Ú__doc__rÀ   rÆ   ÚLOWER_HEX_CHARSÚchecksum_charsÚchecksum_sizer®  r   rY  rX  rW   r)   r'   r­  r­  ½  s.   „ Ù7Ø€DØ×'Ñ'€NØ€MØ€EÙ�U“8€LóKr)   r­  c                   ó   — e Zd Zd Zy)Údummy_2Nr¼   rW   r)   r'   rÚ  rÚ  Î  s   „ Ø�Dr)   rÚ  c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚLazyCryptContextTestr	   c                 óF   — t        d«       | j                  t         d«       y )NrÚ  )Úunload_handler_nameÚ
addCleanup)rT   s    r'   rQ   zLazyCryptContextTest.setUpÔ  s   € ä˜IÔ&Ø�‰Ô+¨YÕ7r)   c                 ó‚  — | j                  t        d«      «       t        dd«       t        t	        ddg«      dg¬«      }| j                  t        dd«      «       | j                  |j                  «       d«       | j                  |j                  d«      j                  «       | j                  t        dd«      «       y)ztest plain kwdsrÚ  úpasslib.tests.test_contextr,   rÏ   T©rÚ  r,   N)
r  Úhas_crypt_handlerr   r	   ÚiterrX   r2   rß   rÌ   rG   )rT   r—   s     r'   Útest_kwd_constructorz)LazyCryptContextTest.test_kwd_constructorÙ  s•   € à×ÑÔ*¨9Ó5Ô6Ü# IÐ/KÔLäœd I¨{Ð#;Ó<È+ÈÔWˆà×ÑÔ*¨9°dÓ;Ô<à×Ñ˜Ÿ™›Ð'?Ô@Ø�‰˜Ÿ
™
 ;Ó/×:Ñ:Ô;à�‰Ô)¨)°TÓ:Õ;r)   c                 óx  ‡ — ‰ j                  t        d«      «       t        dd«       dˆ fd„	}t        |d¬«      }‰ j                  t        dd«      «       ‰ j	                  |j                  «       d«       ‰ j                  |j                  d«      j                  «       ‰ j                  t        dd«      «       y )	NrÚ  rá  c                 óX   •— ‰j                  | «       t        t        ddg«      dg¬«      S )NrÚ  r,   rÐ   )rß   r·   rä  )ÚflagrT   s    €r'   Úonloadz>LazyCryptContextTest.test_callable_constructor.<locals>.onloadë  s(   ø€ Ø�O‰O˜DÔ!Ü¤ i°Ð%=Ó >ÈKÈ=ÔYÐYr)   T)ré  rè  râ  r,   rÊ  )	r  rã  r   r	   rX   r2   rß   rÌ   rG   )rT   ré  r—   s   `  r'   Útest_callable_constructorz.LazyCryptContextTest.test_callable_constructorç  s’   ø€ Ø×ÑÔ*¨9Ó5Ô6Ü# IÐ/KÔLõ	Zô  V°$Ô7ˆà×ÑÔ*¨9°dÓ;Ô<à×Ñ˜Ÿ™›Ð'?Ô@Ø�‰˜Ÿ
™
 ;Ó/×:Ñ:Ô;à�‰Ô)¨)°TÓ:Õ;r)   N)r½   r¾   r¿   rË  rQ   rå  rê  rW   r)   r'   rÜ  rÜ  Ñ  s   „ Ø*Ðò8ò
<ó<r)   rÜ  )ArÕ  Ú
__future__r   Úpasslib.utils.compatr   Úconfigparserr   ÚConfigParserr{  Ú	functoolsr   ÚloggingÚ	getLoggerr½   Úlogrs   rR   Ú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   rt   ÚabspathÚdirnameÚ__file__r}   r(   r+   rU  rÒ  rÇ   r­  rÚ  rÜ  rW   r)   r'   Ú<module>rý     sÖ   ðÙ õ
 &Ý $ÙÞ+å+Û Ý Û Ð'�g×'Ñ'¨Ó1�Û 	Û õ ß :ß @ß *ß M× Mß #Ð #÷N÷ N÷ó ð 
‡w�w‡��r—w‘w—‘ xÓ0Ó1€òôD8�xô D8÷T4 ôK�× Ñ ô Kô"ˆb×Ñô ô%<˜8õ %<r)   