
    hKH                     P   d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ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) i ddddddddddddfddddddddddfdd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+d,d-d.d/d0d1d2d3d4d5d6d7d8d9dfd:ddddddd;d<d=d>d?d@
dfdAdddddBdfdCdi dfdDdi dfdEdi dfdFdGi dfdHdIi dfdJdKdddLdfdMdNi dfdOdPi dfdQd;i dfdRd<i dfdSd=i dfZ*dddddTdfdi dfde*d:         d         dfdddddddUdfddddddddddGdIdKdNdPdVdfdi dfdi dfdi dfdGi dfdW	Z+dX Z, e,e*          Z- e,e+          Z.dZ/dZ0dZ1dZ2dZ3 G dY dZe          Z4d[d\d]d^d_d`dadbddcdddedfdgdhZ5d[didjdkdldmdndoZ6dpdqdrdsdtduZ7dpdvdwZ8 G dx dye          Z9 G dz dpe9          Z: G d{ d|e9          Z; G d} d~e;          Z< G d de;          Z=ddddddZ> G d de;          Z? G d de;          Z@ G d de;          ZA G d de;          ZB G d de;          ZC G d de;          ZDi dddddddddddddddddGddIddKddNddPdd;dd<dd=dd>ddddddddddddddddZE G d de;          ZF G d de;          ZG eee:d            eee:d            eee:dd            ee!e:            ee9e;d            ee9e@d            ee9e=d            ee9e<d            ee9eBd            ee9eCd            ee9eDd            ee9eAdI            ee9eFdK            ee9eGdN            ee9e?dP           d ZHdS )zE
ISAKMP (Internet Security Association and Key Management Protocol).
    N)conf)Packetbind_bottom_upbind_top_downbind_layers)chb)ByteEnumField	ByteFieldFieldLenFieldFieldListField
FlagsFieldIPFieldIntEnumFieldIntFieldMultipleTypeFieldPacketLenFieldShortEnumField
ShortFieldStrLenEnumFieldStrLenField
XByteFieldXStrFixedLenFieldXStrLenField)IPUDP)NON_ESP)sr)
RandString)warning)reduce
Encryption                        )zDES-CBCzIDEA-CBCzBlowfish-CBCzRC5-R16-B64-CBCz3DES-CBCzCAST-CBCzAES-CBCzCAMELLIA-CBCHash)MD5SHATigerzSHA2-256zSHA2-384zSHA2-512AuthenticationPSKDSSzRSA SigzRSA EncryptionzRSA Encryption RevisedzElGamal EncryptionzElGamal Encryption Revisedz	ECDSA SigHybridInitRSAi  HybridRespRSAi  HybridInitDSSi  HybridRespDSSi  XAUTHInitPreSharedi  XAUTHRespPreSharedi  XAUTHInitDSSi  XAUTHRespDSSi  XAUTHInitRSAi  i  i  i  i  i  )XAUTHRespRSAXAUTHInitRSAEncryptionXAUTHRespRSAEncryptionXAUTHInitRSARevisedEncryptionXAUTHRespRSARevisedEncryptio	GroupDesc               )
	768MODPgr
1024MODPgr	EC2Ngr155	EC2Ngr185
1536MODPgr
2048MODPgr
3072MODPgr
4096MODPgr
6144MODPgr
8192MODPgr	GroupType)MODPECPEC2N
GroupPrimeGroupGenerator1GroupGenerator2GroupCurveA	   GroupCurveB
   LifeType   )Seconds	KilobytesLifeDuration   PRF   	KeyLength	FieldSize
GroupOrder)Reservedseconds	kilobytes)re   Tunnel	TransportzUDP-Encapsulated-TunnelzUDP-Encapsulated-Transport)zHMAC-MD5zHMAC-SHAzDES-MACKPDKzHMAC-SHA2-256zHMAC-SHA2-384zHMAC-SHA2-512zHMAC-RIPEMDzAES-XCBC-MACzSIG-RSAzAES-128-GMACzAES-192-GMACzAES-256-GMAC)	rZ   r^   r?   EncapsulationModeAuthenticationAlgorithmrb   	KeyRoundsCompressDictionarySizeCompressPrivateAlgorithmc                 >    d |                                  D             S )Nc                 |    i | ]9\  }}|d          |d |d                                          D             |d         f:S )r   c                     i | ]\  }}||	S  rs   ).0kkvvs      W/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/isakmp.py
<dictcomp>z'<lambda>.<locals>.<dictcomp>.<dictcomp>   s    111&"br2111    r"   r#   items)rt   kvs      rw   rx   z<lambda>.<locals>.<dictcomp>   sX       1 aD111AaDJJLL1111Q4
8  ry   rz   xs    rw   <lambda>r      s(      		   ry   c                   T    e Zd ZdZed	d            Zed	d            Zd Zd Zd Z	dS )
ISAKMPTransformSetFieldr"   r   c                    | \  }}|t           k    r#t                              ||i df          \  }}}n4|t          k    r#t                              ||i df          \  }}}n|i d}}}|                    ||          }t          |t                    rt          d|z            d}|dz  r<|st          d|z             d}|r!t          |dz            |z   }|dz  }|dz  }|!|}n|d	z  }t          j        d
||          |z   S )Nr   zUnknown attribute '%s'ry   i  z9%r should not be TLV but is too big => using TLV encoding   r)   r"      z!HH)PROTO_ISAKMPISAKMPAttributeTypesgetPROTO_IPSEC_ESPIPSECAttributeTypes
isinstancestr
ValueErrorr   r   structpack)	type_val_tupleprototypvaltype_valenc_dicttlvsns	            rw   type2numz ISAKMPTransformSetField.type2num   sG   !SL  &:&>&>sS"aL&Q&Q#Hho%%&9&=&=cCQ<&P&P#Hh'*BhHll3$$c3 	=5;<<<'M 
	 [SVYYZZZA d
OOa'	Q   CCH{5(C00144ry   c                     |t           k    rt                              | | i f          }n-|t          k    rt                              | | i f          }n| i f}|d                             ||          }|d         |fS Nr"   r   )r   ISAKMPTransformNumr   r   IPSECTransformNum)r   encr   r   s       rw   num2typez ISAKMPTransformSetField.num2type   s|    L  $((sBi88CCo%%#''c2Y77CC)C!fjjc""A}ry   c                     |}|r2t          |dd           !|j        p|j        }|rt          |dd           !|t          S |j        S )Nr   )getattrparent
underlayerr   r   )selfpktcurs      rw   
_get_protoz"ISAKMPTransformSetField._get_proto   s\     	/gc7D119*.C  	/gc7D119;yry   c                 |    |dS |                      |          fd|D             }d                    |          S )Nry   c                 H    g | ]}t                               |           S )r   )r   r   )rt   er   s     rw   
<listcomp>z/ISAKMPTransformSetField.i2m.<locals>.<listcomp>   s-    III!$--au-==IIIry   )r   join)r   r   ir   s      @rw   i2mzISAKMPTransformSetField.i2m   sG    93$$IIIIqIIIxx{{ry   c           
         g }|                      |          }t          |          dk    r+t          j        d|d d                   \  }|dz   }|rt          j        d|dd                   \  }|dz   t          |          k    rt	          d|z             |dd|z            }t          d t          j        ddt          |          z  |          d	          }n&|d
z  }d	}t          j        d|dd                   \  }|d|z   d          }|                    t                              |||                     t          |          dk    +t          |          d	k    rt	          d|z             |S )Nr%   !Hr#   r   z)Bad length for ISAKMP transform type=%#6xc                     | dz  |z  S Nr)   rs   )r   ys     rw   r   z-ISAKMPTransformSetField.m2i.<locals>.<lambda>   s    Q!VqL ry   !Br   i  r   z2Extra bytes after ISAKMP transform dissection [%r])	r   lenr   unpackr   r    appendr   r   )	r   r   mlstr   
trans_typeis_tlv	value_lenvalues	            rw   m2izISAKMPTransformSetField.m2i   s    $$!ffkk -ae44KJ$v-.F 5 $]41Q388
	q=3q66))G*TUUU!A	M/*88&--QTWZ[`WaWaQaQaHcej:k:kmnoof$
	tQqsV44!i-..!AJJ.77
