o
    àý°j ,  ã                   @   sŒ  d dl Z d dlZd dlmZ d dlmZmZ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ejejB ejB ejB ejB ejB ZG dd„ de
ƒZejejB ejB ejB ZG dd„ de
ƒZ G dd„ de
ƒZ!G dd„ de
ƒZ"G dd„ de
ƒZ#G dd „ d e
ƒZ$G d!d"„ d"e
ƒZ%G d#d$„ d$e
ƒZ&G d%d&„ d&eƒZ'dS )'é    N©Úarray_tobytes)ÚProtocolPacketÚByteÚBit)Úreducec                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚArrayBuilderc                 C   s   |S ©N© ©ÚselfÚaryr   r   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/wps.pyÚfrom_ary   ó   zArrayBuilder.from_aryc                 C   ó   t   d|¡S ©NÚB©Úarray©r   Úvaluer   r   r   Úto_ary   ó   zArrayBuilder.to_aryN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r	      ó    r	   c                   @   r   )ÚByteBuilderc                 C   s   |d S ©Nr   r   r   r   r   r   r   $   ó   zByteBuilder.from_aryc                 C   s   t   d|g¡S r   r   r   r   r   r   r   '   ó   zByteBuilder.to_aryNr   r   r   r   r   r    "   r   r    c                   @   r   )ÚStringBuilderc                 C   s   t |ƒS r
   r   r   r   r   r   r   +   r"   zStringBuilder.from_aryc                 C   r   r   r   r   r   r   r   r   .   r   zStringBuilder.to_aryNr   r   r   r   r   r$   *   s    r$   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú
NumBuilderzHConverts back and forth between arrays and numbers in network byte-orderc                 C   s
   || _ dS )z"size: number of bytes in the fieldN)Úsize)r   r&   r   r   r   Ú__init__4   s   
zNumBuilder.__init__c                 C   s4   t |ƒ| jkrtd| jt |ƒf ƒ‚tdd„ |dƒS )NzExpected %s size but got %sc                 S   s   | d | S )Né   r   )ÚacÚxr   r   r   Ú<lambda>;   s    z%NumBuilder.from_ary.<locals>.<lambda>r   )Úlenr&   Ú	Exceptionr   r   r   r   r   r   8   s   zNumBuilder.from_aryc                 C   s\   |}t   d¡}t| jƒD ]}t|dƒ\}}| |¡ q|dkr(td|| jf ƒ‚| ¡  |S )Nr   r(   r   z%s is too big. Max size: %s)r   Úranger&   ÚdivmodÚappendr-   Úreverse)r   Úvalue0r   ÚrvÚ_Úmodr   r   r   r   =   s   
zNumBuilder.to_aryN)r   r   r   Ú__doc__r'   r   r   r   r   r   r   r%   1   s
    r%   c                   @   s–   e Zd Zdd„ Zdd„ Zeƒ dfdd„Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd#dd„Zdd „ Zd!d"„ ZdS )$ÚTLVContainerc                 C   s   | j  || j¡S r
   )ÚbuildersÚgetÚdefault_builder©r   Úkindr   r   r   ÚbuilderL   s   zTLVContainer.builderc                 C   sl   d}|t |ƒk r4|  ||¡}|  ||d ¡}|d7 }|||| … }| j ||f¡ ||7 }|t |ƒk s| S )Nr   é   é   )r,   Úary2nÚelemsr0   )r   r   Úir<   Úlengthr   r   r   r   r   O   s   úzTLVContainer.from_aryNc                 C   s    || _ || _g | _|pi | _d S r
   )r8   r:   rA   Údescs)r   r8   r:   rD   r   r   r   r'   [   s   zTLVContainer.__init__c                 C   s    | j  ||  |¡ |¡f¡ d S r
   )rA   r0   r=   r   )r   r<   r   r   r   r   r0   a   ó    zTLVContainer.appendc                    s   ‡ fdd„ˆ j D ƒS )Nc                 3   s(   � | ]\}}|ˆ   |¡ |¡fV  qd S r
   ©r=   r   ©Ú.0ÚkÚv©r   r   r   Ú	<genexpr>e   s   €& z(TLVContainer.__iter__.<locals>.<genexpr>)rA   rK   r   rK   r   Ú__iter__d   ó   zTLVContainer.__iter__c                    s   ‡ fdd„| D ƒS )Nc                    s    g | ]}|d  ˆ kr|d ‘qS )r   é   r   )rH   Úe©r<   r   r   Ú
