o
    Žõ±jó™  ã                   @   s  d dl mZ d dl mZ d dlmZ d dlmZ d dl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 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! d d
l"m#Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl.m3Z3m4Z4 e(dƒZ5G dd„ de-ƒZ6G dd„ deƒZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>eZ?eZ@dZAdZBdZCdZDdZEd ZFd!ZGd"ZHd#ZId$ZJd%ZKd&ZLd'ZMd(ZNd)ZOd*ZPd+ZQd,ZRd-ZSd.ZTd/ZUd0ZVd1ZWd2ZXd3ZYd4ZZd5Z[d#Z\d6Z]d7Z^d8Z_d9Z`d:ZadZbdZcdZddZedZfdZgdZhdZidZjdZkd Zld!Zmd"Znd#Zod#Zpd$Zqd%Zrd&Zsd'Ztd'Zud(Zvd)Zwd)Zxd*Zyd*Zzd+Z{d,Z|d-Z}d.Z~d/Zd/Z€d0Z�d1Z‚d2Zƒd3Z„d4Z…d5Z†d6Z‡d7Zˆd8Z‰d9ZŠd:Z‹dZŒdZ�dZŽdZ�dZ�d Z‘d!Z’d"Z“d#Z”d$Z•e)d;ƒZ–e)d<ƒZ—eZ˜dZ™dZšd:Z›d=Zœd>Z�d?Zžd@ZŸdAZ dBZ¡dCZ¢dDZ£dEZ¤dFZ¥dGZ¦dHZ§dIZ¨dJZ©dKZªdLZ«dMZ¬dZ­dZ®d+Z¯d Z°dZ±dZ²dZ³dZ´dZµdNZ¶G dOdP„ dPe&ƒZ·G dQdR„ dReƒZ¸G dSdT„ dTeƒZ¹G dUdV„ dVeƒZºG dWdX„ dXeƒZ»G dYdZ„ dZeƒZ¼G d[d\„ d\eƒZ½G d]d^„ d^eƒZ¾G d_d`„ d`e&ƒZ¿G dadb„ dbeƒZÀG dcdd„ ddeƒZÁG dedf„ dfeƒZÂG dgdh„ dheƒZÃG didj„ djeƒZÄG dkdl„ dleƒZÅG dmdn„ dneƒZÆG dodp„ dpeƒZÇG dqdr„ dreƒZÈG dsdt„ dteƒZÉG dudv„ dveƒZÊG dwdx„ dxeƒZËG dydz„ dzeƒ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ƒ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ƒ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ƒ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ƒ�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ƒ�ZG �d�d„ �deƒ�ZG �d�d„ �deƒ�Z�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�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/�d0„ �d0eƒ�Z)G �d1�d2„ �d2eƒ�Z*G �d3�d4„ �d4eƒ�Z+G �d5�d6„ �d6eƒ�Z,G �d7�d8„ �d8eƒ�Z-G �d9�d:„ �d:eƒ�Z.G �d;�d<„ �d<eƒ�Z/G �d=�d>„ �d>eƒ�Z0G �d?�d@„ �d@eƒ�Z1G �dA�dB„ �dBeƒ�Z2G �dC�dD„ �dDeƒ�Z3G �dE�dF„ �dFeƒ�Z4G �dG�dH„ �dHeƒ�Z5G �dI�dJ„ �dJeƒ�Z6G �dK�dL„ �dLeƒ�Z7�e*�e+f�e,�e-f�e.�e/f�e2�e3f�e4�e5f�e6�e7f�dMœ�Z8�dN�dO„ �Z9e´eµB d)f�dP�dQ„�Z:�dR�dS„ �Z;�dT�dU„ �Z<�dj�dW�dX„�Z=�dY�dZ„ �Z>�d[�d\„ �Z?�d]�d^„ �Z@�d_�d`„ �ZA�da�db„ �ZB�eC�dck�r„g �ZD�dd�ZE�de�ZF�df�ZG�dg�ZH�dh�ZI�eA�eD�eEƒ�ZJ�eK�eL�eJƒƒ �eA�eD�eFƒ�ZM�eK�eL�eMƒƒ �eA�eD�eGƒ�ZN�eK�eL�eNƒƒ �eA�eD�eHƒ�ZO�eK�eL�eOƒƒ �eA�eD�eIƒ�ZP�eK�eL�ePƒƒ �eB�eD�eJƒ�ZQ�eK�eQƒ �eB�eD�eMƒ�ZQ�eK�eQƒ �eB�eD�eNƒ�ZQ�eK�eQƒ �eB�eD�eOƒ�ZQ�eK�eQƒ �eB�eD�ePƒ�ZQ�eK�eQƒ �diS �diS (k  é    )Údivision)Úprint_function)Úbytes)Úhashlib)Úpack)ÚPY2)Úlogger)ÚNDRCALLÚ	NDRSTRUCTÚ
NDRPOINTERÚNDRUniConformantArrayÚNDRUNIONÚNDRÚNDRENUM)ÚPUUIDÚDWORDÚNULLÚGUIDÚLPWSTRÚBOOLÚULONGÚUUIDÚLONGLONGÚULARGE_INTEGERÚLARGE_INTEGER)Úhresult_errorsÚsystem_errors)Ú	Structure)Úuuidtup_to_binÚstring_to_bin)ÚEnum)ÚDCERPCException)Úexpand_DES_keyÚMODE_ECB)ÚObjectIdentifier)ÚRC4ÚDES)z$E3514235-4B06-11D1-AB04-00C04FC2DCD2z4.0c                   @   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/aiosmb/dcerpc/v5/drsuapi.pyr)   +   s   zDCERPCSessionError.__init__c                 C   sˆ   | j }|tjv rtj| d }tj| d }d| j ||f S |d@ tjv r?tj|d@  d }tj|d@  d }d| j ||f S d| j  S )Nr   é   z'DRSR SessionError: code: 0x%x - %s - %siÿÿ  z+DRSR SessionError: unknown error code: 0x%x)r,   r   ÚERROR_MESSAGESr   )r*   ÚkeyÚerror_msg_shortÚerror_msg_verboser.   r.   r/   Ú__str__.   s   

