
    iq                         S SK r S SKrS\S\S\S\4S jrS\S\S\S\4S jrS\S\S\S\4S jrS\S	\S\4S
 jrS\S\S\S\S\S\S\4S jrS\S\S\S\S\S\S\4S jr	S\S\S\S\S\S\S\4S jr
S\S\4S jrg)    Nxyzreturnc                     X-  U ) U-  -  $ N r   r   r   s      N/home/james-whalen/.local/lib/python3.13/site-packages/spnego/_ntlm_raw/md4.pyFr      s    Eqb1f    c                     X-  X-  -  X-  -  $ r   r	   r
   s      r   Gr      s    Eae&&r   c                     X-  U-  $ r   r	   r
   s      r   Hr      s    519r   nc                 "    X-  S-  U SU-
  -	  -  $ )N        r	   )r   r   s     r   ROTLr      s    Vz!aBFm44r   abcdsc                 @    [        U [        XU5      -   U-   S-  U5      $ )Nr   )r   r   r   r   r   r   r   r   s         r   FFr      s#    QqQZ!#z1155r   c                 F    [        U [        XU5      -   U-   S-   S-  U5      $ )NiyZr   )r   r   r   s         r   GGr       (    QqQZ!#j0J>BBr   c                 F    [        U [        XU5      -   U-   S-   S-  U5      $ )Ninr   )r   r   r   s         r   HHr#       r!   r   datac           	         [        U 5      n[        U 5      nUS-  S-  R                  SS5      nUSR                  S[	        SUS-  -
  S-  5      U/5      -  nSnS	nS
nSnU(       Ga|  XEXg4u  pp[
        R                  " SUSS 5      nUSS n[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	[        XXUS   S5      n[        XXUS   S5      n[        XXUS   S5      n
[        XXUS   S5      n	XH-   S-  nXY-   S-  nXj-   S-  nX{-   S-  nU(       a  GM|  [
        R                  " SXEXg5      $ ) ax  Python implementation of md4 hashing.

This is a pure Python implementation of the `MD4 Hashing Algorithm`_.
Recent distributions of Linux ship with OpenSSL 3.x which has disabled the
md4 engine so for backwards compatibility this must be manually implemented
here to ensure NTLM continues to work.

.. _MD4 Hasing Algorithm:
    https://datatracker.ietf.org/doc/html/rfc1320
   l    littler      7   @   i#Egl   +_ l   \u1 ivT2z<16INr                              	   
               r   z<IIII)	bytearraylento_bytesjoinbytesstructunpackr   r    r#   pack)r$   
data_blockorig_lengthb_orig_lengthABCDAABBCCDDXs                r   md4rN   $   s    4Jd)K!Ao);;EEaRM #((2b((B./	
 J 	AAAA
qMM&*Sb/2_
 !a(!a(!b)!b)!a(!a(!b)!b)!a(!a("r*"r*"q)"q)"r*"r* !a(!a(!a("r*!a(!a(!a("r*!a(!a("q)"r*!a(!a("q)"r* !a(!a(!b)"r*!a("q)!b)"r*!a(!a(!b)"r*!a("q)!b)"r*Vz!Vz!Vz!Vz!O *R ;;wa++r   )r?   typingtintr   r   r   r   r   r    r#   r>   rN   r	   r   r   <module>rR      sR        ' ' ' ' '    5C 5C 5C 56# 6# 6# 6# 6# 6# 6# 6C# C# C# C# C# C# C# CC# C# C# C# C# C# C# Cg,e g, g,r   