o
    àý°jÙ«  ã                   @   sŠ  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Zd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ dZdZe
 d	¡Zd
d
eddfdd„Zzd dlmZ d dlmZ d dlmZ W n eyx   e d¡ e d¡ Y nw 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&Z0d'Z1d(Z2d)Z3d*Z4d+Z5d,Z6d-Z7d.Z8d/Z9d0Z:d1Z;d2Z<d3Z=d4Z>d5Z?d6Z@d7ZAdZBdZCdZDdZEdZFdZGd ZHdZIdZJdZKdZLdZMdZNd8ZOd7ZPd9ZQd:ZRG d;d<„ d<ƒZSG d=d>„ d>eƒZTG d?d@„ d@eƒZUG dAdB„ dBeƒZVG dCdD„ dDeƒZWG dEdF„ dFeƒZXG dGdH„ dHeƒZYG dIdJ„ dJeYƒZZdKZ[dLdM„ Z\dNdO„ Z]dPdQ„ Z^d
d
dedfdRdS„Z_d
d
edddfdTdU„Z`dVdW„ Zad
d
efdXdY„ZbdZd[„ Zcdƒd\d]„Zddƒd^d_„Zed`da„ Zfdbdc„ Zgddde„ Zhdfdg„ Zidhdi„ Zjd„dkdl„Zkd„dmdn„Zldodp„ Zmefdqdr„Zndsdt„ Zod…dudv„Zpd…dwdx„Zqd
d
eddfdydz„ZrG d{d|„ d|esƒZtG d}d~„ d~etƒZuG dd€„ d€eteUƒZvG d�d‚„ d‚eteWƒZwdS )†é    )Údivision)Úprint_functionN)Úb)Ú	Structure)ÚLOGTFÚ AAD3B435B51404EEAAD3B435B51404EEÚ ó    Úcifsc                 C   s@   |	rt | |||||||||	|
|d�S t| |||||||||	d�
S )N)Ú
use_ntlmv2Úchannel_binding_valueÚservice)r   )ÚcomputeResponseNTLMv2ÚcomputeResponseNTLMv1)ÚflagsÚserverChallengeÚclientChallengeÚ
serverNameÚdomainÚuserÚpasswordÚlmhashÚnthashr   r   r   © r   ú€/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/ntlm.pyÚcomputeResponse*   s   
ÿÿr   )ÚARC4)ÚDES)ÚMD4zDWarning: You don't have any crypto installed. You need pycryptodomexz+See https://pypi.org/project/pycryptodomex/é   é   é   é   é   é   l        i   @i    i   i   i   i   i   i  € i  @ i    i   i   i   i   i   i €  i @  i    i   i   l   E i   i   é   é€   é@   é    é   é   é   é	   é
   c                   @   sf   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚAV_PAIRSNc                 C   s    i | _ |d ur|  |¡ d S d S ©N)ÚfieldsÚ
fromString©ÚselfÚdatar   r   r   Ú__init__Ú   s   ÿzAV_PAIRS.__init__c                 C   s   t |ƒ|f| j|< d S r/   )Úlenr0   )r3   ÚkeyÚvaluer   r   r   Ú__setitem__ß   s   zAV_PAIRS.__setitem__c                 C   s   || j v r
| j | S d S r/   ©r0   ©r3   r7   r   r   r   Ú__getitem__â   s   

zAV_PAIRS.__getitem__c                 C   s
   || j v S r/   r:   r;   r   r   r   Ú__contains__ç   ó   
