U
    #°i†}  ã                   @   s*  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  mZ ddlmZmZ dd	lmZ eeƒZd
d„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ dej!ƒZ"G dd„ dej#ej$ƒZ%edƒZ&G dd„ deƒZ'G d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                    s   ‡ ‡fdd„‰t ˆ|ƒƒS )z1generate all strings of given size using alphabetc                 3   sD   | dk rˆ D ]
}|V  qn&ˆ D ] }ˆ| d ƒD ]}|| V  q.qd S )Né   é   © )ÚsizeÚcharÚtail©ÚalphabetÚhelperr   úi/var/www/html/me.goteku.com/backend/venv/lib/python3.8/site-packages/passlib/tests/test_utils_handlers.pyr      s    
z_makelang.<locals>.helper)Úset)r   r   r   r   r   Ú	_makelang   s    r   c                   @   sp   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚSkeletonTestztest hash support classesc                    sž  G ‡ fd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ƒ¡¡ |  ˆ jdddd¡ |  tˆ jdd¡ |  tˆ jdtdƒ¡ |  ˆ  
d¡d¡ |  ˆ j
dddd¡ dS )ztest StaticHandler classc                       sD   e Zd ZdZdZedƒZedƒZdZd‡ ‡fdd„	Z	d	d
„ Z
‡  ZS )z/SkeletonTest.test_00_static_handler.<locals>.d1Úd1©ÚflagÚ_Úabr   Fc                    s   t ˆ| ƒjf |Ž || _d S ©N)ÚsuperÚ__init__r   )Úselfr   Úkwds)Ú	__class__r   r   r   r"   9   s    z8SkeletonTest.test_00_static_handler.<locals>.d1.__init__c                 S   s   | j rtdƒS tdƒS )NÚbÚa)r   r   ©r#   Úsecretr   r   r   Ú_calc_checksum=   s    z>SkeletonTest.test_00_static_handler.<locals>.d1._calc_checksum)F)Ú__name__Ú
__module__Ú__qualname__ÚnameZcontext_kwdsr   Z_hash_prefixÚchecksum_charsÚchecksum_sizer"   r*   Ú__classcell__r   ©r   )r%   r   r   2   s   r   Z_as   _aÚ_bZ_cs   _cr'   r&   ÚcNr   Ú Úss   _bTr   )ÚuhÚStaticHandlerÚ
assertTrueÚidentifyr   ÚassertFalseÚassertRaisesÚ	TypeErrorÚassertEqualÚ	genconfigÚhashÚverifyÚ
ValueError©r#   r   r2   r   Útest_00_static_handler/   s*    z#SkeletonTest.test_00_static_handlerc              	   C   sz   G dd„ dt jƒ}|  d¡ | d¡}W 5 Q R X |  |d¡ |  | d|¡¡ |  | d|¡¡ |`|  	t
|jd¡ dS )ztest StaticHandler legacy attrc                   @   s4   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdS )	z3SkeletonTest.test_01_calc_checksum_hack.<locals>.d1r   c                 S   s>   |rt |ƒdkrdS zt|dƒ W n tk
r8   Y dS X dS )Né(   Fé   T)ÚlenÚintrB   ©Úclsr@   r   r   r   r:   f   s    z<SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.identifyc                 S   sP   |d krt dƒ‚t|tƒr$| d¡}|d k	r>|  |¡s>tdƒ‚t d| ¡ ¡ S )Nzno secret providedúutf-8zinvalid hashs   xyz)	r=   Ú
isinstancer
   Úencoder:   rB   ÚhashlibÚsha1Ú	hexdigest©rJ   r)   r@   r   r   r   Úgenhashp   s    

z;SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.genhashc                 S   s$   |d krt dƒ‚|  ||¡| ¡ kS )Nzno hash specified)rB   rR   ÚlowerrQ   r   r   r   rA   {   s    z:SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.verifyN)r+   r,   r-   r.   Úclassmethodr:   rR   rA   r   r   r   r   r   c   s   
	