EQV7WWXXX# !ffkk$ q66A::H1LMMM
ry   N)r   )
__name__
__module____qualname__isliststaticmethodr   r   r   r   r   rs   ry   rw   r   r      s        F5 5 5 \52    \        ry   r   NoneSAProposal	TransformKEIDCERTCRSIGNonceNotificationDeleteVendorID)r   r"   r#   r$   r%   r&   r'   r(   r)   rW   rY   r[   r_   ra   basezidentity protectionzauthentication only
aggressiveinformationalz
quick mode)r   r"   r#   r$   r%   r&       ISAKMPIPSEC_AH	IPSEC_ESPIPCOMPGIGABEAM_RADIO)r"   r#   r$   r%   r&   IPSEC)r   r"   c                       e Zd Zd ZdS )_ISAKMP_classc                 >    | j         dk    rt          j        S t          S )Nr   )next_payloadr   	raw_layerISAKMP_payloadr   payloads     rw   default_payload_classz#_ISAKMP_class.default_payload_class!  s    !!>!ry   N)r   r   r   r   rs   ry   rw   r   r      s#            ry   r   c                       e Zd Zd Z eddd           eddd           edde           edd           ed	de           e	d
ddg d           e
dd           e
dd          gZd Zd Zd ZdS )r   init_cookie r)   resp_cookier   r   versionrB   	exch_typeflags)
encryptioncommit	auth_onlyidlengthNc                 d    | j         dz  rt          j        S t                              | |          S Nr"   )r   r   r   r   guess_payload_classr   s     rw   r   zISAKMP.guess_payload_class6  s.    :> 	">!00w???ry   c                 T    t          |t                    r|j        | j        k    rdS dS r   )r   r   r   )r   others     rw   answerszISAKMP.answers;  s/    eV$$ 	 D$444qqry   c                     ||z  }| j         8|d d         t          j        dt          |                    z   |dd          z   }|S )N   z!I   r   r   r   r   )r   ppays      rw   
post_buildzISAKMP.post_buildA  sI    	S;#2#T3q66222QrssV;Ary   )r   r   r   namer   r	   ISAKMP_payload_typer   ISAKMP_exchange_typer   r   fields_descr   r   r   rs   ry   rw   r   r   )  s        D-Q//-Q//na)<==
9d##k1&:;;
7Aq"G"G"GHHq4  	K@ @ @
      ry   c                       e Zd ZdZdZ edde           edd           edd           e	ddd	 
          gZ