zAV_PAIRS.__contains__c                 C   s
   t | jƒS r/   )Úiterr0   ©r3   r   r   r   Ú__iter__ê   r>   zAV_PAIRS.__iter__c                 C   s   | j |= d S r/   r:   r;   r   r   r   Ú__delitem__í   ó   zAV_PAIRS.__delitem__c                 C   ó   t |  ¡ ƒS r/   ©r6   ÚgetDatar@   r   r   r   Ú__len__ð   rC   zAV_PAIRS.__len__c                 C   rD   r/   rE   r@   r   r   r   Ú__str__ó   rC   zAV_PAIRS.__str__c                 C   s¦   |}d}|t urQt d|d t d¡… ¡d }|t d¡d … }t d|d t d¡… ¡d }|t d¡d … }|d |… }||f| j|< ||d … }|t usd S d S )Néÿ   z<Hr   )ÚNTLMSSP_AV_EOLÚstructÚunpackÚcalcsizer0   )r3   r4   ÚtInfoÚfTypeÚlengthÚcontentr   r   r   r1   ö   s   ùzAV_PAIRS.fromStringc                 C   s,   t | j ¡ ƒD ]}td|| | f ƒ qd S )Nz%s: {%r})Úlistr0   ÚkeysÚprint)r3   Úir   r   r   Údump  s   ÿzAV_PAIRS.dumpc                 C   sj   t | jv r	| jt = d}t| j ¡ ƒD ]}|t d|| | d ¡7 }|| | d 7 }q|t dt d¡7 }|S )Nr	   z<HHr   r   )rJ   r0   rR   rS   rK   Úpack)r3   ÚansrU   r   r   r   rF     s   
zAV_PAIRS.getDatar/   )Ú__name__Ú
__module__Ú__qualname__r5   r9   r<   r=   rA   rB   rG   rH   r1   rV   rF   r   r   r   r   r.   Ù   s    
r.   c                   @   ó   e Zd ZdZdZdS )ÚVERSIONé   ))ÚProductMajorVersionú<B=0)ÚProductMinorVersionr`   )ÚProductBuildz<H=0)ÚReservedz3s="")ÚNTLMRevisionCurrentz<B=self.NTLMSSP_REVISION_W2K3N)rY   rZ   r[   ÚNTLMSSP_REVISION_W2K3Ú	structurer   r   r   r   r]     s    r]   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚNTLMAuthNegotiate)©r   z	"NTLMSSP )Úmessage_typeú<L=1©r   ú<L©Ú
domain_lenú<H-domain_name©Údomain_max_lenro   )Údomain_offsetú<L=0©Úhost_lenú<H-host_name)Úhost_maxlenrv   )Úhost_offsetrs   )Ú
os_versionú:©Ú	host_namerz   ©Údomain_namerz   c                 C   sL   t  | ¡ ttB tB tB tB tB dB | d< d| d< d| d< d| d< d| _d S )Nr   r   r   r|   r~   ry   )	r   r5   ÚNTLMSSP_NEGOTIATE_128ÚNTLMSSP_NEGOTIATE_KEY_EXCHÚNTLMSSP_NEGOTIATE_NTLMÚNTLMSSP_NEGOTIATE_UNICODEÚNTLMSSP_NEGOTIATE_SIGNÚNTLMSSP_NEGOTIATE_SEALÚ_workstationr@   r   r   r   r5   0  s&   
ÿýüúù	÷ÿ
zNTLMAuthNegotiate.__init__c                 C   ó
   || _ d S r/   ©r…   )r3   Úworkstationr   r   r   ÚsetWorkstationB  r>   z NTLMAuthNegotiate.setWorkstationc                 C   s   | j S r/   r‡   r@   r   r   r   ÚgetWorkstationE  s   z NTLMAuthNegotiate.getWorkstationc                 C   s   | d t @ t kS )Nr   ©ÚNTLMSSP_NEGOTIATE_VERSIONr@   r   r   r   Ú__hasNegotiateVersionH  ó   z'NTLMAuthNegotiate.__hasNegotiateVersionc                 C   sÊ   t | jd ƒdkr| d  tO  < t | jd ƒdkr"| d  tO  < t | jd ƒ}|dkr6| d  tO  < n|  ¡ r>tdƒ‚| d t@ tkrLd| | d< | d t@ tkr`dt | d ƒ | | d	< t | ¡S )
