§
    HŠtj†}  ã                   ó²  — 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j!        ¦  «        Z" G d„ dej#        ej$        ¦  «        Z% ed¦  «        Z& G d„ de¦  «        Z' G d„ de¦  «        Z(dS )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                 óB   ‡ ‡— ˆ ˆfd„Št           ‰|¦  «        ¦  «        S )z1generate all strings of given size using alphabetc              3   óh   •K  — | dk     r‰D ]}|V — Œd S ‰D ]} ‰| dz
  ¦  «        D ]	}||z   V — Œ
Œd S )Né   é   © )ÚsizeÚcharÚtailÚalphabetÚhelpers      €€ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/tests/test_utils_handlers.pyr   z_makelang.<locals>.helper   s~   øè è € Ø�!Š8ˆ8Ø ð ð �Ø�
�
�
�
ðð ð !ð $ð $�Ø"˜F 4¨¡6™NœNð $ð $�DØ˜t™)�O�O�O�Oð$ð$ð $ó    )Úset)r   r   r   s   ` @r   Ú	_makelangr      s:   øø€ ð$ð $ð $ð $ð $ð $õ ˆvˆv�d‰|Œ|ÑÔÐr   c                   óZ   — 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dS )ÚSkeletonTestztest hash support classesc                 ón  ‡—  G ˆfd„dt           j        ¦  «        Š|                      ‰                     t	          d¦  «        ¦  «        ¦  «         |                      ‰                     d¦  «        ¦  «         |                      ‰                     t	          d¦  «        ¦  «        ¦  «         |                      ‰                     t	          d¦  «        ¦  «        ¦  «         |                      ‰                     d¦  «        ¦  «         |                      ‰                     t	          d¦  «        ¦  «        ¦  «         |                      ‰                     t	          d	¦  «        ¦  «        ¦  «         |                      ‰                     t	          d
¦  «        ¦  «        ¦  «         |                      t          ‰j        d¦  «         |                      t          ‰j        d¦  «         |                      ‰ 	                    ¦   «         ‰ 
                    d¦  «        ¦  «         |                      ‰                     dd¦  «        ¦  «         |                      ‰                     dt	          d¦  «        ¦  «        ¦  «         |                      ‰                     dd¦  «        ¦  «         |                      ‰                     dt	          d¦  «        ¦  «        ¦  «         |                      ‰                     ddd¬¦  «        ¦  «         |                      t          ‰j        dd¦  «         |                      t          ‰j        dt	          d¦  «        ¦  «         |                      ‰ 
                    d¦  «        d¦  «         |                      ‰ 
                    dd¬¦  «        d¦  «         dS )ztest StaticHandler classc                   ób   •‡ — 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   Fc                 óL   •—  t          ‰| ¦  «        j        di |¤Ž || _        d S ©Nr   )ÚsuperÚ__init__r$   )Úselfr$   ÚkwdsÚ	__class__r"   s      €€r   r*   z8SkeletonTest.test_00_static_handler.<locals>.d1.__init__9   s/   ø€ Ø(•�b˜$‘”Ô(Ð0Ð0¨4Ð0Ð0Ð0Ø �”	�	�	r   c                 óL   — | j         rt          d¦  «        nt          d¦  «        S )NÚbÚa)r$   r   ©r+   Úsecrets     r   Ú_calc_checksumz>SkeletonTest.test_00_static_handler.<locals>.d1._calc_checksum=   s   € Ø!%¤Ð6•q˜‘v”v�vµ°#±´Ð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Ø˜1˜S™6œ6ˆLØ˜Q˜t™WœWˆNØˆMð!ð !ð !ð !ð !ð !ð !ð7ð 7ð 7ð 7ð 7ð 7ð 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ð 	7ð 	7ð 	7ð 	7ð 	7•Ô!ñ 	7ô 	7ð 	7ð 	�Š˜Ÿš¥A d¡G¤GÑ,Ô,Ñ-Ô-Ð-Ø�Š˜Ÿš EÑ*Ô*Ñ+Ô+Ð+Ø�Š˜Ÿš¥A d¡G¤GÑ,Ô,Ñ-Ô-Ð-à×Ò˜Ÿš¥Q t¡W¤WÑ-Ô-Ñ.Ô.Ð.Ø×Ò˜Ÿš UÑ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš¥Q s¡V¤VÑ,Ô,Ñ-Ô-Ð-Ø×Ò˜Ÿš¥Q s¡V¤VÑ,Ô,Ñ-Ô-Ð-Ø×Ò˜Ÿš¥Q s¡V¤VÑ,Ô,Ñ-Ô-Ð-Ø×Ò�) R¤[°$Ñ7Ô7Ð7Ø×Ò�) R¤[°!Ñ4Ô4Ð4ð 	×Ò˜Ÿš™œ¨¯ª°©¬Ñ5Ô5Ð5ð 	�Š˜Ÿ	š	 # uÑ-Ô-Ñ.Ô.Ð.Ø�Š˜Ÿ	š	 #¥a¨¡g¤gÑ.Ô.Ñ/Ô/Ð/Ø×Ò˜Ÿš 3¨Ñ.Ô.Ñ/Ô/Ð/Ø×Ò˜Ÿš 3¥q¨¡w¤wÑ/Ô/Ñ0Ô0Ð0Ø�Š˜Ÿ	š	 # u°4˜	Ñ8Ô8Ñ9Ô9Ð9Ø×Ò�* b¤i°°eÑ<Ô<Ð<Ø×Ò�* b¤i°µa¸±g´gÑ>Ô>Ð>ð 	×Ò˜Ÿš ™œ tÑ,Ô,Ð,Ø×Ò˜Ÿš ¨4˜Ñ0Ô0°$Ñ7Ô7Ð7Ð7Ð7r   c                 óÐ  —  G d„ dt           j        ¦  «        }|                      d¦  «        5  |                     d¦  «        }ddd¦  «         n# 1 swxY w Y   |                      |d¦  «         |                      |                     d|¦  «        ¦  «         |                      |                     d|¦  «        ¦  «         |`|  	                    t          |j        d¦  «         dS )ztest StaticHandler legacy attrc                   óT   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )ú3SkeletonTest.test_01_calc_checksum_hack.<locals>.d1r"   c                 óz   — |rt          |¦  «        dk    rdS 	 t          |d¦  «         n# t          $ r Y dS w xY wdS )Né(   Fé   T)ÚlenÚintrN   ©ÚclsrL   s     r   rF   z<SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.identifyf   sX   € àð !�s 4™yœy¨Bš˜Ø ˜5ð!Ý˜˜b‘M”M�M�MøÝ!ð !ð !ð !Ø ˜5˜5ð!øøøà�ts   ™* ª
