o
    �õ±jÖ  ã                   @   sh  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 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 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,e,ƒ Z-G d<d=„ d=e*ƒZ.G d>d?„ d?e.ƒZ/G d@dA„ dAe.ƒZ0G dBdC„ dCe"ƒZ1e1Z2G dDdE„ dEeƒZ3dS )Fé    )Údivision)Úprint_functionN)ÚpackÚunpack_fromÚcalcsize)Úwith_metaclassÚPY3)Úlogger)ÚEnumc                   @   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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'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/minikerberos/protocol/external/ndr.pyr   0   s0   




ÿzNDR.__init__c                 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   ÚDataz0Can't setitem with class specified, should be %s)
Ú
isinstanceÚNDRPOINTERNULLr   r   Ú
NDRPOINTERr   Ú	__class__Ú__name__ÚLOGÚerror©r'   ÚkeyÚvaluer   r   r+   Ú__setitem__O   s(   
þ
 zNDR.__setitem__c                 C   s8   t | j| tƒrd| j| jv r| j| d S | j| S ©Nr,   )r-   r   r   ©r'   r5   r   r   r+   Ú__getitem__h   s   
zNDR.__getitem__c                 C   s   |   ¡ S ©N)ÚgetData©r'   r   r   r+   Ú__str__n   s   zNDR.__str__c                 C   s   t |  ¡ ƒS r;   )r"   r<   r=   r   r   r+   Ú__len__q   s   zNDR.__len__r   c                 C   s   t |ƒ| S r;   )r"   )r'   r(   Úoffsetr   r   r+   Ú
getDataLenu   ó   zNDR.getDataLenc                 C   ó    t  | ¡r| }t|tƒrdS dS ©NTF)ÚinspectÚisclassÚ
issubclassr   ©ÚfieldÚmyClassr   r   r+   r!   x   ó
   

z	NDR.isNDRc                 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})r0   r1   Úprintr   r   r    r   r-   r   ÚdumpRawÚlistÚ	enumerate)r'   ÚmsgrN   ÚindrI   ÚiÚnumÚjr   r   r+   rQ   €   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 )
NrL   Ú ú%s©Úendz
%s%-31sr   r   rM   ú %r)
r0   r1   rP   r   r   r    r   r-   r   Údump)r'   rT   rN   rU   r)   Ú	fieldTyper   r   r+   r^   ™   s   
(€ûzNDR.dumpc                 C   ó   | j S r;   )r   r=   r   r   r+   ÚgetAlignment¦   ó   zNDR.getAlignmentc                 C   sX   t | tƒrzt|  d¡d ƒ}W n	   d}Y nd}|dkr(|||  | }|S d}|S )Nr   r   )r-   Ústrr   r#   )r_   Ú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   rg   r   r"   Ú	Exceptionr2   r3   rc   r0   )r'   rd   r(   r)   r*   rf   ÚresÚer   r   r+   r<   º   s"   
€ýzNDR.getDatac                 C   s’   |}| j | j D ]<\}}z||  ||¡7 }||  ||||¡7 }W q tyD } zt t|ƒ¡ t d|||||d … f ¡ ‚ d }~ww || S ©Nú$Error unpacking field '%s | %s | %r'é   )r   r   rg   Úunpackrk   r2   r3   rc   )r'   r(   r@   Úoffset0r)   r*   rm   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   r<   )
r-   r   r   r<   r#   r"   r   r$   rk   r   )r'   r)   r*   rd   r(   Útwor   r   r+   r   í   s&   



zNDR.packc                 C   s´   t | j| tƒr| j|  ||¡S | d¡}t|ƒdkr&|  ||d ||¡S |dkrKt |tƒr8| j|  ||¡S |  ||¡}|||| … | j|< |S t|||ƒd | j|< t	|ƒS )Nr   r   r   r   )
r-   r   r   r%   r#   r"   rq   rA   r   r   )r'   r)   r*   r(   r@   rt   ÚdataLenr   r   r+   rq     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   )r-   rc   r"   r#   ÚcalcPackSizer   )r'   r*   r(   rt   r   r   r+   rv   "  s   
zNDR.calcPackSizec                 C   sˆ   t |tƒdu rt|ƒ| S | d¡}t|ƒdkr!|  |d ||¡S | d¡}t|ƒdkr2t|ƒ| S |d d… dkr@t|ƒ| S t|ƒS )NFr   r   r   Ú*r   r   )r-   rc   r"   r#   ÚcalcUnPackSizer   ©r'   r*   r(   r@   rt   r   r   r+   rx   2  s   