Nr|   r   r   r~   ry   zNMust provide the os_version field if the NTLMSSP_NEGOTIATE_VERSION flag is setr(   rx   rr   )	r6   r0   Ú*NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIEDÚ%NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIEDrŒ   Ú'_NTLMAuthNegotiate__hasNegotiateVersionÚ	Exceptionr   rF   )r3   Úversion_lenr   r   r   rF   K  s   
zNTLMAuthNegotiate.getDatac                 C   sŒ   t  | |¡ | d }| d | }|||… | d< | d }| d | }|||… | d< t|ƒdkr@|  ¡ r@t|dd … ƒ| d	< d S d
| d	< d S )Nrr   rn   r~   rx   ru   r|   é$   r(   ry   r   )r   r1   r6   r‘   r]   )r3   r4   rr   Ú
domain_endrx   Úhost_endr   r   r   r1   [  s   zNTLMAuthNegotiate.fromStringN)
rY   rZ   r[   rf   r5   r‰   rŠ   r‘   rF   r1   r   r   r   r   rg      s    rg   c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	ÚNTLMAuthChallenge)rh   )ri   z<L=2rm   rp   )rr   z<L=40)r   rs   )Ú	challengeÚ8s)Úreservedz8s="")ÚTargetInfoFields_lenú<H-TargetInfoFields)ÚTargetInfoFields_max_lenrœ   )ÚTargetInfoFields_offsetrl   ©Ú
VersionLenz	_-Versionz self.checkVersion(self["flags"]))ÚVersionrz   r}   )ÚTargetInfoFieldsrz   c                 C   ó   | d ur| t @ dkrdS dS ©Nr   r*   r‹   ©r   r   r   r   ÚcheckVersion~  ó   zNTLMAuthChallenge.checkVersionc                 C   s:   | d d urt | d ƒtur| d  ¡ }|| d< t | ¡S )Nr¢   )ÚtypeÚbytesrF   r   )r3   Úraw_av_fieldsr   r   r   rF   …  s   
zNTLMAuthChallenge.getDatac                 C   sP   t  | |¡ || d d … d | d … | d< || d d … d | d … | d< | S )Nrr   rn   r~   rž   r›   r¢   ©r   r1   r2   r   r   r   r1   ‹  s     zNTLMAuthChallenge.fromStringN)rY   rZ   r[   rf   Ústaticmethodr¦   rF   r1   r   r   r   r   r—   k  s    
r—   c                   @   sJ   e Zd ZdZddd„Zedd„ ƒZedd	„ ƒZd
d„ Zdd„ Z	dd„ Z
dS )ÚNTLMAuthChallengeResponse)rh   )ri   z<L=3)Ú
lanman_lenú	<H-lanman)Úlanman_max_lenr¯   )Úlanman_offsetrl   )Úntlm_lenú<H-ntlm)Úntlm_max_lenr³   )Úntlm_offsetrl   rm   rp   )rr   rl   )Úuser_lenú<H-user_name)Úuser_max_lenr·   )Úuser_offsetrl   rt   )Úhost_max_lenrv   )rx   rl   )Úsession_key_lenú<H-session_key)Úsession_key_max_lenr¼   )Úsession_key_offsetrl   rk   rŸ   )r¡   ú:="")ÚMICLenz_-MICzself.checkMIC(self["flags"]))ÚMICr¿   r}   )Ú	user_namerz   r{   )Úlanmanrz   )Úntlmrz   )Úsession_keyrz   r   r   c                 C   sê   t  | ¡ d| d< | d¡| d< d| d< d| d< ttB tB tB tB tB dB | d< |rB|dks2|dkrBt	||ƒ| d	< t	||ƒ| d
< d S |r^|r^t
|ƒ}t|ƒ}t	||ƒ| d	< t	||ƒ| d
< d S d| d	< d| d
< | d ssd d¡| d< d S d S )Nr   rÅ   úutf-16lerÂ   r~   r|   r   r   rÃ   rÄ   ÚNULL)r   r5   Úencoder   r€   r�   r‚   rƒ   r„   Úget_ntlmv1_responseÚcompute_lmhashÚcompute_nthash)r3   Úusernamer   r˜   r   r   r   r   r   r   r5   ´  s@   
ÿýüúù	÷ýÿz"NTLMAuthChallengeResponse.__init__c                 C   r£   r¤   r‹   r¥   r   r   r   r¦   Ö  r§   z&NTLMAuthChallengeResponse.checkVersionc                 C   r£   )Nr   r)   r‹   r¥   r   r   r   ÚcheckMICÝ  s   z"NTLMAuthChallengeResponse.checkMICc                 C   s¾   d|   | d ¡ |  | d ¡ | d< d|   | d ¡ |  | d ¡ t| d ƒ | d< | d t| d ƒ | d< | d t| d ƒ | d	< | d	 t| d
 ƒ | d< | d t| d ƒ | d< t | ¡S )Nr'   r   rr   r~   r¹   rÂ   rx   r|   r±   rÃ   rµ   rÄ   r¾   )rÍ   r¦   r6   r   rF   r@   r   r   r   rF   å  s   $0
