o
    j                     @   s*  d dl mZmZmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ G dd deZed	ZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZd eefiZddde	fddZdS )     )NDRCALL
NDRPOINTERNDRUniConformantArray)ULONGPGUIDLONGNTSTATUSNULL)DCERPCException)hresult_errors)	Structure)uuidtup_to_binc                   @   s   e Zd ZdddZdd ZdS )DCERPCSessionErrorNc                 C   s   t | ||| d S )N)r
   __init__)selferror_string
error_codepacket r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dcerpc/v5/gkdi.pyr      s   zDCERPCSessionError.__init__c                 C   sF   | j }|tjv rtj| d }tj| d }d| j ||f S d| j  S )Nr      z'GKDI SessionError: code: 0x%x - %s - %sz+GKDI SessionError: unknown error code: 0x%x)r   r   ERROR_MESSAGES)r   keyerror_msg_shorterror_msg_verboser   r   r   __str__   s   

zDCERPCSessionError.__str__)NNN)__name__
__module____qualname__r   r   r   r   r   r   r      s    
r   )z$B9785960-524F-11DF-8B6D-83DCDED72085z1.0c                   @      e Zd ZdZdS )KDFParameter))Unknown1<L=0)Unknown2r"   )HashLenr"   )Unknown3r"   )	_HashNamez
_-HashNamezself["HashLen"])HashName:N)r   r   r   	structurer   r   r   r   r    *       r    c                   @      e Zd ZdZdd ZdS )FFCDHParameter))Lengthr"   Magicz<4s=0	KeyLengthr"   _FieldOrderz_-FieldOrderself["KeyLength"]
FieldOrderr(   
_Generatorz_-Generatorr4   	Generatorr(   c                 C   sb   t d t d| d   t d| d   t d| d   t d| d	   t d
| d   t   d S )Nz[FFCDH PARAMETER]zLength:		%sr-   
Magic:		%sr/   KeyLength:		%sr1   FieldOrder:		%sr6   Generator:		%sr:   printr   r   r   r   dump@   s   
zFFCDHParameter.dumpNr   r   r   r)   rB   r   r   r   r   r,   5   s    
r,   c                   @   r+   )FFCDHKey)r.   r0   r2   r5   r7   r9   )_PubKeyz_-PubKeyr4   )PubKeyr(   c                 C   sR   t d t d| d   t d| d   t d| d   t d| d	   t   d S )
Nz[FFCDH KEY]r<   r1   r=   r6   r>   r:   zPubKey:		%srF   r?   rA   r   r   r   rB   V   s   
zFFCDHKey.dumpNrC   r   r   r   r   rD   J   s    rD   c                   @   r+   )ECDHKey)r.   r0   )_XCoordinatez_-XCoordinater4   )XCoordinater(   )_YCoordinatez_-YCoordinater4   )YCoordinater(   c                 C   sF   t d t dt| d   t d| d   t d| d   t   d S )Nz
[ECDH KEY]r;   r/   zXCoordinate:		%srI   zYCoordinate:		%srK   )r@   hexrA   r   r   r   rB   i   s
   
zECDHKey.dumpNrC   r   r   r   r   rG   _   s    	rG   c                   @   s   e Zd Zg ddddddddd	d
ddddddddddddefdddddddddd d!d"R Zd#d$ Zd%S )&GroupKeyEnvelope)Versionr"   )r/   r"   )Flagsr"   )L0Indexr"   )L1Indexr"   )L2Indexr"   )	RootKeyIdz16s=b)KdfAlgoLengthr"   )KdfParaLengthr"   )SecAlgoLengthr"   )SecParaLengthr"   )PrivKeyLengthr"   )PubKeyLengthr"   )L1KeyLengthr"   )L2KeyLengthr"   )DomainLengthr"   )ForestLengthr"   )_KdfAlgoz	_-KdfAlgozself["KdfAlgoLength"])KdfAlgor(   )_KdfParaz	_-KdfParazself["KdfParaLength"]KdfParar(   )_SecAlgoz	_-SecAlgozself["SecAlgoLength"])SecAlgor(   )_SecParaz	_-SecParazself["SecParaLength"])SecParar(   )_Domainz_-Domainzself["DomainLength"])Domainr(   )_Forestz_-Forestzself["ForestLength"])Forestr(   )_L1Keyz_-L1Keyzself["L1KeyLength"])L1Keyr(   )_L2Keyz_-L2Keyzself["L2KeyLength"])L2Keyr(   c                 C   sH  t d t d| d   t dt| d   t d| d   t d| d	   t d
| d   t d| d   t d| d   t d| d d  t d| d d d  t d| d d  t d| d   t d| d   t d| d   t d| d d  t d | d! d  t d"| d#   t d$| d%   t   d S )&Nz[GROUP KEY ENVELOPE]zVersion:		%srN   r;   r/   z
Flags:		%srO   zL0Index:		%srP   zL1Index:		%srQ   zL2Index:		%srR   zRootKeyId:		%srS   zKdfAlgo:		%sr_   zutf-16lezKdfPara:		%sra   r'   zSecAlgo:		%src   zSecPara:		%sre   zPrivKeyLength:		%srX   zPubKeyLength:		%srY   zDomain:		%srg   zForest:		%sri   z
L1Key:		%srk   z
L2Key:		%srm   )r@   rL   decoderA   r   r   r   rB      s&   
zGroupKeyEnvelope.dumpN)r   r   r   r    r)   rB   r   r   r   r   rM   q   s    	
 !$rM   c                   @   r   )
BYTE_ARRAYcN)r   r   r   itemr   r   r   r   ro      r*   ro   c                   @   s   e Zd ZdeffZdS )PBYTE_ARRAYDataN)r   r   r   ro   referentr   r   r   r   rr      s    rr   c                   @   s8   e Zd ZdZdefdefdefdefdefdeffZdS )	GkdiRpcGetKeyr   
cbTargetSD
pbTargetSD
pRootKeyIDL0KeyIDL1KeyIDL2KeyIDN)	r   r   r   opnumr   ro   r   r   r)   r   r   r   r   ru      s    ru   c                   @   s&   e Zd ZdZdefdefdeffZdS )GkdiRpcGetKeyResponser   pcbOutpbbOut	ErrorCodeN)r   r   r   r|   r   rr   r   r)   r   r   r   r   r}      s    r}   c                 C   sH   t  }t||d< | |d< ||d< ||d< ||d< ||d< | |S )Nrv   rw   rx   ry   rz   r{   )ru   lengetDatarequest)dce	target_sdl0l1l2root_key_idr   r   r   r   
GkdiGetKey   s   
r   N)impacket.dcerpc.v5.ndrr   r   r   impacket.dcerpc.v5.dtypesr   r   r   r   r	   impacket.dcerpc.v5.rpcrtr
   impacketr   impacket.structurer   impacket.uuidr   r   MSRPC_UUID_GKDIr    r,   rD   rG   rM   ro   rr   ru   r}   OPNUMSr   r   r   r   r   <module>   s(   
:
