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(   
:
ÿ