z!NTLMAuthChallengeResponse.getDatac                 C   sÄ   t  | |¡ | d }| d | }|||… | d< | d }| d | }|||… | d< | d }| d | }|||… | d	< | d
 }| d | }	|||	… | d< | d }
| d |
 }||
|… | d< d S )Nrr   rn   r~   rx   ru   r|   r¹   r¶   rÂ   rµ   r²   rÄ   r±   r®   rÃ   r«   )r3   r4   rr   r•   rx   r–   r¹   Úuser_endrµ   Úntlm_endr±   Ú
lanman_endr   r   r   r1   î  s    z$NTLMAuthChallengeResponse.fromStringc                 C   sr   | d t @ r| d  d¡}| d  d¡}n| d  d¡}| d  d¡}|s1d|v r1| d¡\}}}d||f  ¡ S )Nr   rÂ   rÆ   r~   Úcp437ú@z%s/%s)r‚   ÚdecodeÚ
rpartitionÚupper)r3   r   r   Ú_r   r   r   ÚgetUserString  s   z'NTLMAuthChallengeResponse.getUserStringN)r   r   r   r   r   r   )rY   rZ   r[   rf   r5   r¬   r¦   rÍ   rF   r1   r×   r   r   r   r   r­   ‘  s    
!"

	r­   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚImpacketStructurec                 C   r†   r/   )Úparent)r3   Úotherr   r   r   Ú