<listcomp>h   s     z$TLVContainer.all.<locals>.<listcomp>r   r;   r   rQ   r   Úallg   ó   zTLVContainer.allc                 C   s   t |  |¡ƒdkS r!   )r,   rS   r;   r   r   r   Ú__contains__j   rT   zTLVContainer.__contains__c                 C   s   |   |¡d S r!   )rS   r;   r   r   r   Úfirstm   r#   zTLVContainer.firstc                 C   sL   t   d¡}| jD ]\}}| |  |¡¡ | |  t|ƒ¡¡ | |¡ q|S r   )r   rA   ÚextendÚn2aryr,   )r   r   rI   rJ   r   r   r   r   p   s   
zTLVContainer.to_aryc                 C   s   t |  ¡ ƒS r
   )r   r   rK   r   r   r   Ú
get_packetz   r   zTLVContainer.get_packetc                 C   s
   || _ d S r
   ©Ú_TLVContainer__parent)r   Ú	my_parentr   r   r   Ú
set_parent}   s   
zTLVContainer.set_parentc                 C   s   | j S r
   rZ   rK   r   r   r   Úparent€   s   zTLVContainer.parentc                 C   s   t   dt d|¡¡S )Nr   ú>H)r   ÚstructÚpack)r   Únr   r   r   rX   ƒ   rN   zTLVContainer.n2aryr   c                 C   s    t  dt|||d … ƒ¡d S )Nr_   r>   r   )r`   Úunpackr   )r   r   rB   r   r   r   r@   †   rE   zTLVContainer.ary2nc                    s*   ‡fdd„‰ dt ‡ ‡fdd„ˆjD ƒƒ S )Nc                    s   | ˆ j v r
ˆ j |  S | S r
   )rD   rQ   rK   r   r   ÚdescŠ   s   z#TLVContainer.__repr__.<locals>.descz<TLVContainer %s>c                    s(   g | ]\}}ˆ |ƒˆ  |¡ |¡f‘qS r   rF   rG   ©rd   r   r   r   rR   �   s   ( z)TLVContainer.__repr__.<locals>.<listcomp>)ÚreprrA   rK   r   re   r   Ú__repr__‰   s   zTLVContainer.__repr__c                 C   s   d S r
   r   rK   r   r   r   Úchild�   r   zTLVContainer.child)r   )r   r   r   r=   r   r	   r'   r0   rM   rS   rU   rV   r   rY   r]   r^   rX   r@   rg   rh   r   r   r   r   r7   J   s"    

r7   c                   @   sd  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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#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWS )XÚSCElemi  i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   i!  i"  i#  i$  i&  i'  i(  i)  i*  i,  i-  i/  i0  i1  i2  i3  i4  i5  i6  i7  i8  i9  i:  i;  i<  i=  i>  i?  i@  iA  iB  iD  iE  iF  iG  iH  iI  iJ  iK  iL  iM  iN  iO  iP  iQ  iR  iS  iT  iU  iV  iW  iX  iY  i`  ia  ib  ic  id  N)Yr   r   r   Ú
AP_CHANNELÚASSOCIATION_STATEÚAUTHENTICATION_TYPEÚAUTHENTICATION_TYPE_FLAGSÚAUTHENTICATORÚCONFIG_METHODSÚCONFIGURATION_ERRORÚCONFIRMATION_URL4ÚCONFIRMATION_URL6ÚCONNECTION_TYPEÚCONNECTION_TYPE_FLAGSÚ
CREDENTIALÚDEVICE_NAMEÚDEVICE_PASSWORD_IDÚE_HASH1ÚE_HASH2Ú	E_SNONCE1Ú	E_SNONCE2ÚENCRYPTED_SETTINGSÚENCRYPTION_TYPEÚENCRYPTION_TYPE_FLAGSÚENROLLEE_NONCEÚ
FEATURE_IDÚIDENTITYÚINDENTITY_PROOFÚKEY_WRAP_AUTHENTICATORÚKEY_IDENTIFIERÚMAC_ADDRESSÚMANUFACTURERÚMESSAGE_TYPEÚ
MODEL_NAMEÚMODEL_NUMBERÚNETWORK_INDEXÚNETWORK_KEYÚNETWORK_KEY_INDEXÚNEW_DEVICE_NAMEÚNEW_PASSWORDÚOOB_DEVICE_PASSWORDÚ
OS_VERSIONÚPOWER_LEVELÚPSK_CURRENTÚPSK_MAXÚ
PUBLIC_KEYÚRADIO_ENABLEDÚREBOOTÚREGISTRAR_CURRENTÚREGISTRAR_ESTABLISHEDÚREGISTRAR_LISTÚREGISTRAR_MAXÚREGISTRAR_NONCEÚREQUEST_TYPEÚRESPONSE_TYPEÚRF_BANDSÚR_HASH1ÚR_HASH2Ú	R_SNONCE1Ú	R_SNONCE2ÚSELECTED_REGISTRARÚSERIAL_NUMBERÚ	WPS_STATEÚSSIDÚTOTAL_NETWORKSÚUUID_EÚUUID_RÚVENDOR_EXTENSIONÚVERSIONÚX_509_CERTIFICATE_REQUESTÚX_509_CERTIFICATEÚEAP_IDENTITYÚMESSAGE_COUNTERÚPUBLIC_KEY_HASHÚ	REKEY_KEYÚKEY_LIFETIMEÚPERMITTED_CONFIG_METHODSÚ!SELECTED_REGISTRAR_CONFIG_METHODSÚPRIMARY_DEVICE_TYPEÚSECONDARY_DEVICE_TYPE_LISTÚPORTABLE_DEVICEÚAP_SETUP_LOCKEDÚAPPLICATION_EXTENSIONÚEAP_TYPEÚINITIALIZATION_VECTORÚKEY_PROVIDED_AUTOMATICALLYÚ_802_1X_ENABLEDÚAPP_SESSION_KEYÚWEP_TRANSMIT_KEYr   r   r   r   ri   ’   s®    ri   c                   @   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 )ÚMessageTypez4Message types according to WPS 1.0h spec, section 11rO   r>   é   r?   é   é   é   é   é	   é
   é   é   é   é   é   N)r   r   r   r6   ÚBEACONÚPROBE_REQUESTÚPROBE_RESPONSEÚM1ÚM2ÚM2DÚM3ÚM4ÚM5ÚM6ÚM7ÚM8ÚWSC_ACKÚWSC_NACKÚWSC_DONEr   r   r   r   rÀ   ì   s"    rÀ   c                   @   ó$   e Zd ZdZdZdZdZdZdZdS )ÚAuthTypeFlagrO   r>   r?   rÅ   é   é    N)	r   r   r   ÚOPENÚWPAPSKÚSHAREDÚWPAÚWPA2ÚWPA2PSKr   r   r   r   rÝ   ÿ   ó    rÝ   c                   @   s   e Zd ZdZdZdZdZdS )ÚEncryptionTypeFlagrO   r>   r?   rÅ   N)r   r   r   ÚNONEÚWEPÚTKIPÚAESr   r   r   r   rç     s
    rç   c                   @   ó   e Zd ZdZdZdS )ÚConnectionTypeFlagrO   r>   N)r   r   r   ÚESSÚIBSSr   r   r   r   rí     ó    rí   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )ÚConfigMethodrO   r>   r?   rÅ   rÞ   rß   é@   é€   r(   N)r   r   r   ÚUSBAÚETHERNETÚLABELÚDISPLAYÚEXT_NFC_TOKENÚINT_NFC_TOKENÚNFC_INTERFACEÚ
