
     h                         d Z ddlmZmZ ddlmZ ddlZddlmZm	Z	m
Z
 ddlmZ ddlmZmZ g dZ G d	 d
e      Zd Z e e       d       G d de             Z G d de      Zy)z2passlib.tests -- unittests for passlib.crypto._md4    )with_statementdivision)hexlifyN)bascii_to_strPY3u)lookup_hash)TestCase
skipUnless)_Common_MD4_TestMD4_Builtin_TestMD4_SSL_Testc                   <    e Zd ZdZg dZd Zd Zd Zd Zd Z	d Z
y	)
r   z$common code for testing md4 backends))     31d6cfe0d16ae931b73c59d7e0c089c0)   a bde52cb31de33e46245e05fbdbd6fb24)   abc a448017aaf21d8525fc10ae87aa6729d)s   message digest d9130a8164549fe818874806e1c7014b)s   abcdefghijklmnopqrstuvwxyz d79e1c308aa5bbcdeea8ed63df412da9)s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 043f8582f241db351ce627e153e7f0e4)sP   12345678901234567890123456789012345678901234567890123456789012345678901234567890 e33b4ddc9c38f2199c3e7b164fcc0536c                 ,    t        d      j                  S )zd
        get md4 constructor --
        overridden by subclasses to use alternate backends.
        md4)r	   const)selfs    g/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/passlib/tests/test_crypto_builtin_md4.pyget_md4_constz_Common_MD4_Test.get_md4_const'   s    
 5!'''r   c                      | j                                }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y)zinformational attributesr      @   N)r   assertEqualnamedigest_size
block_size)r   hs     r   
test_attrsz_Common_MD4_Test.test_attrs.   sQ     D "'+r*r   c                 j   | j                         } |d      }| j                  |j                         d       |j                  d       | j                  |j                         d       |j                  d       | j                  |j                         d       t        rR |       }| j                  t        |j                  t        d             | j                  |j                         d       y |       }|j                  t        d             | j                  |j                         d       y)	zupdate() methodr   r   r   r   s   bcdefghijklmnopqrstuvwxyzr   aN)r   r#   	hexdigestupdater   assertRaises	TypeErrorr   )r   r   r'   s      r   test_md4_updatez _Common_MD4_Test.test_md4_update5   s      "H(JK	(JK	-.(JKAi1S6:Q[[],NO AHHQsVQ[[],NOr   c                     | j                         }| j                  D ]-  \  }} ||      j                         }| j                  ||       / y)zhexdigest() methodN)r   vectorsr+   r#   r   r   inputhexouts        r   test_md4_hexdigestz#_Common_MD4_Test.test_md4_hexdigestL   sI      ",, 	'JE3e*&&(CS#&	'r   c                     | j                         }| j                  D ]?  \  }}t        t         ||      j	                                     }| j                  ||       A y)zdigest() methodN)r   r1   r   r   digestr#   r2   s        r   test_md4_digestz _Common_MD4_Test.test_md4_digestS   sS      ",, 	'JE3E
(9(9(; <=CS#&	'r   c                    | j                         } |d      }|j                         }|j                  d       | j                  |j	                         d       |j                  d       | j                  |j	                         d       y)zcopy() methodr   s   def 804e7f1c2586e50b49ac65db5b645131s   ghi c5225580bfe176f6deeee33dee98732cN)r   copyr,   r#   r+   )r   r   r'   h2s       r   test_md4_copyz_Common_MD4_Test.test_md4_copyZ   sj      "KVVX
		&)KL	(JKr   N)__name__
__module____qualname____doc__r1   r   r(   r/   r6   r9   r?    r   r   r   r      s,    .
G(+P.''
Lr   r   c                  N    	 t        j                  d       y# t        $ r Y yw xY w)z1
    check if hashlib natively supports md4.
    r   TF)hashlibnew
ValueErrorrD   r   r   has_native_md4rI   k   s(    E s    	$$zhashlib lacks ssl/md4 supportc                   "     e Zd ZdZ fdZ xZS )r   zhashlib.new('md4')c                 ~    t         t        |           | j                  | j	                         j
                  d       y )NrF   )superr   setUpr#   r   rA   )r   	__class__s    r   rM   zMD4_SSL_Test.setUp~   s1    lD') 	++-88)Dr   r@   rA   rB   descriptionPrefixrM   __classcell__rN   s   @r   r   r   w   s    ,
E Er   r   c                   "     e Zd ZdZ fdZ xZS )r   zpasslib.crypto._md4.md4()c                 R   t         t        |           t               r_t        j
                  fd}| j                  t        d|       t        j                          | j                  t        j                         | j                  | j                         j                  d       y )Nc                 6    | dk(  rt        d       | g| S )Nr   zmd4 disabled for testing)rH   )r$   argsorigs     r   wrapperz'MD4_Builtin_Test.setUp.<locals>.wrapper   s&    5=$%?@@D(4((r   rG   zpasslib.crypto._md4)rL   r   rM   rI   rF   rG   	patchAttrr	   clear_cache
addCleanupr#   r   rA   )r   rX   rW   rN   s     @r   rM   zMD4_Builtin_Test.setUp   s{    +- ;;D) NN7E73 ##%OOK334 	++-88:OPr   rO   rR   s   @r   r   r      s    3Q Qr   r   )rC   
__future__r   r   binasciir   rF   passlib.utils.compatr   r   r   passlib.crypto.digestr	   passlib.tests.utilsr
   r   __all__r   rI   r   r   rD   r   r   <module>rb      sw    8 0   7 6 - 4LLx LLf	 N=>
E# 
E ?
EQ' Qr   