Ë
    àU.j†}  ã                   ó˜  — d Z ddlmZ ddlZddlZddlmZ ddlZddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZ ddlmc mZ ddlmZmZ dd	lmZ  ee«      Zd
„ Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ dejB                  «      Z" G d„ dejF                  ejH                  «      Z% ed«      Z& G d„ de«      Z' G d„ de«      Z(y)z>tests for passlib.hash -- (c) Assurance Technologies 2003-2009é    )Úwith_statementN)Ú	getLogger)Úldap_md5Úsha256_crypt)ÚMissingBackendErrorÚPasslibHashWarning)Ústr_to_uasciiÚuascii_to_strÚunicode)ÚHandlerCaseÚTestCase)Úuc                 ó4   ‡ ‡— ˆ ˆfd„Št         ‰|«      «      S )z1generate all strings of given size using alphabetc              3   ól   •K  — | dk  r‰D ]  }|–— Œ y ‰D ]  } ‰| dz
  «      D ]	  }||z   –— Œ Œ y ­w)Né   é   © )ÚsizeÚcharÚtailÚalphabetÚhelpers      €€úcC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/tests/test_utils_handlers.pyr   z_makelang.<locals>.helper   sD   øè ø€ Ø�!Š8Û �Ø“
ñ !ó !�Ù" 4¨¡6žN�DØ˜t™)“Oñ +ñ !ùs   ƒ14)Úset)r   r   r   s   ` @r   Ú	_makelangr      s   ù€ õ$ô ‰v�d‹|ÓÐó    c                   óX   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zy)ÚSkeletonTestztest hash support classesc                 ó  ‡—  G ˆfd„dt         j                  «      Š| j                  ‰j                  t	        d«      «      «       | j                  ‰j                  d«      «       | j                  ‰j                  t	        d«      «      «       | j                  ‰j                  t	        d«      «      «       | j                  ‰j                  d«      «       | j                  ‰j                  t	        d«      «      «       | j                  ‰j                  t	        d	«      «      «       | j                  ‰j                  t	        d
«      «      «       | j                  t        ‰j                  d«       | j                  t        ‰j                  d«       | j                  ‰j                  «       ‰j                  d«      «       | j                  ‰j                  dd«      «       | j                  ‰j                  dt	        d«      «      «       | j                  ‰j                  dd«      «       | j                  ‰j                  dt	        d«      «      «       | j                  ‰j                  ddd¬«      «       | j                  t        ‰j                  dd«       | j                  t        ‰j                  dt	        d«      «       | j                  ‰j                  d«      d«       | j                  ‰j                  dd¬«      d«       y)ztest StaticHandler classc                   óV   •‡ — e Zd ZdZdZ ed«      Z ed«      ZdZdˆ ˆfd„	Z	d„ Z
ˆ xZS )	ú/SkeletonTest.test_00_static_handler.<locals>.d1Úd1©ÚflagÚ_Úabr   c                 ó2   •— t        ‰| �  di |¤Ž || _        y ©Nr   )ÚsuperÚ__init__r$   )Úselfr$   ÚkwdsÚ	__class__r"   s      €€r   r*   z8SkeletonTest.test_00_static_handler.<locals>.d1.__init__9   s   ø€ Ü�b˜$Ñ(Ñ0¨4Ò0Ø �•	r   c                 óF   — | j                   rt        d«      S t        d«      S )NÚbÚa)r$   r   ©r+   Úsecrets     r   Ú_calc_checksumz>SkeletonTest.test_00_static_handler.<locals>.d1._calc_checksum=   s   € Ø!%§¢”q˜“vÐ6´°#³Ð6r   )F)Ú__name__Ú
__module__Ú__qualname__ÚnameÚcontext_kwdsr   Ú_hash_prefixÚchecksum_charsÚchecksum_sizer*   r3   Ú__classcell__)r-   r"   s   @€r   r"   r!   2   s.   ù„ ØˆDØ$ˆLÙ˜S›6ˆLÙ˜t›WˆNØˆMö!ö7r   r"   Ú_as   _aÚ_bÚ_cs   _cr0   r/   ÚcNr   Ú Úss   _bTr#   )ÚuhÚStaticHandlerÚ
assertTrueÚidentifyr   ÚassertFalseÚassertRaisesÚ	TypeErrorÚassertEqualÚ	genconfigÚhashÚverifyÚ
ValueError©r+   r"   s    @r   Útest_00_static_handlerz#SkeletonTest.test_00_static_handler/   s  ø€ ö	7”×!Ñ!ô 	7ð 	�‰˜Ÿ™¤A d£GÓ,Ô-Ø�‰˜Ÿ™ EÓ*Ô+Ø�‰˜Ÿ™¤A d£GÓ,Ô-à×Ñ˜Ÿ™¤Q t£WÓ-Ô.Ø×Ñ˜Ÿ™ UÓ+Ô,Ø×Ñ˜Ÿ™¤Q s£VÓ,Ô-Ø×Ñ˜Ÿ™¤Q s£VÓ,Ô-Ø×Ñ˜Ÿ™¤Q s£VÓ,Ô-Ø×Ñœ) R§[¡[°$Ô7Ø×Ñœ) R§[¡[°!Ô4ð 	×Ñ˜Ÿ™›¨¯©°«Ô5ð 	�‰˜Ÿ	™	 # uÓ-Ô.Ø�‰˜Ÿ	™	 #¤a¨£gÓ.Ô/Ø×Ñ˜Ÿ™ 3¨Ó.Ô/Ø×Ñ˜Ÿ™ 3¤q¨£wÓ/Ô0Ø�‰˜Ÿ	™	 # u°4˜	Ó8Ô9Ø×Ñœ* b§i¡i°°eÔ<Ø×Ñœ* b§i¡i°´a¸³gÔ>ð 	×Ñ˜Ÿ™ › tÔ,Ø×Ñ˜Ÿ™ ¨4˜Ó0°$Õ7r   c                 ó’  —  G d„ dt         j                  «      }| j                  d«      5  |j                  d«      }ddd«       | j	                  d«       | j                  |j                  d|«      «       | j                  |j                  d|«      «       |`| j                  t        |j                  d«       y# 1 sw Y   Œ�xY w)ztest StaticHandler legacy attrc                   ó@   — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zy)ú3SkeletonTest.test_01_calc_checksum_hack.<locals>.d1r"   c                 ó^   — |rt        |«      dk7  ry	 t        |d«       y# t        $ r Y yw xY w)Né(   Fé   T)ÚlenÚintrN   ©ÚclsrL   s     r   rF   z<SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.identifyf   s9   € áœs 4›y¨BšØ ð!Ü˜˜b”Mð øô "ò !Ù ð!ús   “   	,«,c                 óæ   — |€t        d«      ‚t        |t        «      r|j                  d«      }|�| j	                  |«      st        d«      ‚t        j                  d|z   «      j                  «       S )Nzno secret providedúutf-8zinvalid hashs   xyz)	rI   Ú
isinstancer   ÚencoderF   rN   ÚhashlibÚsha1Ú	hexdigest©rZ   r2   rL   s      r   Úgenhashz;SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.genhashp   sc   € à�>Ü#Ð$8Ó9Ð9Ü˜f¤gÔ.Ø#Ÿ]™]¨7Ó3�FàÐ#¨C¯L©L¸Ô,>Ü$ ^Ó4Ð4Ü—|‘| F¨V¡OÓ4×>Ñ>Ó@Ð@r   c                 ób   — |€t        d«      ‚| j                  ||«      |j                  «       k(  S )Nzno hash specified)rN   rc   Úlowerrb   s      r   rM   z:SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.verify{   s/   € à�<Ü$Ð%8Ó9Ð9Ø—{‘{ 6¨4Ó0°D·J±J³LÑ@Ð@r   N)r4   r5   r6   r7   ÚclassmethodrF   rc   rM   r   r   r   r"   rS   c   sE   „ ØˆDàñó ðð ñAó ðAð ñAó ñAr   r"   z%d1.*should be updated.*_calc_checksumÚtestNÚ(7c622762588a0e5cc786ad0a143156f9fd38eea3Úxtest)rC   rD   ÚassertWarningListrL   rJ   rE   rM   rG   rc   rH   ÚNotImplementedError)r+   r"   rL   s      r   Útest_01_calc_checksum_hackz'SkeletonTest.test_01_calc_checksum_hack]   s£   € ô	A”×!Ñ!ô 	Að> ×#Ñ#Ð$KÕLØ—7‘7˜6“?ˆD÷ Mà×Ñ˜ÐIÔJà�‰˜Ÿ	™	 &¨$Ó/Ô0Ø×Ñ˜Ÿ™ 7¨DÓ1Ô2ð ˆJØ×ÑÔ-¨r¯w©w¸Õ?÷ MÐLús   «B=Â=Cc                 óð  —  G d„ dt         j                  «      }| j                  t        |j                  d«       | j                  t        |j                  d«       | j                  |j	                  d«      «       | j                  |j	                  d«      «       | j                  |j	                  d«      «       t        j                  t        d«      «      |_
        | j                  t        |j                  d«       | j                  t        |j                  d«       | j                  |j	                  d	«      «       | j                  |j	                  d«      «       |`
t        d
«      |_        | j                  t        |j                  d«       | j                  t        |j                  d«       | j                  |j	                  d«      «       | j                  |j	                  d«      «       |`y)ztest GenericHandler.identify()c                   ó   — e Zd Zed„ «       Zy)ú)SkeletonTest.test_10_identify.<locals>.d1c                 ó~   — t        |t        «      r|j                  d«      }|t        d«      k(  r	 | |¬«      S t        ‚)NÚasciir0   ©Úchecksum)r]   ÚbytesÚdecoder   rN   rY   s     r   Úfrom_stringz5SkeletonTest.test_10_identify.<locals>.d1.from_string“   s6   € ä˜d¤EÔ*ØŸ;™; wÓ/�DØœ1˜S›6’>Ù¨Ô-Ð-ä$Ð$r   N)r4   r5   r6   rf   rv   r   r   r   r"   ro   ’   s   „ Øñ%ó ñ%r   r"   Nr   rA   r0   r/   z@.z@aÚ!z!a)rC   ÚGenericHandlerrH   rI   rF   rG   rE   ÚreÚcompiler   Ú_hash_regexÚidentrO   s     r   Útest_10_identifyzSkeletonTest.test_10_identify�   sa  € ô	%”×"Ñ"ô 	%ð 	×Ñœ) R§[¡[°$Ô7Ø×Ñœ) R§[¡[°!Ô4Ø×Ñ˜Ÿ™ R›Ô)Ø�‰˜Ÿ™ CÓ(Ô)Ø×Ñ˜Ÿ™ SÓ)Ô*ô Ÿ™¤A d£GÓ,ˆŒØ×Ñœ) R§[¡[°$Ô7Ø×Ñœ) R§[¡[°!Ô4Ø�‰˜Ÿ™ DÓ)Ô*Ø×Ñ˜Ÿ™ SÓ)Ô*ØˆNô �S“6ˆŒØ×Ñœ) R§[¡[°$Ô7Ø×Ñœ) R§[¡[°!Ô4Ø�‰˜Ÿ™ DÓ)Ô*Ø×Ñ˜Ÿ™ SÓ)Ô*Ø‰Hr   c                 ó.  ‡—  G d„ dt         j                  «      Šdˆfd„	}| j                  t        |t	        d«      «       | j                   |t	        d«      «      t	        d«      «       | j                   |t	        d«      «      t	        d«      «       | j                  t        |t	        d«      «       | j                  t        |t	        d	«      «       | j                  t        |d
«       | j                   ‰«       j                  t	        d«      «       y)z%test GenericHandler checksum handlingc                   ó$   — e Zd ZdZdZ ed«      Zy)ú.SkeletonTest.test_11_norm_checksum.<locals>.d1r"   é   ÚxzN)r4   r5   r6   r7   r;   r   r:   r   r   r   r"   r€   ¶   s   „ ØˆDØˆMÙ˜t›W‰Nr   r"   Nc                 ó,   •—  ‰dd| i|¤Žj                   S )Nrs   r   rr   )rs   Úkr"   s     €r   Únorm_checksumz9SkeletonTest.test_11_norm_checksum.<locals>.norm_checksum»   s   ø€ ÙÑ-˜xÐ-¨1Ñ-×6Ñ6Ð6r   ÚxxxÚxxxxÚxzxzÚxxxxxÚxxyxs   xxyx©N)rC   rx   rH   rN   r   rJ   rI   Ú_stub_checksum©r+   r…   r"   s     @r   Útest_11_norm_checksumz"SkeletonTest.test_11_norm_checksum³   sÐ   ø€ ô	%”×"Ñ"ô 	%õ
	7ð 	×Ñœ* m´Q°u³XÔ>ð 	×Ñ™¤q¨£yÓ1´1°V³9Ô=Ø×Ñ™¤q¨£yÓ1´1°V³9Ô=ð 	×Ñœ* m´Q°w³ZÔ@ð 	×Ñœ* m´Q°v³YÔ?ð 	×Ñœ) ]°GÔ<ð 	×Ñ™›×,Ñ,¬a°«iÕ8r   c                 ó  ‡—  G d„ dt         j                  t         j                  «      Šˆfd„}| j                   |d«      d«       | j	                  t
        |t        d«      «       | j                   ‰«       j                  d«       y)z*test GenericHandler + HasRawChecksum mixinc                   ó   — e Zd ZdZdZy)ú2SkeletonTest.test_12_norm_checksum_raw.<locals>.d1r"   r�   N)r4   r5   r6   r7   r;   r   r   r   r"   r‘   Ù   s   „ ØˆDØ‰Mr   r"   c                  ó(   •—  ‰| i |¤Žj                   S r‹   rr   )r0   r„   r"   s     €r   r…   z=SkeletonTest.test_12_norm_checksum_raw.<locals>.norm_checksumÝ   s   ø€ Ù�q�;˜A‘;×'Ñ'Ð'r   s   1234rŠ   s       N)rC   ÚHasRawChecksumrx   rJ   rH   rI   r   rŒ   r�   s     @r   Útest_12_norm_checksum_rawz&SkeletonTest.test_12_norm_checksum_raw×   sk   ø€ ô	”×"Ñ"¤B×$5Ñ$5ô 	ô	(ð 	×Ñ™ wÓ/°Ô9ð 	×Ñœ) ]´A°f³IÔ>ð 	×Ñ™›×,Ñ,¨iÕ8r   c                 ó(  ‡—  G d„ dt         j                  t         j                  «      Šˆfd„}ˆfd„}t        dd«      }t        dd«      }t        dd«      }| j	                  t
        |«       | j	                  t
        |d	¬