set_parent  r>   zImpacketStructure.set_parentc                 C   ó   t | ƒS r/   )Ústrr@   r   r   r   Ú
get_packet  ó   zImpacketStructure.get_packetc                 C   rÜ   r/   )r6   r@   r   r   r   Úget_size  rß   zImpacketStructure.get_sizeN)rY   rZ   r[   rÛ   rÞ   rà   r   r   r   r   rØ     s    rØ   c                   @   s   e Zd Zddd„ZdS )ÚExtendedOrNotMessageSignaturer   c                 K   s,   |t @ r	| j| _n| j| _tj| fi |¤ŽS r/   )Ú*NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITYÚextendedMessageSignaturerf   ÚMessageSignaturer   r5   )r3   r   Úkargsr   r   r   r5   !  s   
z&ExtendedOrNotMessageSignature.__init__N)r   )rY   rZ   r[   r5   r   r   r   r   rá      s    rá   c                   @   r\   )ÚNTLMMessageSignature)©r¡   rj   )ÚChecksumú<q©ÚSeqNumú<I)rç   )Ú	RandomPadz<I=0)rè   rì   rê   N)rY   rZ   r[   rã   rä   r   r   r   r   ræ   (  s    ræ   s   KGS!@#$%c                 C   sd  t | tƒs	t| ƒ} t| d d… ƒ dd¡} tƒ }| | d d? d@ d> ¡ | | d d@ d> | d d? d@ B d> ¡ | | d d	@ d
> | d d	? d@ B d> ¡ | | d d@ d> | d	 d? d@ B d> ¡ | | d	 d@ d	> | d d
? d@ B d> ¡ | | d d@ d> | d
 d? d	@ B d> ¡ | | d
 d@ d> | d d? d@ B d> ¡ | | d d@ d> ¡ t|ƒS )Nr+   ó    r   r   é   r$   r    é?   r!   r#   é   r"   r^   )Ú
isinstancer©   Ú	bytearrayÚljustÚappend)r7   Úsr   r   r   Ú__expand_DES_key8  s   
******r÷   c                 C   s   t  t| ƒt j¡}| |¡S r/   )r   Únewr÷   ÚMODE_ECBÚencrypt)r7   ÚmsgÚcipherr   r   r   Ú__DES_blockH  s   
rý   c                 C   sB   t | d d… |ƒ}|t | dd… |ƒ7 }|t | dd … |ƒ7 }|S )Nr+   é   )rý   )r7   r˜   Úanswerr   r   r   Úntlmssp_DES_encryptL  s   r   c                 C   sè   dd l }| ¡ }|d ur.z|  d¡ W n	   |  |¡} Y z| d¡ W n	   | |¡}Y tƒ }d|d< |rAttB tB tB |d< |rK|d  t	O  < |d  t
tB tB tB tB tB O  < |d urm|d  tO  < ||d< | | ¡ |S )Nr   rÆ   r   ry   )ÚsysÚgetfilesystemencodingrÈ   rÓ   rg   r€   rƒ   ÚNTLMSSP_NEGOTIATE_ALWAYS_SIGNr„   ÚNTLMSSP_NEGOTIATE_TARGET_INFOr�   râ   r‚   ÚNTLMSSP_REQUEST_TARGETr   ÚNTLMSSP_NEGOTIATE_56rŒ   r‰   )rˆ   r   ÚsigningRequiredr   Úversionr  ÚencodingÚauthr   r   r   ÚgetNTLMSSPType1T  s>   
ÿÿÿÿ
r  c                 C   sœ  |d u rd}dd l }| ¡ }|d urEz| d¡ W n	   | |¡}Y z| d¡ W n	   | |¡}Y z| d¡ W n	   | |¡}Y t|ƒ}| d }t|||d ƒ}td dd„ tdƒD ƒ¡ƒ}|d	 }t	|d |d ||||||||||	d
�\}}}|d t
@ dkrŒ|dt
A M }|d t@ dkrš|dtA M }|d t@ dkr¨|dtA M }|d t@ dkr¶|dtA M }|d t@ dkrÄ|dtA M }|d t@ dkrÒ|dtA M }t|d |||d ||||ƒ}|dkró|dkró|dkró|dkród}|d t@ �rtd dd„ tdƒD ƒ¡ƒ}t||ƒ}nd }|}||d< | d¡|d< |  ¡  d¡|d< |dk�r0d|d< n||d< |
d u�r=|
|d< ||d< |d u�rJ||d< ||fS )Nr   r   rÆ   r   r˜   c                 S   ó   g | ]}t  tjtj ¡‘qS r   ©ÚrandomÚchoiceÚstringÚdigitsÚascii_letters©Ú.0rÖ   r   r   r   Ú
<listcomp>™  ó    z#getNTLMSSPType3.<locals>.<listcomp>r*   r¢   )r   r   ì   ÿÿ ó                   c                 S   r  r   r  r  r   r   r   r  À  r  r)   r~   r|   rî   rÃ   r¡   rÄ   rÅ   )r  r  rÈ   rÓ   r—   r­   r   ÚjoinÚranger   râ   r   r€   r„   rƒ   r  ÚKXKEYÚgenerateEncryptedSessionKeyrŠ   )Útype1Útype2r   r   r   r   r   r   r   r   r  r  r	  ÚntlmChallengeÚresponseFlagsÚntlmChallengeResponser   r   Ú
ntResponseÚ
lmResponseÚsessionBaseKeyÚkeyExchangeKeyÚexportedSessionKeyÚencryptedRandomSessionKeyr   r   r   ÚgetNTLMSSPType3x  sx   