r   z%d1.*should be updated.*_calc_checksumÚtestZ(7c622762588a0e5cc786ad0a143156f9fd38eea3ZxtestN)r7   r8   ÚassertWarningListr@   r>   r9   rA   r;   rR   r<   ÚNotImplementedError)r#   r   r@   r   r   r   Útest_01_calc_checksum_hack]   s    z'SkeletonTest.test_01_calc_checksum_hackc                 C   s  G dd„ dt jƒ}|  t|jd¡ |  t|jd¡ |  | d¡¡ |  | d¡¡ |  | d¡¡ t 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                   @   s   e Zd Zedd„ ƒZdS )z)SkeletonTest.test_10_identify.<locals>.d1c                 S   s2   t |tƒr| d¡}|tdƒkr*| |dS t‚d S )NÚasciir'   ©Úchecksum)rL   ÚbytesÚdecoder   rB   rI   r   r   r   Úfrom_string“   s
    


z5SkeletonTest.test_10_identify.<locals>.d1.from_stringN)r+   r,   r-   rT   r^   r   r   r   r   r   ’   s   r   Nr   r5   r'   r&   z@.z@aú!z!a)r7   ÚGenericHandlerr<   r=   r:   r;   r9   ÚreÚcompiler   Ú_hash_regexÚident)r#   r   r   r   r   Útest_10_identify   s$    
zSkeletonTest.test_10_identifyc                    s¬   G dd„ dt jƒ‰ d‡ fd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                   @   s   e Zd ZdZdZedƒZdS )z.SkeletonTest.test_11_norm_checksum.<locals>.d1r   é   ÚxzN)r+   r,   r-   r.   r0   r   r/   r   r   r   r   r   ¶   s   r   Nc                    s   ˆ f d| i|—Žj S )Nr[   rZ   )r[   Úkr2   r   r   Únorm_checksum»   s    z9SkeletonTest.test_11_norm_checksum.<locals>.norm_checksumÚxxxZxxxxZxzxzZxxxxxÚxxyxs   xxyx)N)r7   r`   r<   rB   r   r>   r=   Ú_stub_checksum©r#   ri   r   r2   r   Útest_11_norm_checksum³   s    	z"SkeletonTest.test_11_norm_checksumc                    sX   G dd„ dt jt jƒ‰ ‡ fdd„}|  |dƒd¡ |  t|tdƒ¡ |  ˆ ƒ jd¡ dS )	z*test GenericHandler + HasRawChecksum mixinc                   @   s   e Zd ZdZdZdS )z2SkeletonTest.test_12_norm_checksum_raw.<locals>.d1r   rf   N)r+   r,   r-   r.   r0   r   r   r   r   r   Ù   s   r   c                     s   ˆ | |Žj S r    rZ   )r'   rh   r2   r   r   ri   Ý   s    z=SkeletonTest.test_12_norm_checksum_raw.<locals>.norm_checksums   1234rk   s       N)r7   ZHasRawChecksumr`   r>   r<   r=   r   rl   rm   r   r2   r   Útest_12_norm_checksum_raw×   s
    z&SkeletonTest.test_12_norm_checksum_rawc              	      s  G dd„ dt jt jƒ‰ ‡ fdd„}‡ fdd„}tddƒ}tdd	ƒ}tdd
ƒ}|  t|¡ | jt|dd |  |dd|¡ tjddŠ}| jt	|dd | jt	|dd |  
|¡ |  |ddd¡ |  |ddd¡ |  |ddd¡ |  
|¡ | jt	|dd |  
|¡ W 5 Q R X tjdd }|  t	|d¡ |  t	|d¡ |  
|¡ |  |dƒ|¡ |  |d	ƒ|¡ |  |d
ƒ|¡ |  
|¡ |  t	|d¡ |  
|¡ |  |ddd|¡ |  
|dg¡ W 5 Q R X ˆ `|  g ¡. |  t|dƒƒd	¡ |  t|dƒƒd¡ W 5 Q R X dS )z#test GenericHandler + HasSalt mixinc                   @   s$   e Zd ZdZdZdZdZdZdZdS )z*SkeletonTest.test_20_norm_salt.<locals>.d1r   ©Úsaltr   rf   é   r   N)	r+   r,   r-   r.   Úsetting_kwdsÚmin_salt_sizeÚmax_salt_sizeZdefault_salt_sizeÚ
salt_charsr   r   r   r   r   ï   s   r   c                     s   ˆ f | Žj S r    rp   ©rh   r2   r   r   Ú	norm_salt÷   s    z1SkeletonTest.test_20_norm_salt.<locals>.norm_saltc                    s   ˆ j f d| i|—ŽddjS )NZ	salt_sizeT©Zuse_defaults)Úusingrq   )Úszrh   r2   r   r   Úgen_saltú   s    z0SkeletonTest.test_20_norm_salt.<locals>.gen_saltr   r   rr   rf   Nrp   Try   ©Úrecordr5   r'   ZabaZabbaZaaaabbr   r   é   )Úrelaxedzsalt_size.*above max_salt_size)r7   ÚHasSaltr`   r   r<   r=   ZassertInÚwarningsÚcatch_warningsrB   ÚconsumeWarningListr>   ru   rV   rG   )r#   rx   r|   Zsalts2Zsalts3Zsalts4Úwlogr   r2   r   Útest_20_norm_saltì   sF    







