Ë
    àU.j  ã                   óÎ   — 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    úgC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\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¨¯©´1°S³6Ô:Ø×Ñ˜QŸ[™[›]Ð,NÕOñ “ˆAØ�H‰H”Q�s“VÔØ×Ñ˜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   sD   € à× Ñ Ó"ˆØŸ,œ,‰JˆE�3Ù�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   sN   € à× Ñ Ó"ˆØŸ,œ,‰JˆE�3Ü¤©¨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ˆà�V‰V‹XˆØ
�	‰	�&ÔØ×Ñ˜Ÿ™›Ð)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   ø€ ÜŒl˜DÑ'Ô)ð 	×Ñ˜×+Ñ+Ó-×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ô)ð �N‰Nœ7 E¨7Ô3ô ×#Ñ#Ô%Ø�O‰OœK×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   