+
    ¢THi|  ã                   óT   € R t ^ RIt^ RIHt ^ RIHt R.tR tR tRt	 ! R R4      t
R# )	a¹  
passlib.crypto._md4 -- fallback implementation of MD4

Helper implementing insecure and obsolete md4 algorithm.
used for NTHASH format, which is also insecure and broken,
since it's just md4(password).

Implementated based on rfc at http://www.faqs.org/rfcs/rfc1320.html

.. note::

    This shouldn't be imported directly, it's merely used conditionally
    by ``passlib.crypto.lookup_hash()`` when a native implementation can't be found.
N)Úhexlify)Úbascii_to_strÚmd4c                 ó0   € W,          V ( V,          ,          # ©N© ©ÚxÚyÚzs   &&&Ú5/usr/lib/python3/dist-packages/passlib/crypto/_md4.pyÚFr      s   € Ø�E˜�r˜Q•hÕÐó    c                 óF   € W,          W,          ,          W,          ,          # r   r   r   s   &&&r   ÚGr      s   € Ø�E�a•eÕ ¥Õ&Ð&r   c                   ó”  a € ] tR t^'t o RtR t^;tt^@t^ t	Rt
RtR
R lt. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO.t. RO. RO. RO. RO. RO. RO. R O. R!O. R"O. R#O. R$O. R%O. R&O. R'O. R(O. R)O.t. RO. R*O. R+O. R,O. R"O. R-O. RO. R.O. RO. R/O. R0O. R1O. R&O. R2O. R3O. R4O.tR tR tR tR tR tR	tV tR# )5r   a§  pep-247 compatible implementation of MD4 hash algorithm

.. attribute:: digest_size

    size of md4 digest in bytes (16 bytes)

.. method:: update

    update digest by appending additional content

.. method:: copy

    create clone of digest object, including current state

.. method:: digest

    return bytes representing md4 digest of current content

.. method:: hexdigest

    return hexadecimal version of digest
Nc                ój   € ^ V n         . ROV n        RV n        V'       d   V P                  V4       R# R# )é    r   N)i#Egl   ‰+›_ l   þ\u1 ivT2)Ú_countÚ_stateÚ_bufÚupdate)ÚselfÚcontents   &&r   Ú__init__Úmd4.__init__L   s+   € ØˆŒÚFˆŒØˆŒ	ßØ�K‰K˜Ö ñ r   c                ó
  € \         P                  ! RV4      pV P                  p\        V4      pV P                   Fu  w  rVrxršWE,          \        WF,          WG,          WH,          4      ,           W),          ,           \        ,          pWº,          \        ,          V^ V
,
          ,	          ,           WE&   Kw  	  V P                   F|  w  rVrxršWE,          \        WF,          WG,          WH,          4      ,           W),          ,           R,           \        ,          pWº,          \        ,          V^ V
,
          ,	          ,           WE&   K~  	  V P                   F  w  rVrxršWE,          WF,          WG,          ,          WH,          ,          ,           W),          ,           R,           \        ,          pWº,          \        ,          V^ V
,
          ,	          ,           WE&   K�  	  \        ^4       F%  pW<,          WL,          ,           \        ,          W<&   K'  	  R# )zprocess 64 byte blockz<16Ii™y‚Zi¡ëÙnN)ÚstructÚunpackr   ÚlistÚ_round1r   ÚMASK_32Ú_round2r   Ú_round3Úrange)r   ÚblockÚXÚorigÚstateÚaÚbÚcÚdÚkÚsÚtÚis   &&           r   Ú_processÚmd4._process�   sm  € ô �MŠM˜& %Ó(ˆð �{‰{ˆÜ�T“
ˆð !%§¤ÑˆA�!˜Ø•œA˜e�h¨­°%µ(Ó;Õ;¸a½dÕBÄgÕMˆAØ�¤7Õ*¨q°R¸!µV­}Õ=ˆE‹Hñ !-ð
 !%§¤ÑˆA�!˜à•œ1˜U�X u¥x°µÓ:Õ:¸Q½TÕAÀJÕNÜõˆAð �¤7Õ*¨q°R¸!µV­}Õ=ˆE‹Hñ	 !-ð !%§¤ÑˆA�!˜à•˜E�H u¥xÕ/°%µ(Õ:Õ;¸a½dÕBÀZÕOÜõˆAð �¤7Õ*¨q°R¸!µV­}Õ=ˆE‹Hñ	 !-ô �q–ˆAØ•w ¥Õ)¬WÕ4ˆD‹Gó r   c                ó,  € \        V\        4      '       g   \        R 4      hV P                  pV'       d	   W!,           p^ p\	        V4      p V^@,           pWT8:  d1   V P                  WV 4       V ;P                  ^,          un        TpK@  WR V n        R# )zexpected bytesN)Ú