zDCERPCSessionError.__str__)NNN)Ú__name__Ú
__module__Ú__qualname__r)   r5   r.   r.   r.   r/   r'   *   s    
r'   c                   @   s2   e Zd ZdZdZdZG dd„ deƒZd	dd„ZdS )
ÚEXOP_ERRé   ))ÚDataú<Lc                   @   sL   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdS )zEXOP_ERR.enumItemsr0   é   é   r:   é   é   é   é   é	   é
   é   é   é   é   é   é   N)r6   r7   r8   ÚEXOP_ERR_SUCCESSÚEXOP_ERR_UNKNOWN_OPÚEXOP_ERR_FSMO_NOT_OWNERÚEXOP_ERR_UPDATE_ERRÚEXOP_ERR_EXCEPTIONÚEXOP_ERR_UNKNOWN_CALLERÚEXOP_ERR_RID_ALLOCÚEXOP_ERR_FSMO_OWNER_DELETEDÚEXOP_ERR_FSMO_PENDING_OPÚEXOP_ERR_MISMATCHÚEXOP_ERR_COULDNT_CONTACTÚEXOP_ERR_FSMO_REFUSING_ROLESÚEXOP_ERR_DIR_ERRORÚEXOP_ERR_FSMO_MISSING_SETTINGSÚEXOP_ERR_ACCESS_DENIEDÚEXOP_ERR_PARAM_ERRORr.   r.   r.   r/   Ú	enumItemsD   s"    r[   Nr   c                 C   sp   |d u r| j j}|dkrt|dd� ztd|  | jd ¡j dd� W d S  ty7   td| jd  ƒ Y d S w )NÚ ú )Úendz %sr;   z %d)Ú	__class__r6   Úprintr[   ÚfieldsÚnameÚ
ValueError)r*   ÚmsgÚindentr.   r.   r/   ÚdumpV   s   $ÿzEXOP_ERR.dump)Nr   )	r6   r7   r8   ÚalignÚalign64Ú	structurer    r[   rf   r.   r.   r.   r/   r9   >   s    r9   r0   r=   r>   r:   r?   r@   rA   rB   rJ   é    é@   é€   é   i   i   i   i   i    é @  é €  é   i   i   i   i   i    i  @ i  € i   i   i   i   i   i    i   @l        z$e24d201a-4fd6-11d1-a3da-0000f875ae0dz$00000000-0000-0000-0000-000000000000ì   ÿÿ l   þÿ l   ýÿ l   üÿ l   ûÿ l   úÿ l   ùÿ l   øÿ l   ÷ÿ l   öÿ l   õÿ l   ôÿ l   óÿ l   ñÿ l   ðÿ l   ïÿ l   òÿ rC   c                   @   ó   e Zd ZdZdS )ÚENCRYPTED_PAYLOAD))ÚSaltÚ16s)ÚCheckSumr<   )ÚEncryptedDataú:N©r6   r7   r8   ri   r.   r.   r.   r/   rs     ó    rs   c                   @   ó   e Zd ZdZdd„ ZdS )ÚNT4SID))r;   z28s=b""c                 C   ó   dS ©Nr:   r.   ©r*   r.   r.   r/   ÚgetAlignment  ó   zNT4SID.getAlignmentN©r6   r7   r8   ri   r€   r.   r.   r.   r/   r|     ó    r|   c                   @   r{   )Ú
DRS_HANDLE))r;   z20s=b""c                 C   r}   r~   r.   r   r.   r.   r/   r€     r�   zDRS_HANDLE.getAlignmentNr‚   r.   r.   r.   r/   r„     rƒ   r„   c                   @   ó   e Zd ZdeffZdS )ÚPDRS_HANDLEr;   N)r6   r7   r8   r„   Úreferentr.   r.   r.   r/   r†     ó    ÿr†   c                   @   rr   )Ú
BYTE_ARRAYÚcN)r6   r7   r8   Úitemr.   r.   r.   r/   r‰   !  rz   r‰   c                   @   r…   )ÚPBYTE_ARRAYr;   N)r6   r7   r8   r‰   r‡   r.   r.   r.   r/   rŒ   $  rˆ   rŒ   c                   @   ó   e Zd ZdefdeffZdS )ÚDRS_EXTENSIONSÚcbÚrgbN©r6   r7   r8   r   r‰   ri   r.   r.   r.   r/   rŽ   )  ó    þrŽ   c                   @   r…   )ÚPDRS_EXTENSIONSr;   N)r6   r7   r8   rŽ   r‡   r.   r.   r.   r/   r“   /  rˆ   r“   c                   @   rr   )ÚDRS_EXTENSIONS_INT))ÚdwFlagsú<L=0)ÚSiteObjGuidú16s=b"")ÚPidr–   )ÚdwReplEpochr–   )Ú
dwFlagsExtr–   )ÚConfigObjGUIDr˜   )Ú	dwExtCapsr–   Nry   r.   r.   r.   r/   r”   5  rz   r”   c                   @   r�   )ÚDRS_MSG_DCINFOREQ_V1ÚDomainÚ	InfoLevelN)r6   r7   r8   r   r   ri   r.   r.   r.   r/   rž   A  r’   rž   c                   @   ó"   e Zd ZdeffZddefiZdS )ÚDRS_MSG_DCINFOREQÚtagr0   ÚV1N)r6   r7   r8   r   Ú	commonHdrrž   Úunionr.   r.   r.   r/   r¢   H  ó
    ÿÿr¢   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZdS )	ÚDS_DOMAIN_CONTROLLER_INFO_1WÚNetbiosNameÚDnsHostNameÚSiteNameÚComputerObjectNameÚServerObjectNameÚfIsPdcÚ
