o
    5Îh†}  ã                   @   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   úu/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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__ÚnameÚcontext_kwdsr   Ú_hash_prefixÚchecksum_charsÚchecksum_sizer"   r*   Ú__classcell__r   ©r   )r%   r   r   2   s    r   Ú_as   _aÚ_bÚ_cs   _cr'   r&   ÚcNr   Ú Úss   _bTr   )ÚuhÚStaticHandlerÚ
assertTrueÚidentifyr   ÚassertFalseÚassertRaisesÚ	TypeErrorÚassertEqualÚ	genconfigÚhashÚverifyÚ
ValueError©r#   r   r4   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ÚintrF   ©ÚclsrD   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)	rA   Ú
isinstancer
   Úencoder>   rF   ÚhashlibÚsha1Ú	hexdigest©rN   r)   rD   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)rF   rV   ÚlowerrU   r   r   r   rE   {   s   z:SkeletonTest.test_01_calc_checksum_hack.<locals>.d1.verifyN)r+   r,   r-   r.   Úclassmethodr>   rV   rE   r   r   r   r   r   c   s    
	

r   z%d1.*should be updated.*_calc_checksumÚtestNÚ(7c622762588a0e5cc786ad0a143156f9fd38eea3Úxtest)r;   r<   ÚassertWarningListrD   rB   r=   rE   r?   rV   r@   ÚNotImplementedError)r#   r   rD   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)rP   ÚbytesÚdecoder   rF   rM   r   r   r   Úfrom_string“   s
   


z5SkeletonTest.test_10_identify.<locals>.d1.from_stringN)r+   r,   r-   rX   rd   r   r   r   r   r   ’   s    r   Nr   r9   r'   r&   z@.z@aú!z!a)r;   ÚGenericHandlerr@   rA   r>   r?   r=   Ú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.   r2   r   r1   r   r   r   r   r   ¶   s    r   Nc                    s   ˆ dd| i|¤Žj S )Nra   r   r`   )ra   Úkr4   r   r   Únorm_checksum»   s   z9SkeletonTest.test_11_norm_checksum.<locals>.norm_checksumÚxxxÚxxxxÚxzxzÚxxxxxÚxxyxs   xxyx©N)r;   rf   r@   rF   r   rB   rA   Ú_stub_checksum©r#   ro   r   r4   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   rl   N)r+   r,   r-   r.   r2   r   r   r   r   r   Ù   s    r   c                     s   ˆ | i |¤Žj S ru   r`   )r'   rn   r4   r   r   ro   Ý   ó   z=SkeletonTest.test_12_norm_checksum_raw.<locals>.norm_checksums   1234rt   s       N)r;   ÚHasRawChecksumrf   rB   r@   rA   r   rv   rw   r   r4   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   rl   é   r   N)	r+   r,   r-   r.   Úsetting_kwdsÚmin_salt_sizeÚmax_salt_sizeÚdefault_salt_sizeÚ
salt_charsr   r   r   r   r   ï   s    r   c                     ó   ˆ di | ¤Žj S r    r|   ©rn   r4   r   r   Ú	norm_salt÷   ry   z1SkeletonTest.test_20_norm_salt.<locals>.norm_saltc                    s   ˆ j dd| i|¤ŽddjS )NÚ	salt_sizeT©Úuse_defaultsr   )Úusingr}   )Úszrn   r4   r   r   Úgen_saltú   s   z0SkeletonTest.test_20_norm_salt.<locals>.gen_saltr   r   r~   rl   Nr|   Trˆ   ©Úrecordr9   r'   ÚabaÚabbaÚaaaabbr   r   é   )Úrelaxedzsalt_size.*above max_salt_size)r;   ÚHasSaltrf   r   r@   rA   ÚassertInÚwarningsÚcatch_warningsrF   ÚconsumeWarningListrB   r   r\   rK   )r#   r†   rŒ   Úsalts2Úsalts3Úsalts4Úwlogr   r4   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   r~   r   N)r+   r,   r-   r.   r   Ú
min_roundsÚ
max_roundsÚdefault_roundsr   r   r   r   r   8  s    r   c                     r„   r    rž   r…   r4   r   r   Únorm_rounds@  ry   z5SkeletonTest.test_30_init_rounds.<locals>.norm_roundsNrž   Trˆ   r   g      ø?r   r   r   r~   rl   )r;   Ú	HasRoundsrf   r@   rA   rB   r–   r—   rF   r˜   r¢   )r#   r£   rœ   r   r4   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©rN   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.   r   Úbackendsr©   r¯   rX   r­   r±   r«   r°   r   r   r   r   r   a  s    