zSkeletonTest.test_20_norm_saltc              	      s  G dd„ dt jt jƒ‰ ‡ fdd„}|  t|¡ | jt|dd |  |ddd	¡ | jt|d
d tjddz}| jt|dd |  	|¡ |  |ddd¡ |  |d	dd	¡ |  |ddd¡ |  	|¡ | jt|dd |  	|¡ W 5 Q R X dˆ _
| jt|dd dS )z%test GenericHandler + HasRounds mixinc                   @   s    e Zd ZdZdZdZdZdZdS )z,SkeletonTest.test_30_init_rounds.<locals>.d1r   ©Úroundsr   rr   r   N)r+   r,   r-   r.   rs   Z
min_roundsÚ
max_roundsÚdefault_roundsr   r   r   r   r   8  s
   r   c                     s   ˆ f | Žj S r    r‡   rw   r2   r   r   Únorm_rounds@  s    z5SkeletonTest.test_30_init_rounds.<locals>.norm_roundsNr‡   Try   r   g      ø?r}   r   r   rr   rf   )r7   Z	HasRoundsr`   r<   r=   r>   r‚   rƒ   rB   r„   rŠ   )r#   r‹   r…   r   r2   r   Útest_30_init_rounds5  s"    

z SkeletonTest.test_30_init_roundsc                 C   sR  G d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„ d|ƒ}|  t|jd¡ dS )z+test GenericHandler + HasManyBackends mixinc                   @   sH   e Zd ZdZdZdZdZdZedd„ ƒZ	edd„ ƒZ
d	d
„ Zdd„ ZdS )z)SkeletonTest.test_40_backends.<locals>.d1r   r   ©r'   r&   Fc                 S   s   | j r|  | j¡ dS dS d S ©NTF)Ú	_enable_aÚ_set_calc_checksum_backendÚ_calc_checksum_a©rJ   r   r   r   Ú_load_backend_aj  s    z9SkeletonTest.test_40_backends.<locals>.d1._load_backend_ac                 S   s   | j r|  | j¡ dS dS d S rŽ   )Ú	_enable_br   Ú_calc_checksum_br’   r   r   r   Ú_load_backend_br  s    z9SkeletonTest.test_40_backends.<locals>.d1._load_backend_bc                 S   s   dS ©Nr'   r   r(   r   r   r   r‘   z  s    z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_ac                 S   s   dS ©Nr&   r   r(   r   r   r   r•   }  s    z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_bN)r+   r,   r-   r.   rs   Úbackendsr   r”   rT   r“   r–   r‘   r•   r   r   r   r   r   a  s   

r   ÚanyÚdefaultTr6   r&   r'   r4   c                   @   s   e Zd ZdZdS )z)SkeletonTest.test_40_backends.<locals>.d2TN)r+   r,   r-   Ú_has_backend_ar   r   r   r   Úd2¦  s   r   N)r7   ÚHasManyBackendsr`   r<   r   Úget_backendÚset_backendr;   Úhas_backendr”   r>   r*   r9   r   rB   ÚAssertionError)r#   r   Úobjr   r   r   r   Útest_40_backends_  s0     