fDsEnabledN)r6   r7   r8   r   r   ri   r.   r.   r.   r/   r¨   Q  ó    ùr¨   c                   @   ó   e Zd ZeZdS )Ú"DS_DOMAIN_CONTROLLER_INFO_1W_ARRAYN)r6   r7   r8   r¨   r‹   r.   r.   r.   r/   r²   \  rz   r²   c                   @   r…   )Ú#PDS_DOMAIN_CONTROLLER_INFO_1W_ARRAYr;   N)r6   r7   r8   r²   r‡   r.   r.   r.   r/   r³   _  rˆ   r³   c                   @   r�   )ÚDRS_MSG_DCINFOREPLY_V1ÚcItemsÚrItemsN)r6   r7   r8   r   r³   ri   r.   r.   r.   r/   r´   e  r’   r´   c                   @   sd   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdefdeffZdS )ÚDS_DOMAIN_CONTROLLER_INFO_2Wr©   rª   r«   ÚSiteObjectNamer¬   r­   ÚNtdsDsaObjectNamer®   r¯   ÚfIsGcÚSiteObjectGuidÚComputerObjectGuidÚServerObjectGuidÚNtdsDsaObjectGuidN©r6   r7   r8   r   r   r   ri   r.   r.   r.   r/   r·   l  ó     òr·   c                   @   r±   )Ú"DS_DOMAIN_CONTROLLER_INFO_2W_ARRAYN)r6   r7   r8   r·   r‹   r.   r.   r.   r/   rÁ   ~  rz   rÁ   c                   @   r…   )Ú#PDS_DOMAIN_CONTROLLER_INFO_2W_ARRAYr;   N)r6   r7   r8   rÁ   r‡   r.   r.   r.   r/   rÂ   �  rˆ   rÂ   c                   @   r�   )ÚDRS_MSG_DCINFOREPLY_V2rµ   r¶   N)r6   r7   r8   r   rÂ   ri   r.   r.   r.   r/   rÃ   ‡  r’   rÃ   c                   @   sj   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdefdefdeffZdS )ÚDS_DOMAIN_CONTROLLER_INFO_3Wr©   rª   r«   r¸   r¬   r­   r¹   r®   r¯   rº   ÚfIsRodcr»   r¼   r½   r¾   Nr¿   r.   r.   r.   r/   rÄ   Ž  s"    ñrÄ   c                   @   r±   )Ú"DS_DOMAIN_CONTROLLER_INFO_3W_ARRAYN)r6   r7   r8   rÄ   r‹   r.   r.   r.   r/   rÆ   ¡  rz   rÆ   c                   @   r…   )Ú#PDS_DOMAIN_CONTROLLER_INFO_3W_ARRAYr;   N)r6   r7   r8   rÆ   r‡   r.   r.   r.   r/   rÇ   ¤  rˆ   rÇ   c                   @   r�   )ÚDRS_MSG_DCINFOREPLY_V3rµ   r¶   N)r6   r7   r8   r   rÇ   ri   r.   r.   r.   r/   rÈ   ª  r’   rÈ   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZdS )	Ú#DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFWÚ	IPAddressÚNotificationCountÚsecTimeConnectedÚFlagsÚTotalRequestsÚ	Reserved1ÚUserNameN©r6   r7   r8   r   r   ri   r.   r.   r.   r/   rÉ   ±  r°   rÉ   c                   @   r±   )Ú)DS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAYN)r6   r7   r8   rÉ   r‹   r.   r.   r.   r/   rÒ   ¼  rz   rÒ   c                   @   r…   )Ú*PDS_DOMAIN_CONTROLLER_INFO_FFFFFFFFW_ARRAYr;   N)r6   r7   r8   rÒ   r‡   r.   r.   r.   r/   rÓ   ¿  rˆ   rÓ   c                   @   r�   )ÚDRS_MSG_DCINFOREPLY_VFFFFFFFFrµ   r¶   N)r6   r7   r8   r   rÓ   ri   r.   r.   r.   r/   rÔ   Å  r’   rÔ   c                   @   s4   e Zd ZdeffZdefdefdefdefdœZ	dS )ÚDRS_MSG_DCINFOREPLYr£   r¤   ÚV2ÚV3)r0   r=   r>   rq   N)
r6   r7   r8   r   r¥   r´   rÃ   rÈ   rÔ   r¦   r.   r.   r.   r/   rÕ   Ì  s    ÿ
ürÕ   c                   @   r±   )ÚLPWSTR_ARRAYN)r6   r7   r8   r   r‹   r.   r.   r.   r/   rØ   Ø  rz   rØ   c                   @   r…   )ÚPLPWSTR_ARRAYr;   N)r6   r7   r8   rØ   r‡   r.   r.   r.   r/   rÙ   Û  rˆ   rÙ   c                   @   s:   e Zd ZdefdefdefdefdefdefdeffZdS )	ÚDRS_MSG_CRACKREQ_V1ÚCodePageÚLocaleIdr•   ÚformatOfferedÚformatDesiredÚcNamesÚrpNamesN)r6   r7   r8   r   r   rÙ   ri   r.   r.   r.   r/   rÚ   à  r°   rÚ   c                   @   r¡   )ÚDRS_MSG_CRACKREQr£   r0   r¤   N)r6   r7   r8   r   r¥   rÚ   r¦   r.   r.   r.   r/   rá   ì  r§   rá   c                   @   ó   e Zd ZG dd„ deƒZdS )ÚDS_NAME_FORMATc                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )zDS_NAME_FORMAT.enumItemsr   r0   r=   r>   r@   rA   rB   rC   rD   rE   rF   N)r6   r7   r8   ÚDS_UNKNOWN_NAMEÚDS_FQDN_1779_NAMEÚDS_NT4_ACCOUNT_NAMEÚDS_DISPLAY_NAMEÚDS_UNIQUE_ID_NAMEÚDS_CANONICAL_NAMEÚDS_USER_PRINCIPAL_NAMEÚDS_CANONICAL_NAME_EXÚDS_SERVICE_PRINCIPAL_NAMEÚDS_SID_OR_SID_HISTORY_NAMEÚDS_DNS_DOMAIN_NAMEr.   r.   r.   r/   r[   ö  s    r[   N©r6   r7   r8   r    r[   r.   r.   r.   r/   rã   õ  ó    rã   c                   @   s"   e Zd ZdefdefdeffZdS )ÚDS_NAME_RESULT_ITEMWÚstatusÚpDomainÚpNameNrÑ   r.   r.   r.   r/   rñ     ó
    ýrñ   c                   @   r±   )ÚDS_NAME_RESULT_ITEMW_ARRAYN)r6   r7   r8   rñ   r‹   r.   r.   r.   r/   rö     rz   rö   c                   @   r…   )ÚPDS_NAME_RESULT_ITEMW_ARRAYr;   N)r6   r7   r8   rö   r‡   r.   r.   r.   r/   r÷     rˆ   r÷   c                   @   r�   )ÚDS_NAME_RESULTWrµ   r¶   N)r6   r7   r8   r   r÷   ri   r.   r.   r.   r/   rø     r’   rø   c                   @   r…   )ÚPDS_NAME_RESULTWr;   N)r6   r7   r8   rø   r‡   r.   r.   r.   r/   rù     rˆ   rù   c                   @   r…   )ÚDRS_MSG_CRACKREPLY_V1ÚpResultN)r6   r7   r8   rù   ri   r.   r.   r.   r/   rú      rˆ   rú   c                   @   r¡   )ÚDRS_MSG_CRACKREPLYr£   r0   r¤   N)r6   r7   r8   r   r¥   rú   r¦   r.   r.   r.   r/   rü   &  r§   rü   c                   @   r�   )ÚUPTODATE_CURSOR_V1ÚuuidDsaÚusnHighPropUpdateN)r6   r7   r8   r   ÚUSNri   r.   r.   r.   r/   rý   /  r’   rý   c                   @   r±   )ÚUPTODATE_CURSOR_V1_ARRAYN)r6   r7   r8   rý   r‹   r.   r.   r.   r/   r  5  rz   r  c                   @   ó.   e Zd ZdefdefdefdefdeffZdS )ÚUPTODATE_VECTOR_V1_EXTÚ	dwVersionÚdwReserved1ÚcNumCursorsÚdwReserved2Ú	rgCursorsN)r6   r7   r8   r   r  ri   r.   r.   r.   r/   r  9  ó    ûr  c                   @   r…   )ÚPUPTODATE_VECTOR_V1_EXTr;   N)r6   r7   r8   r  r‡   r.   r.   r.   r/   r
  B  rˆ   r
  c                   @   s"   e Zd ZdefdefdeffZdS )Ú
