o
    j5                     @   s  d dl mZ d dl mZ d dlmZ z
d dlmZmZ W n ey/   e	d e	d Y nw d dl
mZmZ d dlmZ d d	lZd d	lZd d
lmZ dd Zdd Zdd Zdd Zdd Zdd ZG dd deZdd Zdd Zdd Zdd  Zd!d" Zd	S )#    )division)print_function)LOG)DESAESzDWarning: You don't have any crypto installed. You need pycryptodomexz+See https://pypi.org/project/pycryptodomex/)packunpack)	StructureN)bc                 C   s   t | t j}|ttd}td|d d d }td|dd  d }|d> |d? B d@ }|d> d@ }|d? r>|dN }|d> |d? B d@ }|d> d@ }|d? rV|dN }ttd	||}	ttd	||}
|	|
fS )
N   z>Q   r      ?   l       z>QQ)r   newMODE_ECBencryptbytes	bytearrayr   r   )KAES_128LLHighLLowK1HighK1LowK2HighK2LowK1K2 r    /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/crypto.pyGenerate_Subkey&   s   r"   c                 C   s2   t  }tt| D ]}|| | || A  q	|S )N)r   rangelenappend)N1N2Jir    r    r!   XOR_128X   s   r*   c                 C   s    dt |  }| d d|d   S )Nr          r   )r$   )NpadLenr    r    r!   PAD`   s   r/   c                 C   s  d}t d}t| tj}t |d | }t| \}}t|| }|dkr*d}d}	n|| dkr3d}	n|d7 }d}	||d | d  }
|	du rMt|
|}ntt|
|}|}t|d D ]}||| d  d d }t||}t |	t
|}q\t||}|	t
|}|S )Nr   r   r   FT)r   r   r   r   r"   r$   r*   r/   r#   r   r   )r   Mlengthconst_Bsize
const_Zeror   r   r   nflagM_nM_lastXr)   M_iYTr    r    r!   AES_CMACd   s2   /

r<   c                 C   s2   |dkr| }n
t ttd| |}t |||}|S )Nr   )r<   r   r   )VKr0   VKlenMlenr   PRVr    r    r!   AES_CMAC_PRF_128   s
   rA   c                 C   s   d}d}|| }|dkrd}|t d|d krtdd}d}td|d D ] }	td|	| d	 | td| }
t| |
tj }|| }q&|d |d
  S )N       r   r      zError computing KDF_CounterMode    z>Lr,   r   )	pow	Exceptionr#   r   hmacr   hashlibsha256digest)KILabelContextr   hrr4   resultr   r)   inputr    r    r!   KDF_CounterMode   s    
rS   c                   @   s   e Zd ZdZdS )LSA_SECRET_XP))Length<L=0)VersionrV   )_Secretz_-Secretzself["Length"])Secret:N)__name__
__module____qualname__	structurer    r    r    r!   rT      s    rT   c                 C   s  g }| tt| dd d?  | tt| dd d@ d> t| dd d? B  | tt| dd d@ d> t| dd d? B  | tt| dd d@ d> t| dd d? B  | tt| dd d	@ d> t| dd d? B  | tt| dd d
@ d> t| dd d? B  | tt| dd d@ d> t| dd d? B  | tt| dd d@  tdD ]}tt|| d> d@ ||< qtd|S )Nr   r      rD                     r      r       )r%   chrordr#   r
   join)InputKey	OutputKeyr)   r    r    r!   transformKey  s   666666rn   c           
      C   s   d}| }t dt|dD ]:}|d d }|d d }t|}t|tj}|||7 }|dd  }|dd  }t|dk rF| t|d  }qt|}	|	d S )NrE   r   r   rb   rY   )r#   r$   rn   r   r   r   decryptrT   )
keyvalue	plainTextkey0r)   
cipherText	tmpStrKeytmpKeyCrypt1secretr    r    r!   decryptSecret  s   ry   c           
      C   s   d}| }t dt|d| }tdt|dD ]T}t|dk r(|ddt|   }|d d }|d d }tt| t| t|}t|tj}	||		|7 }|dd  }|dd  }t|dk rj| t|d  }q|S )NrE   z<LLr   r   r   r,   rb   )
r   r$   r#   printtypern   r   r   r   r   )
rp   rq   rt   rs   value0r)   rr   ru   rv   rw   r    r    r!   encryptSecret'  s&   r}   c           
      C   x   | d d }| dd  }|d d }t |}|dd }t |}t|tj}t|tj}||}||}	||	 S Nr   rb      )rn   r   r   r   ro   
encryptedHashrp   Block1Block2Key1Key2rw   Crypt2plain1plain2r    r    r!   SamDecryptNTLMHash>     

r   c           
      C   r~   r   )rn   r   r   r   r   r   r    r    r!   SamEncryptNTLMHashP  r   r   )
__future__r   r   impacketr   Cryptodome.Cipherr   r   rG   errorstructr   r   impacket.structurer	   rH   rI   sixr
   r"   r*   r/   r<   rA   rS   rT   rn   ry   r}   r   r   r    r    r    r!   <module>   s2   
2Q %	