o
    Žõ±j… ã                   @   s€  d dl mZ d dl mZ d dlZd dlZd dlmZmZmZ d dl	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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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
e$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 d0d1„ d1e'ƒZ*G d2d3„ d3e'ƒZ+G d4d5„ d5e*ƒZ,G d6d7„ d7e+ƒZ-G d8d9„ d9e&ƒZ.G d:d;„ d;e&ƒZ/G d<d=„ d=eƒZ0e0ƒ Z1G d>d?„ d?e.ƒZ2G d@dA„ dAe2ƒZ3G dBdC„ dCe2ƒZ4G dDdE„ dEe&ƒZ5e5Z6G dFdG„ dGeƒZ7dS )Hé    )Údivision)Úprint_functionN)ÚpackÚunpackÚcalcsize)Úwith_metaclassÚPY3)Úlogger)Úhexdump)ÚEnum)Úuuidtup_to_binc                   @   sÖ   e Zd ZdZdZdZdZdZdZdZ	d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edd„ ƒZd,dd„Zd,dd„Zdd„ Zedd„ ƒZd-dd „Zd-d!d"„Zd-d#d$„Zd-d%d&„Zd'd(„ Zd)d*„ ZdS ).ÚNDRzb
    This will be the base class for all DCERPC NDR Types and represents a NDR Primitive Type
    © é   NFc                 C   s
  t  | ¡ || _i | _|du r*| jdkr| j| _| jdkr!| j| _t| dƒr*| j	| _
| j| j | j D ]D\}}|  |¡rF|| jd�| j|< q3|dkrPd| j|< q3t| d¡ƒdkrrzt| d¡d	 ƒ| j|< W q3   d | j|< Y q3g | j|< q3|d urƒ|  |¡ d S d S )
NTr   Úalign64©ÚisNDR64ú:ó    ú=é   é   )ÚobjectÚ__init__Ú_isNDR64ÚfieldsÚcommonHdr64Ú	commonHdrÚstructure64Ú	structureÚhasattrr   ÚalignÚreferentÚisNDRÚlenÚsplitÚevalÚ
fromString©ÚselfÚdatar   Ú	fieldNameÚfieldTypeOrClassr   r   ú‡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/ndr.pyr   =   s0   




ÿzNDR.__init__c                 C   s<  t dƒ}||kr“| jdu r�d| _t| j ¡ ƒD ]}t| j| tƒr)| j|  |¡ q| jdkr3| j| _	| j
dkr<| j
| _t| dƒrE| j| _| j	| j | j D ]B\}}t| j| tƒrŽ|| j| jkrŽt| j| tƒdu rŽ| | }|| jd�| j|< d| j| jv rŠ|| j| jd< qN|| |< qNd S d S | jdu rœtdƒ‚d S )	N)z$71710533-BEBA-4937-8319-B5DBEF9CCC36z1.0FTr   r   r   ÚDatazShouldn't be here)r   r   Úlistr   ÚkeysÚ
isinstancer   ÚchangeTransferSyntaxr   r   r   r   r    r   r!   r"   Ú	__class__ÚNDRPOINTERNULLÚ	Exception)r)   Ú	newSyntaxÚNDR64Syntaxr+   r,   Ú
backupDatar   r   r-   r2   Z   s8   
€


$€è
þzNDR.changeTransferSyntaxc                 C   sP  t |tƒr;t| jd�}t | j| tƒr|| j|< d S d| j| jv r7t | j| jd tƒr9|| j| jd< d S d S d S t |tƒr�| j| jj|jjkrR|| j|< d S t | j| d tƒr‚| j| d jj|jjkrr|| j| d< d S t 	d| j| d jj ¡ d S t 	d| j| jj ¡ d S t | j| tƒr¡|| j| d< d S || j|< d S )Nr   r.   z0Can't setitem with class specified, should be %s)
r1   r4   r   r   Ú
NDRPOINTERr   r3   Ú__name__ÚLOGÚerror©r)   ÚkeyÚvaluer   r   r-   Ú__setitem__|   s(   
þ
 zNDR.__setitem__c                 C   s8   t | j| tƒrd| j| jv r| j| d S | j| S ©Nr.   )r1   r   r   ©r)   r>   r   r   r-   Ú__getitem__•   s   
zNDR.__getitem__c                 C   s   |   ¡ S ©N)ÚgetData©r)   r   r   r-   Ú__str__�   ó   zNDR.__str__c                 C   s   t |  ¡ ƒS rD   )r$   rE   rF   r   r   r-   Ú__len__    s   zNDR.__len__c                 C   s   t |ƒS rD   )r$   )r)   r*   r   r   r-   Ú
getDataLen¤   rH   zNDR.getDataLenc                 C   ó    t  | ¡r| }t|tƒrdS dS ©NTF)ÚinspectÚisclassÚ
issubclassr   ©ÚfieldÚmyClassr   r   r-   r#   §   ó
   

z	NDR.isNDRr   c                 C   s,  |d u r| j j}d| }td| ƒ | j| j | j D ]x}|d }|| jv r“t| j| tƒrE| j| j	d||f |d d� td| ƒ qt| j| t
ƒrˆtd| ƒ t| j| ƒD ]&\}}t|tƒrw|j	d	||f |d d� td
| ƒ qZtd|||f ƒ qZtd| ƒ qtd||| | f ƒ qd S )Nú z
%sr   z%s%s:{r   ©Úindentz%s}z%s[z%s%s:z%s,z%s%s: {%r},ú%s]z
%s%s: {%r})r3   r:   Úprintr   r   r"   r   r1   r   ÚdumpRawr/   Ú	enumerate)r)   ÚmsgrV   ÚindrQ   ÚiÚnumÚjr   r   r-   rY   ¯   s*   
 
€îzNDR.dumpRawc                 C   s¦   |d u r| j j}d| }|dkrtd| dd� | j| j | j D ]/\}}|| jv rPt| j| tƒrF| j| j	d||d f |d d�f q!td	| |  dd� q!d S )
NrT   Ú ú%s©Úendz
%s%-31sr   r   rU   ú %r)
r3   r:   rX   r   r   r"   r   r1   r   Údump)r)   r[   rV   r\   r+   Ú	fieldTyper   r   r-   re   È   s   
(€ûzNDR.dumpc                 C   ó   | j S rD   )r!   rF   r   r   r-   ÚgetAlignmentÕ   ó   zNDR.getAlignmentc                 C   sH   zt |  d¡d ƒ}W n   d}Y |dkr |||  | }|S d}|S )Nr   r   )r   r%   )rf   ÚsoFarÚ	alignmentÚpadr   r   r-   ÚcalculatePadØ   s   þzNDR.calculatePadc                 C   sª   d}| j | j D ]J\}}z'|  ||¡}|dkr!||7 }|d| 7 }|  |||¡}||7 }|t|ƒ7 }W q tyR } zt t|ƒ¡ t d||| j	f ¡ ‚ d }~ww |S )Nr   r   ó   ¿ú#Error packing field '%s | %s' in %s©
r   r   rm   r   r$   r5   r;   r<   Ústrr3   )r)   rj   r*   r+   r,   rl   ÚresÚer   r   r-   rE   æ   s"   
€ýzNDR.getDatac           	      C   s¶   |}| j | j D ]N\}}z(|  ||¡}|dkr!||7 }||d … }|  ||||¡}||d … }||7 }W q tyV } zt t|ƒ¡ t d|||d d… f ¡ ‚ d }~ww || S )Nr   ú$Error unpacking field '%s | %s | %r'é   )r   r   rm   r   r5   r;   r<   rq   ©	r)   r*   rj   ÚsoFar0r+   r,   rl   Úsizers   r   r   r-   r'     s"   
€ýzNDR.fromStringc                 C   sÞ   t | j| tƒr| j|  |¡S | j| }|d d… dkrdS | d¡}t|ƒdkrOz
|  ||d |¡W S    t|d i | jƒ| j|< |  ||d |¡ Y S |d u rWtdƒ‚|d d… dkrjt	|d	ƒrh| ¡ S |S t||ƒS )
Nr   Ú_r   r   r   r   zTrying to pack Noner   rE   )
r1   r   r   rE   r%   r$   r   r&   r5   r    )r)   r+   r,   rj   r*   Útwor   r   r-   r     s&   



zNDR.packc                 C   sÀ   |   ||¡}|d |… }t| j| tƒr| j|  ||¡S | d¡}t|ƒdkr2|  ||d ||¡S |dkrTt|tƒrD| j|  ||¡S |  |¡}|d |… | j|< |S t||ƒd | j|< |S )Nr   r   r   r   )	ÚcalcUnPackSizer1   r   r   r'   r%   r$   r   rJ   )r)   r+   r,   r*   rj   rx   rz   ÚdataLenr   r   r-   r   =  s   


z
NDR.unpackc                 C   s\   t |tƒdu rt|ƒS | d¡}t|ƒdkr|  |d |¡S |d d… dkr*t|ƒS t|ƒS )NFr   r   r   r   r   )r1   rq   r$   r%   ÚcalcPackSizer   ©r)   r,   r*   rz   r   r   r-   r}   U  s   
zNDR.calcPackSizec                 C   sz   t |tƒdu rt|ƒS | d¡}t|ƒdkr|  |d |¡S | d¡}t|ƒdkr-t|ƒS |d d… dkr9t|ƒS t|ƒS )NFr   r   r   Ú*r   r   )r1   rq   r$   r%   r{   r   r~   r   r   r-   r{   e  s   

zNDR.calcUnPackSize©NF©Nr   ©r   )r:   Ú
__module__Ú__qualname__Ú__doc__r"   r   r   r   r   r!   Úitemr   r   r2   r@   rC   rG   rI   rJ   Ústaticmethodr#   rY   re   rh   rm   rE   r'   r   r   r}   r{   r   r   r   r-   r   0   s<    
"







r   c                   @   ó   e Zd ZdZdZdS )ÚNDRSMALLr   ))r.   zb=0N©r:   rƒ   r„   r!   r   r   r   r   r-   r‰   {  ó    r‰   c                   @   rˆ   )Ú	NDRUSMALLr   ))r.   zB=0NrŠ   r   r   r   r-   rŒ   �  r‹   rŒ   c                   @   s   e Zd Zddd„ZdS )Ú
NDRBOOLEANNr   c                 C   sH   |d u r| j j}|dkrt|dd� | d dkrtdƒ d S tdƒ d S )Nr`   rT   rb   r.   r   z TRUEz FALSE©r3   r:   rX   ©r)   r[   rV   r   r   r-   re   ˆ  s   zNDRBOOLEAN.dumpr�   )r:   rƒ   r„   re   r   r   r   r-   r�   ‡  s    r�   c                   @   rˆ   )ÚNDRCHARr   ))r.   ÚcNrŠ   r   r   r   r-   r�   “  r‹   r�   c                   @   rˆ   )ÚNDRSHORTr   ))r.   z<h=0NrŠ   r   r   r   r-   r’   ™  r‹   r’   c                   @   rˆ   )Ú	NDRUSHORTr   ))r.   z<H=0NrŠ   r   r   r   r-   r“   Ÿ  r‹   r“   c                   @   rˆ   )ÚNDRLONGr   ))r.   z<l=0NrŠ   r   r   r   r-   r”   ¥  r‹   r”   c                   @   rˆ   )ÚNDRULONGr   ©)r.   ú<L=0NrŠ   r   r   r   r-   r•   «  r‹   r•   c                   @   rˆ   )ÚNDRHYPERé   ))r.   z<q=0NrŠ   r   r   r   r-   r˜   ±  r‹   r˜   c                   @   rˆ   )Ú	NDRUHYPERr™   ©)r.   ú<Q=0NrŠ   r   r   r   r-   rš   ·  r‹   rš   c                   @   rˆ   )ÚNDRFLOATr   ))r.   z<f=0NrŠ   r   r   r   r-   r�   ½  r‹   r�   c                   @   rˆ   )ÚNDRDOUBLEFLOATr™   ))r.   z<d=0NrŠ   r   r   r   r-   rž   Ã  r‹   rž   c                   @   s   e Zd Zdd„ ZdS )ÚEnumTypec                 C   s   | j | jS rD   )Ú	enumItemsr?   )r)   Úattrr   r   r-   Ú__getattr__Ê  s   zEnumType.__getattr__N)r:   rƒ   r„   r¢   r   r   r   r-   rŸ   É  s    rŸ   c                   @   s>   e Zd ZdZdZdZdZG dd„ deƒZdd„ Z	ddd„Z
d	S )ÚNDRENUMr   r   ))r.   z<H))r.   ú<Lc                   @   ó   e Zd ZdS )zNDRENUM.enumItemsN©r:   rƒ   r„   r   r   r   r-   r    Ü  ó    r    c                 C   s&   t |tƒr|j| d< d S t | ||¡S rA   )r1   r   r?   r   r@   r=   r   r   r-   r@   ß  s   
zNDRENUM.__setitem__Nr   c                 C   sF   |d u r| j j}|dkrt|dd� td|  | jd ¡j dd� d S )Nr`   rT   rb   z %sr.   )r3   r:   rX   r    r   Únamer�   r   r   r-   re   å  s
   "zNDRENUM.dumpr�   )r:   rƒ   r„   r!   r   r   r   r   r    r@   re   r   r   r   r-   r£   Í  s    r£   c                   @   sl   e Zd Zedd„ ƒZedd„ ƒZddd„Zddd	„Zd
d„ Zdd„ Z	dd„ Z
ddd„Zddd„Zdd„ ZdS )ÚNDRCONSTRUCTEDTYPEc                 C   rK   rL   )rM   rN   rO   r9   rP   r   r   r-   Ú	isPointerï  rS   zNDRCONSTRUCTEDTYPE.isPointerc                 C   rK   rL   )rM   rN   rO   ÚNDRUNIONrP   r   r   r-   ÚisUnion÷  rS   zNDRCONSTRUCTEDTYPE.isUnionr   c                 C   sf   d}| j | j D ](\}}t| j| tƒr0|| j|  t|ƒ| ¡7 }|| j|  t|ƒ| ¡7 }q|S )Nr   )r   r   r1   r   r©   ÚgetDataReferentsr$   ÚgetDataReferent)r)   rj   r*   r+   r,   r   r   r-   r­   ÿ  s   €z#NDRCONSTRUCTEDTYPE.getDataReferentsc                 C   s°  d}|}t | dƒdu rdS d| jv r| d dkrdS | jD ]¸\}}z•t| j| tƒs2t| j| tƒrn| jr:d}d}nd}d	}|||  | }|dkrS||7 }d
| }	nd}	||7 }| j|  |¡}|	t||  	|¡ƒ | }n|  
||¡}
|
dkr‚||
7 }|d|
 7 }||  |||¡7 }t| j| tƒr¯|| j|  |t|ƒ ¡7 }|| j|  |t|ƒ ¡7 }|t|ƒ }W q tyÕ } zt t|ƒ¡ t d||| jf ¡ ‚ d }~ww |S )Nr   r"   FÚ
ReferentIDr   r™   ú<Qr   r¤   ó   ïó   Ìro   )r    r   r"   r1   ÚNDRUniConformantArrayÚNDRUniConformantVaryingArrayr   rE   r   ÚgetArrayMaximumSizerm   r©   r­   r$   r®   r5   r;   r<   rq   r3   )r)   rj   r*   rw   r+   r,   ÚarrayItemSizeÚarrayPackStrÚpad0ÚarrayPaddingrl   rs   r   r   r-   r®     sN   
 