8·8c                 ó  — |€t          d¦  «        ‚t          |t          ¦  «        r|                     d¦  «        }|�$|                      |¦  «        st          d¦  «        ‚t          j        d|z   ¦  «                             ¦   «         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   s~   € à�>Ý#Ð$8Ñ9Ô9Ð9Ý˜f¥gÑ.Ô.ð 4Ø#Ÿ]š]¨7Ñ3Ô3�FàÐ#¨C¯LªL¸Ñ,>Ô,>Ð#Ý$ ^Ñ4Ô4Ð4Ý”| F¨V¡OÑ4Ô4×>Ò>Ñ@Ô@Ð@r   c                 ó|   — |€t          d¦  «        ‚|                      ||¦  «        |                     ¦   «         k    S )Nzno hash specified)rN   rc   Úlowerrb   s      r   rM   z:SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.verify{   s7   € à�<Ý$Ð%8Ñ9Ô9Ð9Ø—{’{ 6¨4Ñ0Ô0°D·J²J±L´LÒ@Ð@r   N)r4   r5   r6   r7   ÚclassmethodrF   rc   rM   r   r   r   r"   rS   c   sp   € € € € € ØˆDàðð ñ Œ[ðð ðAð Añ Œ[ðAð ðAð 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]   s3  € ð	Að 	Að 	Að 	Að 	A•Ô!ñ 	Aô 	Að 	Að> ×#Ò#Ð$KÑLÔLð 	#ð 	#Ø—7’7˜6‘?”?ˆDð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#à×Ò˜ÐIÑJÔJÐJà�Š˜Ÿ	š	 &¨$Ñ/Ô/Ñ0Ô0Ð0Ø×Ò˜Ÿš 7¨DÑ1Ô1Ñ2Ô2Ð2ð ˆJØ×ÒÕ-¨r¬w¸Ñ?Ô?Ð?Ð?Ð?s   ®AÁAÁAc                 ón  —  G d„ dt           j        ¦  «        }|                      t          |j        d¦  «         |                      t          |j        d¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         t          j        t          d¦  «        ¦  «        |_
        |                      t          |j        d¦  «         |                      t          |j        d¦  «         |                      |                     d	¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |`
t          d
¦  «        |_        |                      t          |j        d¦  «         |                      t          |j        d¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |`dS )ztest GenericHandler.identify()c                   ó$   — e Zd Zed„ ¦   «         ZdS )ú)SkeletonTest.test_10_identify.<locals>.d1c                 ó¢   — t          |t          ¦  «        r|                     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“   sM   € å˜d¥EÑ*Ô*ð 0ØŸ;š; wÑ/Ô/�DØ�1˜S™6œ6’>�>Ø˜3¨Ð-Ñ-Ô-Ð-å$Ð$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�   sÛ  € ð	%ð 	%ð 	%ð 	%ð 	%•Ô"ñ 	%ô 	%ð 	%ð 	×Ò�) R¤[°$Ñ7Ô7Ð7Ø×Ò�) R¤[°!Ñ4Ô4Ð4Ø×Ò˜Ÿš R™œÑ)Ô)Ð)Ø�Š˜Ÿš CÑ(Ô(Ñ)Ô)Ð)Ø×Ò˜Ÿš SÑ)Ô)Ñ*Ô*Ð*õ œ¥A d¡G¤GÑ,Ô,ˆŒØ×Ò�) R¤[°$Ñ7Ô7Ð7Ø×Ò�) R¤[°!Ñ4Ô4Ð4Ø�Š˜Ÿš DÑ)Ô)Ñ*Ô*Ð*Ø×Ò˜Ÿš SÑ)Ô)Ñ*Ô*Ð*ØˆNõ �S‘6”6ˆŒØ×Ò�) R¤[°$Ñ7Ô7Ð7Ø×Ò�) R¤[°!Ñ4Ô4Ð4Ø�Š˜Ÿš DÑ)Ô)Ñ*Ô*Ð*Ø×Ò˜Ÿš SÑ)Ô)Ñ*Ô*Ð*ØˆHˆHˆHr   c                 ó¶  ‡—  G d„ dt           j        ¦  «        Šdˆfd„	}|                      t          |t	          d¦  «        ¦  «         |                       |t	          d¦  «        ¦  «        t	          d¦  «        ¦  «         |                       |t	          d¦  «        ¦  «        t	          d¦  «        ¦  «         |                      t          |t	          d¦  «        ¦  «         |                      t          |t	          d	¦  «        ¦  «         |                      t          |d
¦  «         |                       ‰¦   «         j        t	          d¦  «        ¦  «         dS )z%test GenericHandler checksum handlingc                   ó,   — e Zd ZdZdZ ed¦  «        ZdS )ú.SkeletonTest.test_11_norm_checksum.<locals>.d1r"   é   ÚxzN)r4   r5   r6   r7   r;   r   r:   r   r   r   r"   r€   ¶   s%   € € € € € ØˆDØˆMØ˜Q˜t™WœWˆNˆNˆ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!   ø€ Ø�2Ð-Ð-˜xÐ-¨1Ð-Ð-Ô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³   sO  ø€ ð	%ð 	%ð 	%ð 	%ð 	%•Ô"ñ 	%ô 	%ð 	%ð
	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	×Ò�* mµQ°u±X´XÑ>Ô>Ð>ð 	×Ò˜˜¥q¨¡y¤yÑ1Ô1µ1°V±9´9Ñ=Ô=Ð=Ø×Ò˜˜¥q¨¡y¤yÑ1Ô1µ1°V±9´9Ñ=Ô=Ð=ð 	×Ò�* mµQ°w±Z´ZÑ@Ô@Ð@ð 	×Ò�* mµQ°v±Y´YÑ?Ô?Ð?ð 	×Ò�) ]°GÑ<Ô<Ð<ð 	×Ò˜˜™œÔ,­a°©i¬iÑ8Ô8Ð8Ð8Ð8r   c                 ó.  ‡—  G d„ dt           j        t           j        ¦  «        Šˆfd„}|                       |d¦  «        d¦  «         |                      t
          |t          d¦  «        ¦  «         |                       ‰¦   «         j        d¦  «         dS )z*test GenericHandler + HasRawChecksum mixinc                   ó   — e Zd ZdZdZdS )ú2SkeletonTest.test_12_norm_checksum_raw.<locals>.d1r"   r�   N)r4   r5   r6   r7   r;   r   r   r   r"   r‘   Ù   s   € € € € € ØˆDØˆMˆMˆ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   ø€ Ø�2�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×   s·   ø€ ð	ð 	ð 	ð 	ð 	•Ô"¥BÔ$5ñ 	ô 	ð 	ð	(ð 	(ð 	(ð 	(ð 	(ð 	×Ò˜˜ wÑ/Ô/°Ñ9Ô9Ð9ð 	×Ò�) ]µA°f±I´IÑ>Ô>Ð>ð 	×Ò˜˜™œÔ,¨iÑ8Ô8Ð8Ð8Ð8r   c                 ór  ‡—  G d„ dt           j        t           j        ¦  «        Šˆfd„}ˆfd„}t          dd¦  «        }t          dd¦  «        }t          dd¦  «        }|                      t
          |¦  «         |                      t
          |d	¬
