a
    äze  ã                
   @   sî   d dl Z d dlZd dlmZ z&edddr4e d¡‚d dlZdZW nH eyŠ Z z0e j	dkrje e
eƒ¡‚dZe
eƒZW Y dZ[n
dZ[0 0 e e j	dkd¡e ed¡G d	d
„ d
ejƒƒƒZe ed¡G dd„ dejƒƒZedkrêe ¡  dS )é    N)Úcheck_sanitizerT)ÚaddressZmemoryz.The crypt module SEGFAULTs on ASAN/MSAN buildsÚwin32zThis should only run on windowszimport succeededc                   @   s   e Zd Zdd„ ZdS )ÚTestWhyCryptDidNotImportc                 C   s   |   dt¡ d S )Nznot supported)ÚassertInÚIMPORT_ERROR©Úself© r
   ú%/usr/lib/python3.9/test/test_crypt.pyÚtest_import_failure_message   s    z4TestWhyCryptDidNotImport.test_import_failure_messageN)Ú__name__Ú
__module__Ú__qualname__r   r
   r
   r
   r   r      s   r   zcrypt module is requiredc                   @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	oFe	j
e	jv pFe	je	jv d	¡d
d„ ƒZe e	ofe	je	jv d¡dd„ ƒZdd„ ZdS )ÚCryptTestCasec                 C   sR   t   d¡}t   d|¡}|  ||¡ t   dd¡}|d urNt   d|¡}|  ||¡ d S )NÚ
mypasswordÚab)ÚcryptÚassertEqual)r	   ÚcrÚcr2r
   r
   r   Ú
test_crypt   s    
zCryptTestCase.test_cryptc                 C   sl   |   ttjƒd¡ tjD ]N}t |¡}|  t|ƒ|j h d£¡ |jr|  |j|d t|ƒ|j … ¡ qd S )Né@   >   r   é   é   é   é   é   )	r   Úlenr   Z
_saltcharsÚmethodsÚmksaltr   Ú
salt_charsÚident)r	   ÚmethodÚsaltr
   r
   r   Ú	test_salt&   s    

zCryptTestCase.test_saltc                 C   sj   t jD ]^}t   d|¡}|  t|ƒ|j¡ t   d|¡}|  ||¡ t   dt  |¡¡}|  t|ƒ|j¡ qd S )NZassword)r   r   r   r   Z
total_sizer    )r	   r#   r   r   r
   r
   r   Útest_saltedcrypt.   s    
zCryptTestCase.test_saltedcryptc                 C   sL   |   ttjƒdk¡ tj d¡r4|  tjtjg¡ n|  tjd tj	¡ d S )Nr   Zopenbsdéÿÿÿÿ)
Ú
assertTruer   r   r   ÚsysÚplatformÚ
startswithr   ÚMETHOD_BLOWFISHÚMETHOD_CRYPTr   r
   r
   r   Útest_methods7   s    zCryptTestCase.test_methodszrequires support of SHA-2c              	   C   sŽ   t jt jfD ]|}dD ]r}t j||d}|  d| |¡ |  t|ƒ|j dtt|ƒƒ ¡ t   d|¡}|  	|¡ t   d|¡}|  ||¡ qqd S )N)éè  i'  i † ©Úroundsz$rounds=%d$é   r   )
r   ÚMETHOD_SHA256ÚMETHOD_SHA512r    r   r   r   r!   Ústrr(   )r	   r#   r1   r$   r   r   r
   r
   r   Útest_sha2_rounds>   s    ÿ
zCryptTestCase.test_sha2_roundszrequires support of Blowfishc                 C   s‚   t ddƒD ]r}tjtjd|> d}|  d| |¡ |  t|ƒtjj ddh¡ t d|¡}|  |¡ t d|¡}|  ||¡ q
d S )	Nr   r2   r   r0   z$%02d$r   r   r   )	Úranger   r    r,   r   r   r!   r(   r   )r	   Z
log_roundsr$   r   r   r
   r
   r   Útest_blowfish_roundsQ   s    
z"CryptTestCase.test_blowfish_roundsc              
   C   sd  t jt jt jfD ]Â}|  t¡ t j|dd W d   ƒ n1 sB0    Y  |  t¡ t j|dd W d   ƒ n1 sz0    Y  ddddd> fD ]<}|  t¡ t j||d W d   ƒ q”1 sÆ0    Y  q”q|  t¡  t jt jdd W d   ƒ n1 s0    Y  t jt j	fD ]B}|  
td	¡ t j|d
d W d   ƒ n1 sR0    Y  qd S )NZ4096r0   g      °@r   r   r'   iç  r/   Úsupporti   )r   r3   r4   r,   ZassertRaisesÚ	TypeErrorr    Ú
ValueErrorr-   Z
METHOD_MD5ZassertRaisesRegex)r	   r#   r1   r
   r
   r   Útest_invalid_rounds^   s    ÿ,,00z!CryptTestCase.test_invalid_roundsN)r   r   r   r   r%   r&   r.   ÚunittestÚ
skipUnlessr   r3   r   r4   r6   r,   r8   r<   r
   r
   r
   r   r      s   		û
ÿ

r   Ú__main__)r)   r=   Ztest.supportr   ZSkipTestr   r   ÚImportErrorÚexr*   r5   r>   ZskipIfZTestCaser   r   r   Úmainr
   r
   r
   r   Ú<module>   s&   



T