isinstanceÚbytesÚ	TypeErrorr   Úlenr1   r   )r   r   ÚbufÚidxÚendÚnexts   &&    r   r   Ú
md4.update¯   s   € Ü˜'¤5×)Ò)ÜÐ,Ó-Ð-Ø�i‰iˆßØ•mˆGØˆÜ�'‹lˆØØ˜•8ˆDØŒ{Ø—‘˜g¨$Ð/Ô0Ø—’˜qÕ •Ø’à# D˜M�”	Ùr   c                ó’   € \        4       pV P                  Vn        \        V P                  4      Vn        V P                  Vn        V# r   )r   r   r   r   r   )r   Úothers   & r   ÚcopyÚmd4.copyÁ   s4   € Ü“ˆØ—{‘{ˆŒÜ˜DŸK™KÓ(ˆŒØ—Y‘YˆŒ
Øˆr   c                ó„  € \        V P                  4      pV P                  pV P                  R ,          \	        V4      ^,          ,           pVR,           R^w\	        V4      ,
          ^@,          ,          ,           \
        P                  ! RV\        ,          V^ ,	          \        ,          4      ,           p\	        V4      ^€8X  d2   V P                  VR,          4       V P                  VR,          4       M#\	        V4      ^@8X  g   Q hV P                  V4       \
        P                  ! R.V P                  O5!  pWn        V# )i   ó   €ó    z<2I:Né@   N:rD   NNz<4I)	r   r   r   r   r7   r   Úpackr!   r1   )r   r'   r8   Úmsglenr%   Úouts   &     r   ÚdigestÚ
md4.digestÈ   s÷   € ô �D—K‘KÓ ˆð
 �i‰iˆØ—‘˜sÕ"¤S¨£X°¥\Õ1ˆàØõà˜#¤ C£�.¨BÕ.Õ/õ0ô �kŠk˜% ¬'Õ!1°F¸bµLÄGÕ3KÓLõMð 	ô ˆu‹:˜ÔØ�M‰M˜% �*Ô%Ø�M‰M˜% �*Õ%ä�u“: Ô#Ð#Ð#Ø�M‰M˜%Ô ô �kŠk˜%Ð. $§+¡+Ó.ˆØŒØˆ
r   c                óF   € \        \        V P                  4       4      4      # r   )r   r   rH   )r   s   &r   Ú	hexdigestÚmd4.hexdigestä   s   € ÜœW T§[¡[£]Ó3Ó4Ð4r   )r   r   r   r   )r   é   é   é   r   rO   )rO   r   rM   rN   rM   é   )rN   rO   r   rM   rN   é   )rM   rN   rO   r   rO   é   )r   rM   rN   rO   é   rO   )rO   r   rM   rN   é   rP   )rN   rO   r   rM   é   rQ   )rM   rN   rO   r   rP   rR   )r   rM   rN   rO   é   rO   )rO   r   rM   rN   é	   rP   )rN   rO   r   rM   é
   rQ   )rM   rN   rO   r   rQ   rR   )r   rM   rN   rO   é   rO   )rO   r   rM   rN   é   rP   )rN   rO   r   rM   é   rQ   )rM   rN   rO   r   é   rR   )rO   r   rM   rN   rS   rT   )rN   rO   r   rM   rV   rW   )rM   rN   rO   r   rY   rZ   )r   rM   rN   rO   rM   rO   )rO   r   rM   rN   rT   rT   )rN   rO   r   rM   rW   rW   )rM   rN   rO   r   rZ   rZ   )r   rM   rN   rO   rN   rO   )rO   r   rM   rN   rU   rT   )rN   rO   r   rM   rX   rW   )rM   rN   rO   r   r[   rZ   )r   rM   rN   rO   rO   rO   )rO   r   rM   rN   rP   rT   )rN   rO   r   rM   rQ   rW   )rM   rN   rO   r   r\   rZ   )rO   r   rM   rN   rV   rW   )rN   rO   r   rM   rS   rQ   )rM   rN   rO   r   rY   r\   )rO   r   rM   rN   rX   rW   )rM   rN   rO   r   r[   r\   )rO   r   rM   rN   rW   rW   )rN   rO   r   rM   rT   rQ   )rM   rN   rO   r   rZ   r\   )rO   r   rM   rN   rQ   rW   )rN   rO   r   rM   rP   rQ   )rM   rN   rO   r   r\   r\   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚnameÚdigest_sizeÚ
digestsizeÚ
block_sizer   r   r   r   r    r"   r#   r1   r   r?   rH   rK   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r   r   '   s  ø‡ € ñð4 €DØ!Ð!€K�*Ø€Jà€FØ€Fàð 	ô!ò 	ÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!€Gò* 	ÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!€Gò* 	ÚÚÚÚÚÚÚÚÚÚÚÚÚÚÚð!€Gò&5ò@ò$ò÷85ð 5r   l   ÿÿ )ra   r   Úbinasciir   Úpasslib.utils.compatr   Ú__all__r   r   r!   r   r   r   r   Ú<module>rl      s;   ðñó Ý å .ð ˆ'€ò ò'ð €÷~5ó ~5r   