
    hrc              
          d Z ddl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mZmZ ddlmZmZmZmZmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' dd	d
dZ(dddddddddd	Z) G d de          Z*i dddddddddd d!d"d#d$d%d&d'd&d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7i d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYi dZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddZ+dddddddZ, G d de          Z- G d de-          Z. G d de-          Z/ G d de-          Z0 G d de-          Z1 G d de-          Z2 G d de-          Z3 G d de          Z4dddddddddZ5ddddddZ6 G d de          Z7 G d de          Z8 G d de          Z9 G d de          Z: G d de8          Z; G d de8          Z< G d de8          Z= G d de8          Z> G d de8          Z? G d de8          Z@ G d de          ZA G d de          ZB ee*e-d            ee*e4d            ee*eBd!            eee*d            eee*dd            ee e*d            ee"e*d¦            ee!e*d           dS )z*
Extensible Authentication Protocol (EAP)
    N)BitEnumFieldBitFieldByteEnumField	ByteFieldConditionalFieldFieldLenFieldFieldListFieldIntFieldLenField	LongFieldPacketFieldPacketListFieldPadField
ShortFieldStrLenField
XByteField	XIntField	XStrFieldXStrFixedLenFieldXStrLenField)PacketPaddingbind_bottom_upbind_layersbind_top_down)SourceMACFieldEtherCookedLinuxGRESNAP)conf)orbchbz802.1X-2001z802.1X-2004z802.1X-2010         z
EAP-PacketzEAPOL-StartzEAPOL-Logoffz	EAPOL-KeyzEAPOL-Encapsulated-ASF-Alertz	EAPOL-MKAzEAPOL-Announcement (Generic)zEAPOL-Announcement (Specific)zEAPOL-Announcement-Req)	r   r%   r&   r'                  c                       e Zd ZdZd Z edde           edde           eddd          gZ	dZ
dZd	Zd
ZdZd Zd Zd Zd ZdS )EAPOLz&
    EAPOL - IEEE Std 802.1X-2010
    versionr%   typer   lenNHr&   r'   r(   c                 8    | j         }|d |         ||d          fS Nr1   )selfstmp_lens      T/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/eap.pyextract_paddingzEAPOL.extract_paddinge   s$    ('{AghhK''    c                 ^    t          | j                  | j                                        z   S r4   )r#   r0   payloadhashretr6   s    r9   r>   zEAPOL.hashreti   s#    49~~ 4 4 6 666r;   c                     t          |t                    r?| j        | j        k    r/|j        | j        k    r| j                            |j                  S dS )Nr   )
