
    >OOfN                        d Z ddlmZmZ ddlmZmZ ddlmZ ddl	m	Z	 ddl
Z
ddlZddlZddlmZ 	 ddlmZ  e       Zd
dlmZ dZdZd
ZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)d Z*d!Z+d
Z,dZ-dZ.eeeeeeee e!e"e#e$e%e&e'e(e)e*e+e,e-e.gZ/dZ0dZ1d
Z2dZ3d!Z4d Z5dZ6dZ7d"Z8dZ9d#Z:e0e1e2e3e4e5e6e7e8e9e:gZ;dZ<dZ=d
Z>e<e=e>gZ?d(d$Z@d% ZA G d& d'eB      ZCy# e$ r d	ZY w xY w))
    )packunpack)systemversion)gethostname)timeN)urandom)getpreferredencodingzutf-8   )format_ad_timestamps   NTLMSSP                                                 	                  
   c                    | rbt               j                         dk(  r@	 t               j                  d      \  }}}t	        |      }t	        |      }t	        |      }nd}d}d}nd}d}d}t        d|      t        d|      z   t        d|      z   t        dd      z   t        dd      z   t        dd      z   t        dd	      z   S # t
        $ r	 d}d}d}Y kw xY w)
Nwindows.r!   r   i(
  r   <B<Hr   )r   lowerr   splitint	Exceptionr   )debugmajor_releaseminor_releasebuilds       Q/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/utils/ntlm.pypack_windows_versionr3      s    8>>y(6=iooc6J3}e #M 2 #M 2E
 MMEm$m$%e a= a=	
 a= b>    ! !s   >C CCc           
      ^   t        |       dk7  rt        d      t        t        u rFt	        d| d         d   t	        d| d         d   t	        d| dd       d   t	        d| d	         d   fS t        | d         t        | d         t        t	        d| dd       d         t        | d	         fS )
Nr#   z"version field must be 8 bytes longr(   r   r   r)   r   r"   r   )len
ValueErrorstrbytesr   r,   )version_messages    r2   unpack_windows_versionr:      s    
?q =>>
e|t_Q/03t_Q/03t_Qq1215t_Q/035 	5
 OA&'OA&'F41!56q9:OA&') 	)    c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zed        Zed        Zed        Zed        Zed        Zd Zd Zy)