«       | j                   |d¬«      |«       t        j                  d¬«      5 }| j	                  t        |d¬
«       | j	                  t        |d¬
«       | j                  |«       | j                   |d¬
«      d«       | j                   |d¬
«      d«       | j                   |d¬
«      d«       | j                  |«       | j	                  t        |d¬
«       | j                  |«       d	d	d	«       t        j                  d¬«      5 }| j	                  t        |d«       | j	                  t        |d«       | j                  |«       | j                   |d«      |«       | j                   |d«      |«       | j                   |d«      |«       | j                  |«       | j	                  t        |d«       | j                  |«       | j                   |dd¬«      |«       | j                  |dg«       d	d	d	«       ‰`| j                  g «      5  | j                  t         |d	«      «      d«       | j                  t         |d«      «      d«       d	d	d	«       y	# 1 sw Y   �ŒuxY w# 1 sw Y   ŒuxY w# 1 sw Y   y	xY w)z#test GenericHandler + HasSalt mixinc                   ó$   — e Zd ZdZdZdZdZdZdZy)ú*SkeletonTest.test_20_norm_salt.<locals>.d1r"   ©Úsaltr   r�   é   r&   N)	r4   r5   r6   r7   Úsetting_kwdsÚmin_salt_sizeÚmax_salt_sizeÚdefault_salt_sizeÚ
salt_charsr   r   r   r"   r—   ï   s!   „ ØˆDØ$ˆLØˆMØˆMØ !ÐØ‰Jr   r"   c                  ó(   •—  ‰di | ¤Žj                   S r(   r˜   ©r„   r"   s    €r   Ú	norm_saltz1SkeletonTest.test_20_norm_salt.<locals>.norm_salt÷   s   ø€ Ù‘7˜‘7—<‘<Ðr   c                 óN   •—   ‰j                   dd| i|¤Žd¬«      j                  S )NÚ	salt_sizeT©Úuse_defaultsr   )Úusingr™   )Úszr„   r"   s     €r   Úgen_saltz0SkeletonTest.test_20_norm_salt.<locals>.gen_saltú   s)   ø€ Ø.�8�2—8‘8Ñ. bÐ.¨AÑ.¸DÔA×FÑFÐFr   r&   r   rš   r�   Nr˜   Tr¥   ©ÚrecordrA   r0   ÚabaÚabbaÚaaaabbr   r   é   )Úrelaxedzsalt_size.*above max_salt_size)rC   ÚHasSaltrx   r   rH   rI   ÚassertInÚwarningsÚcatch_warningsrN   ÚconsumeWarningListrJ   r�   rj   rW   )r+   r¢   r©   Úsalts2Úsalts3Úsalts4Úwlogr"   s          @r   Útest_20_norm_saltzSkeletonTest.test_20_norm_saltì   s“  ø€ ô	”—‘œR×.Ñ.ô 	ô	 ô	Gô ˜4 Ó#ˆÜ˜4 Ó#ˆÜ˜4 Ó#ˆð 	×Ñœ) YÔ/Ø×Ñœ) Y°TÐÔ:Ø�‰‘i¨TÔ2°FÔ;ô ×$Ñ$¨DÕ1°Tð ×Ñœj¨)¸"ÐÔ=Ø×Ñœj¨)¸#ÐÔ>Ø×#Ñ# DÔ)ð ×Ñ™Y¨DÔ1°4Ô8Ø×Ñ™Y¨EÔ2°EÔ:Ø×Ñ™Y¨FÔ3°VÔ<Ø×#Ñ# DÔ)ð ×Ñœj¨)¸(ÐÔCØ×#Ñ# DÔ)÷ 2ô$ ×$Ñ$¨DÕ1°Tð ×Ñœj¨(°AÔ6Ø×Ñœj¨(°AÔ6Ø×#Ñ# DÔ)ð �M‰M™( 1›+ vÔ.Ø�M‰M™( 1›+ vÔ.Ø�M‰M™( 1›+ vÔ.Ø×#Ñ# DÔ)ð ×Ñœj¨(°AÔ6Ø×#Ñ# DÔ)à�M‰M™( 1¨dÔ3°VÔ<Ø×#Ñ# DÐ+KÐ*LÔM÷% 2ð* ÐØ×#Ñ# BÕ'Ø×ÑœS¡¨$£Ó0°!Ô4Ø×ÑœS¡¨!£Ó-¨qÔ1÷ (Ð'÷Q 2Ñ1ú÷$ 2Ð1ú÷, (Ð'ús'   Â5CK/ÆC.K<Ê#ALË/K9Ë<LÌLc                 ó  ‡—  G d„ dt         j                  t         j                  «      Šˆfd„}| j                  t        |«       | j                  t        |d¬«       | j                   |d¬«      d«       | j                  t        |d	¬«       t        j                  d¬
«      5 }| j                  t        |d¬«       | j                  |«       | j                   |d¬«      d«       | j                   |d¬«      d«       | j                   |d¬«      d«       | j                  |«       | j                  t        |d¬«       | j                  |«       ddd«       d‰_
        | j                  t        |d¬«       y# 1 sw Y   Œ)xY w)z%test GenericHandler + HasRounds mixinc                   ó    — e Zd ZdZdZdZdZdZy)ú,SkeletonTest.test_30_init_rounds.<locals>.d1r"   ©Úroundsr   rš   r   N)r4   r5   r6   r7   r›   Ú
min_roundsÚ
max_roundsÚdefault_roundsr   r   r   r"   r½   8  s   „ ØˆDØ&ˆLØˆJØˆJØ‰Nr   r"   c                  ó(   •—  ‰di | ¤Žj                   S r(   r¾   r¡   s    €r   Únorm_roundsz5SkeletonTest.test_30_init_rounds.<locals>.norm_rounds@  s   ø€ Ù‘7˜‘7—>‘>Ð!r   Nr¾   Tr¥   r   g      ø?rª   r   r   rš   r�   )rC   Ú	HasRoundsrx   rH   rI   rJ   r³   r´   rN   rµ   rÂ   )r+   rÄ   r¹   r"   s      @r   Útest_30_init_roundsz SkeletonTest.test_30_init_rounds5  sI  ø€ ô	”—‘œr×0Ñ0ô 	ô	"ð 	×Ñœ) [Ô1Ø×Ñœ) [¸ÐÔ>Ø×Ñ™°$Ô7¸Ô;ð 	×Ñœ) [¸ÐÔ=ô ×$Ñ$¨DÕ1°Tà×Ñœj¨+¸aÐÔ@Ø×#Ñ# DÔ)ð ×Ñ™[°Ô2°AÔ6Ø×Ñ™[°Ô2°AÔ6Ø×Ñ™[°Ô2°AÔ6Ø×#Ñ# DÔ)ð ×Ñœj¨+¸aÐÔ@Ø×#Ñ# DÔ)÷ 2ð  !ˆÔØ×Ñœ) [¸tÐÕD÷# 2Ð1ús   Â$B/E;Å;Fc                 óê  —  G d„ dt         j                  t         j                  «      }| j                  t        |j
                  «       | j                  t        |j                  «       | j                  t        |j                  d«       | j                  t        |j                  d«       | j                  |j                  «       «       d|_	         |«       }| j                  |j                  d«      d«       |j                  d«       |j                  d«       | j                  |j                  d«      d«       | j                  t        |j                  d«       | j                  |j                  d«      «       | j                  |j                  d«      «       d|_        | j                  |j                  «       «       |j                  d«       | j                  |j                  d«      d«       | j                  t        |j                  d	«       | j                  t        |j                  d	«       |j                  d«        G d
„ d|«      }| j                  t        |j                  d«       y)z+test GenericHandler + HasManyBackends mixinc                   óL   — e Zd ZdZdZdZdZdZed„ «       Z	ed„ «       Z
d„ Zd„ Zy	)
ú)SkeletonTest.test_40_backends.<locals>.d1r"   r   ©r0   r/   Fc                 óT   — | j                   r| j                  | j                  «       yy©NTF)Ú	_enable_aÚ_set_calc_checksum_backendÚ_calc_checksum_a©rZ   s    r   Ú_load_backend_az9SkeletonTest.test_40_backends.<locals>.d1._load_backend_aj  ó#   € à—=’=Ø×2Ñ2°3×3GÑ3GÔHØà r   c                 óT   — | j                   r| j                  | j                  «       yyrÌ   )Ú	_enable_brÎ   Ú_calc_checksum_brÐ   s    r   Ú_load_backend_bz9SkeletonTest.test_40_backends.<locals>.d1._load_backend_br  rÒ   r   c                  ó   — y©Nr0   r   r1   s     r   rÏ   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_az  ó   € Ør   c                  ó   — y©Nr/   r   r1   s     r   rÕ   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_b}  rÙ   r   N)r4   r5   r6   r7   r›   ÚbackendsrÍ   rÔ   rf   rÑ   rÖ   rÏ   rÕ   r   r   r   r"   rÉ   a  sK   „ ØˆDØˆLà!ˆHàˆIØˆIàñ!ó ð!ð ñ!ó ð!òór   r"   ÚanyÚdefaultTrB   r/   r0   r@   c                   ó   — e Zd ZdZy)ú)SkeletonTest.test_40_backends.<locals>.d2TN)r4   r5   r6   Ú_has_backend_ar   r   r   Úd2rà   ¦  s   „ Ø!‰Nr   râ   N)rC   ÚHasManyBackendsrx   rH   r   Úget_backendÚset_backendrG   Úhas_backendrÔ   rJ   r3   rE   rÍ   rN   ÚAssertionError)r+   r"   Úobjrâ   s       r   Útest_40_backendszSkeletonTest.test_40_backends_  sÖ  € ô	”×#Ñ#¤R×%6Ñ%6ô 	ð@ 	×ÑÔ-¨r¯~©~Ô>Ø×ÑÔ-¨r¯~©~Ô>Ø×ÑÔ-¨r¯~©~¸uÔEØ×ÑÔ-¨r¯~©~¸yÔIØ×Ñ˜Ÿ™Ó)Ô*ð ˆŒñ ‹dˆØ×Ñ˜×+Ñ+¨CÓ0°#Ô6ð 	�‰�sÔØ
�‰�uÔØ×Ñ˜×+Ñ+¨CÓ0°#Ô6ð 	×ÑÔ-¨r¯~©~¸sÔCØ�‰˜Ÿ™ sÓ+Ô,Ø×Ñ˜Ÿ™¨Ó,Ô-ð ˆŒð 	�‰˜Ÿ™Ó(Ô)Ø
�‰�sÔØ×Ñ˜×+Ñ+¨CÓ0°#Ô6ð 	×Ñœ* b§n¡n°cÔ:Ø×Ñœ* b§n¡n°cÔ:ð 	�‰�sÔô	"�ô 	"à×Ñœ.¨"¯.©.¸#Õ>r   c                 ó¨  — t        j                  dt        d¬«        G d„ dt        j                  t        j
                  «      }| j                  t        |j                  «       | j                  t        |j                  «       | j                  t        |j                  d«       | j                  t        |j                  d«       | j                  |j                  «       «       d|_         |«       }| j                  |j                  d	«      d
«       |j                  d
«       |j                  d«       | j                  |j                  d	«      d
«       | j                  t        |j                  d«       | j                  |j                  d
«      «       | j                  |j                  d«      «       d|_        | j                  |j                  «       «       |j                  d«       | j                  |j                  d	«      d«       | j                  t"        |j                  d«       | j                  t"        |j                  d«       y)z<test GenericHandler + HasManyBackends mixin (deprecated api)Úignorez0.* support for \._has_backend_.* is deprecated.*)ÚcategoryÚmessagec                   ó,   — e Zd ZdZdZdZdZdZd„ Zd„ Z	y)ú)SkeletonTest.test_41_backends.<locals>.d1r"   r   rÊ   Fc                  ó   — yrØ   r   r1   s     r   rÏ   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_aº  rÙ   r   c                  ó   — yrÛ   r   r1   s     r   rÕ   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_b½  rÙ   r   N)
r4   r5   r6   r7   r›   rÜ   rá   Ú_has_backend_brÏ   rÕ   r   r   r   r"   rï   ±  s%   „ ØˆDØˆLà!ˆHà"ˆNØ"ˆNòór   r"   rÝ   rÞ   TrB   r/   r0   r@   N)r³   ÚfilterwarningsÚDeprecationWarningrC   rã   rx   rH   r   rä   rå   rG   ræ   rò   rJ   r3   rE   rá   rN   )r+   r"   rè   s      r   Útest_41_backendszSkeletonTest.test_41_backendsª  s½  € ä×Ñ Ü'ØGõ	ô
	”×#Ñ#¤R×%6Ñ%6ô 	ð  	×ÑÔ-¨r¯~©~Ô>Ø×ÑÔ-¨r¯~©~Ô>Ø×ÑÔ-¨r¯~©~¸uÔEØ×ÑÔ-¨r¯~©~¸yÔIØ×Ñ˜Ÿ™Ó)Ô*ð !ˆÔñ ‹dˆØ×Ñ˜×+Ñ+¨CÓ0°#Ô6ð 	�‰�sÔØ
�‰�uÔØ×Ñ˜×+Ñ+¨CÓ0°#Ô6ð 	×ÑÔ-¨r¯~©~¸sÔCØ�‰˜Ÿ™ sÓ+Ô,Ø×Ñ˜Ÿ™¨Ó,Ô-ð !ˆÔð 	�‰˜Ÿ™Ó(Ô)Ø
�‰�sÔØ×Ñ˜×+Ñ+¨CÓ0°#Ô6ð 	×Ñœ* b§n¡n°cÔ:Ø×Ñœ* b§n¡n°cÕ:r   c                 óâ  ‡—  G d„ dt         j                  t         j                  «      Šˆfd„}| j                  t        |«       | j                  t        |d¬«       | j                   |d¬«      t        d«      «       | j                   |t        d«      ¬«      t        d«      «       | j                   |t        d	«      ¬«      t        d	«      «       | j                  t        |t        d
«      ¬«       | j                   |t        d«      ¬«      t        d«      «       | j                  t        |t        d«      ¬«       | j                  ‰j                  t        d«      «      «       | j                  ‰j                  t        d«      «      «       | j                  ‰j                  t        d«      «      «       | j                  ‰j                  t        d«      «      «       | j                  ‰j                  t        d«      «      «       | j                  t        ‰j                  d«       | j                  t        ‰j                  d«       d‰_        | j                  t        |d¬«       y)z#test GenericHandler + HasManyIdentsc                   ód   — e Zd ZdZdZ ed«      Z ed«       ed«      fZ ed«       ed«      iZy)ú+SkeletonTest.test_50_norm_ident.<locals>.d1r"   ©r|   ú!Aú!BÚAN)	r4   r5   r6   r7   r›   r   Údefault_identÚident_valuesÚident_aliasesr   r   r   r"   rø   ç  s9   „ ØˆDØ%ˆLÙ˜d›GˆMÙ˜d›G¡Q t£WÐ-ˆLÙ ›f¡a¨£gÐ.‰Mr   r"   c                  ó(   •—  ‰di | ¤Žj                   S r(   rù   r¡   s    €r   Ú
norm_identz3SkeletonTest.test_50_norm_ident.<locals>.norm_identî  s   ø€ Ù‘7˜‘7—=‘=Ð r   Nrù   Tr¥   rú   rû   z!Crü   ÚBz!Axxxz!Bxxxz!CxxxrA   r   )rC   ÚHasManyIdentsrx   rH   rI   rJ   r   rN   rE   rF   rG   rý   rç   )r+   r  r"   s     @r   Útest_50_norm_identzSkeletonTest.test_50_norm_identä  sÁ  ø€ ô	/”×!Ñ!¤2×#4Ñ#4ô 	/ô	!ð 	×Ñœ) ZÔ0Ø×Ñœ) Z°tÐÔ<Ø×Ñ™°Ô6¼¸$»Ô@ð 	×Ñ™¬!¨D«'Ô2´A°d³GÔ<Ø×Ñ™¬!¨D«'Ô2´A°d³GÔ<Ø×Ñœ* j¼¸$»ÐÔ@ð 	×Ñ™¬!¨C«&Ô1´1°T³7Ô;ð 	×Ñœ* j¼¸#»ÐÔ?ð 	�‰˜Ÿ™¤A g£JÓ/Ô0Ø�‰˜Ÿ™¤A g£JÓ/Ô0Ø×Ñ˜Ÿ™¤Q w£ZÓ0Ô1Ø×Ñ˜Ÿ™¤Q s£VÓ,Ô-Ø×Ñ˜Ÿ™¤Q r£UÓ+Ô,Ø×Ñœ) R§[¡[°$Ô7Ø×Ñœ) R§[¡[°!Ô4ð  ˆÔØ×Ñœ.¨*À4ÐÕHr   c                 óð  — ddl m} |j                  j                  d«      }| j	                  |t        d«      t        d«      dœ«       d}t        d«      }t        d	«      }|j                  j                  |«      }| j	                  |t        |d
d|¬«      «       |j                  j                  |d¬«      }| j	                  |t        |d
d¬«      «       |j                  j                  |d¬«      }| j	                  |t        d
dt        d«      t        d«      ¬«      «       |j                  j                  d«      }| j	                  |t        t        d«      t        d«      d¬«      «       d}|j                  j                  |«      }| j	                  |t        ddd¬«      «       |j                  j                  |d¬«      }| j	                  |t        t        d«      dt        d«      ¬«      «       y )!ztest parsehash()r   ©rL   ÚOgAwTx2l6NADIÚAwTx2l6NADIÚOg©rs   r™   z?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9zLKO/Ute40T3FNF95z+U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9iˆ  T)r™   r¿   Úimplicit_roundsrs   Frr   )r™   r¿   r  )ÚsanitizezLK**************z+U0pr***************************************)r¿   r  r™   rs   zL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3z+YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3zuy/jIAhCetNCTtb0i¼(  )rs   r™   r¿   z@$pbkdf2$60000$DoEwpvQeA8B4T.k951yLUQ$O26Y3/NJEiLCVaOVPxGXshyjW8ks   ;n˜ßóI"ÂU£•?—²£[Éi`ê  s   �0¦ôÀxOé=ç\‹Q©rs   r¿   r™   zO26************************zDo********************N)	ÚpasslibrL   Ú	des_cryptÚ	parsehashrJ   r   r   ÚdictÚpbkdf2_sha1)r+   rL   ÚresultÚhrB   r@   Úh1s          r   Útest_91_parsehashzSkeletonTest.test_91_parsehash  sß  € õ 	!ð —‘×)Ñ)¨/Ó:ˆØ×Ñ˜¬a°Ó.>ÌÈ$ËÑ!PÔQð NˆÜÐ Ó!ˆÜÐ;Ó<ˆØ×"Ñ"×,Ñ,¨QÓ/ˆØ×Ñ˜¤¨1°TØ6:ÀQô"Hô 	Ið ×"Ñ"×,Ñ,¨Q¸Ð,Ó?ˆØ×Ñ˜¤¨1°TÈ4Ô!PÔQð ×"Ñ"×,Ñ,¨Q¸Ð,Ó>ˆØ×Ñ˜¤¨TÀ4ÜÐ%Ó&ÜÐEÓFô"Hô 	Ið
 ×"Ñ"×,Ñ,Ð-{Ó|ˆØ×Ñ˜¤ÜÐDÓEÜÐ%Ó&Øô"
ô 	ð PˆØ×!Ñ!×+Ñ+¨BÓ/ˆØ×Ñ˜¤ØSØØCô"
ô 	ð ×!Ñ!×+Ñ+¨B¸Ð+Ó>ˆØ×Ñ˜¤ÜÐ4Ó5ØÜÐ+Ó,ô"
õ 	r   c                 óð  — ddl m} | j                  |j                  j	                  «       dddœ«       | j                  |j
                  j	                  «       dddœ«       | j                  |j                  dd	«       | j                  |j                  j	                  «       d