zNDR.calcUnPackSize©NF©r   ©Nr   )r1   Ú
__module__Ú__qualname__Ú__doc__r    r   r   r   r   r   Úitemr   r   r7   r:   r>   r?   rA   Ústaticmethodr!   rQ   r^   ra   rg   r<   r%   r   rq   rv   rx   r   r   r   r+   r   #   s:    









r   c                   @   ó   e Zd ZdZdZdS )ÚNDRSMALLr   ))r,   zb=0N©r1   r}   r~   r   r   r   r   r   r+   rƒ   H  ó    rƒ   c                   @   r‚   )Ú	NDRUSMALLr   ))r,   zB=0Nr„   r   r   r   r+   r†   N  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 )NrY   rL   r[   r,   r   z TRUEz FALSE©r0   r1   rP   ©r'   rT   rN   r   r   r+   r^   U  s   zNDRBOOLEAN.dumpr|   )r1   r}   r~   r^   r   r   r   r+   r‡   T  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Œ   f  r…   rŒ   c                   @   r‚   )Ú	NDRUSHORTr   ))r,   z<H=0Nr„   r   r   r   r+   r�   l  r…   r�   c                   @   r‚   )ÚNDRLONGr   ))r,   z<l=0Nr„   r   r   r   r+   rŽ   r  r…   rŽ   c                   @   r‚   )ÚNDRULONGr   ©)r,   ú<L=0Nr„   r   r   r   r+   r�   x  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 r;   )Ú	enumItemsr6   )r'   Úattrr   r   r+   Ú__getattr__—  rB   zEnumType.__getattr__N)r1   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©r1   r}   r~   r   r   r   r+   rš   ©  ó    rš   c                 C   s&   t |tƒr|j| d< d S t | ||¡S r8   )r-   r
   r6   r   r7   r4   r   r   r+   r7   ¬  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 )NrY   rL   r[   z %sr,   )r0   r1   rP   rš   r   Únamer‰   r   r   r+   r^   ²  s
   "zNDRENUM.dumpr|   )r1   r}   r~   r   r   r   r   r
   rš   r7   r^   r   r   r   r+   r�   š  s    r�   c                   @   sp   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d„Z
ddd„Zddd„Zddd„ZdS )ÚNDRCONSTRUCTEDTYPEc                 C   rC   rD   )rE   rF   rG   r/   rH   r   r   r+   Ú	isPointer¼  rK   zNDRCONSTRUCTEDTYPE.isPointerc                 C   rC   rD   )rE   rF   rG   ÚNDRUNIONrH   r   r   r+   ÚisUnionÄ  rK   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   r-   r   r£   ÚgetDataReferentsr"   ÚgetDataReferent)r'   rd   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ž   ó   ïó   Ìri   )r   r   r    r-   ÚNDRUniConformantArrayÚNDRUniConformantVaryingArrayr   r<   r   ÚgetArrayMaximumSizerg   r£   r§   r"   r¨   rk   r2   r3   rc   r0   )r'   rd   r(   ÚsoFar0r)   r*   ÚarrayItemSizeÚarrayPackStrÚpad0ÚarrayPaddingrf   rm   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 )NFrw   r   r   r   )r-   rc   r"   r#   r!   r€   rv   r   )r'   r*   r(   rt   ÚanswerÚeachr€   r   r   r+   rv     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¯   !  s   (z&NDRCONSTRUCTEDTYPE.getArrayMaximumSizec           	      C   s¼   | j rd}d}nd}d}|||  | }||7 }t| j| tƒr)t|||ƒd }n/t| j| tƒrNt|||ƒd }|| j| jd< t||||d  ƒd }n
t|||| ƒd }||| fS )Nr“   rª   r   rž   r   r·   r   )r   r-   r   r­   r   r®   )	r'   r)   r(   r@   r±   ÚarrayUnPackStrrf   Ú	arraySizeÚmaximumCountr   r   r+   r¸   '  s   zNDRCONSTRUCTEDTYPE.getArraySizec                 C   s^   |}| j | j D ]"\}}t| j| tƒr*|| j|  ||¡7 }|| j|  ||¡7 }q|| S r;   )r   r   r-   r   r£   ÚfromStringReferentsÚfromStringReferent)r'   r(   r@   rr   r)   r*   r   r   r+   r¼   C  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 ]�\}}zgt| j| tƒs0t| j| tƒrO|  |||¡\}}||7 }| j|  |¡ | j|  ||¡}n||  	||¡7 }|  
||||¡}t| j| tƒr�|| j|  ||| ¡7 }|| j|  ||| ¡7 }||7 }W q tyª }	 zt t|	ƒ¡ t d|||||d … f ¡ ‚ d }	~	ww || S )Nr    Tr   r©   ro   rp   )r   r   r    r-   r­   r®   r¸   ÚsetArraySizer%   rg   rq   r£   r¼   r½   rk   r2   r3   rc   ©
r'   r(   r@   rr   r)   r*   rº   ÚadvanceStreamÚsizerm   r   r   r+   r½   K  s4   
  €ýz%NDRCONSTRUCTEDTYPE.fromStringReferentc                 C   sL   t |tƒdu rt|ƒ| S | d¡}t|ƒdkrt|ƒ| S t | |||¡S )NFrw   r   )r-   rc   r"   r#   r   rx   ry   r   r   r+   rx   q  s   