þÿ 



r(  c                 C   s"   t  ¡ }| t| ||ƒ¡ | ¡ S r/   )r   rø   ÚupdateÚNTOWFv1Údigest)r   r   r   Úhashr   r   r   ÚgenerateSessionKeyV1í  s   r-  c
                 C   s¸   |dkr|dkrd}
d}nDt |||ƒ}t|||ƒ}| t@ r%d}t||ƒ}
n,| t@ rGt d¡}|| }| |¡ t|| 	¡ d d… ƒ}|d }
n
t||ƒ}t||ƒ}
t
|||ƒ}||
|fS )Nr   Úmd5r*   r  )ÚLMOWFv1r*  ÚNTLMSSP_NEGOTIATE_LM_KEYrÉ   râ   Úhashlibrø   r)  r   r+  r-  )r   r   r   r   r   r   r   r   r   r   r#  r"  r.  Úchallr$  r   r   r   r   ó  s$   





r   c                 C   sn   z|   d¡ W n ty   t Y S w d dd„ | D ƒ¡} tt| d d… ƒtƒ}|tt| dd… ƒtƒ7 }|S )Nzlatin-1r   c                 s   s&   � | ]}|t jv r| ¡ n|V  qd S r/   )r  r  rÕ   )r  Úcr   r   r   Ú	<genexpr>  s   €$ z!compute_lmhash.<locals>.<genexpr>r+   rþ   )rÈ   ÚUnicodeEncodeErrorÚDEFAULT_LM_HASHr  rý   r   ÚKNOWN_DES_INPUT)r   r   r   r   r   rÊ     s   ýrÊ   c                 C   s   |dkr|S t | ƒS ©Nr   )rË   ©r   r   r   r   r   r   r*    ó   r*  c                 C   s   |dkr|S t | ƒS r8  )rÊ   r9  r   r   r   r/     r:  r/  c                 C   s\   z	t | ƒ d¡} W n ty    dd l}|  | ¡ ¡ d¡} Y nw t ¡ }| | ¡ | 	¡ S )NÚutf_16ler   )
rÝ   rÈ   ÚUnicodeDecodeErrorr  rÓ   r  r   rø   r)  r+  )r   r  r,  r   r   r   rË   %  s   þ
rË   c                 C   s
   t | |ƒS r/   )r   )r7   r˜   r   r   r   rÉ   1  r>   rÉ   c              
   C   sB  t | ƒ}| t@ rX| t@ r3d|d< t d|t|t d|¡| ƒd d… ƒ¡d |d< ||d< |d7 }|S d|d< t dt|t d|¡| ƒd d… ¡d |d< ||d< |d7 }|S d|d< t d	t |¡d
