a
    kÄ#d¬[  ã                   @   sê  d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ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mZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 dd	l3m4Z4m5Z5m6Z6 G d
d„ deƒZ7i Z8G dd„ de+ƒZ9G 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+ƒZAG dd„ de+ƒZBeBe8d < G d!d"„ d"eƒZCeCe8d#< G d$d%„ d%eƒZDeDe8d&< G d'd(„ d(eƒZEeEe8d)< eEe8d*< eEe8d+< G d,d-„ d-e5ƒZFeFe8d.< zdd/lGmHZH W n eI�yP   eJZHY n0 G d0d1„ d1eHƒZKG d2d3„ d3eHƒZLG d4d5„ d5eHƒZMG d6d7„ d7e+ƒZNG d8d9„ d9e+ƒZOG d:d;„ d;e+ƒZPG d<d=„ d=e+ƒZQG d>d?„ d?e+ƒZRG d@dA„ dAe+ƒZSG dBdC„ dCe+ƒZTG dDdE„ dEe+ƒZUG dFdG„ dGeeƒZVG dHdI„ dIe+ƒZWG dJdK„ dKe+ƒZXeHeJk�rFeXe8dL< G dMdN„ dNe+ƒZYG dOdP„ dPe+ƒZZG dQdR„ dRe+ƒZ[e[e8dS< G dTdU„ dUeƒZ\e\e8dV< G dWdX„ dXeƒZ]e]e8dY< G dZd[„ d[eƒZ^G d\d]„ d]eƒZ_G d^d_„ d_eƒZ`e`ed`< dS )azt
[MS-PAC]

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/166d8064-c863-41e1-9c23-edaaa5f36962
é    N)Úconf)Úlog_runtime)ÚConditionalFieldÚFieldLenFieldÚFieldListFieldÚ
FlagsFieldÚLEIntEnumFieldÚLELongFieldÚ
LEIntFieldÚLEShortFieldÚMultipleTypeFieldÚPacketLenFieldÚPacketListFieldÚStrFieldÚStrFieldUtf16ÚStrFixedLenFieldÚStrLenFieldUtf16ÚUTCTimeFieldÚ	XStrFieldÚXStrLenField)ÚPacket)Ú_AUTHORIZATIONDATA_VALUES)Ú_NDRConfFieldÚNDRByteFieldÚNDRConfStrLenFieldÚNDRConfVarStrLenFieldÚNDRConfVarStrLenFieldUtf16ÚNDRConfPacketListFieldÚNDRConfFieldListFieldÚNDRConfVarStrNullFieldUtf16ÚNDRConformantStringÚNDRFullPointerFieldÚNDRInt3264EnumFieldÚNDRIntFieldÚNDRLongFieldÚ	NDRPacketÚNDRPacketFieldÚNDRSerialization1HeaderÚNDRShortFieldÚNDRSignedLongFieldÚNDRUnionFieldÚndr_deserialize1Úndr_serialize1)Ú_NTLMPayloadFieldÚ_NTLMPayloadPacketÚ_NTLM_post_buildc                   @   sN   e Zd Zeddddddddd	d
ddddddœƒeddƒeddƒgZdd„ ZdS )ÚPAC_INFO_BUFFERÚulTypeé   zLogon informationzCredentials informationzServer checksumzKDC checksumz"Client name and ticket informationz"Constrained delegation informationzUPN and DNS informationzClient claims informationzDevice informationzDevice claims informationzTicket checksumzPAC AttributeszPAC Requestor)r2   é   é   é   é
   é   é   é   é   é   é   é   é   ÚcbBufferSizeNÚOffsetc                 C   s   t jS ©N)r   Úpadding_layer)ÚselfÚpayload© rE   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/mspac.pyÚdefault_payload_class_   s    z%PAC_INFO_BUFFER.default_payload_class)Ú__name__Ú