USN_VECTORÚusnHighObjUpdateÚusnReservedrÿ   N)r6   r7   r8   r   ri   r.   r.   r.   r/   r  H  rõ   r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚWCHAR_ARRAYÚHc                 C   s(   d | j d< d | _t | |dd„ |D ƒ¡S )NÚMaximumCountc                 S   ó   g | ]}t |ƒ‘qS r.   )Úord)Ú.0rŠ   r.   r.   r/   Ú
<listcomp>V  ó    z+WCHAR_ARRAY.__setitem__.<locals>.<listcomp>)ra   Údatar   Ú__setitem__)r*   r2   Úvaluer.   r.   r/   r  S  s   
zWCHAR_ARRAY.__setitem__c                 C   s|   |dkr8zd  dd„ | j| D ƒ¡W S  ty7   t d| j|  ¡ t d¡ d  dd„ | j| D ƒ¡ Y S w t | |¡S )Nr;   r\   c                 S   r  r.   ©Úchr©r  Úir.   r.   r/   r  [  r  z+WCHAR_ARRAY.__getitem__.<locals>.<listcomp>zValueError exception on %szSwitching to unichr()c                 S   r  r.   r  r  r.   r.   r/   r  `  r  )Újoinra   rc   ÚLOGÚdebugr   Ú__getitem__)r*   r2   r.   r.   r/   r   X  s   
üzWCHAR_ARRAY.__getitem__N)r6   r7   r8   r‹   r  r   r.   r.   r.   r/   r  P  s    r  c                   @   sF   e Zd ZdefdefdefdefdefdeffZdd„ Zdd
d„Z	dS )ÚDSNAMEÚ	structLenÚSidLenÚGuidÚSidÚNameLenÚ
StringNamec                 C   s   | d S )Nr&  r.   )r*   r  r.   r.   r/   Ú
getDataLenn  s   zDSNAME.getDataLenr   c                 C   s   t  | |¡S r(   )r
   ÚgetData)r*   ÚsoFarr.   r.   r/   r)  p  s   zDSNAME.getDataN©r   )
r6   r7   r8   r   r   r|   r  ri   r(  r)  r.   r.   r.   r/   r!  e  s    úr!  c                   @   r…   )ÚPDSNAMEr;   N)r6   r7   r8   r!  r‡   r.   r.   r.   r/   r,  s  rˆ   r,  c                   @   r±   )ÚPDSNAME_ARRAYN)r6   r7   r8   r,  r‹   r.   r.   r.   r/   r-  x  rz   r-  c                   @   r…   )ÚPPDSNAME_ARRAYr;   N)r6   r7   r8   r-  r‡   r.   r.   r.   r/   r.  {  rˆ   r.  c                   @   r±   )ÚATTRTYP_ARRAYN)r6   r7   r8   ÚATTRTYPr‹   r.   r.   r.   r/   r/  €  rz   r/  c                   @   ó(   e Zd ZdefdefdefdeffZdS )ÚPARTIAL_ATTR_VECTOR_V1_EXTr  r  ÚcAttrsÚrgPartialAttrN)r6   r7   r8   r   r/  ri   r.   r.   r.   r/   r2  „  ó    ür2  c                   @   r…   )ÚPPARTIAL_ATTR_VECTOR_V1_EXTr;   N)r6   r7   r8   r2  r‡   r.   r.   r.   r/   r6  Œ  rˆ   r6  c                   @   r�   )ÚOID_tÚlengthÚelementsN©r6   r7   r8   r   rŒ   ri   r.   r.   r.   r/   r7  ’  r’   r7  c                   @   r�   )ÚPrefixTableEntryÚndxÚprefixN)r6   r7   r8   r   r7  ri   r.   r.   r.   r/   r;  ™  r’   r;  c                   @   r±   )ÚPrefixTableEntry_ARRAYN)r6   r7   r8   r;  r‹   r.   r.   r.   r/   r>  Ÿ  rz   r>  c                   @   r…   )ÚPPrefixTableEntry_ARRAYr;   N)r6   r7   r8   r>  r‡   r.   r.   r.   r/   r?  ¢  rˆ   r?  c                   @   r�   )ÚSCHEMA_PREFIX_TABLEÚPrefixCountÚpPrefixEntryN)r6   r7   r8   r   r?  ri   r.   r.   r.   r/   r@  ¨  r’   r@  c                   @   sR   e Zd Zdefdefdefdefdefdefdefde	fd	e	fd
e	fde	ffZ
dS )ÚDRS_MSG_GETCHGREQ_V3ÚuuidDsaObjDestÚuuidInvocIdSrcÚpNCÚ
usnvecFromÚpUpToDateVecDestV1ÚpPartialAttrVecDestV1ÚPrefixTableDestÚulFlagsÚcMaxObjectsÚ	cMaxBytesÚulExtendedOpN)r6   r7   r8   r   r,  r  r
  r6  r@  r   ri   r.   r.   r.   r/   rC  ¯  s    õrC  c                   @   r�   )ÚMTX_ADDRÚmtx_namelenÚmtx_nameNr:  r.   r.   r.   r/   rO  ¿  r’   rO  c                   @   r…   )Ú	PMTX_ADDRr;   N)r6   r7   r8   rO  r‡   r.   r.   r.   r/   rR  Å  rˆ   rR  c                   @   ó"   e Zd ZdefdefdeffZdS )ÚDRS_MSG_GETCHGREQ_V4ÚuuidTransportObjÚpmtxReturnAddressr×   N)r6   r7   r8   r   rR  rC  ri   r.   r.   r.   r/   rT  Ë  rõ   rT  c                   @   sL   e Zd Zdefdefdefdefdefdefdefdefd	efd
eff
Z	dS )ÚDRS_MSG_GETCHGREQ_V5rD  rE  rF  rG  rH  rK  rL  rM  rN  Ú
liFsmoInfoN)
r6   r7   r8   r   r,  r  r
  r   r   ri   r.   r.   r.   r/   rW  Ó  s    örW  c                   @   s4   e 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 )ÚDRS_MSG_GETCHGREQ_V7rU  rV  r×   ÚpPartialAttrSetÚpPartialAttrSetEx1rJ  N)	r6   r7   r8   r   rR  rC  r6  r@  ri   r.   r.   r.   r/   rY  â  ó    úrY  c                   @   s^   e Zd Zdefdefdefdefdefdefdefdefd	efd
efde	fde	fde
ffZdS )ÚDRS_MSG_GETCHGREQ_V8rD  rE  rF  rG  ÚpUpToDateVecDestrK  rL  rM  rN  rX  rZ  r[  rJ  N©r6   r7   r8   r   r,  r  r
  r   r   r6  r@  ri   r.   r.   r.   r/   r]  í  s    ór]  c                   @   sd   e Zd Zdefdefdefdefdefdefdefdefd	efd
efde	fde	fde
fdeffZdS )ÚDRS_MSG_GETCHGREQ_V10rD  rE  rF  rG  r^  rK  rL  rM  rN  rX  rZ  r[  rJ  ÚulMoreFlagsNr_  r.   r.   r.   r/   r`  ÿ  rÀ   r`  c                   @   ó:   e Zd ZdeffZdefdefdefdefde	fdœZ
dS )	ÚDRS_MSG_GETCHGREQr£   ÚV4ÚV5ÚV7ÚV8ÚV10)r:   r?   rA   rB   rD   N)r6   r7   r8   r   r¥   rT  rW  rY  r]  r`  r¦   r.   r.   r.   r/   rc    ó    ÿ
ûrc  c                   @   r�   )ÚATTRVALÚvalLenÚpValNr:  r.   r.   r.   r/   rj    r’   rj  c                   @   r±   )ÚATTRVAL_ARRAYN)r6   r7   r8   rj  r‹   r.   r.   r.   r/   rm  %  rz   rm  c                   @   r…   )ÚPATTRVAL_ARRAYr;   N)r6   r7   r8   rm  r‡   r.   r.   r.   r/   rn  (  rˆ   rn  c                   @   r�   )ÚATTRVALBLOCKÚvalCountÚpAValN)r6   r7   r8   r   rn  ri   r.   r.   r.   r/   ro  .  r’   ro  c                   @   r�   )ÚATTRÚattrTypÚAttrValN)r6   r7   r8   r0  ro  ri   r.   r.   r.   r/   rr  5  r’   rr  c                   @   r±   )Ú
ATTR_ARRAYN)r6   r7   r8   rr  r‹   r.   r.   r.   r/   ru  ;  rz   ru  c                   @   r…   )ÚPATTR_ARRAYr;   N)r6   r7   r8   ru  r‡   r.   r.   r.   r/   rv  >  rˆ   rv  c                   @   r�   )Ú	ATTRBLOCKÚ	attrCountÚpAttrN)r6   r7   r8   r   rv  ri   r.   r.   r.   r/   rw  D  r’   rw  c                   @   rS  )ÚENTINFrô   rK  Ú	AttrBlockN)r6   r7   r8   r,  r   rw  ri   r.   r.   r.   r/   rz  K  rõ   rz  c                   @   r±   )ÚENTINF_ARRAYN)r6   r7   r8   rz  r‹   r.   r.   r.   r/   r|  R  rz   r|  c                   @   r…   )ÚPENTINF_ARRAYr;   N)r6   r7   r8   r|  r‡   r.   r.   r.   r/   r}  U  rˆ   r}  c                   @   s(   e Zd ZdefdefdefdeffZdS )ÚPROPERTY_META_DATA_EXTr  ÚtimeChangedÚuuidDsaOriginatingÚusnOriginatingN)r6   r7   r8   r   ÚDSTIMEr   r   ri   r.   r.   r.   r/   r~  [  r5  r~  c                   @   r±   )ÚPROPERTY_META_DATA_EXT_ARRAYN)r6   r7   r8   r~  r‹   r.   r.   r.   r/   rƒ  c  rz   rƒ  c                   @   r�   )ÚPROPERTY_META_DATA_EXT_VECTORÚ	cNumPropsÚ
rgMetaDataN)r6   r7   r8   r   rƒ  ri   r.   r.   r.   r/   r„  g  r’   r„  c                   @   r…   )ÚPPROPERTY_META_DATA_EXT_VECTORr;   N)r6   r7   r8   r„  r‡   r.   r.   r.   r/   r‡  m  rˆ   r‡  c                   @   ó8   e Zd ZdefdefdefdefdeffZd
dd„Z	d	S )ÚREPLENTINFLISTÚpNextEntInfÚEntinfÚfIsNCPrefixÚpParentGuidmÚpMetaDataExtr   c                 C   s$   t | jd�| jd< t | ||¡}|S )N)ÚisNDR64rŠ  )ÚPREPLENTINFLISTÚ_isNDR64ra   r
   Ú