@ ¡|d< d|d< |t d	|d ¡ƒ|d< t d	||d ƒ¡d |d< |dƒ|d< t d	|d ¡d |A |d< d|d< |S )Nr   r¡   ré   z<ir*   r   rè   rë   rì   r  rí   ó       )	ræ   râ   r€   rK   rL   Úhmac_md5rW   ÚbinasciiÚcrc32)r   ÚhandleÚ
signingKeyÚseqNumÚmessageÚmessageSignaturer   r   r   ÚMAC8  s.   ,ÿò.÷rF  c           	      C   s    ||ƒ}t | ||||ƒ}||fS r/   ©rF  )	r   rB  Ú
sealingKeyÚmessageToSignÚmessageToEncryptrC  rA  ÚsealedMessageÚ	signaturer   r   r   ÚSEALT  s   rM  c                 C   s   t | ||||ƒS r/   rG  )r   rB  rD  rC  rA  r   r   r   ÚSIGNY  rŽ   rN  ÚClientc                 C   s`   | t @ r,|dkrt d¡}| |d ¡ | ¡ }|S t d¡}| |d ¡ | ¡ }|S d }|S )NrO  r.  s;   session key to client-to-server signing key magic constant s;   session key to server-to-client signing key magic constant )râ   r1  rø   r)  r+  )r   ÚrandomSessionKeyÚmoder.  ÚsignKeyr   r   r   ÚSIGNKEY\  s   

ûÿrS  c                 C   s¸   | t @ rD| t@ r|}n| t@ r|d d… }n|d d… }|dkr2t d¡}| |d ¡ | ¡ }|S t d¡}| |d ¡ | ¡ }|S | t@ rR|d d… d }|S |d d… d }|S )	Nr+   r#   rO  r.  s;   session key to client-to-server sealing key magic constant s;   session key to server-to-client sealing key magic constant ó    s   å8°)râ   r   r  r1  rø   r)  r+  )r   rP  rQ  ÚsealKeyr.  r   r   r   ÚSEALKEYj  s(   

÷ûþrV  c                 C   s   t  | ¡}|j}||ƒ}|S r/   )r   rø   rú   )r%  r&  rü   Úcipher_encryptÚ
sessionKeyr   r   r   r  „  s   
r  c           	      C   sÀ   |r|S | t @ r| t@ rt|||d d…  ƒ}|S |}|S | t@ r\| t@ rGtt||ƒd d… |d d… ƒtt||ƒd d |d d… ƒ }|S | t@ rXt||ƒd d… d }|S |}|S tdƒ‚)Nr*   r+   s   ½½½½½½ó           zCan't create a valid KXKEY!)râ   r�   r>  r0  rý   r/  Ú"NTLMSSP_REQUEST_NON_NT_SESSION_KEYr’   )	r   r$  ÚlmChallengeResponser   r   r   r   r   r%  r   r   r   r  ‹  s(   ôõ ÿ	ùüþr  c                 C   s*   dd l }|j| tjd�}| |¡ | ¡ S )Nr   )Ú	digestmod)Úhmacrø   r1  r.  r)  r+  )r7   r4   r]  Úhr   r   r   r>  ¡  s   
r>  c                 C   s4   |dkr|}nt |ƒ}t||  ¡  d¡| d¡ ƒS )Nr   rÆ   )rË   r>  rÕ   rÈ   )r   r   r   r,  ÚtheHashr   r   r   ÚNTOWFv2§  s   r`  c                 C   s   t | |||ƒS r/   )r`  )r   r   r   r   r   r   r   ÚLMOWFv2®  ó   ra  c                 C   s<  d}d}t ||||ƒ}t|ƒ}tdu rH|› d� d¡|t d  |t< |t d ur0|t d }nt ddt	 
t ¡ ¡d  ¡}||t< | ¡ }nd	}t|
ƒd
krT|
|t< |}||7 }|d7 }|d7 }||7 }||7 }|d7 }|| ¡ 7 }t||| ƒ}|| }t||| ƒ| }t||ƒ}|dkr™|dkr™d}d}|||fS )Nó   Fú/rÆ   r   ré   l     }*{Gíi€–˜ rY  r   s     r=  r   )r`  r.   Ú	TEST_CASErÈ   ÚNTLMSSP_AV_DNS_HOSTNAMEÚNTLMSSP_AV_TARGET_NAMEÚNTLMSSP_AV_TIMErK   rW   ÚcalendarÚtimegmÚtimeÚgmtimerF   r6   ÚNTLMSSP_AV_CHANNEL_BINDINGSr>  )r   r   r   r   r   r   r   r   r   r   r   r   ÚresponseServerVersionÚhiResponseServerVersionÚresponseKeyNTÚav_pairsÚaTimeÚtempÚ
ntProofStrÚntChallengeResponser[  r$  r   r   r   r   ²  s<    


r   c                   @   s   e Zd ZdZedd„ ƒZdS )Ú	NTLM_HTTPNc                 C   s^   d }d}|dkrt  |dd … ¡}|d }t ¡ D ]}||jkr,|ƒ }| |¡ |  S qd S )Nr   r   r#   r*   )Úbase64Ú	b64decoderv  Ú__subclasses__ÚMSG_TYPEr1   )ÚclsÚmsg_64rû   Úmsg_typeÚ_clsÚinstancer   r   r   Úget_instanceæ  s   