€ýz"NDRCONSTRUCTEDTYPE.getDataReferentc                 C   st   t |tƒdu rt|ƒS | d¡}t|ƒdkr3d}|D ]}|  | j¡r%d}n| j}||  ||¡7 }q|S t | ||¡S )NFr   r   r   r   )r1   rq   r$   r%   r#   r†   r}   r   )r)   r,   r*   rz   ÚanswerÚeachr†   r   r   r-   r}   B  s   
zNDRCONSTRUCTEDTYPE.calcPackSizec                 C   sF   | j | j d d ur| j | j d dkr| j | j d S | j |  ¡ S )NÚMaximumCountr   )r   ÚgetArraySize)r)   r+   r   r   r-   rµ   T  s   (z&NDRCONSTRUCTEDTYPE.getArrayMaximumSizec           	      C   sð   | j rd}d}nd}d}|||  | }|dkr"||7 }||d … }t| j| tƒr6t||d |… ƒd }n<t| j| tƒrct||d |… ƒd }|| j| jd< t|||d d … d |… ƒd }nt|||d … d |… ƒd }||| fS )Nr™   r°   r   r¤   r   r¼   r   )r   r1   r   r³   r   r´   )	r)   r+   r*   rj   r¶   ÚarrayUnPackStrr¸   Ú	arraySizeÚmaximumCountr   r   r-   r½   Z  s"   $zNDRCONSTRUCTEDTYPE.getArraySizec                 C   s~   |}| j | j D ]2\}}t| j| tƒr:| j|  ||¡}||d … }||7 }| j|  ||¡}||7 }||d … }q|| S rD   )r   r   r1   r   r©   ÚfromStringReferentsÚfromStringReferent)r)   r*   rj   rw   r+   r,   rx   r   r   r-   rÁ   x  s   €z&NDRCONSTRUCTEDTYPE.fromStringReferentsc                 C   sš  t | dƒdur	dS |}d| jv r| d dkrdS | jD ]­\}}z‡t| j| tƒs0t| j| tƒrU|  |||¡\}}||7 }||d … }| j|  |¡ | j|  ||¡}n|  	||¡}	|	dkri||	7 }||	d … }|  
||||¡}t| j| tƒr›|| j|  ||d … || ¡7 }|| j|  ||d … || ¡7 }||d … }||7 }W q tyÈ }
 zt t|