d ZdS )r   zISAKMP payloadr   r   Nresr   loadr   c                     | j         dz
  S Nr%   r   r~   s    rw   r   zISAKMP_payload.<lambda>Q  s    ahl ry   length_fromc                     | j         8|d d         t          j        dt          |                    z   |dd          z   }||z   S )Nr#   r   r%   r   )r   r   r   s      rw   r   zISAKMP_payload.post_buildT  sE    ;bqb'FKc#hh777#abb'ACSyry   )r   r   r   r   show_indentr	   r   r
   r   r   r  r   rs   ry   rw   r   r   J  s|        DKnd,?@@	%
8T""VR-B-BCCC	K    ry   r   c            	           e Zd ZdZdddZej        dd          edd           edd	d	d
i           e	dd           e
ddd           gz   ZdS )ISAKMP_payload_TransformzIKE Transform)transform_count2.5.0)transform_idr  )numr   Nr$   r  r  r"   KEY_IKEres2r   
transformsc                     | j         dz
  S r   r  r~   s    rw   r   z!ISAKMP_payload_Transform.<lambda>d  s    !(UV, ry   r	  )r   r   r   r   deprecated_fieldsr   r  r
   r	   r   r   rs   ry   rw   r  r  Z  s        D-)  !,RaR0	#T**na!Y88
61d@V@VWWW	4 KKKry   r  c                       e Zd ZdZej        dd          edd           edde           e	dddd	           ed
d           e
ddd            ed ej                    ed           gz   ZdS )ISAKMP_payload_ProposalzIKE proposalNr$   proposalr"   r   SPIsizeSPIr   trans_nbr   c                     | j         S Nr  r~   s    rw   r   z ISAKMP_payload_Proposal.<lambda>w      QY ry   r	  transc                     | j         dz
  S r   r  r~   s    rw   r   z ISAKMP_payload_Proposal.<lambda>x  s    bcbjmnbn ry   )r   r   r   r   r   r  r
   r	   ISAKMP_protosr   r   r   r   r   r  rs   ry   rw   r  r  p  s        D ,RaR0	*a  gq-00iuc22	*d##E2+>+>???w 0 02JXnXnooo4 KKKry   r  XAUTHzRFC 3706 DPDzCisco Fragmentationz'RFC 3947 Negotiation of NAT-Transversalzdraft-ietf-ipsec-nat-t-ike-02)s   	 &ַs   hkwW s   @Hn% Ӏs   JXE\W(E/s   ˀ>incB{c                   T    e Zd ZdZej        dd          edded           gz   ZdS )ISAKMP_payload_VendorIDzISAKMP Vendor IDNr$   r   ry   c                     | j         dz
  S r  r  r~   s    rw   r   z ISAKMP_payload_VendorID.<lambda>  s    ahl ry   r	  )r   r   r   r   r   r  r   ISAKMP_VENDOR_IDSrs   ry   rw   r'  r'    sO        D ,RaR0