ýÿzNTLM_HTTP.get_instance)rY   rZ   r[   rz  Úclassmethodr€  r   r   r   r   rv  â  s    rv  c                   @   ó   e Zd ZdZdZdd„ ZdS )ÚNTLM_HTTP_AuthRequiredr   r   c                 C   s   d S r/   r   r2   r   r   r   r1   ú  s   z!NTLM_HTTP_AuthRequired.fromStringN)rY   rZ   r[   Ú	commonHdrrz  r1   r   r   r   r   rƒ  õ  s    rƒ  c                   @   r‚  )ÚNTLM_HTTP_AuthNegotiater   r   c                 C   ó   t  | ¡ d S r/   )rg   r5   r@   r   r   r   r5     rb  z NTLM_HTTP_AuthNegotiate.__init__N©rY   rZ   r[   r„  rz  r5   r   r   r   r   r…  þ  ó    r…  c                   @   r‚  )ÚNTLM_HTTP_AuthChallengeResponser   r!   c                 C   r†  r/   )r­   r5   r@   r   r   r   r5   
  rb  z(NTLM_HTTP_AuthChallengeResponse.__init__Nr‡  r   r   r   r   r‰    rˆ  r‰  )r   r   )rO  )r   )xÚ
__future__r   r   rw  rK   ri  rk  r1  r  r  r?  Úsixr   Úimpacket.structurer   Úimpacketr   Ú
USE_NTLMv2re  Ú	unhexlifyr6  r   ÚCryptodome.Cipherr   r   ÚCryptodome.Hashr   r’   ÚcriticalÚNTLM_AUTH_NONEÚNTLM_AUTH_CONNECTÚNTLM_AUTH_CALLÚNTLM_AUTH_PKTÚNTLM_AUTH_PKT_INTEGRITYÚNTLM_AUTH_PKT_PRIVACYr  r€   r   ÚNTLMSSP_RESERVED_1ÚNTLMSSP_RESERVED_2ÚNTLMSSP_RESERVED_3rŒ   ÚNTLMSSP_RESERVED_4r  rZ  ÚNTLMSSP_RESERVED_5ÚNTLMSSP_NEGOTIATE_IDENTIFYrâ   ÚNTLMSSP_NEGOTIATE_NTLM2ÚNTLMSSP_TARGET_TYPE_SHAREÚNTLMSSP_TARGET_TYPE_SERVERÚNTLMSSP_TARGET_TYPE_DOMAINr  ÚNTLMSSP_RESERVED_6r�   r�   ÚNTLMSSP_NEGOTIATE_ANONYMOUSÚNTLMSSP_DROP_SSP_STATICÚNTLMSSP_NEGOTIATE_NT_ONLYr�   ÚNTLMSSP_RESERVED_8r0  ÚNTLMSSP_NEGOTIATE_DATAGRAMr„   rƒ   ÚNTLMSSP_RESERVED_9r  ÚNTLM_NEGOTIATE_OEMr‚   ÚNTLMSSP_AUTH_NEGOTIATEÚNTLMSSP_AUTH_CHALLENGEÚNTLMSSP_AUTH_CHALLENGE_RESPONSErJ   ÚNTLMSSP_AV_HOSTNAMEÚNTLMSSP_AV_DOMAINNAMErf  ÚNTLMSSP_AV_DNS_DOMAINNAMEÚNTLMSSP_AV_DNS_TREENAMEÚNTLMSSP_AV_FLAGSrh  ÚNTLMSSP_AV_RESTRICTIONSrg  rm  r.   r]   rg   r—   r­   rØ   rá   ræ   r7  r÷   rý   r   r  r(  r-  r   rÊ   r*  r/  rË   rÉ   rF  rM  rN  rS  rV  r  r  r>  r`  ra  r   Úobjectrv  rƒ  r…  r‰  r   r   r   r   Ú<module>   sô   

ÿ
þ		<K& 
$u
ÿ






ÿ0	