ƒ¡ t d|||d d… f ¡ ‚ d }
~
ww || S )Nr"   Tr   r¯   rt   ru   )r    r   r"   r1   r³   r´   r½   ÚsetArraySizer'   rm   r   r©   rÁ   rÂ   r5   r;   r<   rq   )r)   r*   rj   rw   r+   r,   r¿   ÚadvanceStreamrx   rl   rs   r   r   r-   rÂ   „  s>   
 ""€ýz%NDRCONSTRUCTEDTYPE.fromStringReferentc                 C   sB   t |tƒdu rt|ƒS | d¡}t|ƒdkrt|ƒS t | ||¡S )NFr   r   )r1   rq   r$   r%   r   r{   r~   r   r   r-   r{   ¯  s   
z!NDRCONSTRUCTEDTYPE.calcUnPackSizeNr‚   )r:   rƒ   r„   r‡   rª   r¬   r­   r®   r}   rµ   r½   rÁ   rÂ   r{   r   r   r   r-   r©   î  s    



;

+r©   c                   @   s^   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zddd„Zddd„Z	ddd„Z
ddd„ZdS )ÚNDRArrayNr   c                 C   sÖ   |d u r| j j}d| }|dkrt|dd� t| d tƒr_td| ƒ |d7 }t| jd ƒD ]"\}}t|tƒrH|jd| |d d	�f td
ƒ q.td||f ƒ q.td|d d…  dd� d S td| d  dd� d S )NrT   r`   rb   r.   z
%s[z    ra   r   rU   ú,z%s %r,rW   éüÿÿÿrd   )	r3   r:   rX   r1   r/   rZ   r   r   re   )r)   r[   rV   r\   r^   r_   r   r   r-   re   »  s   

zNDRArray.dumpc                 C   s
   || _ d S rD   ©r¿   )r)   rx   r   r   r-   rÃ   Ï  s   
zNDRArray.setArraySizec                 C   rg   rD   rÈ   rF   r   r   r-   r½   Ò  ri   zNDRArray.getArraySizec                 C   sF   t | dƒr| jd ur|  | j¡r| jd D ]}| |¡ qt | |¡S )Nr†   r.   )r    r†   r#   r   r2   r©   )r)   r6   r†   r   r   r-   r2   Õ  s
   zNDRArray.changeTransferSyntaxc                 C   sP   d}t | dƒr&| jd ur&|  | j¡r|  ¡  ¡ }n|  | jd¡}||kr&|}|S )Nr   r†   r   )r    r†   r#   rh   r}   )r)   r!   ÚtmpAlignr   r   r-   rh   Þ  s   zNDRArray.getAlignmentc           	      C   s¶   d}|}| j D ]Q\}}z.|  |¡du r'|  ||¡}|dkr'||7 }|d| 7 }|  |||¡}||7 }|t|ƒ }W q tyX } zt t|ƒ¡ t d||| j	f ¡ ‚ d }~ww |S )Nr   Fr   ó   Êro   )
r   r#   rm   r   r$   r5   r;   r<   rq   r3   ©	r)   rj   r*   rw   r+   r,   rl   rr   rs   r   r   r-   rE   ì  s&   €ýzNDRArray.getDatac           
      C   sŽ  |  d¡}t|ƒdkr¿d}|  | j¡r"d}| j}|| jd�| jd< n
| j}d }|| jd< | j| D ]>}|  | jt|ƒ| ¡}	|	dkrH|d|	 7 }|d u rd|d	kr\tr\t|t	ƒr\t
|gƒ}|t||ƒ7 }q1|| t|ƒ| ¡7 }q1|d ur—| j| D ]}t|tƒr–|| t|ƒ| ¡7 }|| t|ƒ| ¡7 }qy| jd= t| tƒs¥t| tƒr±|  t| j| ƒ¡ |S t| j| ƒ| j|d
 < |S t | |||¡S )Nr   r   r   r   r   Ú_tmpItemr   ó   Ýr‘   r   )r%   r$   r#   r†   r   r   rm   r   r1   ÚintÚbytesr   rE   r©   r­   r®   r³   r´   rÃ   )
r)   r+   r,   rj   rz   rº   r†   Ú	dataClassr»   rl   r   r   r-   r     s@   



€þzNDRArray.packc           	      C   sÄ   |}| j | j D ]U\}}z/|  |¡du r(|  ||¡}|dkr(||7 }||d … }|  ||||¡}||d … }||7 }W q ty] } zt t|ƒ¡ t d|||d d… f ¡ ‚ d }~ww || S )NFr   rt   ru   )	r   r   r#   rm   r   r5   r;   r<   rq   rv   r   r   r-   r'   .  s$   €ýzNDRArray.fromStringc                 C   s  |  d¡}g }d}|}t|ƒdkrýt| tƒr|  ¡ }	nt| tƒr'| |d  }	n| |d  }	|  | j¡rBd}
| j}|| jd�| j	d< n
| j}
d }|
| j	d< d}|	r«|t|ƒk r«|  
| j|| ¡}|dkrg||7 }|d u r€|t|
ƒ }| t|
|||… ƒd ¡ n|| jd�}| ||d … || ¡}| |¡ ||| 7 }|	d8 }	|}|	r«|t|ƒk sV|d urît|ƒ tƒrî||d … }g }|D ]+}| ||| ¡}||7 }||d … }| ||| ¡}||7 }||d … }| |¡ q¿|}~| j	d= || j	|< || | S t | ||||¡S )Nr   r   r   r   r   r   rÌ   )r%   r$   r1   r³   r½   r´   r#   r†   r   r   rm   r   Úappendr   r'   r©   rÁ   rÂ   )r)   r+   r,   r*   rj   rz   rº   Ú
soFarItemsrw   ÚnumItemsr†   ÚdataClassOrCodeÚnsofarrl   Úitemnrx   Úanswer2r   r   r-   r   D  sb   





ó
zNDRArray.unpackr�   r‚   )r:   rƒ   r„   re   rÃ   r½   r2   rh   rE   r   r'   r   r   r   r   r-   rÅ   º  s    
	


+rÅ   c                   @   s   e Zd ZdZdS )ÚNDRUniFixedArray©)r.   r   N)r:   rƒ   r„   r   r   r   r   r-   rØ   †  s    rØ   c                   @   s*   e Zd ZdZdZdZd	dd„Zdd„ ZdS )
r³   r‘   ))r.   z*MaximumCountNFc                 C   ó   t  | ||¡ d| jd< d S ©Nr   r¼   ©rÅ   r   r   ©r)   r*   r   r   r   r-   r   ˜  ó   zNDRUniConformantArray.__init__c                 C   ó   d | j d< t | ||¡S )Nr¼   ©r   rÅ   r@   r=   r   r   r-   r@   �  ó   
z!NDRUniConformantArray.__setitem__r€   )r:   rƒ   r„   r†   r   r   r   r@   r   r   r   r-   r³   Œ  s    
r³   c                   @   s    e Zd ZdZdZdZdd„ ZdS )ÚNDRUniVaryingArrayr‘   )©ÚOffsetr—   ©ÚActualCountz<L=len(Data)©r.   z*ActualCount)©rä   rœ   ©ræ   z<Q=len(Data)rç   c                 C   rß   )Nræ   rà   r=   r   r   r-   r@   °  rá   zNDRUniVaryingArray.__setitem__N)r:   rƒ   r„   r†   r   r   r@   r   r   r   r-   râ   £  s
    râ   c                   @   s8   e Zd ZdZdZdZdZddd„Zd	d
„ Zddd„Z	dS )r´   r‘   )rã   rå   )rè   ré   )rç   NFc                 C   rÚ   rÛ   rÜ   rÝ   r   r   r-   r   Æ  rÞ   z%NDRUniConformantVaryingArray.__init__c                 C   s"   d | j d< d | j d< t | ||¡S )Nr¼   ræ   rà   r=   r   r   r-   r@   Ë  s   

z(NDRUniConformantVaryingArray.__setitem__r   c           	      C   s®   d}|}| j | j D ]J\}}z'|  ||¡}|dkr#||7 }|d| 7 }|  |||¡}||7 }|t|ƒ }W q
 tyT } zt t|ƒ¡ t d||| j	f ¡ ‚ d }~ww |S )Nr   r   ó   Ëro   rp   rË   r   r   r-   rE   Ð  s$   €ýz$NDRUniConformantVaryingArray.getDatar€   r‚   )
r:   rƒ   r„   r†   r   r   r   r   r@   rE   r   r   r   r-   r´   µ  s    
r´   c                   @   s    e Zd Zddd„Zddd„ZdS )ÚNDRVaryingStringr   c                 C   s^   | d dd … dkr)t rt| d tƒdu r| d d | d< nd | d ¡d | d< t | |¡S )Nr.   éÿÿÿÿó    Fr   )r   r1   r/   Újoinrâ   rE   )r)   rj   r   r   r-   rE   è  s
   zNDRVaryingString.getDatac                 C   s$   t  | |¡}| d d d… | d< |S )Nr.   rì   )râ   r'   )r)   r*   rj   Úretr   r   r-   r'   ó  s   zNDRVaryingString.fromStringNr‚   )r:   rƒ   r„   rE   r'   r   r   r   r-   rë   ç  s    
rë   c                   @   r¥   )ÚNDRConformantVaryingStringNr¦   r   r   r   r-   rð   ú  r§   rð   c                   @   s(   e Zd Zd	dd„Zd	dd„Zdd„ ZdS )
Ú	NDRSTRUCTr   c                 C   sì  d}d}|}| j | j d d }t| j| tƒs t| j| tƒrH| jr(d}d}nd}d}|||  | }|dkrA||7 }d| }nd}||7 }nd}|  ¡ }	|	dkrh|	||	  |	 }
|
dkrh||
7 }|d	|
 7 }| j | j D ]…\}}zbt| j| tƒsƒt| j| tƒr¼| j|  |¡}t| t	ƒr«|d |… }||d … }|| t
||  |¡ƒ | }n|t
||  |¡ƒ | }d}d}n|  
|||¡}||7 }|t|ƒ t|ƒ | }W qn tyó } zt t|ƒ¡ t d
||| jf ¡ ‚ d }~ww |S )Nr   rì   r   r™   r°   r   r¤   ó   îó   «ro   )r   r   r1   r   r³   r´   r   rh   rE   r9   r   rµ   r$   r5   r;   r<   rq   r3   )r)   rj   r*   r¹   rw   ÚlastItemr¶   r·   r¸   rk   rl   r+   r,   rr   ÚpointerDatars   r   r   r-   rE     sX    

 
€ýzNDRSTRUCT.getDatac                 C   sº  |}| j | j d d }t| j| tƒst| j| tƒrz| jr"d}nd}|||  | }|dkr:||7 }||d … }||7 }t| tƒrc|d |… }|  |||d … || ¡\}}	|||d d …  }n|  |||¡\}}	||d … }| j|  	|¡ |  
¡ }
|
dkr˜|
||
  |
 }|dkr˜||7 }||d … }| j | j D ]:\}}z|  ||||¡}||d … }||7 }W qž tyØ } zt t|ƒ¡ t d|||d d… f ¡ ‚ d }~ww || S )Nrì   r   r™   r   r   rt   ru   )r   r   r1   r   r³   r´   r   r9   r½   rÃ   rh   r   r5   r;   r<   rq   )r)   r*   rj   rw   rô   r¶   r¸   rõ   r¿   rÄ   rk   rl   r+   r,   rx   rs   r   r   r-   r'   h  sH    
€ýzNDRSTRUCT.fromStringc                 C   s\   d}| j | j | j D ] \}}t| j| tƒr| j|  ¡ }n|  |d¡}||kr+|}q|S )Nr   r   )r   r   r"   r1   r   r   rh   r}   )r)   r!   r+   r,   rÉ   r   r   r-   rh   °  s   €zNDRSTRUCT.getAlignmentNr‚   )r:   rƒ   r„   rE   r'   rh   r   r   r   r-   rñ      s    

gHrñ   c                   @   sR   e Zd ZdeffZdeffZi Zddd„Zdd„ Z	dd	d
„Z
ddd„Zdd„ ZdS )r«   ÚtagNFc                 C   sF  || _ || _i | _|du r(| jdkr| j| _| jdkr| j| _t| dƒr(| j| _	| j| j | j
 D ]d\}}|  |¡rd|  |¡rJ|| j|d�| j|< q1|  |¡rZ|| j|d�| j|< q1|| jd�| j|< q1|dkrnd | j|< q1t| d¡ƒdkr�zt| d¡d	 ƒ| j|< W q1   d | j|< Y q1d
| j|< q1|d ur¡|  |¡ d S d S ©NTr   r   ©r   ÚtopLevelr   r   r   r   r   r   )rù   r   r   r   r   r   r   r    r   r!   r"   r#   rª   r¬   r$   r%   r&   r'   )r)   r*   r   rù   r+   r,   r   r   r-   r   à  s8   





ÿzNDRUNION.__init__c                 C   sº   |dkrVd| _ || jv r&| j| f| _ | jd | j| jd� || jd d< d S d| jv rP| jd d u r6d| _ n| jd f| _ | jd | j| jd� d| jd d< d S td| ƒ‚t | ||¡S )Nrö   r   rø   r.   Údefaultéÿÿ  úUnknown tag %d for union!)	r   Úunionr   r   rù   r   r5   r©   r@   r=   r   r   r-   r@     s   

zNDRUNION.__setitem__r   c                 C   sà  d}|}|   ¡ }|dkr|||  | }nd}|dkr%||7 }|d| 7 }| jD ]J\}}z'|  ||¡}|dkrA||7 }|d| 7 }|  |||¡}||7 }|t|ƒ }W q( tyr }	 zt t|	ƒ¡ t d||| j	f ¡ ‚ d }	~	ww | j
ryd}
n
t| dƒr�d}
nd	}
|
||
  |
 }|dkr™|d
| 7 }||7 }| jdkr |S | jD ]J\}}z'|  ||¡}|dkr¼||7 }|d| 7 }|  |||¡}||7 }|t|ƒ }W q£ tyí }	 zt t|	ƒ¡ t d||| j	f ¡ ‚ d }	~	ww |S )Nr   r   ó   ¼ó   »ro   r™   ÚnotAlignr   r   ó   ½r   ó   ¾)rh   r   rm   r   r$   r5   r;   r<   rq   r3   r   r    r   )r)   rj   r*   rw   rk   rl   r+   r,   rr   rs   r!   r   r   r-   rE     sf   €ý


€ýzNDRUNION.getDatac                 C   sÒ  |}|   ¡ }|dkr|||  | }nd}|dkr#||7 }||d … }t|ƒdkr�| jd d jd d  d¡d }t||d t|ƒ… ƒd }|| jv r^| j| f| _| jd | j	| j
d� n/d| jv r‡| jd d u rnd| _n| jd f| _| jd | j	| j
d� d| jd	 d
< ntd| ƒ‚| jD ]N\}}	z(|  |	|¡}|dkr©||7 }||d … }|  ||	||¡}
||
d … }||
7 }W q� tyÞ } zt t|ƒ¡ t d||	|d d… f ¡ ‚ d }~ww | j	råd}n
t| dƒríd}nd}|||  | }|dk�r||d … }||7 }| jdk�r|| S | jD ]Q\}}	z*|  |	|¡}|dk�r-||7 }||d … }|  ||	||¡}
||
d … }||
7 }W �q t�yd } zt t|ƒ¡ t d||	|d d… f ¡ ‚ d }~ww || S )Nr   r   r   r   rø   rú   r   rû   rö   r.   rü   rt   ru   r™   r   )rh   r$   r   r   r%   r   r   rý   r   r   rù   r   r5   rm   r;   r<   rq   r    )r)   r*   rj   rw   rk   rl   Útagtyperö   r+   r,   rx   rs   r!   r   r   r-   r'   ^  s~   "

€ý



€ýzNDRUNION.fromStringc                 C   sž   d}| j r| j| j }n| j}|D ] \}}t| j| tƒr%| j|  ¡ }n|  |d¡}||kr1|}q| j rM| j 	¡ D ]\}}|| j d� ¡ }||krL|}q:|S )Nr   r   r   )
r   r   r   r1   r   r   rh   r}   rý   Úvalues)r)   r!   r   r+   r,   rÉ   r   r   r-   rh   ¶  s$   €€zNDRUNION.getAlignment©NFFr‚   )r:   rƒ   r„   r“   r   r•   r   rý   r   r@   rE   r'   rh   r   r   r   r-   r«   Ó  s    ÿÿ
#

CXr«   c                   @   s&   e Zd ZdZdZdZdZd	dd„ZdS )
r4   r   r™   r–   r›   Nr   c                 C   s8   |d u r| j j}|dkrtd| dd� tddd� d S )Nr`   ra   rT   rb   ú NULLrŽ   r�   r   r   r-   re   Ý  s
   zNDRPOINTERNULL.dumpr�   )r:   rƒ   r„   r!   r   r   r   re   r   r   r   r-   r4   Ó  s    r4   c                   @   s`   e Zd ZdZdZdZdZdZddd	„Zd
d„ Z	dd„ Z
ddd„Zddd„Zddd„Zdd„ ZdS )r9   r   r™   ))r¯   z<L=0xff))r¯   z<Q=0xffrÙ   NFc                 C   sR   t j| d |d� |du r| j| _d| _|d u r"t dd¡| jd< d S |  |¡ d S )Nr   Tr   r   rû   r¯   )rñ   r   r"   r   ÚrandomÚrandintr   r'   ©r)   r*   r   rù   r   r   r-   r   õ  s   zNDRPOINTER.__init__c                 C   s.   || j v du r| j d  ||¡S t | ||¡S )NFr.   )r   r@   rñ   r=   r   r   r-   r@     s   zNDRPOINTER.__setitem__c                 C   sR   || j v r!t| j | tƒrd| j | j v r| j | d S | j | S | j d  |¡S rA   )r   r1   r   rC   rB   r   r   r-   rC     s   

zNDRPOINTER.__getitem__r   c                 C   s‚   d}|   | jd d |¡}|dkr||7 }d| }| jd dkr9t| jƒdkr,d| d< n| jdu r5|d S |d	 S |t | |¡ S )
Nr   r   r   ó   ªr¯   r.   Ts           s       )rm   r   r   r$   r"   r   rñ   rE   )r)   rj   r*   rl   r   r   r-   rE     s   

zNDRPOINTER.getDatac                 C   s¦   |   | jd d |¡}|dkr||7 }||d … }| jdu r!d}nd}t||d t|ƒ… ƒd dkrHd| d< d| jd< | jdu rD|d	 S |d
 S t | ||¡}|| S )Nr   r   Tr°   r¤   r¯   r   r.   r™   r   )rm   r   r   r   r   r   rñ   r'   )r)   r*   rj   rl   Ú	unpackStrÚretValr   r   r-   r'   )  s   


zNDRPOINTER.fromStringc                 C   s„   |d u r| j j}|dkrtd| dd� t| jd tƒr(| jd jd|d� d S | d dkr6td	dd� d S td
| d  dd� d S )Nr`   ra   rT   rb   r.   rU   r¯   r   r  rd   )r3   r:   rX   r1   r   r   re   r�   r   r   r-   re   B  s   zNDRPOINTER.dumpc                 C   s   | j du rdS dS )NTr™   r   )r   rF   r   r   r-   rh   P  s   
zNDRPOINTER.getAlignmentr  r‚   r�   )r:   rƒ   r„   r!   r   r   r   r"   r   r@   rC   rE   r'   re   rh   r   r   r   r-   r9   ç  s    