zSkeletonTest.test_40_backendsc                 C   s8  t jdtdd G d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                   @   s0   e Zd ZdZdZdZdZdZdd„ Zdd„ Z	d	S )
z)SkeletonTest.test_41_backends.<locals>.d1r   r   r   Fc                 S   s   dS r—   r   r(   r   r   r   r‘   º  s    z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_ac                 S   s   dS r˜   r   r(   r   r   r   r•   ½  s    z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_bN)
r+   r,   r-   r.   rs   r™   rœ   Ú_has_backend_br‘   r•   r   r   r   r   r   ±  s   r   rš   r›   Tr6   r&   r'   r4   N)r‚   ÚfilterwarningsÚDeprecationWarningr7   rž   r`   r<   r   rŸ   r    r;   r¡   r¨   r>   r*   r9   rœ   rB   )r#   r   r£   r   r   r   Útest_41_backendsª  s2    þ


zSkeletonTest.test_41_backendsc                    sh  G dd„ dt jt jƒ‰ ‡ fdd„}|  t|¡ | jt|dd |  |ddtd	ƒ¡ |  |td	ƒdtd	ƒ¡ |  |td
ƒdtd
ƒ¡ | jt|tdƒd |  |tdƒdtd	ƒ¡ | jt|tdƒd |  ˆ  	tdƒ¡¡ |  ˆ  	tdƒ¡¡ |  
ˆ  	tdƒ¡¡ |  
ˆ  	tdƒ¡¡ |  
ˆ  	tdƒ¡¡ |  tˆ j	d¡ |  tˆ j	d¡ dˆ _| jt|dd dS )z#test GenericHandler + HasManyIdentsc                   @   s<   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 )z+SkeletonTest.test_50_norm_ident.<locals>.d1r   ©rd   ú!Aú!BÚAN)	r+   r,   r-   r.   rs   r   Údefault_identÚident_valuesZident_aliasesr   r   r   r   r   ç  s
   r   c                     s   ˆ f | Žj S r    r¬   rw   r2   r   r   Ú
norm_identî  s    z3SkeletonTest.test_50_norm_ident.<locals>.norm_identNr¬   Try   r­   r®   z!Cr¯   ÚBz!Axxxz!Bxxxz!Cxxxr5   r   )r7   ZHasManyIdentsr`   r<   r=   r>   r   rB   r9   r:   r;   r°   r¢   )r#   r²   r   r2   r   Útest_50_norm_identä  s&    zSkeletonTest.test_50_norm_identc              	   C   sB  ddl m} |j d¡}|  |tdƒtdƒdœ¡ d}tdƒ}td	ƒ}|j |¡}|  |t|d
d|d¡ |jj|dd}|  |t|d
dd¡ |jj|dd}|  |td
dtdƒtdƒd¡ |j d¡}|  |ttdƒtdƒdd¡ d}|j |¡}|  |tdddd¡ |jj|dd}|  |ttdƒdtdƒd¡ d S )!ztest parsehash()r   ©r@   ZOgAwTx2l6NADIZAwTx2l6NADIZOg©r[   rq   z?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9zLKO/Ute40T3FNF95z+U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9iˆ  T)rq   rˆ   Úimplicit_roundsr[   FrZ   )rq   rˆ   r·   )ÚsanitizezLK**************z+U0pr***************************************)rˆ   r·   rq   r[   zL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3z+YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3zuy/jIAhCetNCTtb0i¼(  )r[   rq   rˆ   z@$pbkdf2$60000$DoEwpvQeA8B4T.k951yLUQ$O26Y3/NJEiLCVaOVPxGXshyjW8ks   ;n˜ßóI"ÂU£•?—²£[Éi`ê  s   0¦ôÀxOé=ç\‹Q©r[   rˆ   rq   zO26************************zDo********************N)	Úpasslibr@   Ú	des_cryptZ	parsehashr>   r   r   ÚdictÚpbkdf2_sha1)r#   r@   ÚresultÚhr6   r4   Úh1r   r   r   Útest_91_parsehash  sJ     ÿþýýýzSkeletonTest.test_91_parsehashc                 C   s”   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º   r@   r>   r»   ZbitsizeZbcryptZ	patchAttrr   r½   ©r#   r@   r   r   r   Útest_92_bitsizeJ  s    ÿÿ
ÿ
ÿzSkeletonTest.test_92_bitsizeN)r+   r,   r-   Ú__doc__rD   rX   re   rn   ro   r†   rŒ   r¤   r«   r´   rÁ   rÌ   r   r   r   r   r   )   s   .3#$I*K:.8r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Údummy_handler_in_registryz6context manager that inserts dummy handler in registryc                 C   s(   || _ td| tjft|ddƒ| _d S )NZdummy_r   )r.   rs   )r.   Útyper7   r`   r¼   Údummy)r#   r.   r   r   r   r"   p  s
    þz"dummy_handler_in_registry.__init__c                 C   sD   ddl m} |j| jdd | | j¡ | | j¡| jks>t‚| jS ©Nr   )ÚregistryF)Ú	locations)rº   rÒ   Ú_unload_handler_namer.   Zregister_crypt_handlerrÐ   Zget_crypt_handlerr¢   )r#   rÒ   r   r   r   Ú	__enter__w  s
    z#dummy_handler_in_registry.__enter__c                 G   s    ddl m} |j| jdd d S rÑ   )rº   rÒ   rÔ   r.   )r#   Úexc_inforÒ   r   r   r   Ú__exit__~  s    z"dummy_handler_in_registry.__exit__N)r+   r,   r-   rÍ   r"   rÕ   r×   r   r   r   r   rÎ   n  s   rÎ   c                   @   sP   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚPrefixWrapperTestztest PrefixWrapper classc              	   C   sr   t jdddddd}|  |jd¡ |  |jd¡ |  |jt¡ |  |jt¡ tdƒ}|  |jt¡ W 5 Q R X dS )z*test PrefixWrapper lazy loading of handlerr   r   ú{XXX}ú{MD5}T)ZlazyN)	r7   ÚPrefixWrapperr>   Ú_wrapped_nameÚassertIsÚ_wrapped_handlerÚwrappedr   rÎ   ©r#   r   rÐ   r   r   r   Útest_00_lazy_loading…  s    