NtlmClientc                 z   d| _         d | _        d | _        || _        || _        d | _        d| _        g | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d| _        d| _        d| _        d| _        d| _        d| _        d | _        d | _        d | _        || _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _         d | _!        d | _"        d | _#        d | _$        d | _%        d | _&        d | _'        d | _(        d | _)        d | _*        d | _+        d | _,        y )Nr   F)-client_config_flagsexported_session_keynegotiated_flags	user_nameuser_domainno_lm_response_ntlm_v1client_blockedclient_block_exceptions!client_require_128_bit_encryptionmax_life_timeclient_signing_keyclient_sealing_keysequence_numberserver_sealing_keyserver_signing_key	integrityreplay_detectsequence_detectconfidentialitydatagramidentityclient_supplied_target_nameclient_channel_binding_unhashedunverified_target_name	_passwordserver_challengeserver_target_nameserver_target_infoserver_versionserver_av_netbios_computer_nameserver_av_netbios_domain_nameserver_av_dns_computer_nameserver_av_dns_domain_nameserver_av_dns_forest_nameserver_av_target_nameserver_av_flagsserver_av_timestampserver_av_single_host_dataserver_av_channel_bindingsserver_av_flag_constrainedserver_av_flag_integrity#server_av_flag_target_spn_untrustedcurrent_encodingclient_challengeserver_target_info_raw)selfdomainrB   passwords       r2   __init__zNtlmClient.__init__   se   #$ $(! $"!&*##')$15.!"&"&#"&"&"$$+/(/3,&*#! $"&"&"/3,-1*+/()-&)-&%)"##' *.'*.'*.'(,%370 $ $&*#r;   c                 n    | j                   sy|t        v r| j                   d|z  z  rdS dS t        d      )NFr   Tinvalid flag)r?   
FLAG_TYPESr6   rl   flags     r2   get_client_flagzNtlmClient.get_client_flag   s=    '':33qDyA4LuL((r;   c                 n    | j                   sy|t        vrt        d      | j                   d|z  z  rdS dS )NFrq   r   T)rA   rr   r6   rs   s     r2   get_negotiated_flagzNtlmClient.get_negotiated_flag   s=    $$z!^,,,,T	:tEEr;   c                 n    | j                   sy|t        vrt        d      | j                   d|z  z  rdS dS )NFzinvalid AV flagr   T)rb   AV_FLAG_TYPESr6   rs   s     r2   get_server_av_flagzNtlmClient.get_server_av_flag   s>    ##}$.//++qDy9tDuDr;   c                     t        |      t        k(  r|g}|D ]-  }|t        v r| xj                  d|z  z  c_        $t	        d       y Nr   rq   typer,   rr   r?   r6   rl   flagsrt   s      r2   set_client_flagzNtlmClient.set_client_flag   sL    ;#GE 	1Dz!((Q$Y7( 00		1r;   c                     d| _         y )Nr   )r?   )rl   s    r2   reset_client_flagszNtlmClient.reset_client_flags  s
    #$ r;   c                     t        |      t        k(  r|g}|D ].  }|t        v r| xj                  d|z   z  c_        %t	        d       y r|   r}   r   s      r2   unset_client_flagzNtlmClient.unset_client_flag  sN    ;#GE 	1Dz!((a4iL8( 00		1r;   c           
         | j                          | j                  t        t        t        t
        t        t        t        t        g       t        }|t        dt              z  }|t        d| j                        z  }|| j                  dd      z  }| j                  t               r|t#        d      z  }|S |t#        d      z  }|S )z+
        Microsoft MS-NLMP 2.2.1.1
        <I (   TF)r   r   FLAG_REQUEST_TARGETFLAG_NEGOTIATE_56FLAG_NEGOTIATE_128FLAG_NEGOTIATE_NTLMFLAG_NEGOTIATE_ALWAYS_SIGNFLAG_NEGOTIATE_OEMFLAG_NEGOTIATE_UNICODE'FLAG_NEGOTIATE_EXTENDED_SESSIONSECURITYNTLM_SIGNATUREr    NTLM_MESSAGE_TYPE_NTLM_NEGOTIATEr?   