¦  «         |                       |d¬¦  «        |¦  «         t          j        d¬¦  «        5 }|                      t          |d¬
¦  «         |                      t          |d¬
¦  «         |  
                    |¦  «         |                       |d¬
¦  «        d¦  «         |                       |d¬
¦  «        d¦  «         |                       |d¬
¦  «        d¦  «         |  
                    |¦  «         |                      t          |d¬
¦  «         |  
                    |¦  «         d	d	d	¦  «         n# 1 swxY w Y   t          j        d¬¦  «        5 }|                      t          |d¦  «         |                      t          |d¦  «         |  
                    |¦  «         |                       |d¦  «        |¦  «         |                       |d¦  «        |¦  «         |                       |d¦  «        |¦  «         |  
                    |¦  «         |                      t          |d¦  «         |  
                    |¦  «         |                       |dd¬¦  «        |¦  «         |  
                    |dg¦  «         d	d	d	¦  «         n# 1 swxY w Y   ‰`|                      g ¦  «        5  |                      t           |d	¦  «        ¦  «        d¦  «         |                      t           |d¦  «        ¦  «        d¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )z#test GenericHandler + HasSalt mixinc                   ó&   — e Zd ZdZdZdZdZdZdZdS )ú*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Ø !ÐØˆJˆJˆJr   r"   c                  ó   •—  ‰di | ¤Žj         S r(   r˜   ©r„   r"   s    €r   Ú	norm_saltz1SkeletonTest.test_20_norm_salt.<locals>.norm_salt÷   s   ø€ Ø�2�7�7˜�7�7”<Ðr   c                 ó@   •—   ‰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ú   s0   ø€ Ø.�8�2”8Ð.Ð. bÐ.¨AÐ.Ð.¸DÐAÑAÔAÔ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ð 	Gð 	Gð 	Gð 	Gõ ˜4 Ñ#Ô#ˆÝ˜4 Ñ#Ô#ˆÝ˜4 Ñ#Ô#ˆð 	×Ò�) YÑ/Ô/Ð/Ø×Ò�) Y°TÐÑ:Ô:Ð:Ø�Š�i�i¨TÐ2Ñ2Ô2°FÑ;Ô;Ð;õ Ô$¨DÐ1Ñ1Ô1ð 	*°Tð ×Ò�j¨)¸"ÐÑ=Ô=Ð=Ø×Ò�j¨)¸#ÐÑ>Ô>Ð>Ø×#Ò# DÑ)Ô)Ð)ð ×Ò˜Y˜Y¨DÐ1Ñ1Ô1°4Ñ8Ô8Ð8Ø×Ò˜Y˜Y¨EÐ2Ñ2Ô2°EÑ:Ô:Ð:Ø×Ò˜Y˜Y¨FÐ3Ñ3Ô3°VÑ<Ô<Ð<Ø×#Ò# DÑ)Ô)Ð)ð ×Ò�j¨)¸(ÐÑCÔCÐCØ×#Ò# DÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*õ$ Ô$¨DÐ1Ñ1Ô1ð 	N°Tð ×Ò�j¨(°AÑ6Ô6Ð6Ø×Ò�j¨(°AÑ6Ô6Ð6Ø×#Ò# DÑ)Ô)Ð)ð �MŠM˜(˜( 1™+œ+ vÑ.Ô.Ð.Ø�MŠM˜(˜( 1™+œ+ vÑ.Ô.Ð.Ø�MŠM˜(˜( 1™+œ+ vÑ.Ô.Ð.Ø×#Ò# DÑ)Ô)Ð)ð ×Ò�j¨(°AÑ6Ô6Ð6Ø×#Ò# DÑ)Ô)Ð)à�MŠM˜(˜( 1¨dÐ3Ñ3Ô3°VÑ<Ô<Ð<Ø×#Ò# DÐ+KÐ*LÑMÔMÐMð%	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nð* ÐØ×#Ò# BÑ'Ô'ð 	2ð 	2Ø×Ò�S  ¨$¡¤Ñ0Ô0°!Ñ4Ô4Ð4Ø×Ò�S  ¨!¡¤Ñ-Ô-¨qÑ1Ô1Ð1ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2s9   ÃC7GÇGÇGÇ/D)L$Ì$L(Ì+L(ÍAN,Î,N0Î3N0c                 ó–  ‡—  G d„ dt           j        t           j        ¦  «        Šˆfd„}|                      t          |¦  «         |                      t          |d¬¦  «         |                       |d¬¦  «        d¦  «         |                      t          |d	¬¦  «         t          j        d¬