dddœ«       | j                  |j                  dd«       | j                  |j                  j	                  «       ddddœ«       y)ztest bitsize()r   r  éB   é   r
  éº   é„   rÂ   i   i  é   é`   r  i   é    é   é€   N)	r  rL   rJ   r  ÚbitsizeÚbcryptÚ	patchAttrr   r  ©r+   rL   s     r   Útest_92_bitsizezSkeletonTest.test_92_bitsizeJ  sÛ   € õ 	!ð 	×Ñ˜Ÿ™×/Ñ/Ó1Ø&(°"Ñ5ô	7ð 	×Ñ˜Ÿ™×,Ñ,Ó.Ø&)°3Ñ7ô	9ð 	�‰�t×(Ñ(Ð*:¸MÔJØ×Ñ˜×*Ñ*×2Ñ2Ó4Ø&)°RÀÑDô	Fð 	�‰�t×'Ñ'Ð)9¸=ÔIØ×Ñ˜×)Ñ)×1Ñ1Ó3Ø&)°RÀÑEõ	Gr   N)r4   r5   r6   Ú__doc__rP   rl   r}   rŽ   r”   rº   rÆ   ré   rõ   r  r  r%  r   r   r   r   r   )   sQ   „ Ù#ò
,8ò\.@òf!òF"9òH9ò*E2òR(EòTI?òV8;òt(Iò\6ópGr   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Údummy_handler_in_registryz6context manager that inserts dummy handler in registryc                 óp   — || _         t        d|z   t        j                  ft	        |d¬«      «      | _        y )NÚdummy_r   )r7   r›   )r7   ÚtyperC   rx   r  Údummy)r+   r7   s     r   r*   z"dummy_handler_in_registry.__init__p  s4   € ØˆŒ	Ü˜( T™/¬B×,=Ñ,=Ð+?ÄØØôB
ó ˆ�
r   c                 óè   — ddl m} |j                  | j                  d¬«       |j	                  | j
                  «       |j                  | j                  «      | j
                  u sJ ‚| j
                  S ©Nr   )ÚregistryF)Ú	locations)r  r/  Ú_unload_handler_namer7   Úregister_crypt_handlerr,  Úget_crypt_handler)r+   r/  s     r   Ú	__enter__z#dummy_handler_in_registry.__enter__w  sY   € Ý$Ø×%Ñ% d§i¡i¸5Ð%ÔAØ×'Ñ'¨¯
©
Ô3Ø×)Ñ)¨$¯)©)Ó4¸¿
¹
ÑBÐBÐBØ�z‰zÐr   c                 óJ   — ddl m} |j                  | j                  d¬«       y r.  )r  r/  r1  r7   )r+   Úexc_infor/  s      r   Ú__exit__z"dummy_handler_in_registry.__exit__~  s   € Ý$Ø×%Ñ% d§i¡i¸5Ð%ÕAr   N)r4   r5   r6   r&  r*   r4  r7  r   r   r   r(  r(  n  s   „ Ù@òòóBr   r(  c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚPrefixWrapperTestztest PrefixWrapper classc                 ó¨  — t        j                  ddddd¬«      }| j                  |j                  d«       | j	                  |j
                  d«       | j	                  |j                  t        «       | j	                  |j
                  t        «       t        d«      5 }| j	                  |j                  t        «       ddd«       y# 1 sw Y   yxY w)z*test PrefixWrapper lazy loading of handlerr"   r   ú{XXX}ú{MD5}T)ÚlazyN)	rC   ÚPrefixWrapperrJ   Ú_wrapped_nameÚassertIsÚ_wrapped_handlerÚwrappedr   r(  ©r+   r"   r,  s      r   Útest_00_lazy_loadingz&PrefixWrapperTest.test_00_lazy_loading…  s˜   € ä×Ñ˜d J°¸ÀtÔLˆð 	×Ñ˜×)Ñ)¨:Ô6Ø�‰�b×)Ñ)¨4Ô0ð 	�‰�b—j‘j¤(Ô+Ø�‰�b×)Ñ)¬8Ô4ô ' zÔ2°eØ�M‰M˜"Ÿ*™*¤hÔ/÷ 3×2Ñ2ús   Â!CÃCc                 ól  — t        j                  dddd«      }| j                  |j                  d«       | j	                  |j
                  t        «       | j	                  |j                  t        «       t        d«      5 }| j	                  |j                  t        «       ddd«       y# 1 sw Y   yxY w)z,test PrefixWrapper active loading of handlerr"   r   r;  r<  N)	rC   r>  rJ   r?  r@  rA  r   rB  r(  rC  s      r   Útest_01_active_loadingz(PrefixWrapperTest.test_01_active_loading•  s€   € ä×Ñ˜d J°¸ÓAˆð 	×Ñ˜×)Ñ)¨:Ô6Ø�‰�b×)Ñ)¬8Ô4Ø�‰�b—j‘j¤(Ô+ô ' zÔ2°eØ�M‰M˜"Ÿ*™*¤hÔ/÷ 3×2Ñ2ús   Â !B*Â*B3c                 ót  — t        j                  dt        dd«      }| j                  |j                  d«       | j                  |j                  t        «       | j                  |j                  t        «       t        d«      5 }| j                  |j                  t        «       ddd«       y# 1 sw Y   yxY w)z4test PrefixWrapper with explicitly specified handlerr"   r;  r<  Nr   )	rC   r>  r   rJ   r?  r@  rA  rB  r(  rC  s      r   Útest_02_explicitz"PrefixWrapperTest.test_02_explicit¢  s‚   € ô ×Ñ˜d¤H¨g°wÓ?ˆð 	×Ñ˜×)Ñ)¨4Ô0Ø�‰�b×)Ñ)¬8Ô4Ø�‰�b—j‘j¤(Ô+ô ' zÔ2°eØ�M‰M˜"Ÿ*™*¤hÔ/÷ 3×2Ñ2ús   Â!B.Â.B7c                 ó²  — t        j                  dddd«      }| j                  |j                  d«       | j	                  |j
                  t        j
                  «       | j                  dt        |«      v «       t        j                  ddd«      }| j	                  |j
                  t        j
                  «       | j                  dt        |«      v «       y )Nr"   r   r;  r<  rÁ   râ   r   )rC   r>  rJ   r7   r@  r›   r   rG   Údirr   rE   )r+   r"   râ   s      r   Útest_10_wrapped_attributesz,PrefixWrapperTest.test_10_wrapped_attributes°  sœ   € Ü×Ñ˜d J°¸ÓAˆØ×Ñ˜Ÿ™ $Ô'Ø�‰�b—o‘o¤x×'<Ñ'<Ô=Ø×Ñ˜¬¨R«Ð0Ô1ä×Ñ˜d N°GÓ<ˆØ�‰�b—o‘o¤|×'@Ñ'@ÔAØ�‰˜¬¨B«Ð/Õ0r   c                 ó�  — t        j                  dddd«      }d}d}| j                  |j                  «       d«       | j	                  t
        |j                  dd «       | j                  |j                  d|«      |«       | j	                  t        |j                  d|«       | j                  |j                  d«      |«       | j                  |j                  |«      «       | j                  |j                  |«      «       | j	                  t        |j                  d|«       | j                  |j                  d|«      «       y )	Nr"   r   r;  r<  z{XXX}X03MO1qnZdYdgyfeuILPmQ==z{MD5}X03MO1qnZdYdgyfeuILPmQ==z{XXX}1B2M2Y8AsgTpgAmY7PhCfg==Úpassword)rC   r>  rJ   rK   rH   rI   rc   rN   rL   rE   rF   rG   rM   )r+   r"   ÚdphÚlphs       r   Útest_11_wrapped_methodsz)PrefixWrapperTest.test_11_wrapped_methodsº  s  € Ü×Ñ˜d J°¸ÓAˆØ-ˆØ-ˆð 	×Ñ˜Ÿ™›Ð)HÔIð 	×Ñœ) R§Z¡Z°¸TÔBØ×Ñ˜Ÿ™ J°Ó4°cÔ:Ø×Ñœ* b§j¡j°*¸cÔBð 	×Ñ˜Ÿ™ Ó,¨cÔ2ð 	�‰˜Ÿ™ CÓ(Ô)Ø×Ñ˜Ÿ™ SÓ)Ô*ð 	×Ñœ* b§i¡i°¸SÔAØ�‰˜Ÿ	™	 *¨cÓ2Õ3r   c                 ó4  — t        j                  ddd«      }| j                  |j                  t	        d«      «       | j                  |j                  d «       t        j                  ddd«      }| j                  |j                  d «       | j                  |j                  d «       t        j                  dddd«      }| j                  |j                  d «       | j                  |j                  d «       t        j                  dddd	¬
«      }| j                  |j                  t	        d	«      «       | j                  |j                  d «       t        j                  dddd¬
«      }| j                  t        t         j                  dddd¬
«       | j                  t        t         j                  dddd¬
«       t        j                  ddd«      }| j                  |j                  d «       | j                  |j                  t	        d«      t	        d«      f«       t        j                  dddd¬
«      }| j                  |j                  t	        d«      «       | j                  |j                  d «       | j                  t        t         j                  ddd¬
«       | j                  d«      5  t        j                  dddd¬«      }d d d «       | j                  |j                  d «       | j                  |j                  d «       y # 1 sw Y   ŒBxY w)NÚh2r   r;  z
{XXX}{MD5}r  r  r<  Úh3z{Xrù   z{XXX}Az{XYz{XXXXÚh4Úphpassz{XXX}$P$z{XXX}$H$Úh5TÚh6z#orig_prefix.*may not work correctlyÚh7Ú$Ú?)Úorig_prefixÚprefix)
rC   r>  rJ   r|   r   r@  rþ   rH   rN   rj   ©r+   r  s     r   Útest_12_identzPrefixWrapperTest.test_12_identÒ  sh  € ä×Ñ˜T :¨wÓ7ˆØ×Ñ˜Ÿ™¤! L£/Ô2Ø�‰�a—n‘n dÔ+ô ×Ñ˜T ;°Ó8ˆØ�‰�a—g‘g˜tÔ$Ø�‰�a—n‘n dÔ+ô ×Ñ˜T :¨w¸Ó@ˆØ�‰�a—g‘g˜tÔ$Ø�‰�a—n‘n dÔ+ô ×Ñ˜T :¨w¸dÔCˆØ×Ñ˜Ÿ™¤! D£'Ô*Ø�‰�a—n‘n dÔ+ô ×Ñ˜T :¨w¸hÔGˆØ×Ñœ*¤b×&6Ñ&6¸¸jØ!¨ð 	ô 	0à×Ñœ*¤b×&6Ñ&6¸¸jØ!¨ð 	ô 	2ô ×Ñ˜T 8¨WÓ5ˆØ�‰�a—g‘g˜tÔ$Ø×Ñ˜Ÿ™¬!¨J«-¼¸:»Ð)GÔHô ×Ñ˜T ;°¸tÔDˆØ×Ñ˜Ÿ™¤! G£*Ô-Ø�‰�a—n‘n dÔ+ð 	×Ñœ*¤b×&6Ñ&6¸¸kÐQUÐÔVð ×#Ñ#Ð$IÕJÜ× Ñ   x¸SÈÔMˆA÷ Kà×Ñ˜Ÿ™¨Ô.Ø×Ñ˜Ÿ™ $Õ'÷ KÐJús   Ê3LÌLc                 ól   — t        j                  dddd¬«      }| j                  t        |«      d«       y)ztest repr()rR  Ú	md5_cryptr;  z$1$©r[  zÀ(?x)^PrefixWrapper\(
                ['"]h2['"],\s+
                ['"]md5_crypt['"],\s+
                prefix=u?["']{XXX}['"],\s+
                orig_prefix=u?["']\$1\$['"]
            \)$N)rC   r>  ÚassertRegexÚreprr]  s     r   Útest_13_reprzPrefixWrapperTest.test_13_repr  s1   € ä×Ñ˜T ;°ÀUÔKˆØ×Ñœ˜a›ðõ	r   c                 óv   — t        j                  ddd¬«      }| j                  t        |j                  d«       y)ztest orig_prefix sanity checkrR  r`  z$6$ra  rg   N)rC   r>  rH   rN   rL   r]  s     r   Útest_14_bad_hashz"PrefixWrapperTest.test_14_bad_hash  s.   € ô ×Ñ˜T ;¸EÔBˆØ×Ñœ* a§f¡f¨fÕ5r   N)r4   r5   r6   r&  rD  rF  rH  rK  rP  r^  rd  rf  r   r   r   r9  r9  ‚  s.   „ Ù"ò0ò 0ò0ò1ò4ò0-(ò^	ó6r   r9  c                   ó6   — e Zd ZdZdZej                  ZdZd„ Z	y)ÚUnsaltedHashz!test algorithm which lacks a saltÚunsalted_test_hashrU   c                 ó¦   — t        |t        «      r|j                  d«      }d|z   }t        t	        j
                  |«      j                  «       «      S )Nr\   s   boblious)r]   r   r^   r	   r_   r`   ra   ©r+   r2   Údatas      r   r3   zUnsaltedHash._calc_checksum  sA   € Ü�fœgÔ&Ø—]‘] 7Ó+ˆFØ˜VÑ#ˆÜœWŸ\™\¨$Ó/×9Ñ9Ó;Ó<Ð<r   N)
r4   r5   r6   r&  r7   rC   ÚLOWER_HEX_CHARSr:   r;   r3   r   r   r   rh  rh    s   „ Ù+Ø€DØ×'Ñ'€NØ€Mó=r   rh  c                   óŒ   — e Zd ZdZdZdZdZdZdZe	j                  xZZ ej                   ed«      «      Zed„ «       Zd	„ Zd
„ Zy)Ú
SaltedHashztest algorithm with a saltÚsalted_test_hashr˜   r   r�   rU   z^@salt[0-9a-f]{42,44}$c                 óÄ   — | j                  |«      st        j                  j                  | «      ‚t	        |t
        «      r|j                  d«      } | |dd |dd  ¬«      S )Nrq   r¯   iØÿÿÿ)r™   rs   )rF   rC   ÚexcÚInvalidHashErrorr]   rt   ru   rY   s     r   rv   zSaltedHash.from_string0  sT   € à�|‰|˜DÔ!Ü—&‘&×)Ñ)¨#Ó.Ð.Ü�dœEÔ"Ø—;‘;˜wÓ'ˆDÙ˜˜Q˜s˜¨d°3°4¨jÔ9Ð9r   c                 ó`   — t        d«      | j                  | j                  fz  }t        |«      S )Nz	@salt%s%s)r   r™   rs   r
   r$  s     r   Ú	to_stringzSaltedHash.to_string8  s(   € Ü�‹~ §¡¨D¯M©MÐ :Ñ:ˆÜ˜TÓ"Ð"r   c                 ó  — t        |t        «      r|j                  d«      }| j                  j                  d«      |z   | j                  j                  d«      z   }t	        t        j                  |«      j                  «       «      S )Nr\   rq   )r]   r   r^   r™   r	   r_   r`   ra   rk  s      r   r3   zSaltedHash._calc_checksum<  sd   € Ü�fœgÔ&Ø—]‘] 7Ó+ˆFØ�y‰y×Ñ Ó(¨6Ñ1°D·I±I×4DÑ4DÀWÓ4MÑMˆÜœWŸ\™\¨$Ó/×9Ñ9Ó;Ó<Ð<r   N)r4   r5   r6   r&  r7   r›   rœ   r�   r;   rC   rm  rŸ   r:   ry   rz   r   r{   rf   rv   ru  r3   r   r   r   ro  ro  $  s`   „ Ù$Ø€DØ€Là€MØ€MØ€MØ"$×"4Ñ"4Ð4€J�à�"—*‘*™QÐ7Ó8Ó9€Kàñ:ó ð:ò#ó=r   ro  u   Î™Ï‰Î±Î½Î½Î·Ï‚c                   ó"   — e Zd ZeZdedfgZd„ Zy)ÚUnsaltedHashTest)rM  Ú(61cfd32684c47de231f1f982c214e884133762c0Ú(96b329d120b97ff81ada770042e44ba87343ad2bc                 óˆ   — | j                  t        t        d¬«       | j                  t        t        j                  d¬«       y )NÚxr˜   r   r¾   )rH   rI   rh  rK   )r+   s    r   Útest_bad_kwdszUnsaltedHashTest.test_bad_kwdsS  s2   € Ø×Ñœ)¤\¸ÐÔ<Ø×Ñœ)¤\×%;Ñ%;ÀAÐÕFr   N)r4   r5   r6   rh  ÚhandlerÚ