z!NDRCONSTRUCTEDTYPE.calcUnPackSizeNr{   )r1   r}   r~   r�   r¤   r¦   r§   r¨   rv   r¯   r¸   r¼   r½   rx   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 )NrL   rY   r[   r,   z
%s[z    rZ   r   rM   ú,z%s %r,rO   éüÿÿÿr]   )	r0   r1   rP   r-   rR   rS   r   r   r^   )r'   rT   rN   rU   rW   rX   r   r   r+   r^   }  s   

zNDRArray.dumpc                 C   s
   || _ d S r;   ©rº   )r'   rÁ   r   r   r+   r¾   ‘  s   
zNDRArray.setArraySizec                 C   r`   r;   rÅ   r=   r   r   r+   r¸   ”  rb   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   ÚchangeTransferSyntaxr£   )r'   Ú	newSyntaxr€   r   r   r+   rÆ   —  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!   ra   rv   )r'   r   ÚtmpAlignr   r   r+   ra      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   ó   Êri   )
r   r!   rg   r   r"   rk   r2   r3   rc   r0   ©	r'   rd   r(   r°   r)   r*   rf   rl   rm   r   r   r+   r<   ®  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 )Nrw   r   r   r   r   Ú_tmpItemr   ó   Ýr‹   r   )r#   r"   r!   r€   r   r   rg   r   r-   ÚintÚbytesr   r<   r£   r§   r¨   r­   r®   r¾   )
r'   r)   r*   rd   rt   rµ   r€   Ú	dataClassr¶   rf   r   r   r+   r   Å  s@   



€þzNDRArray.packc                 C   s¤   |}| j | j D ]E\}}z|  |¡du r||  ||¡7 }|  ||||¡}||7 }W q tyM } zt t|ƒ¡ t d|||||d … f ¡ ‚ d }~ww || S )NFro   rp   )	r   r   r!   rg   rq   rk   r2   r3   rc   )r'   r(   r@   rr   r)   r*   rÁ   rm   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ri||7 }|d u r�|t|
ƒ }| t|
||| ƒd ¡ n|| jd�}| ||| ¡}| |¡ ||| 7 }|	d8 }	|}|	rª|t|ƒ| k sX|d urÛt|ƒ tƒrÛg }|D ]}| ||| ¡}||7 }| ||| ¡}||7 }| |¡ q¸|}~| j	d= || j	|< || | S t | ||||¡S )Nrw   r   r   r   r   r   rË   )r#   r"   r-   r­   r¸   r®   r!   r€   r   r   rg   r   Úappendr   r%   r£   r¼   r½   rq   )r'   r)   r*   r(   r@   rt   rµ   Ú
soFarItemsrr   ÚnumItemsr€   ÚdataClassOrCodeÚnsofarrf   ÚitemnrÁ   Úanswer2r   r   r+   rq     s\   





ó
zNDRArray.unpackr|   r{   )r1   r}   r~   r^   r¾   r¸   rÆ   ra   r<   r   r%   rq   r   r   r   r+   rÂ   |  s    
	


+rÂ   c                   @   s   e Zd ZdZdS )ÚNDRUniFixedArray©)r,   r   N)r1   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   R  ó   zNDRUniConformantArray.__init__c                 C   ó   d | j d< t | ||¡S )Nr·   ©r   rÂ   r7   r4   r   r   r+   r7   W  ó   
z!NDRUniConformantArray.__setitem__rz   )r1   r}   r~   r€   r   r   r   r7   r   r   r   r+   r­   F  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ß   r4   r   r   r+   r7   j  rà   zNDRUniVaryingArray.__setitem__N)r1   r}   r~   r€   r   r   r7   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ß   r4   r   r   r+   r7   …  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   ó   Ëri   rj   rÊ   r   r   r+   r<   Š  s$   €ýz$NDRUniConformantVaryingArray.getDatarz   r{   )
r1   r}   r~   r€   r   r   r   r   r7   r<   r   r   r   r+   r®   o  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   r-   rR   Újoinrá   r<   )r'   rd   r   r   r+   r<   ¢  s
   zNDRVaryingString.getDatac                 C   s&   t  | ||¡}| d d d… | d< |S )Nr,   rë   )rá   r%   )r'   r(   r@   Úretr   r   r+   r%   ­  s   zNDRVaryingString.fromStringNr{   )r1   r}   r~   r<   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ž   ó   îó   «ri   )r   r   r-   r   r­   r®   r   ra   r<   r/   r   r¯   r"   rk   r2   r3   rc   r0   )r'   rd   r(   r´   r°   ÚlastItemr±   r²   r³   re   rf   r)   r*   rl   ÚpointerDatarm   r   r   r+   r<   »  sX    

 
€ýzNDRSTRUCT.getDatac                 C   s¾  |}| j | j d d }t| tƒr9| j}|  ¡ }|dkr&||||  | 7 }| j D ]\}}||  ||||¡7 }q)n| j | j }t| j| tƒsOt| j| tƒr’| j	rWd}	d}
nd}	d}
||	||	  |	 7 }t| j| tƒr~t
|
||ƒd }| j|  |¡ nt
|
||ƒd }|| j| jd< ||	7 }|  ¡ }|dkr¤||||  | 7 }|D ]4\}}z||  ||||¡7 }W q¦ tyÚ } zt t|ƒ¡ t d|||||d	 … f ¡ ‚ d }~ww || S )
Nrë   r   r“   rª   r   rž   r·   ro   rp   )r   r   r-   r/   ra   rq   r   r­   r®   r   r   r¾   rk   r2   r3   rc   )r'   r(   r@   rr   ró   ÚstructureFieldsre   r)   r*   r±   r¹   rº   r»   rm   r   r   r+   r%   "  sJ   
ÿ  €ý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    r-   r   r   ra   rv   )r'   r   r)   r*   rÈ   r   r   r+   ra   q  s   €zNDRSTRUCT.getAlignmentNr{   )r1   r}   r~   r<   r%   ra   r   r   r   r+   rð   º  s    

gOrð   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   rk   r£   r7   r4   r   r   r+   r7   Ä  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   ó   ¼ó   »ri   r“   ÚnotAlignr   r   ó   ½r   ó   ¾)ra   r   rg   r   r"   rk   r2   r3   rc   r0   r   r   r   )r'   rd   r(   r°   re   rf   r)   r*   rl   rm   r   r   r   r+   r<   Ü  sf   €ý


€ýzNDRUNION.getDatac                 C   sX  |}|   ¡ }|dkr|||  | }nd}|dkr||7 }t|ƒ| dkr„| jd d jd d  d¡d }t|||ƒd }|| jv rU| j| f| _| jd | j| j	d� n/d| jv r~| jd d u red| _n| jd f| _| jd | j| j	d� d| j
d	 d
< ntd| ƒ‚| jD ]<\}}	z||  |	|¡7 }||  ||	||¡7 }W q‡ tyÃ }
 zt t|
ƒ¡ t d||	|||d … f ¡ ‚ d }
~
ww | jrÊd}n
t| dƒrÒd}nd}||||  | 7 }| jdkrç|| S | jD ]=\}}	z||  |	|¡7 }||  ||	||¡7 }W qê t�y' }
 zt t|
ƒ¡ t d||	|||d … f ¡ ‚ d }
~
ww || S )Nr   r   r   r   rø   rú   r   rû   rö   r,   rü   ro   rp   r“   r   )ra   r"   r   r   r#   r   rý   r   r   rù   r   rk   rg   rq   r2   r3   rc   r   )r'   r(   r@   rr   re   rf   Útagtyperö   r)   r*   rm   r   r   r   r+   r%     sb   "

 €ý


 €ý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   r-   r   r   ra   rv   rý   Úvalues)r'   r   r   r)   r*   rÈ   r   r   r+   ra   e  s$   €€zNDRUNION.getAlignment©NFFr{   )r1   r}   r~   r�   r   r�   r   rý   r   r7   r<   r%   ra   r   r   r   r+   r¥   ”  s    ÿÿ
#

CFr¥   c                   @   s&   e Zd ZdZdZdZdZd	dd„ZdS )
r.   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 )NrY   rZ   rL   r[   ú NULLrˆ   r‰   r   r   r+   r^   Œ  s
   zNDRPOINTERNULL.dumpr|   )r1   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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 )r/   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   r7   rð   r4   r   r   r+   r7   ´  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 r8   )r   r-   r   r:   r9   r   r   r+   r:   »  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       )rg   r   r   r"   r    r   rð   r<   )r'   rd   r(   rf   r   r   r+   r<   Å  s   

zNDRPOINTER.getDatac                 C   sˆ   |   | jd d |¡}||7 }| jdu rd}nd}t|||ƒd dkr9d| d< d| jd< | jdu r5|d	 S |d
 S t | ||¡}|| S )Nr   r   Trª   rž   r©   r   r,   r“   r   )rg   r   r   r   r   rð   r%   )r'   r(   r@   rf   Ú	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 )NrY   rZ   rL   r[   r,   rM   r©   r   r  r]   )r0   r1   rP   r-   r   r   r^   r‰   r   r   r+   r^   ï  s   zNDRPOINTER.dumpc                 C   s   | j du rdS dS )NTr“   r   )r   r=   r   r   r+   ra   ý  s   
zNDRPOINTER.getAlignmentr  r{   r|   )r1   r}   r~   r   r   r   r   r    r   r7   r:   r<   r%   r^   ra   r   r   r   r+   r/   –  s    




r/   c                   @   s   e Zd ZdeffZdS )ÚPNDRUniConformantVaryingArrayr,   N)r1   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 r;   )r/   r   r	  r   r   r+   r     s   zPNDRUniConformantArray.__init__r  )r1   r}   r~   r­   r    r   r   r   r   r+   r    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     s6   





ÿzNDRCALL.__init__r   c                 C   s   t  | ||¡ tdƒ d S )Nz

)r£   r^   rP   r‰   r   r   r+   r^   @  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ž   ri   )r   r   rg   r-   r   r­   r®   r   r   r¯   r"   r£   r§   r¨   rk   r2   r3   rc   r0   )
r'   rd   r(   r°   r)   r*   rf   rl   rº   rm   r   r   r+   r<   D  sH   ÿ
€€ýzNDRCALL.getDatac           
      C   s  |}| j | j D ]}\}}zUt| j| tƒst| j| tƒr2|  |||¡\}}| j|  |¡ ||7 }|  ||||¡}t| j| t	ƒr\|| j|  
||| ¡7 }|| j|  ||| ¡7 }||7 }W q ty… }	 zt t|	ƒ¡ t d|||||d … f ¡ ‚ d }	~	ww || S rn   )r   r   r-   r   r­   r®   r¸   r¾   rq   r£   r¼   r½   rk   r2   r3   rc   r¿   r   r   r+   r%   t  s*   ÿ €ýzNDRCALL.fromStringrz   r|   r{   )r1   r}   r~   r    r   r   r   r   r   r   r^   r<   r%   r   r   r   r+   r    s    

!
0r  c                   @   r‚   )ÚUNKNOWNDATAr   rØ   Nr„   r   r   r   r+   r  ‘  r…   r  )4Ú
__future__r   r   r  rE   Ústructr   r   r   Úsixr   r   Úminikerberosr	   r2   Ú#minikerberos.protocol.external.enumr
   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¥   r.   ÚNULLr/   r  r  r  ÚNDRTLSTRUCTr  r   r   r   r+   Ú<module>   s^     '! B E2 [ osz