¦  «        5 }|                      t          |d¬¦  «         |  	                    |¦  «         |                       |d¬¦  «        d¦  «         |                       |d¬¦  «        d¦  «         |                       |d¬¦  «        d¦  «         |  	                    |¦  «         |                      t          |d¬¦  «         |  	                    |¦  «         ddd¦  «         n# 1 swxY w Y   d‰_
        |                      t          |d¬¦  «         dS )z%test GenericHandler + HasRounds mixinc                   ó"   — e Zd ZdZdZdZdZdZdS )ú,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ØˆNˆNˆNr   r"   c                  ó   •—  ‰di | ¤Žj         S r(   r¾   r¡   s    €r   Únorm_roundsz5SkeletonTest.test_30_init_rounds.<locals>.norm_rounds@  s   ø€ Ø�2�7�7˜�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  s2  ø€ ð	ð 	ð 	ð 	ð 	•”�rÔ0ñ 	ô 	ð 	ð	"ð 	"ð 	"ð 	"ð 	"ð 	×Ò�) [Ñ1Ô1Ð1Ø×Ò�) [¸ÐÑ>Ô>Ð>Ø×Ò˜˜°$Ð7Ñ7Ô7¸Ñ;Ô;Ð;ð 	×Ò�) [¸ÐÑ=Ô=Ð=õ Ô$¨DÐ1Ñ1Ô1ð 	*°Tà×Ò�j¨+¸aÐÑ@Ô@Ð@Ø×#Ò# DÑ)Ô)Ð)ð ×Ò˜[˜[°Ð2Ñ2Ô2°AÑ6Ô6Ð6Ø×Ò˜[˜[°Ð2Ñ2Ô2°AÑ6Ô6Ð6Ø×Ò˜[˜[°Ð2Ñ2Ô2°AÑ6Ô6Ð6Ø×#Ò# DÑ)Ô)Ð)ð ×Ò�j¨+¸aÐÑ@Ô@Ð@Ø×#Ò# DÑ)Ô)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*ð  !ˆÔØ×Ò�) [¸tÐÑDÔDÐDÐDÐDs   Â4CFÆFÆ!Fc                 ó~  —  G d„ dt           j        t           j        ¦  «        }|                      t          |j        ¦  «         |                      t          |j        ¦  «         |                      t          |j        d¦  «         |                      t          |j        d¦  «         |                      |                     ¦   «         ¦  «         d|_	         |¦   «         }|  
                    |                     d¦  «        d¦  «         |                     d¦  «         |                     d¦  «         |  
                    |                     d¦  «        d¦  «         |                      t          |j        d¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         d|_        |                      |                     ¦   «         ¦  «         |                     d¦  «         |  
                    |                     d¦  «        d¦  «         |                      t          |j        d	¦  «         |                      t          |j        d	¦  «         |                     d¦  «          G d
„ d|¦  «        }|                      t          |j        d¦  «         dS )z+test GenericHandler + HasManyBackends mixinc                   óZ   — e Zd ZdZdZdZdZdZed„ ¦   «         Z	ed„ ¦   «         Z
d„ Zd„ Zd	S )
ú)SkeletonTest.test_40_backends.<locals>.d1r"   r   ©r0   r/   Fc                 óL   — | j         r|                      | j        ¦  «         dS dS ©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ÑHÔHÐHØ˜4à ˜5r   c                 óL   — | j         r|                      | j        ¦  «         dS dS rÌ   )Ú	_enable_brÎ   Ú_calc_checksum_brÐ   s    r   Ú_load_backend_bz9SkeletonTest.test_40_backends.<locals>.d1._load_backend_br  rÒ   r   c                 ó   — dS ©Nr0   r   r1   s     r   rÏ   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_az  ó   € Ø�sr   c                 ó   — dS ©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  s   € € € € € ØˆDØˆLà!ˆHàˆIØˆIàð!ð !ñ Œ[ð!ð ð!ð !ñ Œ[ð!ðð ð ðð ð ð ð r   r"   ÚanyÚdefaultTrB   r/   r0   r@   c                   ó   — e Zd ZdZdS )ú)SkeletonTest.test_40_backends.<locals>.d2TN)r4   r5   r6   Ú_has_backend_ar   r   r   Úd2rà   ¦  s   € € € € € Ø!ˆNˆNˆ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ñ 	ô 	ð 	ð@ 	×ÒÕ-¨r¬~Ñ>Ô>Ð>Ø×ÒÕ-¨r¬~Ñ>Ô>Ð>Ø×ÒÕ-¨r¬~¸uÑEÔEÐEØ×ÒÕ-¨r¬~¸yÑIÔIÐIØ×Ò˜ŸšÑ)Ô)Ñ*Ô*Ð*ð ˆŒð ˆb‰dŒdˆØ×Ò˜×+Ò+¨CÑ0Ô0°#Ñ6Ô6Ð6ð 	�Š�sÑÔÐØ
�Š�uÑÔÐØ×Ò˜×+Ò+¨CÑ0Ô0°#Ñ6Ô6Ð6ð 	×ÒÕ-¨r¬~¸sÑCÔCÐCØ�Š˜Ÿš sÑ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš¨Ñ,Ô,Ñ-Ô-Ð-ð ˆŒð 	�Š˜ŸšÑ(Ô(Ñ)Ô)Ð)Ø
�Š�sÑÔÐØ×Ò˜×+Ò+¨CÑ0Ô0°#Ñ6Ô6Ð6ð 	×Ò�* b¤n°cÑ:Ô:Ð:Ø×Ò�* b¤n°cÑ:Ô:Ð:ð 	�Š�sÑÔÐð	"ð 	"ð 	"ð 	"ð 	"�ñ 	"ô 	"ð 	"à×Ò�.¨"¬.¸#Ñ>Ô>Ð>Ð>Ð>r   c                 ó.  — t          j        dt          d¬¦  «          G d„ dt          j        t          j        ¦  «        }|                      t          |j        ¦  «         |                      t          |j	        ¦  «         |                      t          |j	        d¦  «         |                      t          |j	        d¦  «         |  
                    |                     ¦   «         ¦  «         d|_         |¦   «         }|                      |                     d	¦  «        d
