o
    _6÷d  ã                   @   s¨   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
„ d
eƒZdd„ Zeeƒ dƒG dd„ deƒƒZG dd„ deƒZdS )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                   @   sH   e Zd ZdZg d¢Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )r   z$common code for testing md4 backends))ó    Ú 31d6cfe0d16ae931b73c59d7e0c089c0)ó   aÚ bde52cb31de33e46245e05fbdbd6fb24)ó   abcZ a448017aaf21d8525fc10ae87aa6729d)s   message digestZ d9130a8164549fe818874806e1c7014b)s   abcdefghijklmnopqrstuvwxyzÚ d79e1c308aa5bbcdeea8ed63df412da9)s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z 043f8582f241db351ce627e153e7f0e4)sP   12345678901234567890123456789012345678901234567890123456789012345678901234567890Z e33b4ddc9c38f2199c3e7b164fcc0536c                 C   s
   t dƒjS )zd
        get md4 constructor --
        overridden by subclasses to use alternate backends.
        Úmd4)r   Úconst©Úself© r   ú|C:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\passlib/tests/test_crypto_builtin_md4.pyÚget_md4_const'   s   
z_Common_MD4_Test.get_md4_constc                 C   s8   |   ¡ ƒ }|  |jd¡ |  |jd¡ |  |jd¡ dS )zinformational attributesr   é   é@   N)r   ÚassertEqualÚnameÚdigest_sizeÚ
block_size)r   Úhr   r   r   Ú
test_attrs.   s   
z_Common_MD4_Test.test_attrsc                 C   s®   |   ¡ }|dƒ}|  | ¡ d¡ | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ trC|ƒ }|  t|jtdƒ¡ |  | ¡ d¡ dS |ƒ }| tdƒ¡ |  | ¡ d¡ dS )	zupdate() methodr   r   r   r   s   bcdefghijklmnopqrstuvwxyzr   ÚaN)r   r   Ú	hexdigestÚupdater   ÚassertRaisesÚ	TypeErrorr   )r   r   r!   r   r   r   Útest_md4_update5   s   

z _Common_MD4_Test.test_md4_updatec                 C   s4   |   ¡ }| jD ]\}}||ƒ ¡ }|  ||¡ qdS )zhexdigest() methodN)r   Úvectorsr$   r   ©r   r   ÚinputÚhexÚoutr   r   r   Útest_md4_hexdigestL   s
   þz#_Common_MD4_Test.test_md4_hexdigestc                 C   s<   |   ¡ }| jD ]\}}tt||ƒ ¡ ƒƒ}|  ||¡ qdS )zdigest() methodN)r   r)   r   r   Údigestr   r*   r   r   r   Útest_md4_digestS   s
   þz _Common_MD4_Test.test_md4_digestc                 C   sP   |   ¡ }|dƒ}| ¡ }| d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ dS )zcopy() methodr   s   defZ 804e7f1c2586e50b49ac65db5b645131s   ghiZ c5225580bfe176f6deeee33dee98732cN)r   Úcopyr%   r   r$   )r   r   r!   Úh2r   r   r   Útest_md4_copyZ   s   

z_Common_MD4_Test.test_md4_copyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r   r"   r(   r.   r0   r3   r   r   r   r   r      s    r   c                   C   s&   zt  d¡ W dS  ty   Y dS w )z1
    check if hashlib natively supports md4.
    r   TF)ÚhashlibÚnewÚ
ValueErrorr   r   r   r   Úhas_native_md4k   s   
þr;   zhashlib lacks ssl/md4 supportc                       ó    e Zd ZdZ‡ fdd„Z‡  ZS )r   zhashlib.new('md4')c                    s$   t t| ƒ ¡  |  |  ¡ jd¡ d S )Nr8   )Úsuperr   ÚsetUpr   r   r5   r   ©Ú	__class__r   r   r>   ~   s   zMD4_SSL_Test.setUp©r4   r5   r6   ZdescriptionPrefixr>   Ú__classcell__r   r   r?   r   r   w   s    r   c                       r<   )r   zpasslib.crypto._md4.md4()c                    s^   t t| ƒ ¡  tƒ r$tj‰ ‡ fdd„}|  td|¡ t ¡  |  	tj¡ |  
|  ¡ jd¡ d S )Nc                    s    | dkrt dƒ‚ˆ | g|¢R Ž S )Nr   zmd4 disabled for testing)r:   )r   Úargs©Úorigr   r   Úwrapper   s   z'MD4_Builtin_Test.setUp.<locals>.wrapperr9   zpasslib.crypto._md4)r=   r   r>   r;   r8   r9   Z	patchAttrr   Úclear_cacheZ
addCleanupr   r   r5   )r   rF   r?   rD   r   r>   ˆ   s   zMD4_Builtin_Test.setUprA   r   r   r?   r   r   …   s    r   )r7   Ú
__future__r   r   Úbinasciir   r8   Zpasslib.utils.compatr   r   r   Zpasslib.crypto.digestr   Zpasslib.tests.utilsr	   r
   Ú__all__r   r;   r   r   r   r   r   r   Ú<module>   s    S
