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