C)$:$:	< 	< 	<4 KKKry   r'  c            	           e Zd ZdZej        dd          edde           eddddi           ed e	j
                    ed	 
          gz   ZdS )ISAKMP_payload_SAz	ISAKMP SANr$   doir"   	situationidentitypropc                     | j         dz
  S Nr_   r  r~   s    rw   r   zISAKMP_payload_SA.<lambda>  s    `a`hkm`m ry   r	  )r   r   r   r   r   r  r   
ISAKMP_doir   r   r   r  rs   ry   rw   r+  r+    sy        D ,RaR0UAz**[!a_55v~t~//1HVmVmnnn4 KKKry   r+  c                       e Zd ZdZdS )ISAKMP_payload_NoncezISAKMP NonceNr   r   r   r   rs   ry   rw   r4  r4    s        DDDry   r4  c                       e Zd ZdZdS )ISAKMP_payload_KEzISAKMP Key ExchangeNr5  rs   ry   rw   r7  r7    s         DDDry   r7  c                       e Zd ZdZej        dd          eddddd           ed	d
d
di           edd
d
di           e e	dd          d fg e
ddd                     gz   ZdS )ISAKMP_payload_IDzISAKMP IdentificationNr$   IDtyper"   	IPv4_addrKey)r"   r[   ProtoIDr   UnusedPort	IdentDataz	127.0.0.1c                     | j         dk    S r   )r:  r   s    rw   r   zISAKMP_payload_ID.<lambda>  s    SZ1_ ry   r   c                     | j         dz
  S r   r  r~   s    rw   r   zISAKMP_payload_ID.<lambda>  s    qx!| ry   r	  )r   r   r   r   r   r  r	   r   r   r   r   rs   ry   rw   r9  r9    s        "D ,RaR0h $
 $
 	 	 	iQM22vq1h-00k22,,. KR5K5KLLL	
 	
4 KKKry   r9  c                       e Zd ZdZdS )ISAKMP_payload_HashzISAKMP HashNr5  rs   ry   rw   rE  rE    s        DDDry   rE  zINVALID-PAYLOAD-TYPEzDOI-NOT-SUPPORTEDzSITUATION-NOT-SUPPORTEDzINVALID-COOKIEzINVALID-MAJOR-VERSIONzINVALID-MINOR-VERSIONzINVALID-EXCHANGE-TYPEzINVALID-FLAGSzINVALID-MESSAGE-IDzINVALID-PROTOCOL-IDzINVALID-SPIzINVALID-TRANSFORM-IDzATTRIBUTES-NOT-SUPPORTEDzNO-PROPOSAL-CHOSENzBAD-PROPOSAL-SYNTAXzPAYLOAD-MALFORMEDzINVALID-KEY-INFORMATIONzINVALID-ID-INFORMATIONzINVALID-CERT-ENCODINGzINVALID-CERTIFICATEzCERT-TYPE-UNSUPPORTEDzINVALID-CERT-AUTHORITYzINVALID-HASH-INFORMATIONzAUTHENTICATION-FAILEDzINVALID-SIGNATUREzADDRESS-NOTIFICATIONzNOTIFY-SA-LIFETIMEzCERTIFICATE-UNAVAILABLEzUNSUPPORTED-EXCHANGE-TYPEz	R-U-THEREzR-U-THERE-ACK)rD                  r            r      i(  i)  c                       e Zd ZdZej        dd          edde           edde	           e
ddd	d
           edde           ed	dd            eddd           gz   ZdS )ISAKMP_payload_NotifyzISAKMP Notify (Notification)Nr$   r,  r   r   r"   r  r  r   notify_msg_typer   c                     | j         S r  r   r~   s    rw   r   zISAKMP_payload_Notify.<lambda>  r!  ry   r	  notify_datac                 &    | j         | j        z
  dz
  S r1  )r   r  r~   s    rw   r   zISAKMP_payload_Notify.<lambda>  s    !(QY*>*C ry   )r   r   r   r   r   r  r   r2  r	   r$  r   r   NotifyMessageTyper   rs   ry   rw   rP  rP    s        )D ,RaR0UAz**gq-00iuc22($0ABBE2+>+>???M2 C C	E 	E 	E4 KKKry   rP  c                       e Zd ZdZej        dd          edde           edde	           e
ddd	d
d            e
ddd	d           ed	g  eddd           d           gz   ZdS )ISAKMP_payload_DeletezISAKMP DeleteNr$   r,  r   r   r"   r  SPIsr   c                 4    |o|t          | j                  z  S r  )r   rX  )r   r   s     rw   r   zISAKMP_payload_Delete.<lambda>  s    A,D!s38}}2D ry   )	length_offmtadjustSPIcountH)count_ofr[  r   c                     | j         S r  r   rB  s    rw   r   zISAKMP_payload_Delete.<lambda>  s    3; ry   r	  c                     | j         S r  )r]  rB  s    rw   r   zISAKMP_payload_Delete.<lambda>  s    cl ry   )
count_from)r   r   r   r   r   r  r   r2  r	   r$  r   r   r   rs   ry   rw   rW  rW    s        D ,RaR0UAz**gq-00iSDD	F 	F 	Fj$SAAAvr"{2r7N7NOOO":":	< 	< 	<	4 	KKKry   rW  i  )dport)sport)rc  rd  )r   c                     t          |           }|t                      z  }|t          t          d          d          z  }|t	          t                                z  }t          |          S )z8Sends/receives a ISAMPK payload SA with payload proposal)dstr)   r#   )r   r   )r/  )r   r   r   r   r+  r  r   )ipr   s     rw   ikescanrh    sa    
***C355LC6jmmq9999C"9";";<<<<Cc77Nry   )I__doc__r   scapy.configr   scapy.packetr   r   r   r   scapy.compatr   scapy.fieldsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.layers.inetr   r   scapy.layers.ipsecr   scapy.sendrecvr   scapy.volatiler   scapy.errorr   	functoolsr    r   r   _revr   r   r   PROTO_IPSEC_AHr   PROTO_IPCOMPPROTO_GIGABEAM_RADIOr   r   r  r$  r2  r   r   r   r  r  r)  r'  r+  r4  r7  r9  rE  rU  rP  rW  rh  rs   ry   rw   <module>rx     s1           K K K K K K K K K K K K                                           & & % % % % % % % & & & & & &       % % % % % %            >1!#$'(*+#$#$"#'(, , ./0> Q" "
 $%&> q D5! D !D$aD ,QD 4Q	D
 0D 8D 'D +ED +ED +ED +ED 0D 0D *5D *5D  *5!D" ,15:5:<A;@+D D D* FG+H>J !1$%#$#$$%$&$&$&$&$&	* 	* ,-	.K>^ !a! !"#%_>d 1b!*e>f 2qzg>h 2qzi>j Ar1:k>l BA;m>n #$& &'(*o>r RQKs>t 
BA;u>v "b!w>x "b!y>z 2r1+{> D  !"#% %&') AJ)+6q91=!()+,9:<=	? ? AB	C
 !"01/0,-5656563445/1464646$8 $8 :; < RR "aj!"B
7  <  T.// D,--   T T T T Tk T T Tp   $       
    F       ]   B    ]        ~   ,	 	 	 	 	n 	 	 	  *1=KAV2[7V      n              >   ! ! ! ! ! ! ! !       ,    .   !!!  ! 	!
 ! ! ! ! ! ! ! ! "! ! !  !!" !#!$ 	! "!#A! ! ! H
 
 
 
 
N 
 
 
    N    sF# & & & & sF# & & & & c6C 0 0 0 0 w    m^! < < < < M,1 = = = = M2 C C C C M3! D D D D M,1 = = = = M,1 = = = = M.Q ? ? ? ? M/b A A A A M0r B B B B M0r B B B B M2 D D D D    ry   