r9   c                   @   s   e Zd ZdeffZdS )ÚPNDRUniConformantVaryingArrayr.   N)r:   rƒ   r„   r´   r"   r   r   r   r-   r  \  s    ÿr  c                   @   s    e Zd ZdeffZddd„ZdS )ÚPNDRUniConformantArrayr.   NFc                 C   s   t  | |||¡ d S rD   )r9   r   r	  r   r   r-   r   e  s   zPNDRUniConformantArray.__init__r  )r:   rƒ   r„   r³   r"   r   r   r   r   r-   r  a  s    ÿr  c                   @   sL   e Zd ZdZdZdZdZdZdZddd„Z	ddd	„Z
dd
d„Zddd„ZdS )ÚNDRCALLr   r   NFc                 C   s@  || _ i | _|du r%| jdkr| j| _| jdkr| j| _t| dƒr%| j| _| j| j | j	 D ]d\}}|  
|¡ra|  |¡rG|| j dd�| j|< q.|  |¡rW|| j dd�| j|< q.|| j d�| j|< q.|dkrkd | j|< q.t| d¡ƒdkr�zt| d¡d	 ƒ| j|< W q.   d | j|< Y q.d
| j|< q.|d urž|  |¡ d S d 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  s6   





ÿzNDRCALL.__init__r   c                 C   s   t  | ||¡ tdƒ d S )Nz

)r©   re   rX   r�   r   r   r-   re   “  s   zNDRCALL.dumpc           
      C   s¼  d}|}| j | j D ]Ñ\}}z®|  ||¡}|dkr#||7 }|d| 7 }t| j| tƒs3t| j| tƒr„| jr?d|d  d }nd|d  d }|  |||| ¡}|  	|¡}| jrnd|d  d }|d| td|ƒ | 7 }nd|d  d }|d| td|ƒ | 7 }n	||  |||¡7 }|t