pack_fieldru   FLAG_NEGOTIATE_VERSIONr3   )rl   messages     r2   create_negotiate_messagez#NtlmClient.create_negotiate_message  s     	!1/01804EG 	H !4>??4d66774??2r** 67+D11G  +E22Gr;   c                    t        |      dk  ry|dd t        k7  ryt        t        d|dd       d         t        k7  ry| j                  |dd       \  }}}t        d|dd       d   | _        | j                  t              rd	nt        | _
        |dd
 | _        | j                  |dd       \  }}}t        |dd       | _        | j                  t              r(|r&||||z    j                  | j                        | _        | j                  t"              r|r||||z    | _        | j'                  | j$                        | _        | j(                  D ]|  \  }}|t*        k(  r|j                  d	      | _        '|t.        k(  r|j                  d	      | _        G|t2        k(  r|j                  d	      | _        g|t6        k(  r|j                  d	      | _        |t:        k(  r|j                  d	      | _        |t>        k(  rW| jA                  tB              rd| _"        | jA                  tF              rd| _$        | jA                  tJ              sd| _&        |tN        k(  rtQ        t        d|      d         | _)        /|tT        k(  r	|| _+        A|tX        k(  r|j                  d	      | _-        b|t\        k(  r	|| _/        tta        d       yyy)z+
        Microsoft MS-NLMP 2.2.1.2
        8   Fr   r#   r   r   r      	utf-16-le    r   0   T<Qunknown AV typeN)1r5   r   r,   r    NTLM_MESSAGE_TYPE_NTLM_CHALLENGEunpack_fieldrA   rw   r   oem_encodingri   rX   r:   r[   r   decoderY   FLAG_NEGOTIATE_TARGET_INFOrk   unpack_av_inforZ   AV_NETBIOS_COMPUTER_NAMEr\   AV_NETBIOS_DOMAIN_NAMEr]   AV_DNS_COMPUTER_NAMEr^   AV_DNS_DOMAIN_NAMEr_   AV_DNS_TREE_NAMEr`   AV_FLAGSrz   AV_FLAG_CONSTRAINEDrf   AV_FLAG_INTEGRITYrg   AV_FLAG_TARGET_SPN_UNTRUSTEDrh   AV_TIMESTAMPr   rc   AV_SINGLE_HOST_DATArd   AV_TARGET_NAMEra   AV_CHANNEL_BINDINGSre   r6   )	rl   r   target_name_len_target_name_offsettarget_info_lentarget_info_offset	attributevalues	            r2   parse_challenge_messagez"NtlmClient.parse_challenge_message'  s    w<"1Q<>)vdGAbM*1-.2RR151B1B72b>1R.. &tWR^ <Q ?/3/G/G"0$)5 	 !(2151B1B72b>1R..4WR^D##$78_&-.@BTWfBf&g&n&n%%''D###$>?O*12DFX[jFj*kD'&*&9&9$:U:U&VD#$($;$; 8 	5 88;@<<;TD8"889>k9RD6"667<||K7PD4"445:\\+5ND2"225:\\+5ND2(*../BC:>7../@A8<5../KLCG@,./B6$PUCVWXCY/ZD,"556;D3.016k1JD."556;D3$%67778 ET?r;   c                 8   | j                   s| j                  sy| j                  t              r| j	                  t              sy| j
                  r| j                  s| j                  ryt        }|t        dt              z  }d}| j                  rd}nd}|| j                  ||      z  }|t        |      z  }| j                         }|| j                  ||      z  }|t        |      z  }| j                  j!                  | j"                        }|| j                  ||      z  }|t        |      z  }| j$                  j!                  | j"                        }|| j                  ||      z  }|t        |      z  }| j	                  t&              s| j	                  t(              r$t+               j!                  | j"                        }nd}|| j                  ||      z  }|t        |      z  }d}|| j                  ||      z  }|t        |      z  }|t        d| j                        z  }| j	                  t(              r|t-        d      z  }n|t-               z  }|t        dd      z  }|t        dd      z  }||z  }||z  }||z  }||z  }||z  }||z  }|S )z+
        Microsoft MS-NLMP 2.2.1.3
        Fr   X   r;   Tr   r   )r?   rA   ru   r   rw   r\   r]   rg   r   r   #NTLM_MESSAGE_TYPE_NTLM_AUTHENTICATErZ   r   r5   compute_nt_responserC   encoderi   rB   'FLAG_NEGOTIATE_OEM_WORKSTATION_SUPPLIEDr   r   r3   )	rl   r   poslm_challenge_responsent_challenge_responsedomain_namerB   workstationencrypted_random_session_keys	            r2   create_authenticate_messagez&NtlmClient.create_authenticate_message_  s   
 ''0E0E  23D<T<TUg<h 44D<^<^dh  eB  eB 4ABB""$'! %(!4??#8#>>s()) $ 8 8 :4??#8#>>s())&&--d.C.CD4??;44s;NN))$*?*?@	4??9c22s9~##$KLPTPhPh&Q(%-..t/D/DEKK4??;44s;'*$4??#?EEs/004d3344##$:;+D11G+--G4a= 4a= ((((;9;//r;   c                 B    t        dt        |       t        |       |      S )Nz<HHI)r   r5   )r   offsets     r2   r   zNtlmClient.pack_field  s    FCJE