r   ÚanyÚdefaultTr:   r&   r'   r8   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)r;   ÚHasManyBackendsrf   r@   r   Úget_backendÚset_backendr?   Úhas_backendr¯   rB   r*   r=   r©   rF   Ú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.   r   r¶   r¹   Ú_has_backend_br«   r°   r   r   r   r   r   ±  s    r   r·   r¸   Tr:   r&   r'   r8   N)r–   ÚfilterwarningsÚDeprecationWarningr;   r»   rf   r@   r   r¼   r½   r?   r¾   rÅ   rB   r*   r=   r¹   rF   )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   ©rj   ú!Aú!BÚAN)	r+   r,   r-   r.   r   r   Údefault_identÚident_valuesÚident_aliasesr   r   r   r   r   ç  s    r   c                     r„   r    rÉ   r…   r4   r   r   Ú
norm_identî  ry   z3SkeletonTest.test_50_norm_ident.<locals>.norm_identNrÉ   Trˆ   rÊ   rË   z!CrÌ   ÚBz!Axxxz!Bxxxz!Cxxxr9   r   )r;   ÚHasManyIdentsrf   r@   rA   rB   r   rF   r=   r>   r?   rÍ   r¿   )r#   rÐ   r   r4   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   ©rD   ÚOgAwTx2l6NADIÚAwTx2l6NADIÚOg©ra   r}   z?$5$LKO/Ute40T3FNF95$U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9zLKO/Ute40T3FNF95z+U0prpBQd4PloSGU0pnpM4z9wKn4vZ1.jsrzQfPqxph9iˆ  T)r}   rŸ   Úimplicit_roundsra   Fr`   )r}   rŸ   rÙ   )ÚsanitizezLK**************z+U0pr***************************************)rŸ   rÙ   r}   ra   zL$5$rounds=10428$uy/jIAhCetNCTtb0$YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3z+YWvUOXbkqlqhyoPMpN8BMe.ZGsGx2aBvxTvDFI613c3zuy/jIAhCetNCTtb0i¼(  )ra   r}   rŸ   z@$pbkdf2$60000$DoEwpvQeA8B4T.k951yLUQ$O26Y3/NJEiLCVaOVPxGXshyjW8ks   ;n˜ßóI"ÂU£•?—²£[Éi`ê  s   0¦ôÀxOé=ç\‹Q©ra   rŸ   r}   zO26************************zDo********************N)	ÚpasslibrD   Ú	des_cryptÚ	parsehashrB   r   r   ÚdictÚpbkdf2_sha1)r#   rD   ÚresultÚhr:   r8   Ú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Ü   rD   rB   rÝ   ÚbitsizeÚbcryptÚ	patchAttrr   rà   ©r#   rD   r   r   r   Útest_92_bitsizeJ  s   ÿÿ
ÿ
ÿzSkeletonTest.test_92_bitsizeN)r+   r,   r-   Ú__doc__rH   r^   rk   rx   r{   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 )NÚdummy_r   )r.   r   )r.   Útyper;   rf   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.   Úregister_crypt_handlerr÷   Ú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)ÚlazyN)	r;   ÚPrefixWrapperrB   Ú_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)	r;   r  rB   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   )	r;   r  r   rB   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   )r;   r  rB   r.   r  r   r   r?   Údirr   r=   )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)r;   r  rB   rC   r@   rA   rV   rF   rD   r=   r>   r?   rE   )r#   r   ÚdphÚ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  Ú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)
r;   r  rB   rj   r   r  rÎ   r@   rF   r\   ©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)r;   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"  rY   N)r;   r  r@   rF   rD   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 saltÚunsalted_test_hashrI   c                 C   s.   t |tƒr
| d¡}d| }tt |¡ ¡ ƒS )NrO   s   boblious)rP   r
   rQ   r   rR   rS   rT   ©r#   r)   Údatar   r   r   r*     s   

zUnsaltedHash._calc_checksumN)
r+   r,   r-   ró   r.   r;   ÚLOWER_HEX_CHARSr1   r2   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 saltÚsalted_test_hashr|   r   rl   rI   z^@salt[0-9a-f]{42,44}$c                 C   sF   |   |¡stj | ¡‚t|tƒr| d¡}| |dd… |dd … dS )Nr_   r’   iØÿÿÿ)r}   ra   )r>   r;   ÚexcÚInvalidHashErrorrP   rb   rc   rM   r   r   r   rd   0  s
   


zSaltedHash.from_stringc                 C   s   t dƒ| j| jf }t|ƒS )Nz	@salt%s%s)r   r}   ra   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 )NrO   r_   )rP   r
   rQ   r}   r   rR   rS   rT   r)  r   r   r   r*   <  s   

zSaltedHash._calc_checksumN)r+   r,   r-   ró   r.   r   r€   r   r2   r;   r+  rƒ   r1   rg   rh   r   ri   rX   rd   r0  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  Ú(61cfd32684c47de231f1f982c214e884133762c0Ú(96b329d120b97ff81ada770042e44ba87343ad2bc                 C   s&   | j ttdd | j ttjdd d S )NÚxr|   r   rž   )r@   rA   r'  rC   rG   r   r   r   Útest_bad_kwdsS  s   zUnsaltedHashTest.test_bad_kwdsN)r+   r,   r-   r'  ÚhandlerÚ
UPASS_TEMPÚknown_correct_hashesr6  r   r   r   r   r2  K  ó    þr2  c                   @   r1  )Ú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Ø   rp   )r,  rv   r@   rA   rF   )r#   Ústubr   r   r   r6  _  s   zSaltedHashTest.test_bad_kwdsN)r+   r,   r-   r,  r7  r8  r9  r6  r   r   r   r   r;  W  r:  r;  ))ró   Ú
__future__r   rg   rR   Úloggingr   r–   Úpasslib.hashr   r   Úpasslib.excr   r   Úpasslib.utils.compatr   r	   r
   Úpasslib.utils.handlersÚutilsÚhandlersr;   Úpasslib.tests.utilsr   r   r   r+   Úlogr   r   Úobjectrô   r  r<   r'  r”   rf   r,  r8  r2  r;  r   r   r   r   Ú<module>   s6        I %