¦  «         | 	                    d
¦  «         | 	                    d¦  «         |                      |                     d	¦  «        d
¦  «         |                      t          |j	        d¦  «         |                      |                     d
¦  «        ¦  «         |  
                    |                     d¦  «        ¦  «         d|_        |                      |                     ¦   «         ¦  «         | 	                    d¦  «         |                      |                     d	¦  «        d¦  «         |                      t"          |j	        d¦  «         |                      t"          |j        d¦  «         dS )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	dS )ú)SkeletonTest.test_41_backends.<locals>.d1r"   r   rÊ   Fc                 ó   — dS rØ   r   r1   s     r   rÏ   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_aº  rÙ   r   c                 ó   — dS 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ï   ±  sK   € € € € € Øˆ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ª  sX  € åÔ Ý'ØGð	ñ 	ô 	ð 	ð
	ð 	ð 	ð 	ð 	•Ô#¥RÔ%6ñ 	ô 	ð 	ð  	×ÒÕ-¨r¬~Ñ>Ô>Ð>Ø×ÒÕ-¨r¬~Ñ>Ô>Ð>Ø×ÒÕ-¨r¬~¸uÑEÔEÐEØ×ÒÕ-¨r¬~¸yÑIÔIÐIØ×Ò˜ŸšÑ)Ô)Ñ*Ô*Ð*ð !ˆÔð ˆb‰dŒdˆØ×Ò˜×+Ò+¨CÑ0Ô0°#Ñ6Ô6Ð6ð 	�Š�sÑÔÐØ
�Š�uÑÔÐØ×Ò˜×+Ò+¨CÑ0Ô0°#Ñ6Ô6Ð6ð 	×ÒÕ-¨r¬~¸sÑCÔCÐCØ�Š˜Ÿš sÑ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš¨Ñ,Ô,Ñ-Ô-Ð-ð !ˆÔð 	�Š˜ŸšÑ(Ô(Ñ)Ô)Ð)Ø
�Š�sÑÔÐØ×Ò˜×+Ò+¨CÑ0Ô0°#Ñ6Ô6Ð6ð 	×Ò�* b¤n°cÑ:Ô:Ð:Ø×Ò�* b¤n°cÑ:Ô:Ð:Ð:Ð:r   c                 ó  ‡—  G d„ dt           j        t           j        ¦  «        Šˆfd„}|                      t          |¦  «         |                      t          |d¬¦  «         |                       |d¬¦  «        t          d¦  «        ¦  «         |                       |t          d¦  «        ¬¦  «        t          d¦  «        ¦  «         |                       |t          d	¦  «        ¬¦  «        t          d	¦  «        ¦  «         |                      t          |t          d
¦  «        ¬¦  «         |                       |t          d¦  «        ¬¦  «        t          d¦  «        ¦  «         |                      t          |t          d¦  «        ¬¦  «         |                      ‰ 	                    t          d¦  «        ¦  «        ¦  «         |                      ‰ 	                    t          d¦  «        ¦  «        ¦  «         |  
                    ‰ 	                    t          d¦  «        ¦  «        ¦  «         |  
                    ‰ 	                    t          d¦  «        ¦  «        ¦  «         |  
                    ‰ 	                    t          d¦  «        ¦  «        ¦  «         |                      t          ‰j	        d¦  «         |                      t          ‰j	        d¦  «         d‰_        |                      t          |d¬¦  «         dS )z#test GenericHandler + HasManyIdentsc                   ó„   — e Zd ZdZdZ ed¦  «        Z ed¦  «         ed¦  «        fZ ed¦  «         ed¦  «        iZdS )ú+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ø   ç  sY   € € € € € ØˆDØ%ˆLØ˜A˜d™GœGˆMØ˜A˜d™GœG Q Q t¡W¤WÐ-ˆLØ˜a ™fœf a a¨¡g¤gÐ.ˆMˆMˆMr   r"   c                  ó   •—  ‰di | ¤Žj         S r(   rù   r¡   s    €r   Ú