fromString©r*   r  r*  ÚretValr.   r.   r/   r’  }  s   zREPLENTINFLIST.fromStringNr+  )
r6   r7   r8   r   rz  r   r   r‡  ri   r’  r.   r.   r.   r/   r‰  t  ó    ûr‰  c                   @   r…   )r�  r;   N)r6   r7   r8   r‰  r‡   r.   r.   r.   r/   r�  ƒ  rˆ   r�  c                   @   sX   e Zd Zdefdefdefdefdefdefdefdefd	e	fd
e	fde
fdeffZdS )ÚDRS_MSG_GETCHGREPLY_V1ÚuuidDsaObjSrcrE  rF  rG  ÚusnvecToÚpUpToDateVecSrcV1ÚPrefixTableSrcÚulExtendedRetÚcNumObjectsÚ	cNumBytesÚpObjectsÚ	fMoreDataN)r6   r7   r8   r   r,  r  r
  r@  r9   r   r�  r   ri   r.   r.   r.   r/   r–  ‰  s    ôr–  c                   @   s"   e Zd ZdefdefdeffZdS )ÚDRS_COMPRESSED_BLOBÚcbUncompressedSizeÚcbCompressedSizeÚpbCompressedDataNr‘   r.   r.   r.   r/   r   š  rõ   r   c                   @   r…   )ÚDRS_MSG_GETCHGREPLY_V2ÚCompressedV1N)r6   r7   r8   r   ri   r.   r.   r.   r/   r¤  ¢  rˆ   r¤  c                   @   rS  )ÚUPTODATE_CURSOR_V2rþ   rÿ   ÚtimeLastSyncSuccessN)r6   r7   r8   r   r   r‚  ri   r.   r.   r.   r/   r¦  ¨  rõ   r¦  c                   @   r±   )ÚUPTODATE_CURSOR_V2_ARRAYN)r6   r7   r8   r¦  r‹   r.   r.   r.   r/   r¨  ¯  rz   r¨  c                   @   r  )ÚUPTODATE_VECTOR_V2_EXTr  r  r  r  r  N)r6   r7   r8   r   r¨  ri   r.   r.   r.   r/   r©  ³  r	  r©  c                   @   r…   )ÚPUPTODATE_VECTOR_V2_EXTr;   N)r6   r7   r8   r©  r‡   r.   r.   r.   r/   rª  ¼  rˆ   rª  c                   @   r�   )ÚVALUE_META_DATA_EXT_V1ÚtimeCreatedÚMetaDataN)r6   r7   r8   r‚  r~  ri   r.   r.   r.   r/   r«  Â  r’   r«  c                   @   s4   e 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 )ÚVALUE_META_DATA_EXT_V3r¬  r­  Úunused1ÚtimeExpiredN)r6   r7   r8   r‚  r~  r   ri   r.   r.   r.   r/   r®  É  r\  r®  c                   @   rˆ  )ÚREPLVALINF_V1ÚpObjectrs  ÚAvalÚ
fIsPresentr­  r   c                 C   ó   t  | ||¡}|S r(   ©r
   r’  r“  r.   r.   r/   r’  Ý  ó   zREPLVALINF_V1.fromStringNr+  )
