o
    _6÷d†}  ã                   @   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   sH    | dk rˆ D ]}|V  qd S ˆ D ]}ˆ| d ƒD ]}|| V  qqd S )Né   é   © )ÚsizeÚcharÚtail©ÚalphabetÚhelperr   úxC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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di |¤Ž || _d S ©Nr   )Ú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   sŽ   G dd„ dt jƒ}|  d¡ | d¡}W d  ƒ n1 sw   Y  |  |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 dS  ty   Y dS w )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 u rt dƒ‚t|tƒr| d¡}|d u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 u 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ÚtestNZ(7c622762588a0e5cc786ad0a143156f9fd38eea3Zxtest)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   s.   t |tƒr
| d¡}|tdƒkr| |dS t‚)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   ˆ dd| i|¤Žj S )Nr[   r   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   ˆ | i |¤Žj S rl   rZ   )r'   rh   r2   r   r   ri   Ý   ó   z=SkeletonTest.test_12_norm_checksum_raw.<locals>.norm_checksums   1234rk   s       N)r7   ZHasRawChecksumr`   r>   r<   r=   r   rm   rn   r   r2   r   Útest_12_norm_checksum_raw×   s
   z&SkeletonTest.test_12_norm_checksum_rawc                    sN  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}| jt	|dd | jt	|dd |  
|¡ |  |ddd¡ |  |ddd¡ |  |ddd¡ |  
|¡ | jt	|dd |  
|¡ W d  ƒ n1 sw   Y  tjddU}|  t	|d¡ |  t	|d¡ |  
|¡ |  |dƒ|¡ |  |d	ƒ|¡ |  |d
ƒ|¡ |  
|¡ |  t	|d¡ |  
|¡ |  |ddd|¡ |  
|dg¡ W d  ƒ n1 sów   Y  ˆ `|  g ¡ |  t|dƒƒd	¡ |  t|dƒƒd¡ W d  ƒ dS 1 s w   Y  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                     ó   ˆ di | ¤Žj S r    rr   ©rh   r2   r   r   Ú	norm_salt÷   rp   z1SkeletonTest.test_20_norm_salt.<locals>.norm_saltc                    s   ˆ j dd| i|¤ŽddjS )NZ	salt_sizeT©Zuse_defaultsr   )Úusingrs   )Úszrh   r2   r   r   Úgen_saltú   s   z0SkeletonTest.test_20_norm_salt.<locals>.gen_saltr   r   rt   rf   Nrr   Tr|   ©Ú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>   rw   rV   rG   )r#   r{   r   Zsalts2Zsalts3Zsalts4Úwlogr   r2   r   Útest_20_norm_saltì   sL   




ñ


î$þ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B}| jt|dd |  	|¡ |  |ddd¡ |  |d	dd	¡ |  |ddd¡ |  	|¡ | jt|dd |  	|¡ W d  ƒ n1 s{w   Y  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   rt   r   N)r+   r,   r-   r.   ru   Z
min_roundsÚ
max_roundsÚdefault_roundsr   r   r   r   r   8  s    r   c                     ry   r    rŠ   rz   r2   r   r   Únorm_rounds@  rp   z5SkeletonTest.test_30_init_rounds.<locals>.norm_roundsNrŠ   Tr|   r   g      ø?r€   r   r   rt   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   ó   | j r|  | j¡ dS dS ©NTF)Ú	_enable_aÚ_set_calc_checksum_backendÚ_calc_checksum_a©rJ   r   r   r   Ú_load_backend_aj  ó   z9SkeletonTest.test_40_backends.<locals>.d1._load_backend_ac                 S   r‘   r’   )Ú	_enable_br”   Ú_calc_checksum_br–   r   r   r   Ú_load_backend_br  r˜   z9SkeletonTest.test_40_backends.<locals>.d1._load_backend_bc                 S   ó   dS ©Nr'   r   r(   r   r   r   r•   z  ó   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_ac                 S   rœ   ©Nr&   r   r(   r   r   r   rš   }  rž   z:SkeletonTest.test_40_backends.<locals>.d1._calc_checksum_bN)r+   r,   r-   r.   ru   Ú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   rœ   r   r   r(   r   r   r   r•   º  rž   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_ac                 S   rœ   rŸ   r   r(   r   r   r   rš   ½  rž   z:SkeletonTest.test_41_backends.<locals>.d1._calc_checksum_bN)
r+   r,   r-   r.   ru   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.   ru   r   Údefault_identÚident_valuesZident_aliasesr   r   r   r   r   ç  s    r   c                     ry   r    r³   rz   r2   r   r   Ú
norm_identî  rp   z3SkeletonTest.test_50_norm_ident.<locals>.norm_identNr³   Tr|   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[   rs   z?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9zLKO/Ute40T3FNF95z+U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9iˆ  T)rs   r‹   Úimplicit_roundsr[   FrZ   )rs   r‹   r¾   )ÚsanitizezLK**************z+U0pr***************************************)r‹   r¾   rs   r[   zL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3z+YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3zuy/jIAhCetNCTtb0i¼(  )r[   rs   r‹   z@$pbkdf2$60000$DoEwpvQeA8B4T.k951yLUQ$O26Y3/NJEiLCVaOVPxGXshyjW8ks   ;n˜ßóI"ÂU£•?—²£[Éi`ê  s   0¦ôÀxOé=ç\‹Q©r[   r‹   rs   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  sH   ÿþýýý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   ro   rq   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.   ru   )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u sJ ‚| jS ©Nr   )ÚregistryF)Ú	locations)rÁ   rÙ   Ú_unload_handler_namer.   Zregister_crypt_handlerr×   Zget_crypt_handler)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   sˆ   t jdddddd}|  |jd¡ |  |jd¡ |  |jt¡ |  |jt¡ tdƒ}|  |jt¡ W d  ƒ dS 1 s=w   Y  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   sv   t  dddd¡}|  |jd¡ |  |jt¡ |  |jt¡ tdƒ}|  |jt¡ W d  ƒ dS 1 s4w   Y  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   sv   t  dtdd¡}|  |jd¡ |  |jt¡ |  |jt¡ tdƒ}|  |jt¡ W d  ƒ dS 1 s4w   Y  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|ƒv ¡ t  ddd¡}|  |jt	j¡ |  
dt|ƒv ¡ d S )Nr   r   rà   rá   rŒ   r¤   r   )r7   râ   r>   r.   rä   ru   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 d   ƒ n1 sÔw   Y  |  |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_hashrr   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Øÿÿÿ)rs   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   rs   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   rs   r   rN   rO   rP   rý   r   r   r   r*   <  s   

zSaltedHash._calc_checksumN)r+   r,   r-   rÔ   r.   ru   rv   rw   r0   r7   rÿ   rx   r/   ra   rb   r   rc   rT   r^   r  r*   r   r   r   r   r   $  s    

r   u   Î™Ï‰Î±Î½Î½Î·Ï‚c                   @   ó$   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Úxrr   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  ó    þr  c                   @   r  )ÚSaltedHashTest)rí   z/@salt77d71f8fe74f314dac946766c1ac4a2a58365482c0z1@salt9f978a9bfe360d069b0c13f2afecd570447407fa7e48c                 C   s4   t ddj}| jtt |d d | jtt |dd d S )NTr|   r½   rj   )r   rm   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  r
  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>   s6        I %