F;;r;   c                     t        |       dk7  rt        d      t        d| dd       d   t        d| dd       d   t        d| dd       d   fS )Nr#   zntlm field must be 8 bytes longr)   r   r   r"   r   )r5   r6   r   )field_messages    r2   r   zNtlmClient.unpack_field  sg    }">??dM!A./2dM!A./2dM!A./23 	3r;   c                 .   | rt               }d}d}|sxt        d| ||dz          d   }|t        vrt        d      t        d| |dz   |dz          d   }| |dz   |dz   |z    }||dz   z  }|t        k(  rd}n|j                  ||f       |sx|S t               S )NFr   r)   r   r   r"   T)listr   AV_TYPESr6   AV_END_OF_LISTappend)infoavsdoner   av_typeav_lenav_values          r2   r   zNtlmClient.unpack_av_info  s    &CDC tCq'9:1=(*$%677d37C!G&<=a@aq6)9:vz!n,DJJ23  
 6Mr;   c                     d}| D ]A  \  }} |d      t         k(  r|t        d|      z  }|t        dt        |            z  }||z  }C |t        dt               z  }|t        dd      z  }|S )Nr;   r   r)   )r   r   r5   )r   r   r   r   s       r2   pack_av_infozNtlmClient.pack_av_info  s     !$ 	GXqz^+Dw''DDs8}--DHD	 	T>**T1r;   c                  H    t        dt        t                     dz   dz        S )Nr   l    !l
 i )r   r,   r	    r;   r2   pack_windows_timestampz!NtlmClient.pack_windows_timestamp  s    D3tv;4@AAr;   c                    | j                   s| j                  syt        d      | _        d}|t	        dd      z  }|t	        dd      z  }|t	        dd      z  }|t	        dd      z  }|| j                         z  }|| j                  z  }|t	        dd      z  }|| j                  z  }|t	        dd      z  }| j                         }t        j                  || j                  |z   t        j                        j                         }||z   }|S )	Nr;   r#   r(   r   r)   r   r   	digestmod)rB   rW   r
   rj   r   r   rk   ntowf_v2hmacnewrX   hashlibmd5digest)rl   tempresponse_key_ntnt_proof_strr   s        r2   r   zNtlmClient.compute_nt_response  s    ~~dnn '
T1T1T1T1++--%%%T1+++T1--/xx1F1F1MY`YdYdelln ,t 3$$r;   c                    | j                   j                  d      }t        |      dk(  r;t        |d         dk(  r*t        |d         dk(  rt        j                  |d         }n>	 t        j                  d| j                   j                  d            j                         }t        j                  || j                  j                         | j                   z   j                  d      t
        j"                  	      j                         S # t        $ rY}	 ddl
m} |j                  | j                   j                  d            j                         }n# t        $ r |w xY wY d }~d }~ww xY w)
N:r   r   r   r   MD4r   )r   r   )rW   r+   r5   binascii	unhexlifyr   r   r   r   r6   Crypto.Hashr   ImportErrorr   rB   upperrC   r   )rl   	passpartspassword_digester   s        r2   r   zNtlmClient.ntowf_v2  s5   NN((-	y>Q3y|#4#:s9Q<?PTV?V&001>O")++eT^^5J5J;5W"X"_"_"a xx$..*>*>*@4CSCS*S)[)[\g)ht{tt  A  H  H  J  	J  /&)ggdnn.C.CK.P&Q&X&X&ZO" G $s*   &=D 	E->EE(E  E((E-N)__name__
__module____qualname__ro   ru   rw   rz   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r;   r2   r=   r=      s    -+^)FE1%1068p>@ < < 3 3  *    B B%(Jr;   r=   )F)D__doc__structr   r   platformr   r   socketr   r	   r   r   r   osr
   localer   r   r-   protocol.formatters.formattersr   r   r   r   r   r   FLAG_NEGOTIATE_KEY_EXCHr   r   r   FLAG_REQUEST_NOT_NT_SESSION_KEYFLAG_NEGOTIATE_IDENTIFYr   FLAG_TARGET_TYPE_SERVERFLAG_TARGET_TYPE_DOMAINr   r   "FLAG_NEGOTIATE_OEM_DOMAIN_SUPPLIEDFLAG_NEGOTIATE_ANONYMOUSr   FLAG_NEGOTIATE_LM_KEYFLAG_NEGOTIATE_DATAGRAMFLAG_NEGOTIATE_SEALFLAG_NEGOTIATE_SIGNr   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   r3   r:   objectr=   r   r;   r2   <module>r
     s  6   $      +')L A#$  #$  &' #     "$  *, '   *, '%' "         % $(-%5%%(50&!#%!!! $+&
.        $" 
!     $"-/
<) JJ JJO  Ls   C CC