r6   r7   r8   r,  r0  rj  r   r«  ri   r’  r.   r.   r.   r/   r±  Ô  r•  r±  c                   @   r±   )ÚREPLVALINF_V1_ARRAYN)r6   r7   r8   r±  r‹   r.   r.   r.   r/   r¸  â  rz   r¸  c                   @   r…   )ÚPREPLVALINF_V1_ARRAYr;   N)r6   r7   r8   r¸  r‡   r.   r.   r.   r/   r¹  å  rˆ   r¹  c                   @   rˆ  )ÚREPLVALINF_V3r²  rs  r³  r´  r­  r   c                 C   rµ  r(   r¶  r“  r.   r.   r/   r’  ô  r·  zREPLVALINF_V3.fromStringNr+  )
r6   r7   r8   r,  r0  rj  r   r®  ri   r’  r.   r.   r.   r/   rº  ë  r•  rº  c                   @   r±   )ÚREPLVALINF_V3_ARRAYN)r6   r7   r8   rº  r‹   r.   r.   r.   r/   r»  ù  rz   r»  c                   @   r…   )ÚPREPLVALINF_V3_ARRAYr;   N)r6   r7   r8   r»  r‡   r.   r.   r.   r/   r¼  ü  rˆ   r¼  c                   @   óv   e Zd Zdefdefdefdefdefdefdefdefd	e	fd
e	fde
fdefde	fde	fdefdefdeffZdS )ÚDRS_MSG_GETCHGREPLY_V6r—  rE  rF  rG  r˜  ÚpUpToDateVecSrcrš  r›  rœ  r�  rž  rŸ  ÚcNumNcSizeObjectscÚcNumNcSizeValuesÚ
cNumValuesÚrgValuesÚ
dwDRSErrorN©r6   r7   r8   r   r,  r  rª  r@  r9   r   r�  r   r   ri   r.   r.   r.   r/   r¾    ó&    ìr¾  c                   @   râ   )ÚDRS_COMP_ALG_TYPEc                   @   s   e Zd ZdZdZdZdZdS )zDRS_COMP_ALG_TYPE.enumItemsr   r0   r=   r>   N)r6   r7   r8   ÚDRS_COMP_ALG_NONEÚDRS_COMP_ALG_UNUSEDÚDRS_COMP_ALG_MSZIPÚDRS_COMP_ALG_WIN2K3r.   r.   r.   r/   r[     s
    r[   Nrï   r.   r.   r.   r/   rÇ    rð   rÇ  c                   @   rS  )ÚDRS_MSG_GETCHGREPLY_V7ÚdwCompressedVersionÚCompressionAlgÚCompressedAnyN)r6   r7   r8   r   rÇ  r   ri   r.   r.   r.   r/   rÌ  &  rõ   rÌ  c                   @   r½  )ÚDRS_MSG_GETCHGREPLY_V9r—  rE  rF  rG  r˜  r¿  rš  r›  rœ  r�  rž  rŸ  rÀ  rÁ  rÂ  rÃ  rÄ  NrÅ  r.   r.   r.   r/   rÐ  .  rÆ  rÐ  c                   @   rb  )	ÚDRS_MSG_GETCHGREPLYr£   r¤   rÖ   ÚV6rf  ÚV9)r0   r=   r@   rA   rC   N)r6   r7   r8   r   r¥   r–  r¤  r¾  rÌ  rÐ  r¦   r.   r.   r.   r/   rÑ  J  ri  rÑ  c                   @   s.   e Zd ZdefdefdefdefdeffZdS )ÚDRS_MSG_VERIFYREQ_V1r•   rß   rà   ÚRequiredAttrsÚPrefixTableN)r6   r7   r8   r   r.  rw  r@  ri   r.   r.   r.   r/   rÔ  W  r	  rÔ  c                   @   r¡   )ÚDRS_MSG_VERIFYREQr£   r0   r¤   N)r6   r7   r8   r   r¥   rÔ  r¦   r.   r.   r.   r/   r×  a  r§   r×  c                   @   s(   e Zd ZdefdefdefdeffZdS )ÚDRS_MSG_VERIFYREPLY_V1Úerrorrß   ÚrpEntInfrÖ  N)r6   r7   r8   r   r}  r@  ri   r.   r.   r.   r/   rØ  j  r5  rØ  c                   @   r¡   )ÚDRS_MSG_VERIFYREPLYr£   r0   r¤   N)r6   r7   r8   r   r¥   rØ  r¦   r.   r.   r.   r/   rÛ  s  r§   rÛ  c                   @   r1  )ÚDRS_MSG_NT4_CHGLOG_REQ_V1r•   ÚPreferredMaximumLengthÚ	cbRestartÚpRestartN)r6   r7   r8   r   rŒ   ri   r.   r.   r.   r/   rÜ  |  r5  rÜ  c                   @   r¡   )ÚDRS_MSG_NT4_CHGLOG_REQr£   r0   r¤   N)r6   r7   r8   r   r¥   rÜ  r¦   r.   r.   r.   r/   rà  …  r§   rà  c                   @   s4   e 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 )ÚNT4_REPLICATION_STATEÚSamSerialNumberÚSamCreationTimeÚBuiltinSerialNumberÚBuiltinCreationTimeÚLsaSerialNumberÚLsaCreationTimeN)r6   r7   r8   r   ri   r.   r.   r.   r/   rá  Ž  r\  rá  c                   @   s4   e 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 )ÚDRS_MSG_NT4_CHGLOG_REPLY_V1rÞ  ÚcbLogÚReplicationStateÚActualNtStatusrß  ÚpLogN)r6   r7   r8   r   rá  rŒ   ri   r.   r.   r.   r/   rè  ™  r\  rè  c                   @   r¡   )ÚDRS_MSG_NT4_CHGLOG_REPLYr£   r0   r¤   N)r6   r7   r8   r   r¥   rè  r¦   r.   r.   r.   r/   rí  ¤  r§   rí  c                   @   s    e Zd ZdZdefdeffZdS )ÚDRSBindr   ÚpuuidClientDsaÚ
