+
    i                         R t ^ RIHtHt ^ RIHt ^ RIt^ RIHtH	t	H
t
 ^ RIHt ^ RIHtHt . ROt ! R
 R]4      tR t]! ]! 4       R4       ! R R	]4      4       t ! R R]4      tR# )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                   P   a  ] tR t^t o Rt. R
OtR tR tR tR t	R t
R tRtV tR	# )r   z$common code for testing md4 backendsc                ,    \        R4      P                  # )zL
get md4 constructor --
overridden by subclasses to use alternate backends.
md4)r   const)selfs   &c/var/www/html/photoedit/myenv/lib/python3.14/site-packages/passlib/tests/test_crypto_builtin_md4.pyget_md4_const_Common_MD4_Test.get_md4_const'   s    
 5!'''    c                    V P                  4       ! 4       pV P                  VP                  R4       V P                  VP                  ^4       V P                  VP                  ^@4       R# )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                z   V P                  4       pV! R4      pV P                  VP                  4       R4       VP                  R4       V P                  VP                  4       R4       VP                  R4       V P                  VP                  4       R4       \        '       dT   V! 4       pV P                  \        VP                  \        R4      4       V P                  VP                  4       R4       R# V! 4       pVP                  \        R4      4       V P                  VP                  4       R4       R# )	zupdate() methodr    31d6cfe0d16ae931b73c59d7e0c089c0   a bde52cb31de33e46245e05fbdbd6fb24s   bcdefghijklmnopqrstuvwxyz d79e1c308aa5bbcdeea8ed63df412da9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                    V P                  4       pV P                   F,  w  r#V! V4      P                  4       pV P                  WC4       K.  	  R# )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                    V P                  4       pV P                   F>  w  r#\        \        V! V4      P	                  4       4      4      pV P                  WC4       K@  	  R# )zdigest() methodN)r   r,   r   r   digestr   r-   s   &    r   test_md4_digest _Common_MD4_Test.test_md4_digestS   sJ      ",,JEE
(9(9(; <=CS& 'r   c                   V P                  4       pV! R4      pVP                  4       pVP                  R4       V P                  VP	                  4       R4       VP                  R4       V P                  VP	                  4       R4       R# )zcopy() method   abcs   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))r   r    )r!   r"   )r8    a448017aaf21d8525fc10ae87aa6729d)s   message digest d9130a8164549fe818874806e1c7014b)s   abcdefghijklmnopqrstuvwxyzr#   )s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 043f8582f241db351ce627e153e7f0e4)sP   12345678901234567890123456789012345678901234567890123456789012345678901234567890 e33b4ddc9c38f2199c3e7b164fcc0536)__name__
__module____qualname____firstlineno____doc__r,   r   r   r)   r1   r5   r=   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s5     .
G(+P.''
L 
Lr   c                 X     \         P                  ! R4       R#   \         d     R# i ; i)z)
check if hashlib natively supports md4.
r   TF)hashlibnew
ValueErrorr?   r   r   has_native_md4rP   k   s(    E s    ))zhashlib lacks ssl/md4 supportc                   6   a a ] tR t^wt oRtV 3R ltRtVtV ;t# )r   zhashlib.new('md4')c                   < \         \        V `  4        V P                  V P	                  4       P
                  R 4       R# )rM   N)superr   setUpr   r   rE   )r   	__class__s   &r   rT   MD4_SSL_Test.setUp~   s1    lD') 	++-88)Dr   r?   	rD   rE   rF   rG   descriptionPrefixrT   rI   rJ   __classcell__rU   rK   s   @@r   r   r   w   s     ,
E Er   c                   6   a a ] tR t^t oRtV 3R ltRtVtV ;t# )r   zpasslib.crypto._md4.md4()c                d  <a \         \        V `  4        \        4       '       db   \        P
                  oV3R  lpV P                  \        RV4       \        P                  ! 4        V P                  \        P                  4       V P                  V P                  4       P                  R4       R# )c                 <   < V R 8X  d   \        R4      hS! V .VO5!  # )r   zmd4 disabled for testing)rO   )r   argsorigs   &*r   wrapper'MD4_Builtin_Test.setUp.<locals>.wrapper   s&    5=$%?@@D(4((r   rN   zpasslib.crypto._md4N)rS   r   rT   rP   rM   rN   	patchAttrr   clear_cache
addCleanupr   r   rE   )r   r`   r_   rU   s   & @r   rT   MD4_Builtin_Test.setUp   s~    +- ;;D) NN7E73 ##%OOK334 	++-88:OPr   r?   rW   rZ   s   @@r   r   r      s     3Q Qr   )r   r   r   )rH   
__future__r   r   binasciir   rM   passlib.utils.compatr   r   r   passlib.crypto.digestr   passlib.tests.utilsr	   r
   __all__r   rP   r   r   r?   r   r   <module>rl      sw    8 0   7 6 - 4LLx LLf	 N=>
E# 
E ?
EQ' Qr   