o
    °ó®gß  ã                
   @   sÐ   d dl Z d dlZzd dlZdZW n$ ey4 Z ze jdkr$e eeƒ¡‚dZeeƒZW Y dZ[ndZ[ww 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rfe ¡  dS dS )é    NÚ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   úE/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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	o#e	j
e	jv p#e	je	jv d	¡d
d„ ƒZe e	o3e	je	jv d¡dd„ ƒZdd„ ZdS )ÚCryptTestCasec                 C   sV   t   d¡}t   d|¡}|  ||¡ t   dd¡}|d ur)t   d|¡}|  ||¡ d S 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 ]'}t |¡}|  t|ƒ|j h d£¡ |jr3|  |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   sN   |   ttjƒdk¡ tj d¡r|  tjtjg¡ d S |  tjd tj	¡ d S )Nr   Zopenbsdéÿÿÿÿ)
Ú
assertTruer   r   r   ÚsysÚplatformÚ
startswithr   ÚMETHOD_BLOWFISHÚMETHOD_CRYPTr   r   r   r	   Útest_methods4   s   zCryptTestCase.test_methodszrequires support of SHA-2c              	   C   sŽ   t jt jfD ]>}dD ]9}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!   r/   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 ]9}tjtjd|> d}|  d| |¡ |  t|ƒtjj ddh¡ t d|¡}|  |¡ t d|¡}|  ||¡ qd S )	Nr   r0   r   r.   z$%02d$r   r   r   )	Úranger   r   r*   r   r   r   r&   r   )r   Z
log_roundsr"   r   r   r   r   r	   Útest_blowfish_roundsN   s   
ùz"CryptTestCase.test_blowfish_roundsc              
   C   s^  t jt jt jfD ]a}|  t¡ t j|dd W d   ƒ n1 s!w   Y  |  t¡ t j|dd W d   ƒ n1 s=w   Y  ddddd> fD ]}|  t¡ t j||d W d   ƒ qJ1 scw   Y  qJq|  t¡ t jt jdd W d   ƒ n1 s‚w   Y  t jt j	fD ]}|  
td	¡ t j|d
d W d   ƒ q1 s§w   Y  qd S )NZ4096r.   g      °@r   r   r%   iç  r-   Úsupporti   )r   r1   r2   r*   ZassertRaisesÚ	TypeErrorr   Ú
ValueErrorr+   Z
METHOD_MD5ZassertRaisesRegex)r   r!   r/   r   r   r	   Útest_invalid_rounds[   s,   ÿÿÿÿÿÿÿÿz!CryptTestCase.test_invalid_roundsN)r   r   r   r   r#   r$   r,   ÚunittestÚ
skipUnlessr   r1   r   r2   r4   r*   r6   r:   r   r   r   r	   r      s     		û
ÿ

r   Ú__main__)r'   r;   r   r   ÚImportErrorÚexr(   ZSkipTestr3   r<   ZskipIfZTestCaser   r   r   Úmainr   r   r   r	   Ú<module>   s(    
€ü

Tÿ