z&PrefixWrapperTest.test_00_lazy_loadingc              	   C   s`   t  dddd¡}|  |jd¡ |  |jt¡ |  |jt¡ tdƒ}|  |jt¡ W 5 Q R X dS )z,test PrefixWrapper active loading of handlerr   r   rÙ   rÚ   N)	r7   rÛ   r>   rÜ   rÝ   rÞ   r   rß   rÎ   rà   r   r   r   Útest_01_active_loading•  s    
z(PrefixWrapperTest.test_01_active_loadingc              	   C   s`   t  dtdd¡}|  |jd¡ |  |jt¡ |  |jt¡ tdƒ}|  |jt¡ W 5 Q R X dS )z4test PrefixWrapper with explicitly specified handlerr   rÙ   rÚ   Nr   )	r7   rÛ   r   r>   rÜ   rÝ   rÞ   rß   rÎ   rà   r   r   r   Útest_02_explicit¢  s    
z"PrefixWrapperTest.test_02_explicitc                 C   st   t  dddd¡}|  |jd¡ |  |jtj¡ |  dt|ƒk¡ t  ddd¡}|  |jt	j¡ |  
dt|ƒk¡ d S )Nr   r   rÙ   rÚ   r‰   r   r   )r7   rÛ   r>   r.   rÝ   rs   r   r;   Údirr   r9   )r#   r   r   r   r   r   Útest_10_wrapped_attributes°  s    z,PrefixWrapperTest.test_10_wrapped_attributesc                 C   sº   t  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)r7   rÛ   r>   r?   r<   r=   rR   rB   r@   r9   r:   r;   rA   )r#   r   ZdphZlphr   r   r   Útest_11_wrapped_methodsº  s    z)PrefixWrapperTest.test_11_wrapped_methodsc              	   C   s¾  t  ddd¡}|  |jtdƒ¡ |  |jd ¡ t  ddd¡}|  |jd ¡ |  |jd ¡ t  dddd¡}|  |jd ¡ |  |jd ¡ t jdddd	d
}|  |jtd	ƒ¡ |  |jd ¡ t jddddd
}| jtt jddddd
 | jtt jddddd
 t  ddd¡}|  |jd ¡ |  |jtdƒtdƒf¡ t jddddd
}|  |jtdƒ¡ |  |jd ¡ | jtt jdddd
 |  	d¡ t jddddd}W 5 Q R X |  |jd ¡ |  |jd ¡ d S )NÚh2r   rÙ   z
{XXX}{MD5}r»   rÀ   rÚ   Zh3z{Xr¬   z{XXX}Az{XYz{XXXXZh4Zphpassz{XXX}$P$z{XXX}$H$Zh5TZh6z#orig_prefix.*may not work correctlyZh7ú$ú?)Úorig_prefixÚprefix)
r7   rÛ   r>   rd   r   rÝ   r±   r<   rB   rV   ©r#   r¿   r   r   r   Útest_12_identÒ  s@     ÿ ÿzPrefixWrapperTest.test_12_identc                 C   s&   t jddddd}|  t|ƒd¡ dS )ztest repr()rè   Ú	md5_cryptrÙ   z$1$©rë   zÀ(?x)^PrefixWrapper\(
                ['"]h2['"],\s+
                ['"]md5_crypt['"],\s+
                prefix=u?["']{XXX}['"],\s+
                orig_prefix=u?["']\$1\$['"]
            \)$N)r7   rÛ   ÚassertRegexÚreprrí   r   r   r   Útest_13_repr  s    
ÿzPrefixWrapperTest.test_13_reprc                 C   s$   t jdddd}|  t|jd¡ dS )ztest orig_prefix sanity checkrè   rï   z$6$rð   rU   N)r7   rÛ   r<   rB   r@   rí   r   r   r   Útest_14_bad_hash  s    z"PrefixWrapperTest.test_14_bad_hashN)r+   r,   r-   rÍ   rá   râ   rã   rå   rç   rî   ró   rô   r   r   r   r   rØ   ‚  s   
/rØ   c                   @   s&   e Zd ZdZdZejZdZdd„ Z	dS )ÚUnsaltedHashz!test algorithm which lacks a saltZunsalted_test_hashrE   c                 C   s.   t |tƒr| d¡}d| }tt |¡ ¡ ƒS )NrK   s   boblious)rL   r
   rM   r   rN   rO   rP   ©r#   r)   Údatar   r   r   r*     s    