norm_identz3SkeletonTest.test_50_norm_ident.<locals>.norm_identî  s   ø€ Ø�2�7�7˜�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ñ 	/ô 	/ð 	/ð	!ð 	!ð 	!ð 	!ð 	!ð 	×Ò�) ZÑ0Ô0Ð0Ø×Ò�) Z°tÐÑ<Ô<Ð<Ø×Ò˜˜°Ð6Ñ6Ô6½¸$¹¼Ñ@Ô@Ð@ð 	×Ò˜˜­!¨D©'¬'Ð2Ñ2Ô2µA°d±G´GÑ<Ô<Ð<Ø×Ò˜˜­!¨D©'¬'Ð2Ñ2Ô2µA°d±G´GÑ<Ô<Ð<Ø×Ò�* j½¸$¹¼ÐÑ@Ô@Ð@ð 	×Ò˜˜­!¨C©&¬&Ð1Ñ1Ô1µ1°T±7´7Ñ;Ô;Ð;ð 	×Ò�* j½¸#¹¼ÐÑ?Ô?Ð?ð 	�Š˜Ÿš¥A g¡J¤JÑ/Ô/Ñ0Ô0Ð0Ø�Š˜Ÿš¥A g¡J¤JÑ/Ô/Ñ0Ô0Ð0Ø×Ò˜Ÿš¥Q w¡Z¤ZÑ0Ô0Ñ1Ô1Ð1Ø×Ò˜Ÿš¥Q s¡V¤VÑ,Ô,Ñ-Ô-Ð-Ø×Ò˜Ÿš¥Q r¡U¤UÑ+Ô+Ñ,Ô,Ð,Ø×Ò�) R¤[°$Ñ7Ô7Ð7Ø×Ò�) R¤[°!Ñ4Ô4Ð4ð  ˆÔØ×Ò�.¨*À4ÐÑHÔHÐHÐHÐHr   c                 óœ  — ddl m} |j                             d¦  «        }|                      |t          d¦  «        t          d¦  «        dœ¦  «         d}t          d¦  «        }t          d	¦  «        }|j                             |¦  «        }|                      |t          |d
d|¬¦  «        ¦  «         |j                             |d¬¦  «        }|                      |t          |d
d¬¦  «        ¦  «         |j                             |d¬¦  «        }|                      |t          d
dt          d¦  «        t          d¦  «        ¬¦  «        ¦  «         |j                             d¦  «        }|                      |t          t          d¦  «        t          d¦  «        d¬¦  «        ¦  «         d}|j                             |¦  «        }|                      |t          ddd¬¦  «        ¦  «         |j                             |d¬¦  «        }|                      |t          t          d¦  «        dt          d¦  «        ¬¦  «        ¦  «         d S )!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Ð!PÑQÔQÐQð NˆÝÐ Ñ!Ô!ˆÝÐ;Ñ<Ô<ˆØÔ"×,Ò,¨QÑ/Ô/ˆØ×Ò˜¥¨1°TØ6:ÀQð"Hñ "Hô "Hñ 	Iô 	Ið 	Ið Ô"×,Ò,¨Q¸Ð,Ñ?Ô?ˆØ×Ò˜¥¨1°TÈ4Ð!PÑ!PÔ!PÑQÔQÐQð Ô"×,Ò,¨Q¸Ð,Ñ>Ô>ˆØ×Ò˜¥¨TÀ4ÝÐ%Ñ&Ô&ÝÐEÑFÔFð"Hñ "Hô "Hñ 	Iô 	Ið 	Ið
 Ô"×,Ò,Ð-{Ñ|Ô|ˆØ×Ò˜¥ÝÐDÑEÔEÝÐ%Ñ&Ô&Øð"
ñ "
ô "
ñ 	ô 	ð 	ð PˆØÔ!×+Ò+¨BÑ/Ô/ˆØ×Ò˜¥ØSØØCð"
ñ "
ô "
ñ 	ô 	ð 	ð Ô!×+Ò+¨B¸Ð+Ñ>Ô>ˆØ×Ò˜¥ÝÐ4Ñ5Ô5ØÝÐ+Ñ,Ô,ð"
ñ "
ô "
ñ 	ô 	ð 	ð 	ð 	r   c                 ó  — ddl m} |                      |j                             ¦   «         dddœ¦  «         |                      |j                             ¦   «         dddœ¦  «         |                      |j        dd	¦  «         |                      |j                             ¦   «         d
dddœ¦  «         |                      |j        dd¦  «         |                      |j                             ¦   «         ddddœ¦  «         dS )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  s6  € ð 	!Ð Ð Ð Ð Ð ð 	×Ò˜œ×/Ò/Ñ1Ô1Ø&(°"Ð5Ð5ñ	7ô 	7ð 	7ð 	×Ò˜œ×,Ò,Ñ.Ô.Ø&)°3Ð7Ð7ñ	9ô 	9ð 	9ð 	�Š�tÔ(Ð*:¸MÑJÔJÐJØ×Ò˜Ô*×2Ò2Ñ4Ô4Ø&)°RÀÐDÐDñ	Fô 	Fð 	Fð 	�Š�tÔ'Ð)9¸=ÑIÔIÐIØ×Ò˜Ô)×1Ò1Ñ3Ô3Ø&)°RÀÐEÐEñ	Gô 	Gð 	Gð 	Gð 	Gr   N)r4   r5   r6   Ú__doc__rP   rl   r}   rŽ   r”   rº   rÆ   ré   rõ   r  r  r%  r   r   r   r   r   )   sì   € € € € € Ø#Ð#ð
,8ð ,8ð ,8ð\.@ð .@ð .@ðf!ð !ð !ðF"9ð "9ð "9ðH9ð 9ð 9ð*E2ð E2ð E2ðR(Eð (Eð (EðTI?ð I?ð I?ðV8;ð 8;ð 8;ðt(Ið (Ið (Ið\6ð 6ð 6ðpGð Gð Gð Gð Gr   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Údummy_handler_in_registryz6context manager that inserts dummy handler in registryc                 óz   — || _         t          d|z   t          j        ft	          |d¬¦  «        ¦  «        | _        d S )NÚdummy_r   )r7   r›   )r7   ÚtyperC   rx   r  Údummy)r+   r7   s     r   r*   z"dummy_handler_in_registry.__init__p  sF   € ØˆŒ	Ý˜( T™/­BÔ,=Ð+?ÅØØðB
ñ B
ô B
ñ ô ˆŒ
ˆ
ˆ
r   c                 óÎ   — ddl m} |                     | j        d¬¦  «         |                     | 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  sp   € Ø$Ð$Ð$Ð$Ð$Ð$Ø×%Ò% d¤i¸5Ð%ÑAÔAÐAØ×'Ò'¨¬
Ñ3Ô3Ð3Ø×)Ò)¨$¬)Ñ4Ô4¸¼
ÐBÐBÐBÐBØŒzÐr   c                 óJ   — ddl m} |                     | j        d¬¦  «         d S r.  )r  r/  r1  r7   )r+   Úexc_infor/  s      r   Ú__exit__z"dummy_handler_in_registry.__exit__~  s5   € Ø$Ð$Ð$Ð$Ð$Ð$Ø×%Ò% d¤i¸5Ð%ÑAÔAÐAÐAÐAr   N)r4   r5   r6   r&  r*   r4  r7  r   r   r   r(  r(  n  sL   € € € € € Ø@Ð@ðð ð ðð ð ðBð Bð Bð Bð Br   r(  c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚPrefixWrapperTestztest PrefixWrapper classc                 ó´  — t          j        ddddd¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        t          ¦  «         |                      |j        t          ¦  «         t          d¦  «        5 }|                      |j        t          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )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ÑLÔLˆð 	×Ò˜Ô)¨:Ñ6Ô6Ð6Ø�Š�bÔ)¨4Ñ0Ô0Ð0ð 	�Š�b”j¥(Ñ+Ô+Ð+Ø�Š�bÔ)­8Ñ4Ô4Ð4õ ' zÑ2Ô2ð 	0°eØ�MŠM˜"œ*¥hÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   Â!CÃCÃCc                 óz  — t          j        dddd¦  «        }|                      |j        d¦  «         |                      |j        t          ¦  «         |                      |j        t          ¦  «         t          d¦  «        5 }|                      |j        t          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )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ÔAˆð 	×Ò˜Ô)¨:Ñ6Ô6Ð6Ø�Š�bÔ)­8Ñ4Ô4Ð4Ø�Š�b”j¥(Ñ+Ô+Ð+õ ' zÑ2Ô2ð 	0°eØ�MŠM˜"œ*¥hÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   Â!B0Â0B4Â7B4c                 ó„  — t          j        dt          dd¦  «        }|                      |j        d¦  «         |                      |j        t          ¦  «         |                      |j        t          ¦  «         t          d¦  «        5 }|                      |j        t          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )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Ô0Ð0Ø�Š�bÔ)­8Ñ4Ô4Ð4Ø�Š�b”j¥(Ñ+Ô+Ð+õ ' zÑ2Ô2ð 	0°eØ�MŠM˜"œ*¥hÑ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   Â!B5Â5B9Â<B9c                 óº  — t          j        dddd¦  «        }|                      |j        d¦  «         |                      |j        t          j        ¦  «         |                      dt          |¦  «        v ¦  «         t          j        ddd¦  «        }|                      |j        t          j        ¦  «         |  
                    dt          |¦  «        v ¦  «         d S )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ÔAˆØ×Ò˜œ $Ñ'Ô'Ð'Ø�Š�b”o¥xÔ'<Ñ=Ô=Ð=Ø×Ò˜­¨R©¬Ð0Ñ1Ô1Ð1åÔ˜d N°GÑ<Ô<ˆØ�Š�b”o¥|Ô'@ÑAÔAÐAØ�Š˜­¨B©¬Ð/Ñ0Ô0Ð0Ð0Ð0r   c                 óð  — t          j        dddd¦  «        }d}d}|                      |                     ¦   «         d¦  «         |                      t
          |j        dd ¦  «         |                      |                     d|¦  «        |¦  «         |                      t          |j        d|¦  «         |                      |                     d¦  «        |¦  «         |  	                    | 
                    |¦  «        ¦  «         |                      | 
                    |¦  «        ¦  «         |                      t          |j        d|¦  «         |  	                    |                     d|¦  «        ¦  «         d S )	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º  sI  € ÝÔ˜d J°¸ÑAÔAˆØ-ˆØ-ˆð 	×Ò˜Ÿš™œÐ)HÑIÔIÐIð 	×Ò�) R¤Z°¸TÑBÔBÐBØ×Ò˜Ÿš J°Ñ4Ô4°cÑ:Ô:Ð:Ø×Ò�* b¤j°*¸cÑBÔBÐBð 	×Ò˜Ÿš Ñ,Ô,¨cÑ2Ô2Ð2ð 	�Š˜Ÿš CÑ(Ô(Ñ)Ô)Ð)Ø×Ò˜Ÿš SÑ)Ô)Ñ*Ô*Ð*ð 	×Ò�* b¤i°¸SÑAÔAÐAØ�Š˜Ÿ	š	 *¨cÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 óF  — t          j        ddd¦  «        }|                      |j        t	          d¦  «        ¦  «         |                      |j        d ¦  «         t          j        ddd¦  «        }|                      |j        d ¦  «         |                      |j        d ¦  «         t          j        dddd¦  «        }|                      |j        d ¦  «         |                      |j        d ¦  «         t          j        dddd	¬