isinstancer.   r0   
EAP_PACKETr=   answersr6   others     r9   rC   zEAPOL.answersl   sO    eU## 	;do--Z4?22|++EM:::qr;   c                 ,    |                      d          S )NzEAPOL %EAPOL.type%)sprintfr?   s    r9   	mysummaryzEAPOL.mysummarys   s    ||0111r;   )__name__
__module____qualname____doc__namer   eapol_versionseapol_typesr   fields_descrB   STARTLOGOFFKEYASFr:   r>   rC   rH    r;   r9   r.   r.   S   s          DiN33fa--c""K JEF
C
C( ( (7 7 7  2 2 2 2 2r;   r.   Reservedr%   Identityr&   Notificationr'   z
Legacy Nakr(   zMD5-Challenger)   zOne-Time Password (OTP)r*   zGeneric Token Card (GTC)r+   zAllocated - RFC3748r,   	   zRSA Public Key Authentication
   zDSS Unilateral   KEA   zKEA-VALIDATE   EAP-TLS   zDefender Token (AXENT)   zRSA Security SecurID EAP   zArcot Systems EAP   zEAP-Cisco Wireless   z)GSM Subscriber Identity Modules (EAP-SIM)   zSRP-SHA1   
Unassigned   EAP-TTLS   zRemote Access Service   zEAP-AKA Authentication   zEAP-3Com Wireless   PEAP   zMS-EAP-Authentication   z+Mutual Authentication w/Key Exchange (MAKE)   
CRYPTOCard   zEAP-MSCHAP-V2   DynamID   zRob EAP    zProtected One-Time Password!   zMS-Authentication-TLV"   	SentriNET#   zEAP-Actiontec Wireless$   z,Cogent Systems Biometrics Authentication EAP%   zAirFortress EAP&   zEAP-HTTP Digest'   zSecureSuite EAP(   zDeviceConnect EAP)   z	EAP-SPEKE*   z	EAP-MOBAC+   EAP-FAST,   zZoneLabs EAP (ZLXEAP)-   zEAP-Link.   zEAP-PAX/   zEAP-PSK0   zEAP-SAKE1   z	EAP-IKEv22   zEAP-AKAzEAP-GPSKzEAP-pwdzEAP-EKE Version 1zEAP Method Type for PT-EAPTEAPzReserved for the Expanded TypeExperimental)3   4   5   6   7         RequestResponseSuccessFailureInitiateFinish)r%   r&   r'   r(   r)   r*   c                      e Zd ZdZd Z edde           edd           edd           e	 edde
          d	            e	 ed
g  edde
          d           d            e	 eddd           d            e	 eddd           d           gZdZdZdZdZdZdZi Zed             Zed!d            Zd Zd Zd Zd  ZdS )"EAPz=
    RFC 3748 - Extensible Authentication Protocol (EAP)
    coder(   idr   r1   Nr0   c                 @    | j         t          j        t          j        fvS r4   )r   r   SUCCESSFAILUREpkts    r9   <lambda>zEAP.<lambda>   s    CH [#+57 %7 r;   desired_auth_types	auth_typec                     | j         dz
  S )Nr(   r5   r   s    r9   r   zEAP.<lambda>   s    37Q; r;   length_fromc                 B    | j         t          j        k    o
| j        dk    S )Nr'   )r   r   RESPONSEr0   r   s    r9   r   zEAP.<lambda>   s    sx3</ACHM r;   identity c                     | j         dz
  S Nr)   r5   r   s    r9   r   zEAP.<lambda>   s    ! r;   c                 b    | j         t          j        k    ot          | d          o
| j        dk    S Nr0   r%   )r   r   r   hasattrr0   r   s    r9   r   zEAP.<lambda>   s*    CL0[WS&5I5I[chZ[m r;   messagec                     | j         dz
  S r   r5   r   s    r9   r   zEAP.<lambda>   s    sw{ r;   c                 b    | j         t          j        k    ot          | d          o
| j        dk    S r   )r   r   REQUESTr   r0   r   s    r9   r   zEAP.<lambda>   s*    CK/ZGC4H4HZSXYZ] r;   r%   r&   r'   r)   r*   c                 .    | | j         | j        j        <   d S r4   )registered_methodsr0   default)clss    r9   register_variantzEAP.register_variant   s    36sx/000r;   c                     |r\t          |d                   }|dv rCt          |          dk    r0t          |d                   }| j                            ||           S | S )Nr   r%   r&   r)   r(   )r"   r1   r   get)r   _pktargskargscts         r9   dispatch_hookzEAP.dispatch_hook   s]     	:DGAF{{s4yyA~~QLL-11!S999
r;   c                     t          |t                    rW| j        | j        k    rdS | j        | j        k    r#|j        | j        k    r|j        | j        k    rdS n|j        | j        k    rdS dS )Nr   r%   )rA   r   r   r   r   r0   rD   s     r9   rC   zEAP.answers	  st    eS!! 	yDL((qdm++Z4<//ty001t},,qqr;   c                     d                     | j        j                  }| j        dk    r8| j        t
          j        k    r#|d                     | j        j                  z  }|                     |          S )Nz)EAP %{eap_class}.code% %{eap_class}.type%)	eap_classr%   z %{eap_class}.identity%)format	__class__rI   r0   r   r   r   rG   )r6   summary_strs     r9   rH   zEAP.mysummary  s~    AHHn- I 
 
 9>>di3<774;;.1 <   K ||K(((r;   c                     | j         _t          |          t          |          z   }|d d         t          |dz	  dz            z   t          |dz            z   }||dd          z   }||z   S )Nr&   r,   r   r(   )r1   r#   )r6   ppayr8   tmp_ps        r9   
post_buildzEAP.post_build  sn    8!ffs3xx'GbqbECA 5666Wt^9L9LLE!""A3wr;   c                     t           S r4   )r   )r6   _s     r9   guess_payload_classzEAP.guess_payload_class&  s    r;   r4   )rI   rJ   rK   rL   rM   r   	eap_codesr   r   r   	eap_typesr	   r   rP   r   r   r   r   INITIATEFINISHr   classmethodr   r   rC   rH   r   r   rU   r;   r9   r   r      s         Dfa++	$
5$vq)<<7 7	8 	8 	N/(=aCC'>'>@ @ @ BA		C 	C
 	K
B4K4KLLL[[	] 	] 	K	23J3JKKKZZ	\ 	\K6 GHGGHF7 7 [7    [
 
 
) ) )      r;   r   c                       e Zd ZdZdZdZ edde           edd           e	dd	d
dd            edde
           e	dd	dd           eddd            eddd           gZd	S )EAP_MD5z?
    RFC 3748 - "Extensible Authentication Protocol (EAP)"
    zEAP-MD5Tr   r%   r   r   r1   Nr2   optional_namec                      |dz   | j         pdz   S )Nr*   r   