PUSHBUTTONÚKEYPADr   r   r   r   rñ     s    rñ   c                   @   rÜ   )ÚOpCoderO   r>   rÁ   r?   rÂ   rÃ   N)	r   r   r   Ú	WSC_STARTrÙ   rÚ   ÚWSC_MSGrÛ   ÚWSC_FRAG_ACKr   r   r   r   rý   &  ræ   rý   c                   @   s    e Zd ZdZdZdZdZdZdS )Ú
AssocStater   rO   r>   )rÁ   r?   N)r   r   r   Ú	NOT_ASSOCÚCONN_SUCCESSÚCFG_FAILUREÚFAILUREÚ
IP_FAILUREr   r   r   r   r  .  s    r  c                   @   sX   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ZdZdZdS )ÚConfigErrorr   rO   r>   rÁ   r?   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÞ   é   é   N)r   r   r   ÚNO_ERRORÚOOB_IFACE_READ_ERRORÚDECRYPTION_CRC_FAILUREÚ_24_CHAN_NOT_SUPPORTEDÚ_50_CHAN_NOT_SUPPORTEDÚSIGNAL_TOO_WEAKÚNETWORK_AUTH_FAILUREÚNETWORK_ASSOC_FAILUREÚNO_DHCP_RESPONSEÚFAILED_DHCP_CONFIGÚIP_ADDR_CONFLICTÚNO_CONN_TO_REGISTRARÚMULTIPLE_PBC_DETECTEDÚROGUE_SUSPECTEDÚDEVICE_BUSYÚSETUP_LOCKEDÚMSG_TIMEOUTÚREG_SESS_TIMEOUTÚDEV_PASSWORD_AUTH_FAILUREr   r   r   r   r  5  s(    r  c                   @   rÜ   )ÚDevicePasswordIdr   rO   r>   rÁ   r?   rÂ   N)	r   r   r   ÚDEFAULTÚUSER_SPECIFIEDÚMACHINE_SPECIFIEDÚREKEYrû   ÚREGISTRAR_SPECIFIEDr   r   r   r   r  J  ræ   r  c                   @   rì   )ÚWpsStaterO   r>   N)r   r   r   ÚNOT_CONFIGUREDÚ
CONFIGUREDr   r   r   r   r#  R  rð   r#  c                   @   s  e Zd ZdZdZdZedƒZedƒZe	ddƒZ
e	ddƒZi ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “ejeƒ “i ejeƒ “eje ƒ “ej!e ƒ “ej"e ƒ “ej#e ƒ “ej$e ƒ “ej%e ƒ “ej&e ƒ “ej'e ƒ “ej(e ƒ “ej)e ƒ “ej*e ƒ “ej+e ƒ “ej,e-dƒ“ej.e-dƒ“ej/e-dƒ“ej0e-dƒ“¥ej1e-dƒej2e-dƒej3e-dƒej4e-dƒej5e-dƒej6e-dƒej7e-dƒej8e-dƒej9e-dƒej:e-dƒi
¥Z;e<dd	„ ƒZ=d
S )ÚSimpleConfigzYFor now, it supports Simple configs with the bits more_fragments and length_field not setr>   r   rO   rÅ   r?   éÀ   c                 C   s"   t tjtdd„ tj ¡ D ƒƒd�S )Nc                 s   s   � | ]	\}}||fV  qd S r
   r   rG   r   r   r   rL   ˜  s   € z3SimpleConfig.build_tlv_container.<locals>.<genexpr>)r8   rD   )r7   r&  ÚBUILDERSÚdictri   Ú__dict__Úitems)Úclsr   r   r   Úbuild_tlv_container”  s   þz SimpleConfig.build_tlv_containerN)>r   r   r   r6   Úheader_sizeÚ	tail_sizer   Úop_codeÚflagsr   Úmore_fragmentsÚlength_fieldri   rs   r    rt   r«   r‡   rŠ   rŒ   r‘   r’   r“   r—   rš   rœ   r�   rž   r¥   r§   r¿   rq   r$   rr   rv   r�   r†   rˆ   r‰   r�   rŽ   r¤   r®   r‹   rj   r%   rk   rl   rm   ro   rp   rw   r}   r~   r¯   r²   r³   r´   r”   r(  Úclassmethodr-  r   r   r   r   r&  W  s´    

ÿþýüûúùø	÷
öõôóòñðïîìëêéèçæåäãâá
!ß
"Þ
#Ý
$Ü
%








Ò2r&  )(r   r`   Úimpacket.ImpactPacketr   Úimpacket.helperr   r   r   Ú	functoolsr   Úobjectr	   r    r$   r%   r7   ri   rÀ   rÝ   rà   rá   râ   rã   rä   rå   ÚAuthTypeFlag_ALLrç   rè   ré   rê   rë   ÚEncryptionTypeFlag_ALLrí   rñ   rý   r  r  r  r#  r&  r   r   r   r   Ú<module>   sD   HZÿþýüû