
    g                         S r SSKJrJr  SSKJr  SSKrSSKJrJ	r	J
r
  SSKJr  SSKJrJr  / SQr " S	 S
\5      rS r\" \" 5       S5       " S S\5      5       r " S S\5      rg)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                   D    \ rS rSrSr/ SQrS rS rS rS r	S r
S	 rS
rg)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                 ,    [        S5      R                  $ )zL
get md4 constructor --
overridden by subclasses to use alternate backends.
md4)r	   const)selfs    ^/home/matz/Project1/venv/lib/python3.13/site-packages/passlib/tests/test_crypto_builtin_md4.pyget_md4_const_Common_MD4_Test.get_md4_const'   s    
 5!'''r   c                     U R                  5       " 5       nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g)zinformational attributesr      @   N)r    assertEqualnamedigest_size
block_size)r   hs     r   
test_attrs_Common_MD4_Test.test_attrs.   sO     "'+r*r   c                 t   U R                  5       nU" S5      nU R                  UR                  5       S5        UR                  S5        U R                  UR                  5       S5        UR                  S5        U R                  UR                  5       S5        [        (       aR  U" 5       nU R                  [        UR                  [        S5      5        U R                  UR                  5       S5        gU" 5       nUR                  [        S5      5        U R                  UR                  5       S5        g)	zupdate() methodr   r   r   r   s   bcdefghijklmnopqrstuvwxyzr   aN)r    r%   	hexdigestupdater   assertRaises	TypeErrorr   )r   r   r)   s      r   test_md4_update _Common_MD4_Test.test_md4_update5   s      "H(JK	(JK	-.(JK3Ai1S6:Q[[],NO AHHQsVQ[[],NOr   c                     U R                  5       nU R                   H,  u  p#U" U5      R                  5       nU R                  XC5        M.     g)zhexdigest() methodN)r    vectorsr.   r%   r   r   inputhexouts        r   test_md4_hexdigest#_Common_MD4_Test.test_md4_hexdigestL   s@      ",,JEe*&&(CS& 'r   c                     U R                  5       nU R                   H>  u  p#[        [        U" U5      R	                  5       5      5      nU R                  XC5        M@     g)zdigest() methodN)r    r5   r   r   digestr%   r6   s        r   test_md4_digest _Common_MD4_Test.test_md4_digestS   sJ      ",,JEE
(9(9(; <=CS& 'r   c                    U R                  5       nU" S5      nUR                  5       nUR                  S5        U R                  UR	                  5       S5        UR                  S5        U R                  UR	                  5       S5        g)zcopy() methodr   s   def 804e7f1c2586e50b49ac65db5b645131s   ghi c5225580bfe176f6deeee33dee98732cN)r    copyr/   r%   r.   )r   r   r)   h2s       r   test_md4_copy_Common_MD4_Test.test_md4_copyZ   sj      "KVVX
		&)KL	(JKr    N)__name__
__module____qualname____firstlineno____doc__r5   r    r*   r2   r:   r>   rE   __static_attributes__rG   r   r   r   r      s,    .
G(+P.''
Lr   r   c                  R     [         R                  " S5        g! [         a     gf = f)z)
check if hashlib natively supports md4.
r   TF)hashlibnew
ValueErrorrG   r   r   has_native_md4rR   k   s(    E s    
&&zhashlib lacks ssl/md4 supportc                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )r   w   zhashlib.new('md4')c                 ~   > [         [        U ]  5         U R                  U R	                  5       R
                  S5        g )NrO   )superr   setUpr%   r    rI   )r   	__class__s    r   rW   MD4_SSL_Test.setUp~   s1    lD') 	++-88)Dr   rG   rH   rI   rJ   rK   descriptionPrefixrW   rM   __classcell__rX   s   @r   r   r   w   s    ,
E Er   r   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )r      zpasslib.crypto._md4.md4()c                 `  >^ [         [        U ]  5         [        5       (       aa  [        R
                  mU4S jnU R                  [        SU5        [        R                  " 5         U R                  [        R                  5        U R                  U R                  5       R                  S5        g )Nc                 8   > U S:X  a  [        S5      eT" U /UQ76 $ )Nr   zmd4 disabled for testing)rQ   )r&   argsorigs     r   wrapper'MD4_Builtin_Test.setUp.<locals>.wrapper   s&    5=$%?@@D(4((r   rP   zpasslib.crypto._md4)rV   r   rW   rR   rO   rP   	patchAttrr	   clear_cache
addCleanupr%   r    rI   )r   rd   rc   rX   s     @r   rW   MD4_Builtin_Test.setUp   s~    +- ;;D) NN7E73 ##%OOK334 	++-88:OPr   rG   rZ   r]   s   @r   r   r      s    3Q Qr   r   )rL   
__future__r   r   binasciir   rO   passlib.utils.compatr   r   r   passlib.crypto.digestr	   passlib.tests.utilsr
   r   __all__r   rR   r   r   rG   r   r   <module>rp      sw    8 0   7 6 - 4LLx LLf	 N=>
E# 
E ?
EQ' Qr   