value_sizer   xs     r9   r   zEAP_MD5.<lambda>5  s    !a%1<3D1*E r;   fmt	length_ofadjustr0   r(   r   Bvalue)r   r   r   c                     | j         S r4   r   r   s    r9   r   zEAP_MD5.<lambda>8  s     r;   r   c                 F    | j         | j        dn| j         | j        z
  dz
  S )Nr   r*   )r1   r   r   s    r9   r   zEAP_MD5.<lambda>9  s<    QU]VWVbVjqrqvyz  zF  rF  IJ  rJ r;   )rI   rJ   rK   rL   rM   match_subclassr   r   r   r   r   r   rP   rU   r;   r9   r   r   *  s          DNfa++	$eTsoEE	G 	G 	Gfa++lDcWEEEWb.D.DEEE_b  7K  7K  	L  	L  	L	KKKr;   r   c                   ,   e Zd ZdZdZdZ edde           edd           e	dd	d
dd            edde
           eddd           eddd           eddd           eddd           e edd          d            eddd           g
Zd	S )EAP_TLSz:
    RFC 5216 - "The EAP-TLS Authentication Protocol"
    r_   Tr   r%   r   r   r1   Nr2   tls_datac                 ,    | j         dk    r|dz   n|dz   S Nr%   rZ   r*   Lr   s     r9   r   zEAP_TLS.<lambda>H      AC1HH!b&&!a% r;   r   r0   r^   r   MSreservedr)   tls_message_lenc                     | j         dk    S Nr%   r   r   s    r9   r   zEAP_TLS.<lambda>N      SUaZ r;   r   c                 >    | j         dn| j         dd| j        z  z   z
  S Nr   r*   r(   r1   r   r   s    r9   r   zEAP_TLS.<lambda>O  )    #'/QQWZW^bcfgjmjofoboWp r;   r   rI   rJ   rK   rL   rM   r   r   r   r   r   r   r   r   r
   r   rP   rU   r;   r9   r   r   =  s          DNfa++	$eTsjGG	I 	I 	Ifb),,aaaQ"""3Q779O9OPPZ1p1pqqqKKKr;   r   c                   D   e Zd ZdZdZdZ edde           edd           e	dd	d
dd            edde
           eddd           eddd           eddd           eddd           eddd           e edd          d            eddd           gZd	S )EAP_TTLSz
    RFC 5281 - "Extensible Authentication Protocol Tunneled Transport Layer
    Security Authenticated Protocol Version 0 (EAP-TTLSv0)"
    ri   Tr   r%   r   r   r1   Nr2   datac                 ,    | j         dk    r|dz   n|dz   S r   r   r   s     r9   r   zEAP_TTLS.<lambda>_  r   r;   r   r0   rh   r   r   r   r   r&   r/   r'   message_lenc                     | j         dk    S r   r   r   s    r9   r   zEAP_TTLS.<lambda>f      ! r;   r   c                 >    | j         dn| j         dd| j        z  z   z
  S r   r   r   s    r9   r   zEAP_TTLS.<lambda>g  )    cgoSVSZ^_bcfifkbk^kSl r;   r   r   rU   r;   r9   r   r   S          
 DNfa++	$eTsfGG	I 	I 	Ifb),,aaaQ""Aq!!-335K5KLLVR-l-lmmmKKKr;   r   c                   D   e Zd ZdZdZdZ edde           edd           e	dd	d
dd            edde
           eddd           eddd           eddd           eddd           eddd           e edd          d            eddd           gZd	S )EAP_PEAPzU
    draft-josefsson-pppext-eap-tls-eap-05.txt - "Protected EAP Protocol (PEAP)"
    rn   Tr   r%   r   r   r1   Nr2   r   c                 ,    | j         dk    r|dz   n|dz   S r   r   r   s     r9   r   zEAP_PEAP.<lambda>v  r   r;   r   r0   rm   r   r   r   r   r'   r/   r&   r   c                     | j         dk    S r   r   r   s    r9   r   zEAP_PEAP.<lambda>}  r   r;   r   c                 >    | j         dn| j         dd| j        z  z   z
  S r   r   r   s    r9   r   zEAP_PEAP.<lambda>~  r   r;   r   r   rU   r;   r9   r	  r	  k  s         DNfa++	$eTsjGG	I 	I 	Ifb),,aaaQ""Aq!!"3Q779O9OPPZ1p1pqqqKKKr;   r	  c                   D   e Zd ZdZdZdZ edde           edd           e	dd	d
dd            edde
           eddd           eddd           eddd           eddd           eddd           e edd          d            eddd           gZd	S )EAP_FASTz
    RFC 4851 - "The Flexible Authentication via Secure Tunneling
    Extensible Authentication Protocol Method (EAP-FAST)"
    r   Tr   r%   r   r   r1   Nr2   r   c                 ,    | j         dk    r|dz   n|dz   S r   r   r   s     r9   r   zEAP_FAST.<lambda>  r   r;   r   r0   r   r   r   r   r   r&   r/   r'   r  c                     | j         dk    S r   r   r   s    r9   r   zEAP_FAST.<lambda>  r  r;   r   c                 >    | j         dn| j         dd| j        z  z   z
  S r   r   r   s    r9   r   zEAP_FAST.<lambda>  r  r;   r   r   rU   r;   r9   r  r    r  r;   r  c                       e Zd ZdZdZdZ edde           edd           e	dd	           ed
de
           edd           edd           edd	ddd            eddd            eddd           g	Zd	S )LEAPzN
    Cisco LEAP (Lightweight EAP)
    https://freeradius.org/rfc/leap.txt
    z
Cisco LEAPTr   r%   r   r   r1   Nr0   rc   r/   unusedcountchallenge_responser   c                 *    t          | j                  S r4   )r1   r  r   s     r9   r   zLEAP.<lambda>  s    TWXYXlTmTm r;   )r   r   c                     | j         S r4   )r  r   s    r9   r   zLEAP.<lambda>  s    !' r;   r   usernamec                 &    | j         d| j        z   z
  S )Nr,   )r1   r  r   s    r9   r   zLEAP.<lambda>  s    !%1QWCU:V r;   )rI   rJ   rK   rL   rM   r   r   r   r   r   r   r   r   r   r   rP   rU   r;   r9   r  r    s         
 DNfa++	$
5$fb),,	)Q
8Qgt%93GmGmnnn)2;Q;QRRRJ0V0VWWW
KKKr;   r  c                   d   e Zd Zd ZdddZ eddddd           ed	d
d           edd
d           edd
d           edd
d           edd
d           edd
d           eddd           edd
d           edd
d           edd
d           edd
dddd           edd
ddddd           edd d!           e	d"d
           e
d#d$d%           e
d&d$d'           e
d(d$d)           e
d*d$d)           e
d+d$d'           ed,d d-.           ed-d$d/ 0          gZd1 Zd2 Zd3 Zd4 Zd S )5	EAPOL_KEY)key_data2.6.0)
key_lengthr  )keyr1   key_descriptor_typer%   RC4RSNr   res2r   r&   smk_messageencrypted_key_datarequesterrorsecurehas_key_mickey_ackinstallreskey_typez	Group/SMKPairwise)r   r%   key_descriptor_type_versionr'   zHMAC-MD5+ARC4zHMAC-SHA1-128+AES-128zAES-128-CMAC+AES-128r$   r  Nr2   key_replay_counter	key_noncer   rw   key_ivrb   key_rscr,   key_idkey_mickey_data_lengthr  )r   c                     | j         S r4   )r7  r   s    r9   r   zEAPOL_KEY.<lambda>  s	    S-@ r;   r   c                 >    |d | j                  || j         d          fS r4   )r  r6   r7   s     r9   r:   zEAPOL_KEY.extract_padding  s'    !$/!"Ado&6&6$777r;   c                 j    t          j        d| j                  | j                                        z   S )Nz!B)structpackr0   r=   r>   r?   s    r9   r>   zEAPOL_KEY.hashret  s)    {4++dl.B.B.D.DDDr;   c                 T    t          |t                    r|j        | j        k    rdS dS )Nr%   r   )rA   r  descriptor_typerD   s     r9   rC   zEAPOL_KEY.answers  s/    eY'' 	%)===1qr;   c                     | j         dk    r5| j        dk    r| j        dk    rdS | j        dk    rdS n| j        dk    rdS dS dS )z{
        Determines 4-way handshake key number

        :return: key number (1-4), or 0 if it cannot be determined
        r%   r   r'   r&   r(   )r.  r+  r6  r,  r)  r?   s    r9   guess_key_numberzEAPOL_KEY.guess_key_number  se     =A|q  <1$$1<1$$1 % ;!##1qqr;   )rI   rJ   rK   rM   deprecated_fieldsr   r   r   r   r   r   r   r   rP   r:   r>   rC   rA  rU   r;   r9   r  r    s1       D$& 
 	+QEe0D0DEEA1%%%q!,,Aq!!!Q1a  1%%Aq!!Aq!!1ZA;:'F'FGG2Aq&%;
 ;
 	 	 	tS))	&**+r2..(B++)R++(B**)R,,'DDDZ!@!@	B 	B 	B9K@8 8 8E E E      r;   r  zLive Peer ListzPotential Peer ListzMACsec SAK UsezDistributed SAKzDistributed CAKKMDAnnouncementzICV Indicator)r%   r&   r'   r(   r)   r*   r+   r   MKALivePeerListParamSetMKAPotentialPeerListParamSetMKASAKUseParamSetMKADistributedSAKParamSet	MKAICVSet)r%   r&   r'   r(   r   c                   J    e Zd ZdZdZ ed           edd          gZd ZdS )	MACsecSCIz$
    Secure Channel Identifier.
    SCIsystem_identifierport_identifierr   c                 
    d|fS Nr   rU   r:  s     r9   r:   zMACsecSCI.extract_padding/      1ur;   N)	rI   rJ   rK   rL   rM   r   r   rP   r:   rU   r;   r9   rK  rK    sY          D*++
$a((K
    r;   rK  c                   2    e Zd ZdZdZdZedd            ZdS )MKAParamSetz
    Class from which every parameter set class inherits (except
    MKABasicParamSet, which has no "Parameter set type" field, and must
    come first in the list of parameter sets).
    rb   rl   Nc                     t           j        } |Yt          |d                   }t                                          t
                              |          t           j                  S | S )z8
        Returns the right parameter set class.
        Nr   )r!   	raw_layerr"   globalsr   _param_set_cls)r   r   r   r   ptypes        r9   r   zMKAParamSet.dispatch_hook=  sM     nQLLE99==!3!3E!:!:DNKKK
r;   r4   )rI   rJ   rK   rL   MACSEC_DEFAULT_ICV_LENEAPOL_MKA_DEFAULT_KEY_WRAP_LENr   r   rU   r;   r9   rS  rS  3  sJ           %'"
 
 
 [
 
 
r;   rS  c                   N   e Zd ZdZdZ edd           edd           eddd           eddd           ed	dd
           eddd           ed e            e           e	ddd           e
dd           e
dd           e eddd           dd          gZd ZdS )MKABasicParamSetz;
    Basic Parameter Set (802.1X-2010, section 11.11).
    zBasic Parameter Setmka_version_idr   key_server_priority
key_serverr%   macsec_desiredmacsec_capabilityr&   param_set_body_lenr]   rL  actor_member_idr   lengthactor_message_numberalgorithm_agilitycak_namec                     | j         dz
  S Nrq   rb  r   s    r9   r   zMKABasicParamSet.<lambda>g  s    )?")D r;   r   r(       padwithc                 
    d|fS rP  rU   r:  s     r9   r:   z MKABasicParamSet.extract_paddingn  rQ  r;   N)rI   rJ   rK   rL   rM   r   r   r   rK  r   r   r   r   rP   r:   rU   r;   r9   r\  r\  K  s+         !D	"A&&	'++q!$$!1a(($a++%q"--E99;;	22+R;;;	(!,,	%q))LEE  
 	
 	
 	
K,    r;   r\  c                   N    e Zd ZdZdZ eddd           eddd          gZd	S )
MKAPeerListTuplezf
    Live / Potential Peer List parameter sets tuples (802.1X-2010, section 11.11).  # noqa: E501
    zPeer List Tuple	member_idr   r]   rd  message_numberr(   N)rI   rJ   rK   rL   rM   r   rP   rU   r;   r9   rq  rq  r  sQ          D+r"555*Bq999KKKr;   rq  c                   x    e Zd ZdZdZ e edde          dd           edd	           e	d
g e
          gZdS )rE  zE
    Live Peer List parameter sets (802.1X-2010, section 11.11).
    zLive Peer List Parameter Setparam_set_typer%   r&   rl  rm  rb  r   member_id_message_numNrI   rJ   rK   rL   rM   r   r   _parameter_set_typesr   r   rq  rP   rU   r;   r9   rE  rE  ~  s          *DM $ 
 	
 	
 	
 	
'++/5EFFKKKr;   c                   x    e Zd ZdZdZ e edde          dd           edd           e	d	g e
          gZd
S )rF  zJ
    Potential Peer List parameter sets (802.1X-2010, section 11.11).
    z!Potential Peer List Parameter Setru  r&   rl  rm  rb  r   rv  Nrw  rU   r;   r9   rF  rF    s          /DM $ 
 	
 	
 	
 	
'++/5EFFKKKr;   c                      e Zd ZdZdZ edde           eddd           eddd	           ed
dd	           eddd           eddd	           eddd	           eddd	           eddd	           eddd	           eddd	           eddd           eddd           eddd           eddd           eddd           eddd           eddd          gZ	dS )rG  z=
    SAK Use Parameter Set (802.1X-2010, section 11.11).
    zSAK Use Parameter Setru  r'   latest_key_anr   r&   latest_key_txr%   latest_key_rx
old_key_an
old_key_tx
old_key_rxplain_txplain_rxXdelay_protectrb  r]   latest_key_key_server_member_idr   rd  latest_key_key_numberr(   latest_key_lowest_acceptable_pnold_key_key_server_member_idold_key_key_numberold_key_lowest_acceptable_pnN)
rI   rJ   rK   rL   rM   r   rx  r   r   rP   rU   r;   r9   rG  rG    sy         #D&+?@@!Q''!Q''!Q''q!$$q!$$q!$$Q""Q""a!Q''%q"--;RKKK12a@@@;RJJJ8"RHHH.1===8"QGGG%KKKr;   c                       e Zd ZdZdZ edde           eddd           eddd           ed	dd           ed
d           e	ddd           e
 e	ddd          d            e	ddej                  gZdS )rH  zE
    Distributed SAK parameter set (802.1X-2010, section 11.11).
    zDistributed SAK parameter setru  r(   distributed_anr   r&   confidentiality_offsetr  rb  
key_numberr   rd  macsec_cipher_suiter,   c                     | j         dk    S rj  rk  r   s    r9   r   z"MKADistributedSAKParamSet.<lambda>  s    .3 r;   sak_aes_key_wrapN)rI   rJ   rK   rL   rM   r   rx  r   r   r   r   rS  rZ  rP   rU   r;   r9   rH  rH    s          +D&+?@@!1a(()1a001a  
'++,15553RBBB33	
 	
 	=	
 	
 	
KKKr;   c                       e Zd ZdZdZ e edde          dd           edd	           e	d
de
j                   edd          gZdS )MKADistributedCAKParamSetzE
    Distributed CAK Parameter Set (802.1X-2010, section 11.11).
    zDistributed CAK parameter setru  r)   r&   rl  rm  rb  r   cak_aes_key_wrapr   rd  cak_key_nameN)rI   rJ   rK   rL   rM   r   r   rx  r   r   rS  rZ  r   rP   rU   r;   r9   r  r    s          +DM $ 
 	
 	
 	
 	
'++=	
 	
 	

 		."%%!KKKr;   r  c                       e Zd ZdZdZ e edde          dd           edd	           e	d
de
j                  gZdS )rI  z+
    ICV (802.1X-2010, section 11.11).
    ICVru  r   r&   rl  rm  rb  r   icvr   rd  N)rI   rJ   rK   rL   rM   r   r   rx  r   r   rS  rY  rP   rU   r;   r9   rI  rI    s          DM $ 
 	
 	
 	
 	
'++%K,NOOOKKKr;   c                   "    e Zd ZdZdZd Zd ZdS )MKAParamSetPacketListFieldz:
    PacketListField that handles the parameter sets.
    i  c                      t          |          S r4   )rS  )r6   r   ms      r9   m2izMKAParamSetPacketListField.m2i=  s    1~~r;   c                    g }|}|ryt          j        d|dd                   d         }| j        j        |z  }|d d|z            }|d|z   d          }|                     ||          }|                    |           |y||fS )Nz!Hr&   r(   r   )r<  unpackr   PARAM_SET_LEN_MASKr  append)	r6   r   r7   lstremain	len_bytesparam_set_lencurrentcurrent_packets	            r9   getfieldz#MKAParamSetPacketListField.getfield@  s     	'dF1Q3K88;I N=	IM/a-//0GA-../F!XXc733NJJ~&&&  	' s{r;   N)rI   rJ   rK   rL   r  r  r  rU   r;   r9   r  r  6  sD          ,      r;   r  c                   P    e Zd ZdZdZ edde           edg e          gZ	d Z
dS )MKAPDUz2
    MACsec Key Agreement Protocol Data Unit.
    MKPDUbasic_param_setr   parameter_setsc                 
    d|fS rP  rU   r:  s     r9   r:   zMKAPDU.extract_paddinga  rQ  r;   N)rI   rJ   rK   rL   rM   r   r\  r  rS  rP   r:   rU   r;   r9   r  r  O  sa          D%r+;<<""#3REEK
    r;   r  )r0   i  z01:80:c2:00:00:03)dstr0   )proto)r   )CrL   r<  scapy.fieldsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   scapy.packetr   r   r   r   r   scapy.layers.l2r   r   r   r   r    scapy.configr!   scapy.compatr"   r#   rN   rO   r.   r   r   r   r   r   r   r	  r  r  r  rx  rW  rK  rS  r\  rq  rE  rF  rG  rH  r  rI  r  r  rU   r;   r9   <module>r     sh	   
                                            ,              J I I I I I I I I I I I I I       ! ! ! ! ! ! ! ! 
		  
				'		'	(	!
 
!2 !2 !2 !2 !2F !2 !2 !2`;z;z; ~; |	;
 ;  ; !; ; ; &; ; ; ; 	;  ;  "!;" #; ;$ %;& 3';( 
);* +;, 
-;. /;0  1;2 3;4 5;6 7;8 59;: ;;< =;> 	?;@ 	A;B %C;D E; ; ;F G;H  I;J 6K;L M;N O;P Q;R S;T U;V W;X 
Y;Z [;\ 
];^ 	_;` 	a;b 
c;d e;f 	g; ;h 	$	)	u; ; ;	L  	U U U U U& U U Up    c   &    c   ,    s   0    s   .    s   0    3   :B B B B B B B Bb 		 	  !%"	        ,    &   0$ $ $ $ $v $ $ $N	 	 	 	 	v 	 	 	    k   8    ;   8               F       @       B       8       2    V   . E3Q     E91 % % % % E6 " " " " ue& ) ) ) ) eU 3& A A A A Kf - - - - D%f % % % % Cf % % % % % %r;   