
    ;e                     $   d dl Z d dlZd dlmZmZ 	  edd          r ej        d           ej        d          ZdZnC# e	$ r;Z
e j        dk    r ej         ee
                    dZ ee
          ZY dZ
[
ndZ
[
ww xY w ej        e j        dk    d           ej        ed	           G d
 dej                                          Z ej        ed           G d dej                              Zedk    r ej                     dS dS )    N)check_sanitizerwarnings_helperT)addressmemoryz.The crypt module SEGFAULTs on ASAN/MSAN buildscryptwin32zThis should only run on windowszimport succeededc                       e Zd Zd ZdS )TestWhyCryptDidNotImportc                 <    |                      dt                     d S )Nznot supported)assertInIMPORT_ERRORselfs    &/usr/lib/python3.11/test/test_crypt.pytest_import_failure_messagez4TestWhyCryptDidNotImport.test_import_failure_message   s    o|44444    N)__name__
__module____qualname__r    r   r   r
   r
      s#        5 5 5 5 5r   r
   zcrypt module is requiredc                       e Zd Zd Zd Zd Zd Z ej        e	oe	j
        e	j        v pe	j        e	j        v d          d             Z ej        e	oe	j        e	j        v d          d             Zd	 Zd
S )CryptTestCasec                 <   t                                d          }t                                d|          }|                     ||           t                                dd          }|3t                                d|          }|                     ||           d S d S )N
mypasswordab)r   assertEqual)r   crcr2s      r   
test_cryptzCryptTestCase.test_crypt   s    [[&&kk,++b!!![[t,,>++lB//CS"%%%%% >r   c           	         |                      t          t          j                  d           t          j        D ]}t                              |          }|                     t          |          |j        z
  h d           |j        r8|                     |j        |d t          |          |j        z
                      d S )N@   >   r                  )	r   lenr   
_saltcharsmethodsmksaltr   
salt_charsident)r   methodsalts      r   	test_saltzCryptTestCase.test_salt&   s    U-..333m 	P 	PF<<''DMM#d))f&779K9K9KLLL| PflD1M#d))F<M2M1M,NOOO		P 	Pr   c                    t           j        D ]}t                                d|          }|                     t          |          |j                   t                                d|          }|                     ||           t                                dt                               |                    }|                     t          |          |j                   d S )Nassword)r   r)   r   r'   
total_sizer*   )r   r-   r   r   s       r   test_saltedcryptzCryptTestCase.test_saltedcrypt.   s    m 	9 	9FY//BSWWf&7888++i,,CS"%%%YV(<(<==BSWWf&78888	9 	9r   c                 ^   |                      t          t          j                  dk               t          j                            d          r-|                     t          j        t          j        g           d S |                     t          j        d         t          j	                   d S )Nr"   openbsd)

assertTruer'   r   r)   sysplatform
startswithr   METHOD_BLOWFISHMETHOD_CRYPTr   s    r   test_methodszCryptTestCase.test_methods7   s    EM**a/000<""9-- 	DU]U-B,CDDDDDU]2.0BCCCCCr   zrequires support of SHA-2c                    t           j        t           j        fD ]}dD ]}t                               ||          }|                     d|z  |           |                     t          |          |j        z
  dt          t          |                    z              t                                d|          }| 	                    |           t                                d|          }|                     ||           d S )N)  i'  i roundsz$rounds=%d$   r   )
r   METHOD_SHA256METHOD_SHA512r*   r   r   r'   r+   strr7   )r   r-   rA   r.   r   r   s         r   test_sha2_roundszCryptTestCase.test_sha2_rounds>   s     *E,?@ 		* 		*F/ * *||F6|::mf4d;;;  TV->!>!#c#f++&6&6!68 8 8[[t44###kk,33  b))))*		* 		*r   zrequires support of Blowfishc                    t          dd          D ]}t                              t          j        d|z            }|                     d|z  |           |                     t          |          t          j        j        z
  ddh           t                              d|          }|                     |           t                              d|          }|                     ||           d S )	Nr$   rB   r"   r@   z$%02d$r%   r&   r   )	ranger   r*   r;   r   r'   r+   r7   r   )r   
log_roundsr.   r   r   s        r   test_blowfish_roundsz"CryptTestCase.test_blowfish_roundsQ   s      2,, 	& 	&J<< 5a:o<NNDMM(Z/666MM#d))e&;&FFAOOO\400BOOB++lB//CS"%%%%	& 	&r   c                    t           j        t           j        t           j        fD ]}|                     t
                    5  t                               |d           d d d            n# 1 swxY w Y   |                     t
                    5  t                               |d           d d d            n# 1 swxY w Y   dddddz  fD ]P}|                     t                    5  t                               ||           d d d            n# 1 swxY w Y   Q|                     t                    5  t                               t           j        d           d d d            n# 1 swxY w Y   t           j        t           j	        fD ]Q}| 
                    t          d	          5  t                               |d
           d d d            n# 1 swxY w Y   Rd S )N4096r@   g      @r   r"   r6   i  r?   supporti   )r   rC   rD   r;   assertRaises	TypeErrorr*   
ValueErrorr<   
METHOD_MD5assertRaisesRegex)r   r-   rA   s      r   test_invalid_roundsz!CryptTestCase.test_invalid_rounds^   s   *E,?,. 	8 	8F""9-- 4 4VF3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4""9-- 4 4VF3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4aQV, 8 8&&z22 8 8LLL7778 8 8 8 8 8 8 8 8 8 8 8 8 8 88 z** 	= 	=LL.tL<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=)5+;< 	2 	2F''
I>> 2 2VD1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2 	2sZ    A))A-	0A-	B77B;	>B;	'DDD7'E**E.1E.*GG	G	N)r   r   r   r   r/   r3   r=   unittest
skipUnlessr   rC   r)   rD   rF   r;   rJ   rS   r   r   r   r   r      s        & & &P P P9 9 9D D D X 	
5=0XE4G5=4X# 
* 
* 
* X8%'5=8:X & & &2 2 2 2 2r   r   __main__)r8   rT   test.supportr   r   SkipTestimport_deprecatedr   r   ImportErrorexr9   rE   rU   skipIfTestCaser
   r   r   mainr   r   r   <module>r_      s   



  9 9 9 9 9 9 9 9	tD111 Rh PQQQ-O-g66ELL   
|whB(((E3r77LLLLLL	 S\W,.OPP*++5 5 5 5 5x0 5 5 ,+ QP5 U677Q2 Q2 Q2 Q2 Q2H% Q2 Q2 87Q2h zHMOOOOO s   /A B1A==B