UPASS_TEMPÚknown_correct_hashesr}  r   r   r   rx  rx  K  s$   „ Ø€Gð 	AØ	Ð?Ð@ðÐó
Gr   rx  c                   ó"   — e Zd ZeZdedfgZd„ Zy)ÚSaltedHashTest)rM  z/@salt77d71f8fe74f314dac946766c1ac4a2a58365482c0z1@salt9f978a9bfe360d069b0c13f2afecd570447407fa7e48c                 ó¤   — t        d¬«      j                  }| j                  t        t         |d ¬«       | j                  t        t         |d¬«       y )NTr¥   r
  r†   )ro  rŒ   rH   rI   rN   )r+   Ústubs     r   r}  zSaltedHashTest.test_bad_kwds_  s@   € Ü tÔ,×;Ñ;ˆØ×Ñœ)¤Z¸$ÀTÐÔJØ×Ñœ*¤j¸4ÀeÐÕLr   N)r4   r5   r6   ro  r~  r  r€  r}  r   r   r   r‚  r‚  W  s$   „ Ø€Gð 	HØ	ÐHÐIðÐó
Mr   r‚  ))r&  Ú
__future__r   ry   r_   Úloggingr   r³   Úpasslib.hashr   r   Úpasslib.excr   r   Úpasslib.utils.compatr	   r
   r   Úpasslib.utils.handlersÚutilsÚhandlersrC   Úpasslib.tests.utilsr   r   r   r4   Úlogr   r   Úobjectr(  r9  rD   rh  r±   rx   ro  r  rx  r‚  r   r   r   Ú<module>r�     sÈ   ðÙ Dõ &ã 	Û Ý Û ÷ 0ß ?÷8ñ 8ç #Ð #ß 5Ý "á�Ó€ò

ôxG�8ô xGôJB ô Bô(O6˜ô O6ôl
=�2×#Ñ#ô 
=ô=�—‘˜R×.Ñ.ô =ñJ Ð;Ó<€
ô
G�{ô 
GôM�[õ Mr   