¦  «        }|                      |j        t	          d	¦  «        ¦  «         |                      |j        d ¦  «         t          j        dddd¬
¦  «        }|                      t          t           j        dddd¬
¦  «         |                      t          t           j        dddd¬
¦  «         t          j        ddd¦  «        }|                      |j        d ¦  «         |                      |j        t	          d¦  «        t	          d¦  «        f¦  «         t          j        dddd¬
¦  «        }|                      |j        t	          d¦  «        ¦  «         |                      |j        d ¦  «         |                      t          t           j        ddd¬
¦  «         |  	                    d¦  «        5  t          j        dddd¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |j        d ¦  «         |                      |j        d ¦  «         d S )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Ò  s)  € åÔ˜T :¨wÑ7Ô7ˆØ×Ò˜œ¥! L¡/¤/Ñ2Ô2Ð2Ø�Š�a”n dÑ+Ô+Ð+õ Ô˜T ;°Ñ8Ô8ˆØ�Š�a”g˜tÑ$Ô$Ð$Ø�Š�a”n dÑ+Ô+Ð+õ Ô˜T :¨w¸Ñ@Ô@ˆØ�Š�a”g˜tÑ$Ô$Ð$Ø�Š�a”n dÑ+Ô+Ð+õ Ô˜T :¨w¸dÐCÑCÔCˆØ×Ò˜œ¥! D¡'¤'Ñ*Ô*Ð*Ø�Š�a”n dÑ+Ô+Ð+õ Ô˜T :¨w¸hÐGÑGÔGˆØ×Ò�*¥bÔ&6¸¸jØ!¨ð 	ñ 	0ô 	0ð 	0à×Ò�*¥bÔ&6¸¸jØ!¨ð 	ñ 	2ô 	2ð 	2õ Ô˜T 8¨WÑ5Ô5ˆØ�Š�a”g˜tÑ$Ô$Ð$Ø×Ò˜œ­!¨J©-¬-½¸:¹¼Ð)GÑHÔHÐHõ Ô˜T ;°¸tÐDÑDÔDˆØ×Ò˜œ¥! G¡*¤*Ñ-Ô-Ð-Ø�Š�a”n dÑ+Ô+Ð+ð 	×Ò�*¥bÔ&6¸¸kÐQUÐÑVÔVÐVð ×#Ò#Ð$IÑJÔJð 	Nð 	NÝÔ   x¸SÈÐMÑMÔMˆAð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nà×Ò˜œ¨Ñ.Ô.Ð.Ø×Ò˜œ $Ñ'Ô'Ð'Ð'Ð's   Ê;K Ë K$Ë'K$c                 ó|   — t          j        dddd¬¦  «        }|                      t          |¦  «        d¦  «         dS )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  sJ   € åÔ˜T ;°ÀUÐKÑKÔKˆØ×Ò�˜a™œðñ	ô 	ð 	ð 	ð 	r   c                 óv   — t          j        ddd¬¦  «        }|                      t          |j        d¦  «         dS )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ÑBÔBˆØ×Ò�* a¤f¨fÑ5Ô5Ð5Ð5Ð5r   N)r4   r5   r6   r&  rD  rF  rH  rK  rP  r^  rd  rf  r   r   r   r9  r9  ‚  s“   € € € € € Ø"Ð"ð0ð 0ð 0ð 0ð 0ð 0ð0ð 0ð 0ð1ð 1ð 1ð4ð 4ð 4ð0-(ð -(ð -(ð^	ð 	ð 	ð6ð 6ð 6ð 6ð 6r   r9  c                   ó.   — e Zd ZdZdZej        ZdZd„ Z	dS )ÚUnsaltedHashz!test algorithm which lacks a saltÚunsalted_test_hashrU   c                 óÆ   — t          |t          ¦  «        r|                     d¦  «        }d|z   }t          t	          j        |¦  «                             ¦   «         ¦  «        S )Nr\   s   boblious)r]   r   r^   r	   r_   r`   ra   ©r+   r2   Údatas      r   r3   zUnsaltedHash._calc_checksum  sS   € Ý�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dS )Ú
SaltedHashztest algorithm with a saltÚsalted_test_hashr˜   r   r�   rU   z^@salt[0-9a-f]{42,44}$c                 óø   — |                       |¦  «        st          j                             | ¦  «        ‚t	          |t
          ¦  «        r|                     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Øˆs˜˜Q˜s˜Uœ¨d°3°4°4¬jÐ9Ñ9Ô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Ð :Ñ:ˆÝ˜TÑ"Ô"Ð"r   c                 ó,  — t          |t          ¦  «        r|                     d¦  «        }| j                             d¦  «        |z   | j                             d¦  «        z   }t	          t          j        |¦  «                             ¦   «         ¦  «        S )Nr\   rq   )r]   r   r^   r™   r	   r_   r`   ra   rk  s      r   r3   zSaltedHash._calc_checksum<  sx   € Ý�f�gÑ&Ô&ð 	,Ø—]’] 7Ñ+Ô+ˆFØŒy×Ò Ñ(Ô(¨6Ñ1°D´I×4DÒ4DÀWÑ4MÔ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€J�à�"”*˜Q˜QÐ7Ñ8Ô8Ñ9Ô9€Kàð:ð :ñ „[ð:ð#ð #ð #ð=ð =ð =ð =ð =r   ro  u   Î™Ï‰Î±Î½Î½Î·Ï‚c                   ó$   — e Zd ZeZdedfgZd„ ZdS )ÚUnsaltedHashTest)rM  Ú(61cfd32684c47de231f1f982c214e884133762c0Ú(96b329d120b97ff81ada770042e44ba87343ad2bc                 ó˜   — |                       t          t          d¬¦  «         |                       t          t          j        d¬¦  «         d S )NÚxr˜   r   r¾   )rH   rI   rh  rK   )r+   s    r   Útest_bad_kwdszUnsaltedHashTest.test_bad_kwdsS  sA   € Ø×Ò�)¥\¸ÐÑ<Ô<Ð<Ø×Ò�)¥\Ô%;ÀAÐÑFÔFÐFÐFÐFr   N)r4   r5   r6   rh  ÚhandlerÚ
UPASS_TEMPÚknown_correct_hashesr}  r   r   r   rx  rx  K  sD   € € € € € Ø€Gð 	AØ	Ð?Ð@ðÐð
Gð Gð Gð Gð Gr   rx  c                   ó$   — e Zd ZeZdedfgZd„ ZdS )ÚSaltedHashTest)rM  z/@salt77d71f8fe74f314dac946766c1ac4a2a58365482c0z1@salt9f978a9bfe360d069b0c13f2afecd570447407fa7e48c                 ó¼   — t          d¬¦  «        j        }|                      t          t           |d ¬¦  «         |                      t          t           |d¬¦  «         d S )NTr¥   r
  r†   )ro  rŒ   rH   rI   rN   )r+   Ústubs     r   r}  zSaltedHashTest.test_bad_kwds_  sU   € Ý tÐ,Ñ,Ô,Ô;ˆØ×Ò�)¥Z¸$ÀTÐÑJÔJÐJØ×Ò�*¥j¸4ÀeÐÑLÔLÐLÐLÐLr   N)r4   r5   r6   ro  r~  r  r€  r}  r   r   r   r‚  r‚  W  sD   € € € € € Ø€Gð 	HØ	ÐHÐIðÐð
Mð Mð Mð Mð 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Ð Dð &Ð %Ð %Ð %Ð %Ð %à 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€ð 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ð8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø "Ð "Ð "Ð "Ð "Ð "à€i�ÑÔ€ð

ð 
ð 
ðxGð xGð xGð xGð xG�8ñ xGô xGð xGðJBð Bð Bð Bð B ñ Bô Bð Bð(O6ð O6ð O6ð O6ð O6˜ñ O6ô O6ð O6ðl
=ð 
=ð 
=ð 
=ð 
=�2Ô#ñ 
=ô 
=ð 
=ð=ð =ð =ð =ð =�”˜RÔ.ñ =ô =ð =ðJ ˆQÐ;Ñ<Ô<€
ð
Gð 
Gð 
Gð 
Gð 
G�{ñ 
Gô 
Gð 
GðMð Mð Mð Mð M�[ñ Mô Mð Mð Mð Mr   