pextClientN)r6   r7   r8   Úopnumr   r“   ri   r.   r.   r.   r/   rî  °  s
    þrî  c                   @   rS  )ÚDRSBindResponseÚppextServerÚphDrsÚ	ErrorCodeN)r6   r7   r8   r“   r„   r   ri   r.   r.   r.   r/   rò  ·  rõ   rò  c                   @   s   e Zd ZdZdeffZdS )Ú	DRSUnbindr0   rô  N)r6   r7   r8   rñ  r„   ri   r.   r.   r.   r/   rö  ¿  s    ÿrö  c                   @   r�   )ÚDRSUnbindResponserô  rõ  N)r6   r7   r8   r„   r   ri   r.   r.   r.   r/   r÷  Å  r’   r÷  c                   @   ó&   e Zd ZdZdefdefdeffZdS )ÚDRSGetNCChangesr>   ÚhDrsÚdwInVersionÚpmsgInN)r6   r7   r8   rñ  r„   r   rc  ri   r.   r.   r.   r/   rù  Ì  ó    ýrù  c                   @   ó"   e Zd ZdefdefdeffZdS )ÚDRSGetNCChangesResponseÚpdwOutVersionÚpmsgOutrõ  N)r6   r7   r8   r   rÑ  ri   r.   r.   r.   r/   rÿ  Ô  rõ   rÿ  c                   @   rø  )ÚDRSVerifyNamesrB   rú  rû  rü  N)r6   r7   r8   rñ  r„   r   r×  ri   r.   r.   r.   r/   r  Ü  rý  r  c                   @   rþ  )ÚDRSVerifyNamesResponser   r  rõ  N)r6   r7   r8   r   rÛ  ri   r.   r.   r.   r/   r  ä  rõ   r  c                   @   rø  )ÚDRSGetNT4ChangeLogrE   rú  rû  rü  N)r6   r7   r8   rñ  r„   r   rà  ri   r.   r.   r.   r/   r  ë  rý  r  c                   @   rþ  )ÚDRSGetNT4ChangeLogResponser   r  rõ  N)r6   r7   r8   r   rí  ri   r.   r.   r.   r/   r  ó  rõ   r  c                   @   rø  )ÚDRSCrackNamesrF   rú  rû  rü  N)r6   r7   r8   rñ  r„   r   rá   ri   r.   r.   r.   r/   r  û  rý  r  c                   @   rþ  )ÚDRSCrackNamesResponser   r  rõ  N)r6   r7   r8   r   rü   ri   r.   r.   r.   r/   r    rõ   r  c                   @   rø  )ÚDRSDomainControllerInforJ   rú  rû  rü  N)r6   r7   r8   rñ  r„   r   r¢   ri   r.   r.   r.   r/   r    rý  r  c                   @   rþ  )ÚDRSDomainControllerInfoResponser   r  rõ  N)r6   r7   r8   r   rÕ   ri   r.   r.   r.   r/   r	    rõ   r	  )r   r0   r>   rE   rF   rJ   c                 C   s(   | t kr| S | dd … dkr| d S | S )Néÿÿÿÿú )r   )Ústringr.   r.   r/   ÚcheckNullString)  s
   r  c                 Ã   st   �t ƒ }||d< d|d< d|d d< ||d d d< ||d d d< d	|d d d
< t|d d d< |  |¡I d H S )Nrú  r0   rû  rü  r£   r¤   r•   rÝ  r   rÞ  rß  )r  r   Úrequest)Údcerú  ÚflagsrÝ  r  r.   r.   r/   ÚhDRSGetNT4ChangeLog2  s   €r  c                 Ã   s    �t ƒ }||d< |  |¡I d H S )Nrô  )rö  r  )r  rú  r  r.   r.   r/   Ú
hDRSUnbind?  s   €r  c                 Ã   sX   �t ƒ }||d< d|d< d|d d< t|ƒ|d d d< ||d d d< |  |¡I d H S )	Nrú  r0   rû  rü  r£   r¤   rŸ   r    )r  r  r  )r  rú  ÚdomainÚ	infoLevelr  r.   r.   r/   ÚhDRSDomainControllerInfoD  s   €r  r.   c           	      Ã   sÊ   �t ƒ }||d< d|d< d|d d< d|d d d< d|d d d	< ||d d d
< ||d d d< ||d d d< t|ƒ|d d d< |D ]}tƒ }t|ƒ|d< |d d d  |¡ qF|  |¡I d H S )Nrú  r0   rû  rü  r£   r   r¤   rÛ   rÜ   r•   rÝ   rÞ   rß   r;   rà   )r  Úlenr   r  Úappendr  )	r  rú  r  rÝ   rÞ   rà   r  rb   Úrecordr.   r.   r/   ÚhDRSCrackNamesN  s    €r  c                 C   sž   t d| ƒ}|d |d |d |d |d |d |d g}|d |d |d |d |d |d |d g}trCtd |¡ƒtd |¡ƒfS tt|ƒƒtt|ƒƒfS )Nr<   r   r0   r=   r>   ó    )r   r   r"   r  r   )ÚbaseKeyr2   Úkey1Úkey2r.   r.   r/   Ú	deriveKeya  s   
..r  c                 C   sH   t |ƒ\}}t|tƒ}t|tƒ}| | d d… ¡| | dd … ¡ }|S )NrB   )r  r&   r#   Údecrypt)ÚcryptedHashÚridÚKey1ÚKey2ÚCrypt1ÚCrypt2ÚdecryptedHashr.   r.   r/   ÚremoveDESLayerp  s
   

$r'  c                 C   sX   t |ƒ}t d¡}| | ¡ | |d ¡ | ¡ }t|ƒ}| |dd … ¡}|dd … S )NÚmd5rt   rJ   r:   )rs   r   ÚnewÚupdateÚdigestr%   r  )Ú
sessionKeyÚ	attributeÚencryptedPayloadr(  ÚfinalMD5ÚcipherÚ	plainTextr.   r.   r/   ÚDecryptAttributeValuez  s   

r2  c                 C   sü   t | d¡d ƒ}t|ƒ ¡ dd … }|dk r t|d d… ƒ}nt|d d… ƒ}d}t| ƒ}t| ƒD ]\}}|d d |krDd	}|} nq2|du rctƒ }	||	d
< t|ƒ|	d d< ||	d d< |  |	¡ |d }
|dkro|
d7 }
|}t	ƒ }|d> |
 |d< |S )NÚ.r
  r=   rl   éþÿÿÿTr=  r9  Fr<  r8  rn   ro   rJ   r;   )
ÚintÚsplitr$   rf   Úlistr  Ú	enumerater;  r  r0  )ÚprefixTableÚoidÚ	lastValueÚ	binaryOIDÚ	oidPrefixÚfToAddÚposÚjr‹   ÚentryÚ	lowerWordÚ	upperWordrs  r.   r.   r/   Ú	MakeAttidŽ  s4   ý
rD  c                 C   sÞ   |d }|d }d }t | ƒD ]G\}}|d |krU|d d d |d d … }|dk r3| td|ƒ¡ n |dkr;|d8 }| td|d d d ƒ¡ | td|d ƒ¡  nq|d u r\d S tt d	tdt|ƒƒ d
 |¡ ¡ƒS )Nrp   r<  r=  r9  r8  rl   ÚBro   ó   r  )r8  r  r   Ústrr$   Úloadr  r  )r9  ÚattrrC  rB  r<  r@  r‹   r.   r.   r/   ÚOidFromAttidº  s"   ÷&rJ  Ú__main__z1.2.840.113556.1.4.94z2.5.6.2z1.2.840.113556.1.2.1z1.2.840.113556.1.3.223z1.2.840.113556.1.5.7000.53N)r.   (R  Ú
