o
    GXîh  ã                
   @   sò   d dl Z d dlZd dlmZ zedddre d¡‚d dlZdZW n$ eyE Z ze j	dkr5e 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rwe ¡  dS 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
   ú9/opt/python-3.10.19/usr/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_methods7   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#   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 ]9}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   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   ƒ n1 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   ƒ n1 s§w   Y  qd 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^   s0   ÿÿÿÿ€ÿÿÿ€ÿ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ÿ