U
    ø¹Öh  ã                   @   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 dd	d
g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                   @   sR   e Zd ZdZdddddddg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   úK./venv/lib/python3.8/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ÚnameZdigest_sizeZ
block_size)r   Úhr   r   r   Ú
test_attrs.   s    
z_Common_MD4_Test.test_attrsc                 C   s¬   |   ¡ }|dƒ}|  | ¡ d¡ | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ tr„|ƒ }|  t|jtdƒ¡ |  | ¡ d¡ n$|ƒ }| tdƒ¡ |  | ¡ d¡ dS )	zupdate() methodr   r   r   r   s   bcdefghijklmnopqrstuvwxyzr   ÚaN)r   r   Ú	hexdigestÚupdater   Z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   Z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   Zh2r   r   r   Útest_md4_copyZ   s    

z_Common_MD4_Test.test_md4_copyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r   r    r%   r+   r,   r.   r   r   r   r   r      s   ÷c                   C   s,   zt  d¡ W dS  tk
r&   Y dS X dS )z1
    check if hashlib natively supports md4.
    r   TFN)ÚhashlibÚnewÚ
ValueErrorr   r   r   r   Úhas_native_md4k   s
    
r6   zhashlib lacks ssl/md4 supportc                       s    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 )Nr3   )Úsuperr   ÚsetUpr   r   r0   r   ©Ú	__class__r   r   r8   ~   s    zMD4_SSL_Test.setUp©r/   r0   r1   ZdescriptionPrefixr8   Ú__classcell__r   r   r9   r   r   w   s   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )r   zpasslib.crypto._md4.md4()c                    s^   t t| ƒ ¡  tƒ rHtj‰ ‡ fdd„}|  td|¡ t ¡  |  	tj¡ |  
|  ¡ jd¡ d S )Nc                    s   | dkrt dƒ‚ˆ | f|žŽ S )Nr   zmd4 disabled for testing)r5   )r   Úargs©Zorigr   r   Úwrapper   s    z'MD4_Builtin_Test.setUp.<locals>.wrapperr4   zpasslib.crypto._md4)r7   r   r8   r6   r3   r4   Z	patchAttrr   Zclear_cacheZ
addCleanupr   r   r0   )r   r?   r9   r>   r   r8   ˆ   s    zMD4_Builtin_Test.setUpr;   r   r   r9   r   r   …   s   )r2   Z
__future__r   r   Zbinasciir   r3   Zpasslib.utils.compatr   r   r   Zpasslib.crypto.digestr   Zpasslib.tests.utilsr	   r
   Ú__all__r   r6   r   r   r   r   r   r   Ú<module>   s   ýS