zUnsaltedHash._calc_checksumN)
r+   r,   r-   rÍ   r.   r7   ÚLOWER_HEX_CHARSr/   r0   r*   r   r   r   r   rõ     s
   rõ   c                   @   sX   e Zd ZdZdZdZdZdZdZe	j
 ZZe edƒ¡Zedd	„ ƒZd
d„ Zdd„ ZdS )Ú
SaltedHashztest algorithm with a saltZsalted_test_hashrp   r   rf   rE   z^@salt[0-9a-f]{42,44}$c                 C   sF   |   |¡stj | ¡‚t|tƒr*| d¡}| |dd… |dd … dS )NrY   r   iØÿÿÿ)rq   r[   )r:   r7   ÚexcZInvalidHashErrorrL   r\   r]   rI   r   r   r   r^   0  s
    


zSaltedHash.from_stringc                 C   s   t dƒ| j| jf }t|ƒS )Nz	@salt%s%s)r   rq   r[   r	   rË   r   r   r   Ú	to_string8  s    zSaltedHash.to_stringc                 C   sB   t |tƒr| d¡}| j d¡| | j d¡ }tt |¡ ¡ ƒS )NrK   rY   )rL   r
   rM   rq   r   rN   rO   rP   rö   r   r   r   r*   <  s    

zSaltedHash._calc_checksumN)r+   r,   r-   rÍ   r.   rs   rt   ru   r0   r7   rø   rv   r/   ra   rb   r   rc   rT   r^   rû   r*   r   r   r   r   rù   $  s   

rù   u   Î™Ï‰Î±Î½Î½Î·Ï‚c                   @   s$   e Zd ZeZdedfgZdd„ ZdS )ÚUnsaltedHashTest)ræ   Z(61cfd32684c47de231f1f982c214e884133762c0Z(96b329d120b97ff81ada770042e44ba87343ad2bc                 C   s&   | j ttdd | j ttjdd d S )NÚxrp   r   r‡   )r<   r=   rõ   r?   rC   r   r   r   Útest_bad_kwdsS  s    zUnsaltedHashTest.test_bad_kwdsN)r+   r,   r-   rõ   ÚhandlerÚ
UPASS_TEMPÚknown_correct_hashesrþ   r   r   r   r   rü   K  s
   þrü   c                   @   s$   e Zd ZeZdedfgZdd„ ZdS )ÚSaltedHashTest)ræ   z/@salt77d71f8fe74f314dac946766c1ac4a2a58365482c0z1@salt9f978a9bfe360d069b0c13f2afecd570447407fa7e48c                 C   s4   t ddj}| jtt |d d | jtt |dd d S )NTry   r¶   rj   )rù   rl   r<   r=   rB   )r#   Zstubr   r   r   rþ   _  s    zSaltedHashTest.test_bad_kwdsN)r+   r,   r-   rù   rÿ   r   r  rþ   r   r   r   r   r  W  s
   þr  ))rÍ   Ú
__future__r   ra   rN   Úloggingr   r‚   Zpasslib.hashr   r   Zpasslib.excr   r   Zpasslib.utils.compatr   r	   r
   Zpasslib.utils.handlersÚutilsÚhandlersr7   Zpasslib.tests.utilsr   r   r   r+   Úlogr   r   ÚobjectrÎ   rØ   r8   rõ   r   r`   rù   r   rü   r  r   r   r   r   Ú<module>   s4       I %