__module__Ú__qualname__r   r
   r	   Úfields_descrG   rE   rE   rE   rF   r0   F   s,   óýër0   c                   @   s<   e Zd ZdZeddƒeddƒeedddd„ d	�d
d�gZdS )ÚRPC_UNICODE_STRING©é   é   ÚLengthr   ZMaximumLengthZBufferÚ c                 C   s
   | j d S ©Nr3   )rP   ©ÚpktrE   rE   rF   Ú<lambda>o   ó    zRPC_UNICODE_STRING.<lambda>©Zlength_fromT©ÚdeferredN)rH   rI   rJ   Ú	ALIGNMENTr(   r!   r   rK   rE   rE   rE   rF   rL   h   s   
ÿüýrL   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚFILETIME©rN   rN   ZdwLowDateTimer   ZdwHighDateTimeN©rH   rI   rJ   rZ   r#   rK   rE   rE   rE   rF   r[   v   s   r[   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚPGROUP_MEMBERSHIPr\   Z
RelativeIdr   Ú
AttributesNr]   rE   rE   rE   rF   r^   {   s   r^   c                   @   s   e Zd Zedddd�gZdS )ÚCYPHER_BLOCKÚdatarQ   rO   ©ÚlengthN©rH   rI   rJ   r   rK   rE   rE   rE   rF   r`   €   s   r`   c                   @   s"   e Zd Zedg edd„ d�gZdS )ÚUSER_SESSION_KEYra   c                 C   s   dS rR   rE   ©Ú_rE   rE   rF   rU   …   rV   zUSER_SESSION_KEY.<lambda>©Ú
count_fromN)rH   rI   rJ   r   r`   rK   rE   rE   rE   rF   re   „   s   re   c                   @   s   e Zd Zedddd�gZdS )ÚRPC_SID_IDENTIFIER_AUTHORITYÚValuerQ   r4   rb   Nrd   rE   rE   rE   rF   rj   ˆ   s   rj   c                
   @   sN   e Zd ZdZdZeddƒeddƒedeƒ eƒedg e	ddƒd	d
„ dd�gZ
dS )ÚPSIDrM   r2   ZRevisionr   ÚSubAuthorityCountZIdentifierAuthorityZSubAuthorityrQ   c                 C   s   | j S rA   )rm   rS   rE   rE   rF   rU   ›   rV   zPSID.<lambda>T)ri   Zconformant_in_structN)rH   rI   rJ   rZ   ZCONFORMANT_COUNTr   r&   rj   r   r#   rK   rE   rE   rE   rF   rl   Œ   s"   ýûørl   c                   @   s0   e Zd ZdZeedeƒ eƒdd�eddƒgZdS )ÚPKERB_SID_AND_ATTRIBUTESrM   ÚSidTrX   r_   r   N)	rH   rI   rJ   rZ   r!   r&   rl   r#   rK   rE   rE   rE   rF   rn   ¡   s   þrn   c                %   @   sÂ  e Zd ZdZedeƒ eƒedeƒ eƒedeƒ eƒedeƒ eƒedeƒ eƒedeƒ eƒedeƒ eƒed	eƒ eƒed
eƒ eƒedeƒ eƒedeƒ eƒedeƒ eƒeddƒeddƒeddƒeddƒeddƒe	e
deƒ gedd„ d�dd�eddƒedeƒ eƒedeƒ eƒedeƒ eƒe	edeƒ eƒdd�edg ed dƒd!d„ d�ed"dƒed#g ed dƒd$d„ d�ed%dƒe	e
d&eƒ ged'd„ d�dd�e	ed(eƒ eƒdd�ed)dƒe	e
d*eƒ ged+d„ d�dd�gZd,S )-ÚKERB_VALIDATION_INFOrM   Z	LogonTimeZ
LogoffTimeZKickOffTimeZPasswordLastSetZPasswordCanChangeZPasswordMustChangeZEffectiveNameZFullNameZLogonScriptZProfilePathZHomeDirectoryZHomeDirectoryDriveZ
LogonCountr   ZBadPasswordCountÚUserIdÚPrimaryGroupIdÚ
GroupCountÚGroupIdsc                 C   s   | j S rA   ©rs   rS   rE   rE   rF   rU   Â   rV   zKERB_VALIDATION_INFO.<lambda>rh   TrX   Z	UserFlagsZUserSessionKeyZLogonServerZLogonDomainNameZLogonDomainIdZ	Reserved1rQ   c                 C   s   dS rR   rE   rf   rE   rE   rF   rU   Í   rV   ZUserAccountControlZ	Reserved3c                 C   s   dS )Nr5   rE   rf   rE   rE   rF   rU   Ï   rV   ÚSidCountÚ	ExtraSidsc                 C   s   | j S rA   ©rv   rS   rE   rE   rF   rU   Ö   rV   ZResourceGroupDomainSidÚResourceGroupCountZResourceGroupIdsc                 C   s   | j S rA   )ry   rS   rE   rE   rF   rU   ã   rV   N)rH   rI   rJ   rZ   r&   r[   rL   r(   r#   r!   r   r^   re   rl   r   rn   rK   rE   rE   rE   rF   rp   ©   sz   üù	ÿüù	ÿüùÍrp   c                   @   s   e Zd ZeddeƒgZdS )ÚKERB_VALIDATION_INFO_WRAPra   N)rH   rI   rJ   r&   rp   rK   rE   rE   rE   rF   rz   ê   s   rz   r2   c                
   @   s6   e Zd Zeddƒeddddddd	d
œƒeddƒgZdS )ÚPAC_CREDENTIAL_INFOÚVersionr   ZEncryptionTyper2   zDES-CBC-CRCzDES-CBC-MD5ZAES128_CTS_HMAC_SHA1_96ZAES256_CTS_HMAC_SHA1_96zRC4-HMAC)r2   é   r=   r>   é   ZSerializedDatarV   N)rH   rI   rJ   r
   r   r   rK   rE   rE   rE   rF   r{   õ   s   ûýór{   r3   c                   @   s<   e Zd Zeddddd�eddddd	�edd
dd„ d�gZdS )ÚPAC_CLIENT_INFOZClientIdNú<Qg    „×—A)ÚfmtZcustom_scalingÚ
NameLengthÚNameú<H)Z	length_ofr�   rV   c                 C   s   | j S rA   )r‚   rS   rE   rE   rF   rU     rV   zPAC_CLIENT_INFO.<lambda>rW   )rH   rI   rJ   r   r   r   rK   rE   rE   rE   rF   r     s   ýr   r6   c                   @   s:   e Zd Zeddddddœƒeddd	d
„ d�eddƒgZdS )ÚPAC_SIGNATURE_DATAÚSignatureTyper   ZKERB_CHECKSUM_HMAC_MD5ZHMAC_SHA1_96_AES128ZHMAC_SHA1_96_AES256©l   vÿ r;   r<   Ú	SignaturerV   c                 C   s   ddddœ  | jd¡S )Nr<   r8   r‡   r   )Úgetr†   rS   rE   rE   rF   rU   '  s    ýüzPAC_SIGNATURE_DATA.<lambda>rW   ZRODCIdentifierN)rH   rI   rJ   r   r   r   rK   rE   rE   rE   rF   r…     s   ýý	ý	ír…   r4   r5   r<   c                   @   sâ   e Zd Zeddƒeddƒeddƒeddƒedddd	d
gƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒeeddeddƒeddƒeddƒe	ddƒgƒdd„ fgeddeddƒeddƒgƒƒg
Z
dd„ ZdS )ÚUPN_DNS_INFOZUpnLenNZUpnBufferOffsetZDnsDomainNameLenZDnsDomainNameBufferOffsetÚFlagsr   éàÿÿÿÚUÚSZ
SamNameLenc                 C   s   | j jS rA   ©r‹   rŽ   rS   rE   rE   rF   rU   J  rV   zUPN_DNS_INFO.<lambda>ZSamNameBufferOffsetc                 C   s   | j jS rA   r�   rS   rE   rE   rF   rU   O  rV   ZSidLenc                 C   s   | j jS rA   r�   rS   rE   rE   rF   rU   T  rV   ZSidBufferOffsetc                 C   s   | j jS rA   r�   rS   rE   rE   rF   rU   Y  rV   ZPayloadé   ÚUpnrV   ÚDnsDomainNameZSamNamero   c                 C   s   | j jS rA   r�   rS   rE   rE   rF   rU   i  rV   r8   c                 C   s   t | || jdddœƒ| S )Nr   rN   )r‘   r’   )r/   ZOFFSET)rC   rT   ZpayrE   rE   rF   Ú
post_buildx  s    þü	÷ÿzUPN_DNS_INFO.post_build)rH   rI   rJ   r   r   r   r   r-   r   r   rK   r“   rE   rE   rE   rF   rŠ   8  sf   þü	ýýýýüý
ôÿþýîÞ?rŠ   r8   )ÚIntEnumc                   @   s   e Zd ZdZdZdZdZdS )Ú
CLAIM_TYPEr2   r3   r}   r4   N)rH   rI   rJ   ÚCLAIM_TYPE_INT64ÚCLAIM_TYPE_UINT64ÚCLAIM_TYPE_STRINGÚCLAIM_TYPE_BOOLEANrE   rE   rE   rF   r•   ’  s   r•   c                   @   s   e Zd ZdZdZdS )ÚCLAIMS_SOURCE_TYPEr2   r3   N)rH   rI   rJ   ZCLAIMS_SOURCE_TYPE_ADZCLAIMS_SOURCE_TYPE_CERTIFICATErE   rE   rE   rF   rš   ™  s   rš   c                   @   s   e Zd ZdZdZdZdZdS )ÚCLAIMS_COMPRESSION_FORMATr   r3   r}   rN   N)rH   rI   rJ   ÚCOMPRESSION_FORMAT_NONEZCOMPRESSION_FORMAT_LZNT1ZCOMPRESSION_FORMAT_XPRESSZCOMPRESSION_FORMAT_XPRESS_HUFFrE   rE   rE   rF   r›   ž  s   r›   c                   @   s6   e Zd ZdZeddƒeedg edd„ d�dd	�gZd
S )Úu_sub0rM   Ú
ValueCountr   ZInt64Valuesc                 C   s   | j S rA   ©rž   rS   rE   rE   rF   rU   ®  rV   zu_sub0.<lambda>rh   TrX   N)	rH   rI   rJ   rZ   r#   r!   r   r)   rK   rE   rE   rE   rF   r�   ¥  s   üùþr�   c                   @   s6   e Zd ZdZeddƒeedg edd„ d�dd	�gZd
S )Úu_sub1rM   rž   r   ZUint64Valuesc                 C   s   | j S rA   rŸ   rS   rE   rE   rF   rU   »  rV   zu_sub1.<lambda>rh   TrX   N©	rH   rI   rJ   rZ   r#   r!   r   r$   rK   rE   rE   rE   rF   r    µ  s   ÿüþr    c                	   @   sD   e Zd ZdZeddƒeedg eeddƒdd�d	d
„ d�dd�gZdS )Úu_sub2rM   rž   r   ZStringValuesZ	StringValrQ   TrX   c                 C   s   | j S rA   rŸ   rS   rE   rE   rF   rU   Î  rV   zu_sub2.<lambda>rh   N)	rH   rI   rJ   rZ   r#   r!   r   r   rK   rE   rE   rE   rF   r¢   Â  s   þù	öþr¢   c                   @   s6   e Zd ZdZeddƒeedg edd„ d�dd	�gZd
S )Úu_sub3rM   rž   r   ZBooleanValuesc                 C   s   | j S rA   rŸ   rS   rE   rE   rF   rU   Û  rV   zu_sub3.<lambda>rh   TrX   Nr¡   rE   rE   rE   rF   r£   Õ  s   ÿüþr£   c                
   @   s¶   e Zd ZdZeeddƒdd�eddeƒee	de
ƒ e
ƒd	d
„ dd
„ ffe	deƒ eƒdd
„ dd
„ ffe	deƒ eƒdd
„ dd
„ ffe	deƒ eƒdd
„ dd
„ ffgedddd�ddd�gZdS )ÚCLAIM_ENTRYrM   ZIdrQ   TrX   ÚTyper   ÚValuesc                 C   s   t | dd ƒtjkS ©Nr¥   )Úgetattrr•   r–   rS   rE   rE   rF   rU   í  s   
ÿzCLAIM_ENTRY.<lambda>c                 C   s   |j tjkS rA   )Útagr•   r–   ©rg   ÚvalrE   rE   rF   rU   ð  rV   c                 C   s   t | dd ƒtjkS r§   )r¨   r•   r—   rS   rE   rE   rF   rU   ÷  s   
ÿc                 C   s   |j tjkS rA   )r©   r•   r—   rª   rE   rE   rF   rU   ú  rV   c                 C   s   t | dd ƒtjkS r§   )r¨   r•   r˜   rS   rE   rE   rF   rU     s   
ÿc                 C   s   |j tjkS rA   )r©   r•   r˜   rª   rE   rE   rF   rU     rV   c                 C   s   t | dd ƒtjkS r§   )r¨   r•   r™   rS   rE   rE   rF   rU     s   
ÿc                 C   s   |j tjkS rA   )r©   r•   r™   rª   rE   rE   rF   rU     rV   rb   )r3   rO   )r„   ú<I)ÚalignZ
switch_fmtN)rH   rI   rJ   rZ   r!   r   r"   r•   r*   r&   r�   r    r¢   r£   r   rK   rE   rE   rE   rF   r¤   â  s<   
ûþûþûþûþá*Óýr¤   c                	   @   sD   e Zd ZdZeddeƒeddƒeede	ƒ ge	dd„ d�d	d
�gZ
dS )ÚCLAIMS_ARRAYrM   ZusClaimsSourceTyper   ÚulClaimsCountZClaimEntriesc                 C   s   | j S rA   )r¯   rS   rE   rE   rF   rU   #  rV   zCLAIMS_ARRAY.<lambda>rh   TrX   N)rH   rI   rJ   rZ   r"   rš   r#   r!   r   r¤   rK   rE   rE   rE   rF   r®     s   
üùýr®   c                
   @   sb   e Zd ZdZeddƒeedeƒ gedd„ d�dd	�ed
dƒeddƒee	dddd„ d�dd	�gZ
dS )Ú
CLAIMS_SETrM   ÚulClaimsArrayCountr   ZClaimsArraysc                 C   s   | j S rA   )r±   rS   rE   rE   rF   rU   3  rV   zCLAIMS_SET.<lambda>rh   TrX   ÚusReservedTypeÚulReservedFieldSizeÚReservedFieldrQ   c                 C   s   | j S rA   ©r³   rS   rE   rE   rF   rU   ;  rV   rW   N)rH   rI   rJ   rZ   r#   r!   r   r®   r(   r   rK   rE   rE   rE   rF   r°   *  s(   üù	
ÿüór°   c                   @   s   e Zd ZeddeƒgZdS )ÚCLAIMS_SET_WRAPra   N)rH   rI   rJ   r&   r°   rK   rE   rE   rE   rF   r¶   B  s   r¶   c                   @   s   e Zd Zdd„ ZdS )Ú_CLAIMSClaimSetc                 C   s$   |j tjkrt|tƒS t|d�S d S )N)Úvalue)ÚusCompressionFormatr›   rœ   r+   r¶   r    )rC   rT   ÚsrE   rE   rF   Úm2iI  s    
z_CLAIMSClaimSet.m2iN)rH   rI   rJ   r»   rE   rE   rE   rF   r·   H  s   r·   c                   @   sp   e Zd ZdZeddƒeeddddd„ d�d	d
�eddeƒeddƒe	ddƒeddƒee
dddd„ d�d	d
�gZdS )ÚCLAIMS_SET_METADATArM   ÚulClaimsSetSizer   Z	ClaimsSetNc                 C   s   | j S rA   )r½   rS   rE   rE   rF   rU   W  rV   zCLAIMS_SET_METADATA.<lambda>rW   TrX   r¹   ZulUncompressedClaimsSetSizer²   r³   r´   rQ   c                 C   s   | j S rA   rµ   rS   rE   rE   rF   rU   e  rV   )rH   rI   rJ   rZ   r#   r!   r·   r"   r›   r(   r   rK   rE   rE   rE   rF   r¼   Q  s.   ÿüý
ÿüðr¼   c                   @   s   e Zd ZeddeƒgZdS )ÚPAC_CLIENT_CLAIMS_INFOZClaimsN)rH   rI   rJ   r&   r¼   rK   rE   rE   rE   rF   r¾   l  s   r¾   r9   c                	   @   sN   e Zd ZdZeedeƒ eƒdd�eddƒeede	ƒ ge	dd	„ d
�dd�gZ
dS )ÚPDOMAIN_GROUP_MEMBERSHIPrM   ZDomainIdTrX   rs   r   rt   c                 C   s   | j S rA   ru   rS   rE   rE   rF   rU   ‚  rV   z!PDOMAIN_GROUP_MEMBERSHIP.<lambda>rh   N)rH   rI   rJ   rZ   r!   r&   rl   r#   r   r^   rK   rE   rE   rE   rF   r¿   x  s   üùýr¿   c                   @   sª   e Zd ZdZeddƒeddƒeedeƒ eƒdd�eddƒeed	e	ƒ ge	d
d„ d�dd�eddƒeede
ƒ ge
dd„ d�dd�eddƒeedeƒ gedd„ d�dd�g	ZdS )ÚPAC_DEVICE_INFOrM   rq   r   rr   ZAccountDomainIdTrX   ÚAccountGroupCountZAccountGroupIdsc                 C   s   | j S rA   )rÁ   rS   rE   rE   rF   rU   —  rV   zPAC_DEVICE_INFO.<lambda>rh   rv   rw   c                 C   s   | j S rA   rx   rS   rE   rE   rF   rU   ¡  rV   ÚDomainGroupCountZDomainGroupc                 C   s   | j S rA   )rÂ   rS   rE   rE   rF   rU   «  rV   N)rH   rI   rJ   rZ   r#   r!   r&   rl   r   r^   rn   r¿   rK   rE   rE   rE   rF   rÀ   ‰  sJ   ÿüù	üù	üùårÀ   c                   @   s   e Zd ZeddeƒgZdS )ÚPAC_DEVICE_INFO_WRAPra   N)rH   rI   rJ   r&   rÀ   rK   rE   rE   rE   rF   rÃ   ²  s   rÃ   r:   c                   @   s:   e Zd Zeddƒedg eddddddœƒd	d
„ d�gZdS )ÚPAC_ATTRIBUTES_INFOÚFlagsLengthr   r‹   rQ   rŒ   ZPAC_WAS_REQUESTEDZPAC_WAS_GIVEN_IMPLICITLY)r2   r3   c                 C   s   | j d d S )Nr5   rO   )rÅ   rS   rE   rE   rF   rU   Ì  rV   zPAC_ATTRIBUTES_INFO.<lambda>rh   N)rH   rI   rJ   r
   r   r   rK   rE   rE   rE   rF   rÄ   ½  s   þü	ôþrÄ   r=   c                   @   s   e Zd ZeddƒgZdS )ÚPAC_REQUESTORro   rV   N)rH   rI   rJ   r   rK   rE   rE   rE   rF   rÆ   Ö  s   rÆ   r>   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_PACTYPEBuffersc           
         sô   d}t |ƒt |jƒkr4t d¡ tt| ƒ |||¡S dt |jƒ d }t|ƒD ]œ\}}|  ||¡}t |j| ƒ}	|j	d u rž|d d… t
 d|	¡ |dd …  }|jd u rÌ|d d… t
 d|¡ |dd …  }||	7 }|| d 7 }||7 }qN|| S )NrV   z5Size of 'Buffers' does not match size of 'Payloads' !r<   rO   rN   r¬   r€   )ÚlenÚPayloadsr   ÚwarningÚsuperrÇ   ÚaddfieldÚ	enumerateÚi2mr?   ÚstructÚpackr@   )
rC   rT   rº   r«   ÚresÚoffsetÚiÚvÚxZlgth©Ú	__class__rE   rF   rÌ   à  s     

$
$
z_PACTYPEBuffers.addfield)rH   rI   rJ   rÌ   Ú__classcell__rE   rE   rÖ   rF   rÇ   ß  s   rÇ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_PACTYPEPayloadsc                 C   s<   t |tƒst |tƒrt|ƒ}nt|ƒ}|dt|ƒ d   S )Nó    rO   )Ú
isinstancer%   r'   r,   ÚbytesrÈ   )rC   rT   r«   rº   rE   rE   rF   rÎ   õ  s    
z_PACTYPEPayloads.i2mc              
   C   s  |r|s|g fS g }t t|jƒƒD ]ä}|j| }|jdt|jƒ  d }zˆt|j }t|tƒr|t||||j	 … |dd�}n|||||j	 … ƒ}t
j|v rÎt
j|t
j jd�}	|t
j j}
|
 ¡  |
 |	¡ W n* tyú   t
 ||||j	 … ¡}Y n0 | |¡ q"d|fS )Nr<   rO   F)Zndr64)ÚloadrV   )ÚrangerÈ   ÚBuffersr@   Ú	_PACTYPESr1   Ú
issubclassr%   r+   r?   r   Z	raw_layerrB   rÝ   Z
underlayerZremove_payloadZadd_payloadÚKeyErrorÚappend)rC   rT   rº   ÚresultrÓ   ÚbufrÒ   Úclsr«   ÚpadZlayrE   rE   rF   Úgetfieldü  s,    


ÿ
z_PACTYPEPayloads.getfieldN)rH   rI   rJ   rÎ   rè   rE   rE   rE   rF   rÙ   ô  s   rÙ   c                   @   sJ   e Zd ZdZeddddd�eddƒedeƒ ged	d
„ d�edg dƒgZ	dS )ÚPACTYPEzPACTYPE - PACÚcBuffersNrß   r¬   )Zcount_ofr�   r|   r   c                 C   s   | j S rA   )rê   rS   rE   rE   rF   rU     rV   zPACTYPE.<lambda>rh   rÉ   )
rH   rI   rJ   Únamer   r
   rÇ   r0   rÙ   rK   rE   rE   rE   rF   ré     s   ü
÷ré   é€   )aÚ__doc__rÏ   Zscapy.configr   Zscapy.errorr   Zscapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zscapy.packetr   Zscapy.layers.kerberosr   Zscapy.layers.dcerpcr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Zscapy.layers.ntlmr-   r.   r/   r0   rà   rL   r[   r^   r`   re   rj   rl   rn   rp   rz   r{   r   r…   rŠ   Úenumr”   ÚImportErrorÚobjectr•   rš   r›   r�   r    r¢   r£   r¤   r®   r°   r¶   r·   r¼   r¾   r¿   rÀ   rÃ   rÄ   rÆ   rÇ   rÙ   ré   rE   rE   rE   rF   Ú<module>   s~   P\	AP
7	
)"