|ƒ }t| j| tƒr»|| j|  |¡7 }|t
|ƒ }|| j|  |¡7 }|t
|ƒ }W q
 tyÛ }	 zt t|	ƒ¡ t d	||| jf ¡ ‚ d }	~	ww |S )
Nr   r   ró   r™   r   ó   Îr°   r¤   ro   )r   r   rm   r1   r   r³   r´   r   r   rµ   r$   r©   r­   r®   r5   r;   r<   rq   r3   )
r)   rj   r*   rw   r+   r,   rl   rr   r¿   rs   r   r   r-   rE   —  sH   ÿ
€€ýzNDRCALL.getDatac           
      C   s8  |}| j | j D ]�\}}zit| j| tƒst| j| tƒr8|  |||¡\}}| j|  |¡ ||7 }||d … }|  ||||¡}t| j| t	ƒrj|| j|  
||d … || ¡7 }|| j|  ||d … || ¡7 }||d … }||7 }W q ty— }	 zt t|	ƒ¡ t d|||d d… f ¡ ‚ d }	~	ww || S )Nrt   ru   )r   r   r1   r   r³   r´   r½   rÃ   r   r©   rÁ   rÂ   r5   r;   r<   rq   )
r)   r*   rj   rw   r+   r,   r¿   rÄ   rx   rs   r   r   r-   r'   Ç  s.   ÿ""€ýzNDRCALL.fromStringr€   r�   r‚   )r:   rƒ   r„   r"   r   r   r   r   r!   r   re   rE   r'   r   r   r   r-   r  h  s    

!
0r  c                   @   rˆ   )ÚUNKNOWNDATAr   rÙ   NrŠ   r   r   r   r-   r  æ  r‹   r  )8Ú
__future__r   r   r  rM   Ústructr   r   r   Úsixr   r   Úaiosmbr	   r;   Úaiosmb.commons.utils.hexdumpr
   Úaiosmb.dcerpc.v5.enumr   Úaiosmb.dcerpc.v5.uuidr   r   r   r‰   rŒ   r�   r�   r’   r“   r”   r•   r˜   rš   r�   rž   ÚtyperŸ   r£   r©   rÅ   rØ   r³   râ   r´   rë   rð   rñ   r«   r4   ÚNULLr9   r  r  r  ÚNDRTLSTRUCTr  r   r   r   r-   Ú<module>   sd     M! M M2 T  u|