__future__r   r   Úbuiltinsr   Ú	unicryptor   Ústructr   Úsixr   Úaiosmbr   r  Úaiosmb.dcerpc.v5.ndrr	   r
   r   r   r   r   r   Úaiosmb.dcerpc.v5.dtypesr   r   r   r   r   r   r   r   r   r   r   Úaiosmb.dcerpc.v5r   r   Úaiosmb.dcerpc.v5.structurer   Úaiosmb.dcerpc.v5.uuidr   r   Úaiosmb.dcerpc.v5.enumr    Úaiosmb.dcerpc.v5.rpcrtr!   Úunicrypto.symmetricr"   r#   Úasn1crypto.corer$   r%   r&   ÚMSRPC_UUID_DRSUAPIr'   r9   ÚEXOP_FSMO_REQ_ROLEÚEXOP_FSMO_REQ_RID_ALLOCÚEXOP_FSMO_RID_REQ_ROLEÚEXOP_FSMO_REQ_PDCÚEXOP_FSMO_ABANDON_ROLEÚEXOP_REPL_OBJÚEXOP_REPL_SECRETSr0  r‚  ÚDRS_EXT_BASEÚDRS_EXT_ASYNCREPLÚDRS_EXT_REMOVEAPIÚDRS_EXT_MOVEREQ_V2ÚDRS_EXT_GETCHG_DEFLATEÚDRS_EXT_DCINFO_V1Ú DRS_EXT_RESTORE_USN_OPTIMIZATIONÚDRS_EXT_ADDENTRYÚDRS_EXT_KCC_EXECUTEÚDRS_EXT_ADDENTRY_V2Ú DRS_EXT_LINKED_VALUE_REPLICATIONÚDRS_EXT_DCINFO_V2Ú$DRS_EXT_INSTANCE_TYPE_NOT_REQ_ON_MODÚDRS_EXT_CRYPTO_BINDÚDRS_EXT_GET_REPL_INFOÚDRS_EXT_STRONG_ENCRYPTIONÚDRS_EXT_DCINFO_VFFFFFFFFÚDRS_EXT_TRANSITIVE_MEMBERSHIPÚDRS_EXT_ADD_SID_HISTORYÚDRS_EXT_POST_BETA3ÚDRS_EXT_GETCHGREQ_V5ÚDRS_EXT_GETMEMBERSHIPS2ÚDRS_EXT_GETCHGREQ_V6ÚDRS_EXT_NONDOMAIN_NCSÚDRS_EXT_GETCHGREQ_V8ÚDRS_EXT_GETCHGREPLY_V5ÚDRS_EXT_GETCHGREPLY_V6ÚDRS_EXT_GETCHGREPLY_V9ÚDRS_EXT_WHISTLER_BETA3ÚDRS_EXT_W2K3_DEFLATEÚDRS_EXT_GETCHGREQ_V10Ú*DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART2Ú*DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART3ÚDRS_EXT_ADAMÚDRS_EXT_LH_BETA2ÚDRS_EXT_RECYCLE_BINÚDRS_ASYNC_OPÚDRS_GETCHG_CHECKÚDRS_UPDATE_NOTIFICATIONÚDRS_ADD_REFÚDRS_SYNC_ALLÚDRS_DEL_REFÚDRS_WRIT_REPÚDRS_INIT_SYNCÚDRS_PER_SYNCÚDRS_MAIL_REPÚDRS_ASYNC_REPÚDRS_IGNORE_ERRORÚDRS_TWOWAY_SYNCÚDRS_CRITICAL_ONLYÚDRS_GET_ANCÚDRS_GET_NC_SIZEÚDRS_LOCAL_ONLYÚDRS_NONGC_RO_REPÚDRS_SYNC_BYNAMEÚ
DRS_REF_OKÚDRS_FULL_SYNC_NOWÚDRS_NO_SOURCEÚDRS_FULL_SYNC_IN_PROGRESSÚDRS_FULL_SYNC_PACKETÚDRS_SYNC_REQUEUEÚDRS_SYNC_URGENTÚDRS_REF_GCSPNÚDRS_NO_DISCARDÚDRS_NEVER_SYNCEDÚDRS_SPECIAL_SECRET_PROCESSINGÚDRS_INIT_SYNC_NOWÚDRS_PREEMPTEDÚDRS_SYNC_FORCEDÚDRS_DISABLE_AUTO_SYNCÚDRS_DISABLE_PERIODIC_SYNCÚDRS_USE_COMPRESSIONÚDRS_NEVER_NOTIFYÚDRS_SYNC_PASÚDRS_GET_ALL_GROUP_MEMBERSHIPÚBNDÚSSLÚUDPÚGCÚGSSÚNGOÚSPLÚMD5ÚSGNÚSLÚNTDSAPI_CLIENT_GUIDÚNULLGUIDr   ÚDS_NAME_FLAG_GCVERIFYÚDS_NAME_FLAG_TRUST_REFERRALÚ!DS_NAME_FLAG_PRIVATE_RESOLVE_FPOSÚDS_LIST_SITESÚDS_LIST_SERVERS_IN_SITEÚDS_LIST_DOMAINS_IN_SITEÚ"DS_LIST_SERVERS_FOR_DOMAIN_IN_SITEÚDS_LIST_INFO_FOR_SERVERÚDS_LIST_ROLESÚDS_NT4_ACCOUNT_NAME_SANS_DOMAINÚDS_MAP_SCHEMA_GUIDÚDS_LIST_DOMAINSÚDS_LIST_NCSÚDS_ALT_SECURITY_IDENTITIES_NAMEÚDS_STRING_SID_NAMEÚ DS_LIST_SERVERS_WITH_DCS_IN_SITEÚDS_LIST_GLOBAL_CATALOG_SERVERSÚ"DS_NT4_ACCOUNT_NAME_SANS_DOMAIN_EXÚ#DS_USER_PRINCIPAL_NAME_AND_ALTSECIDÚ DS_USER_PRINCIPAL_NAME_FOR_LOGONÚENTINF_FROM_MASTERÚENTINF_DYNAMIC_OBJECTÚENTINF_REMOTE_MODIFYÚDRS_VERIFY_DSNAMESÚDRS_VERIFY_SIDSÚDRS_VERIFY_SAM_ACCOUNT_NAMESÚDRS_VERIFY_FPOSÚDRS_NT4_CHGLOG_GET_CHANGE_LOGÚ!DRS_NT4_CHGLOG_GET_SERIAL_NUMBERSÚ)DRS_MSG_GETCHGREPLY_NATIVE_VERSION_NUMBERrs   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ñ   rö   r÷   rø   rù   rú   rü   rý   r  r  r
  r  r  r!  r,  r-  r.  r/  r2  r6  r7  r;  r>  r?  r@  rC  rO  rR  rT  rW  rY  r]  r`  rc  rj  rm  rn  ro  rr  ru  rv  rw  rz  r|  r}  r~  rƒ  r„  r‡  r‰  r�  r–  r   r¤  r¦  r¨  r©  rª  r«  r®  r±  r¸  r¹  rº  r»  r¼  ÚREPLVALINF_NATIVEr¾  rÇ  rÌ  rÐ  ÚDRS_MSG_GETCHGREPLY_NATIVErÑ  rÔ  r×  rØ  rÛ  rÜ  rà  rá  rè  rí  rî  rò  rö  r÷  rù  rÿ  r  r  r  r  r  r  r  r	  ÚOPNUMSr  r  r  r  r  r  r'  r2  rD  rJ  r6   r9  Úoid0Úoid1Úoid2Úoid3Úoid4Úo0r`   ÚhexÚo1Úo2Úo3Úo4Újjr.   r.   r.   r/   Ú<module>   s‚  $4$					
					






ú	

,å