
    hz                        d Z ddlZddl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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#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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*d+d,d-d.d/d0d1d2d3d4d5d6d7fd8d9d:d;d<d=d>d?d@dAdB	fdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRfdSi ddTddUddVd#dWd%dXd'dYdZd[d)d\d+d]d-d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtfdudvdwdxfdyZ/dz e/0                                D             Z1d{ e/0                                D             Z2d|d}d~dZ3ddddddddddd
Z4i ddddddddddddd#ddZddedddddddddddddddddi ddddddddddddddddddddddddddddddddēddƓi ddȓddʓdd̓ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddi dddddddddddddddddddddd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Z5ddddZ6dddd d!d"d#d$d%d&d'd(d)Z7d*d+d,d-Z8d.d/d0d1d2Z9i dd3dd4dd5dd6dd7dd8dd9d:d;dd<d!d=d#d>d%d?d'd@dZdAd)dBd+dCd-dDdEdFdGdHdIdJdKZ:i ddLddMddNddOddPddQddRddSddTddUd:dVddWddXd!dYd#dZd%d[d'd\i dZd]d)d^d+d_d-d`d_dadadbdcdcdedddgdedidfdkdgdhdidjdkdldmdndodpdqdrdsi ddtdduddvddwddxddyddzdd{dd|dd}dd~dddddddddd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dd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ǓdȐdɓ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dd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dd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-d.d/d0d1d2d3d4d5d6d7d8d9Z;i dd:dd;dd<drd=dd>dd?dd@ddAddBddCddDddEddFddGddHddIddJdKdLdMdNdOdPdQdRdSZ<dTdUdVdWdXdYdZZ= G d[ d\e          Z> G d] d^e>          Z? G d_ d`e          Z@ G da dbe>          ZA G dc ddeA          ZB G de dfeA          ZC G dg dheA          ZD G di djeA          ZE G dk dle          ZF G dm dneF          ZG G do dpeF          ZH G dq dreF          ZI G ds dteF          ZJ G du dveA          ZK G dw dxeA          ZL G dy dzeA          ZM G d{ d|eA          ZN G d} d~eA          ZO G d deA          ZP G d deA          ZQ G d deA          ZR G d deA          ZS G d deA          ZT G d de          ZU G d deA          ZV G d deA          ZW G d deA          ZX G d deA          ZY G d deA          ZZ G d deA          Z[ G d deA          Z\ G d deA          Z] G d deA          Z^ G d deA          Z_ ee>eCd            ee>eBd            ee>eNdr            ee>eQd            ee>eRd            ee>eSd            ee>eYd            ee>eXd            ee>eDd            ee>eOd            ee>ePd            ee>eMd            ee>eEd            ee>eKd            ee>eLd            ee>eTd            ee>eVd            ee>eZd            ee>e[d            ee>e\d            ee>e]d            ee>e^d            ee>eWd            ee>e_d            ee$e(d            ee$e(d            ee$e?d            ee$e?d            ee$e?dd            ee&e(            ee&e?           d Z`dS (  z<
Internet Key Exchange Protocol Version 2 (IKEv2), RFC 7296
    N)PacketRawbind_bottom_upbind_layersbind_top_downsplit_bottom_up)ByteEnumField	ByteFieldConditionalFieldFieldLenFieldFieldListField
FlagsFieldIP6FieldIPFieldIntFieldMultiEnumFieldMultipleTypeFieldPacketFieldPacketLenFieldPacketListFieldShortEnumField
ShortFieldStrLenFieldX3BytesField
XByteFieldXStrFixedLenFieldXStrLenField)	X509_CertX509_CRL)IPUDP)NON_ESP)ISAKMP)sr)conf)
RandString
Encryption   zDES-IV64   DES   3DES   RC5   IDEA   CAST   Blowfish   3IDEA	   zDES-IV32   zAES-CBC   zAES-CTR   z	AES-CCM-8   z
AES-CCM-12   z
AES-CCM-16   zAES-GCM-8ICV   zAES-GCM-12ICV   zAES-GCM-16ICVzCamellia-CBCzCamellia-CTRzCamellia-CCM-8ICVzCamellia-CCM-12ICVzCamellia-CCM-16ICVzChaCha20-Poly1305zKuzneychik-MGM-KTREEzMAGMA-MGM-KTREE)                      !   PRFPRF_HMAC_MD5PRF_HMAC_SHA1PRF_HMAC_TIGERPRF_AES128_XCBCPRF_HMAC_SHA2_256PRF_HMAC_SHA2_384PRF_HMAC_SHA2_512PRF_AES128_CMACPRF_HMAC_STREEBOG_512)	r(   r)   r+   r-   r/   r1   r3   r5   r7   	IntegrityzHMAC-MD5-96zHMAC-SHA1-96zDES-MACzKPDK-MD5zAES-XCBC-96zHMAC-MD5-128zHMAC-SHA1-160zAES-CMAC-96zAES-128-GMACzAES-192-GMACzAES-256-GMACzSHA2-256-128zSHA2-384-192zSHA2-512-256)r(   r)   r+   r-   r/   r1   r3   r5   r7   
      r8   r9   r:   	GroupDesc	768MODPgr
1024MODPgr
1536MODPgr
2048MODPgr
3072MODPgr
4096MODPgr   
6144MODPgr
8192MODPgr256randECPgr384randECPgr   521randECPgr   1024MODP160POSgrr@   2048MODP224POSgrrA   2048MODP256POSgrrB   192randECPgrrC   224randECPgrrD   brainpoolP224r1grbrainpoolP256r1grbrainpoolP384r1grbrainpoolP512r1grcurve25519gr
curve448grGOST3410_2012_256GOST3410_2012_512)rE            rF   rG   "   zExtended Sequence NumberzNo ESNESN)r   r(   )r(   r)   r+   r-   r/   c                      i | ]\  }\  }}||S  rw   ).0tf_nametf_num_s       W/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/ikev2.py
<dictcomp>r}      s/       ,&!FG      c                      i | ]\  }\  }}||S rw   rw   )rx   rz   r{   tf_dicts       r|   r}   r}      s/       ,GFG  r~   IKEAHESP)r(   r)   r+   ReservedzRSA Digital Signaturez!Shared Key Message Integrity CodezDSS Digital Signaturez%ECDSA with SHA-256 on the P-256 curvez%ECDSA with SHA-384 on the P-384 curvez%ECDSA with SHA-512 on the P-521 curvez-Generic Secure Password Authentication MethodzNULL AuthenticationzDigital Signature)
r   r(   r)   r+   r7   rS   rT   r8   r9   r:   UNSUPPORTED_CRITICAL_PAYLOADINVALID_IKE_SPIINVALID_MAJOR_VERSIONINVALID_SYNTAXINVALID_MESSAGE_IDrT   INVALID_SPINO_PROPOSAL_CHOSENINVALID_KE_PAYLOADAUTHENTICATION_FAILEDrt   SINGLE_PAIR_REQUIRED#   NO_ADDITIONAL_SAS$   INTERNAL_ADDRESS_FAILURE%   FAILED_CP_REQUIRED&   TS_UNACCEPTABLE'   INVALID_SELECTORS(   UNACCEPTABLE_ADDRESSES)   UNEXPECTED_NAT_DETECTED*   USE_ASSIGNED_HoA+   TEMPORARY_FAILURE,   CHILD_SA_NOT_FOUND-   INVALID_GROUP_ID.   AUTHORIZATION_FAILED/   NOTIFY_STATE_NOT_FOUNDi @  INITIAL_CONTACTi@  SET_WINDOW_SIZEi@  ADDITIONAL_TS_POSSIBLEi@  IPCOMP_SUPPORTEDi@  NAT_DETECTION_SOURCE_IPi@  NAT_DETECTION_DESTINATION_IPi@  COOKIEi@  USE_TRANSPORT_MODEi@  HTTP_CERT_LOOKUP_SUPPORTEDi	@  REKEY_SAi
@  ESP_TFC_PADDING_NOT_SUPPORTEDi@  NON_FIRST_FRAGMENTS_ALSOi@  MOBIKE_SUPPORTEDi@  ADDITIONAL_IP4_ADDRESSi@  ADDITIONAL_IP6_ADDRESSi@  NO_ADDITIONAL_ADDRESSESi@  UPDATE_SA_ADDRESSESi@  COOKIE2i@  NO_NATS_ALLOWEDi@  AUTH_LIFETIMEi@  MULTIPLE_AUTH_SUPPORTEDi@  ANOTHER_AUTH_FOLLOWSi@  REDIRECT_SUPPORTED@  REDIRECT@  REDIRECTED_FROMi@  TICKET_LT_OPAQUEi@  TICKET_REQUESTi@  
TICKET_ACKi@  TICKET_NACKi@  TICKET_OPAQUEi@  LINK_IDi@  USE_WESP_MODEi @  ROHC_SUPPORTEDi!@  EAP_ONLY_AUTHENTICATIONi"@  CHILDLESS_IKEV2_SUPPORTEDi#@  QUICK_CRASH_DETECTIONi$@  IKEV2_MESSAGE_ID_SYNC_SUPPORTEDi%@  #IPSEC_REPLAY_COUNTER_SYNC_SUPPORTEDi&@  IKEV2_MESSAGE_ID_SYNCi'@  IPSEC_REPLAY_COUNTER_SYNCi(@  SECURE_PASSWORD_METHODSi)@  PSK_PERSISTi*@  PSK_CONFIRMi+@  ERX_SUPPORTEDi,@  IFOM_CAPABILITYSENDER_REQUEST_IDIKEV2_FRAGMENTATION_SUPPORTEDSIGNATURE_HASH_ALGORITHMSCLONE_IKE_SA_SUPPORTEDCLONE_IKE_SAIV2_NOTIFY_PUZZLEIV2_NOTIFY_USE_PPKIV2_NOTIFY_PPK_IDENTITYIV2_NOTIFY_NO_PPK_AUTH*IV2_NOTIFY_INTERMEDIATE_EXCHANGE_SUPPORTEDIV2_NOTIFY_IP4_ALLOWEDIV2_NOTIFY_IP6_ALLOWED"IV2_NOTIFY_ADDITIONAL_KEY_EXCHANGEIV2_NOTIFY_USE_AGGFRAG)i-@  i.@  i/@  i0@  i1@  i2@  i3@  i4@  i5@  i6@  i7@  i8@  i9@  i:@  	IPv4_addr	IPv6_addrFQDNz!PKCS #7 wrapped X.509 certificatezPGP CertificatezDNS Signed KeyzX.509 Certificate - SignaturezKerberos Tokenz!Certificate Revocation List (CRL)zAuthority Revocation List (ARL)zSPKI CertificatezX.509 Certificate - AttributezRaw RSA Keyz!Hash and URL of X.509 certificatezHash and URL of X.509 bundle)r(   r)   r+   r-   r1   r3   r5   r7   rS   rT   r8   r9   TS_IPV4_ADDR_RANGETS_IPV6_ADDR_RANGETS_FC_ADDR_RANGE)r3   r5   r7   CFG_REQUEST	CFG_REPLYCFG_SETCFG_ACK)r(   r)   r+   r-   INTERNAL_IP4_ADDRESSINTERNAL_IP4_NETMASKINTERNAL_IP4_DNSINTERNAL_IP4_NBNSINTERNAL_IP4_DHCPAPPLICATION_VERSIONINTERNAL_IP6_ADDRESSrS   INTERNAL_IP6_DNSINTERNAL_IP6_DHCPINTERNAL_IP4_SUBNETSUPPORTED_ATTRIBUTESINTERNAL_IP6_SUBNETMIP6_HOME_PREFIXINTERNAL_IP6_LINKINTERNAL_IP6_PREFIXHOME_AGENT_ADDRESSP_CSCF_IP4_ADDRESSP_CSCF_IP6_ADDRESSFTT_KATEXTERNAL_SOURCE_IP4_NAT_INFO!TIMEOUT_PERIOD_FOR_LIVENESS_CHECKINTERNAL_DNS_DOMAININTERNAL_DNSSEC_TA)ra   rc   r@   rA   rB   rC   zAll protocolsz!Internet Control Message Protocolz"Internet Group Management ProtocolzGateway-to-Gateway ProtocolzIP in IP (encapsulation)zInternet Stream ProtocolzTransmission Control ProtocolzCore-based treeszExterior Gateway ProtocolzWInterior Gateway Protocol (any private interior gateway (used by Cisco for their IGRP))zBBN RCC MonitoringzNetwork Voice Protocolz	Xerox PUPARGUSEMCONzCross Net DebuggerChaoszUser Datagram ProtocolMultiplexingzDCN Measurement SubsystemszHost Monitoring ProtocolzPacket Radio MeasurementzXEROX NS IDPzTrunk-1zTrunk-2zLeaf-1zLeaf-2zReliable Datagram ProtocolrE   z&Internet Reliable Transaction Protocolrq   zISO Transport Protocol Class 4rr   zBulk Data Transfer Protocolrs   zMFE Network Services ProtocolrF   zMERIT Internodal ProtocolrG   z$Datagram Congestion Control ProtocolzThird Party Connect Protocolz$Inter-Domain Policy Routing ProtocolzXpress Transport ProtocolzDatagram Delivery Protocolz'IDPR Control Message Transport ProtocolzTP++ Transport ProtocolzIL Transport ProtocolzIPv6 EncapsulationzSource Demand Routing ProtocolzRouting Header for IPv6zFragment Header for IPv6zInter-Domain Routing ProtocolzResource Reservation ProtocolzGeneric Routing Encapsulation0   zMobile Host Routing Protocol1   BNA2   zEncapsulating Security Payload3   zAuthentication Header4   z&Integrated Net Layer Security Protocol5   SwIPe6   z NBMA Address Resolution Protocol7   zIP Mobility (Min Encap)8   zBTransport Layer Security Protocol (using Kryptonet key management)9   z+Simple Key-Management for Internet Protocol:   zICMP for IPv6;   zNo Next Header for IPv6<   zDestination Options for IPv6=   zAny host internal protocol>   CFTP?   zAny local network@   zSATNET and Backroom EXPAKA   	KryptolanB   z MIT Remote Virtual Disk ProtocolC   zInternet Pluribus Packet CoreD   zAny distributed file systemE   zSATNET MonitoringF   zVISA ProtocolG   zInternet Packet Core UtilityH   z#Computer Protocol Network ExecutiveI   zComputer Protocol Heart BeatJ   zWang Span NetworkK   zPacket Video ProtocolL   zBackroom SATNET MonitoringM   zSUN ND PROTOCOL-TemporaryN   zWIDEBAND MonitoringO   zWIDEBAND EXPAKP   z@International Organization for Standardization Internet ProtocolQ   z&Versatile Message Transaction ProtocolR   z-Secure Versatile Message Transaction ProtocolS   VINEST   z!Internet Protocol Traffic ManagerU   z
NSFNET-IGPV   zDissimilar Gateway ProtocolW   TCFX   EIGRPY   zOpen Shortest Path FirstZ   zSprite RPC Protocol[   z!Locus Address Resolution Protocol\   zMulticast Transport Protocol]   zAX.25^   z#IP-within-IP Encapsulation Protocol_   z'Mobile Internetworking Control Protocol`   z!Semaphore Communications Sec. Proa   z Ethernet-within-IP Encapsulationb   zEncapsulation Headerc   zAny private encryption schemed   GMTPe   z Ipsilon Flow Management Protocolf   zPNNI over IPg   zProtocol Independent Multicasth   z2IBM's ARIS (Aggregate Route IP Switching) Protocoli   z.SCPS (Space Communications Protocol Standards)j   QNXk   zActive Networksl   zIP Payload Compression Protocolm   zSitara Networks Protocoln   zCompaq Peer Protocolo   z	IPX in IPp   zZVirtual Router Redundancy Protocol, Common Address Redundancy Protocol (not IANA assigned)q   zPGM Reliable Transport Protocolr   zAny 0-hop protocols   z&Layer Two Tunneling Protocol Version 3t   zD-II Data Exchange (DDX)u   z#Interactive Agent Transfer Protocolv   zSchedule Transfer Protocolw   zSpectraLink Radio Protocolx   z&Universal Transport Interface Protocoly   zSimple Message Protocolz   zSimple Multicast Protocol{   z!Performance Transparency Protocol|   zEIntermediate System to Intermediate System (IS-IS) Protocol over IPv4}   z%Flexible Intra-AS Routing Environment~   zCombat Radio Transport Protocol   zCombat Radio User Datagram   z[Service-Specific Connection-Oriented Protocol in a Multilink and Connectionless Environment   IPLT   zSecure Packet Shield   z"Private IP Encapsulation within IP   z$Stream Control Transmission Protocol   zFibre Channel   z-Reservation Protocol (RSVP) End-to-End Ignore   z"Mobility Extension Header for IPv6z"Lightweight User Datagram Protocolz0Multiprotocol Label Switching Encapsulated in IPzMANET ProtocolszHost Identity Protocolz'Site Multihoming by IPv6 Intermediationz&Wrapped Encapsulating Security PayloadzRobust Header Compression)                     NoneProposal	TransformSAKEIDiIDrCERTCERTREQAUTHNonceNotifyDeleteVendorIDTSiTSr	EncryptedCPEAPGSPMIDgGSAKDEncrypted_FragmentPS)r   r  r  r  r  r  r  r  IKE_SA_INITIKE_AUTHCREATE_CHILD_SAINFORMATIONALIKE_SESSION_RESUMEIKE_INTERMEDIATE)rt   r   r   r   r   r   c                       e Zd Zd ZdS )_IKEv2_Packetc                 6    | j         rt          nt          j        S N)next_payloadIKEv2_Payloadr%   	raw_layer)selfpayloads     r|   default_payload_classz#_IKEv2_Packet.default_payload_class  s     $ 1E}}t~Er~   N)__name__
__module____qualname__r  rw   r~   r|   r  r    s(        F F F F Fr~   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edd            Zd Zd ZdS )IKEv2init_SPI r5   resp_SPIr  r   versionrF   	exch_typeflags)res0res1res2	InitiatorVersionResponseres6res7idlengthNc                     |rCt          |          dk    r0t          j        d|dd                   d         }|dk     rt          S | S )Nr=   !Br\   r   rF   )lenstructunpackr#   )cls_pktargskargsr  s        r|   dispatch_hookzIKEv2.dispatch_hook  sI     	CIIOOmD$r"u+66q9G~~
r~   c                 T    t          |t                    r|j        | j        k    rdS dS )Nr(   r   )
isinstancer  r  )r  others     r|   answerszIKEv2.answers  s-    eU## 	~..qqr~   c                     ||z  }| j         8|d d         t          j        dt          |                    z   |dd          z   }|S )NrA   z!IrE   r  r  packr  )r  ppays      r|   
post_buildzIKEv2.post_build$  sI    	S;#2#T3q66222QrssV;Ar~   r  )r  r  r  namer   r	   IKEv2PayloadTypesr   IKEv2ExchangeTypesr   r   fields_descclassmethodr  r  r  rw   r~   r|   r  r  	  s        D*b!,,*b!,,na):;;
9d##k1&899
7Aq"n"n"nooq4  	K    [      r~   r  c                        e Zd Zd Zd Zd ZdS )IKEv2_Key_Length_Attributec                 2    t          j        | |d           d S )N       )r   __init__)r  r  s     r|   r  z#IKEv2_Key_Length_Attribute.__init__-  s    $j11111r~   c                 4    t          j        | ||dz            S )N  )r   i2hr  pktxs      r|   r  zIKEv2_Key_Length_Attribute.i2h0  s    |D#q6z222r~   c                 <    t          j        | |||nddz            S )Nr   r  )r   h2ir  s      r|   r  zIKEv2_Key_Length_Attribute.h2i3  s#    |D#Q]Z'OPPPr~   N)r  r  r  r  r  r  rw   r~   r|   r  r  +  sF        2 2 23 3 3Q Q Q Q Qr~   r  c                       e Zd ZdZ edde           eddddg           edd           ed	d
d           gZ	d Z
dS )r  zIKEv2 Payloadr  Nr  r   r5   criticalr  loadr  c                     | j         dz
  S Nr-   r  r  s    r|   <lambda>zIKEv2_Payload.<lambda>=      a r~   length_fromc                     | j         8|d d         t          j        dt          |                    z   |dd          z   }||z   S )Nr)   z!Hr-   r  )r  r  r  s      r|   r  zIKEv2_Payload.post_build@  sE    ;bqb'FKc#hh777#abb'ACSyr~   )r  r  r  r  r	   r  r   r   r   r  r  rw   r~   r|   r  r  7  s}        Dnd,=>>
7Aq:,//
8T""VR-G-GHHH	K    r~   r  c                       e Zd ZdZej        dd          edd           edde           e	dd           e
d	ded
 d           e ed          d           gz   ZdS )IKEv2_TransformzIKEv2 TransformNr)   r  r5   transform_typer  r   transform_idc                     | j         S r  )r  r  s    r|   r  zIKEv2_Transform.<lambda>L  s
    ^a^p r~   H)
depends_onfmt
key_lengthc                     | j         dk    S Nr5   r  r  s    r|   r  zIKEv2_Transform.<lambda>M  s    sz\]~ r~   )r  r  r  r  r  r  r   r	   IKEv2TransformTypesr
   r   IKEv2TransformAlgorithmsr   r  rw   r~   r|   r  r  F  s        D+BQB/
8Q&.ABB	&!~t-ERpRpvyzzz33LAAC]C]^^3 KKKr~   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 )IKEv2_ProposalzIKEv2 ProposalNr+   proposalr(   protoSPIsizeSPIBtrans_nbr  c                     | j         S r  r  r  s    r|   r  zIKEv2_Proposal.<lambda>X       r~   r  transc                 &    | j         dz
  | j        z
  S r  r  r  r  s    r|   r  zIKEv2_Proposal.<lambda>Y  s    [^[ehi[ilolw[w r~   )r  r  r  r  r  r  r
   r	   IKEv2ProtocolTypesr   r   r   r%   r  r  rw   r~   r|   r  r  Q  s        D+BQB/	*a  gq"455iuc22	*d##UB,C,CDDDw 0 0/OwOwxxx3 KKKr~   r  c                       e Zd ZdZej        dd          edde           edd           e	ddd	 
          gz   ZdS )
IKEv2_AUTHzIKEv2 AuthenticationNr+   	auth_typer  r   r  r  c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_AUTH.<lambda>b  r  r~   r  )
r  r  r  r  r  r  r	   IKEv2AuthenticationTypesr   r   rw   r~   r|   r  r  ]  sg        !D+BQB/k4)ABBVQVR-G-GHHH3 KKKr~   r  c                   R    e Zd ZdZej        dd          eddd           gz   ZdS )IKEv2_VendorIDzIKEv2 Vendor IDNr+   vendorIDr  c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_VendorID.<lambda>i  s    SZ!^ r~   r  r  r  r  r  r  r  r   rw   r~   r|   r  r  f  sF        D+BQB/Z1K1KLLL3 KKKr~   r  c                   ,    e Zd Zedd            Zd ZdS )TrafficSelectorNc                     |rdt          |          dk    rQt          j        d|dd                   d         }|dk    rt          S |dk    rt          S |dk    rt
          S t          S t          S )Nr<   r  r   r(   r3   r5   r7   )r  r  r  IPv4TrafficSelectorIPv6TrafficSelectorEncryptedTrafficSelectorRawTrafficSelector)r  r  r  r  ts_types        r|   r  zTrafficSelector.dispatch_hookn  so     		*CIIOOmD$qs)44Q7G!||**A**A//))""r~   c                 
    d|fS )Nr  rw   r  ss     r|   extract_paddingzTrafficSelector.extract_padding|  s    1ur~   r  )r  r  r  r  r  r  rw   r~   r|   r  r  m  sA        # # # [#    r~   r  c            
           e Zd ZdZ edde           edde           edd           edd	           ed
d           edd           edd          gZ	dS )r  zIKEv2 IPv4 Traffic SelectorTS_typer3   IP_protocol_IDNr  r<   
start_portr   end_portr  starting_address_v4z192.168.0.1ending_address_v4z192.168.0.255)
r  r  r  r  r	   IKEv2TrafficSelectorTypesIPProtocolIDsr   r   r  rw   r~   r|   r  r    s        (Di$=>>&m<<
8R  
<##
:u%%%}55#_55KKKr~   r  c            
           e Zd ZdZ edde           edde           edd           edd	           ed
d           edd           edd          gZ	dS )r  zIKEv2 IPv6 Traffic Selectorr  r5   r  Nr  r?   r  r   r  r  starting_address_v6z2001::ending_address_v6)
r  r  r  r  r	   r  r  r   r   r  rw   r~   r|   r  r    s        (Di$=>>&m<<
8R  
<##
:u%%&11$h//KKKr~   r  c                      e Zd ZdZ edde           edde           edd           edd	           e	d
d	           edd	           e	dd	           edd	           edd	           edd	           edd	          gZ
dS )r   IKEv2 Encrypted Traffic Selectorr  r7   r  Nr  r<   resr   starting_address_FCr  ending_address_FCstarting_R_CTLending_R_CTLstarting_typeending_type)r  r  r  r  r	   r  r  r   r
   r   r  rw   r~   r|   r  r    s        -Di$=>>&m<<
8R  	%*A..	&!(!,,	"A&&	.!$$	/1%%	-##KKKr~   r  c            	       ~    e Zd ZdZ edde           edde           eddddd 	           edd
e	          gZ
dS )r  r#  r  Nr  r  r  r  c                     |dz   S r  rw   )r  r  s     r|   r  zRawTrafficSelector.<lambda>  s
    Q r~   )adjustr  )r  r  r  r  r	   r  r  r   r   r   r  rw   r~   r|   r  r    sk        -Di'@AA&m<<hfc:N:NOOOFB$$	KKKr~   r  c            
           e Zd ZdZej        dd          edddd           edd	           edde	d
 d           gz   ZdS )	IKEv2_TSiz"IKEv2 Traffic Selector - InitiatorNr+   number_of_TSsr  traffic_selectorr  count_ofr  r   c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_TSi.<lambda>      
Q r~   c                     | j         S r  r0  r  s    r|   r  zIKEv2_TSi.<lambda>  	    s/@ r~   r  
count_from
r  r  r  r  r  r  r   r   r   r  rw   r~   r|   r/  r/            /D+BQB/ot1	3 	3 	3VQ*D/$>$>#@#@	B 	B 	B	3 KKKr~   r/  c            
           e Zd ZdZej        dd          edddd           edd	           edde	d
 d           gz   ZdS )	IKEv2_TSrz"IKEv2 Traffic Selector - ResponderNr+   r0  r  r1  r2  r  r   c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_TSr.<lambda>  r5  r~   c                     | j         S r  r7  r  s    r|   r  zIKEv2_TSr.<lambda>  r8  r~   r9  r;  rw   r~   r|   r>  r>    r<  r~   r>  c                       e Zd ZdZej        dd          eddddddd	           ed
ddd           edd           e	dg  e
ddd           d           gz   ZdS )IKEv2_DeletezIKEv2 DeleteNr+   r  r   r   r   r   )r   r(   r)   r+   r  r  r  SPInumr   r  c                     | j         S r  r  r  s    r|   r  zIKEv2_Delete.<lambda>  s    CK r~   r  c                     | j         S r  )rC  r  s    r|   r  zIKEv2_Delete.<lambda>  s    cj r~   )r:  )r  r  r  r  r  r  r	   r   r   r   r   rw   r~   r|   rB  rB    s        D+BQB/gt$5%Q%QRRiuc22
8Qub#|B8O8OPPP"8"8	: 	: 	:	3 KKKr~   rB  c                   n    e Zd ZdZej        dd          ed ej                    e	d           gz   ZdS )IKEv2_SAzIKEv2 SANr+   propc                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_SA.<lambda>  s    Y\YcfgYg r~   r  )
r  r  r  r  r  r  r   r%   r  r  rw   r~   r|   rG  rG    sR        D+BQB/v~t~//MgMghhh3 KKKr~   rG  c                   R    e Zd ZdZej        dd          eddd           gz   ZdS )IKEv2_NoncezIKEv2 NonceNr+   noncer  c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_Nonce.<lambda>  s    #*q. r~   r  r	  rw   r~   r|   rK  rK    sF        D+BQB/Wb.H.HIII3 KKKr~   rK  c                      e Zd ZdZej        dd          edde           edddd           e	dd	e
           edd
d            e edd
d           d            e edde          d            e edddd          d            e e edd          d f edd          d fg edd
d                     d            e edd
d           d           g	z   ZdS )IKEv2_NotifyzIKEv2 NotifyNr+   r  r  r  r  typer   r  c                     | j         S r  r  r  s    r|   r  zIKEv2_Notify.<lambda>  r  r~   r  notifyc                 &    | j         dz
  | j        z
  S r  r  r  s    r|   r  zIKEv2_Notify.<lambda>  s    a#+1M r~   c                     | j         dvS N)r   r   rP  r  s    r|   r  zIKEv2_Notify.<lambda>  s    6 r~   
gw_id_typer(   c                     | j         dv S rU  rV  r  s    r|   r  zIKEv2_Notify.<lambda>      N2 r~   	gw_id_lengw_idc                     | j         dv S rU  rV  r  s    r|   r  zIKEv2_Notify.<lambda>  rY  r~   	127.0.0.1c                     | j         dk    S Nr(   rW  r  s    r|   r  zIKEv2_Notify.<lambda>  s    ala>O r~   ::1c                     | j         dk    S )Nr)   r`  ra  s    r|   r  zIKEv2_Notify.<lambda>  s    9J r~   c                     | j         S r  )rZ  ra  s    r|   r  zIKEv2_Notify.<lambda>  s    q{ r~   c                     | j         dv S rU  rV  r  s    r|   r  zIKEv2_Notify.<lambda>  rY  r~   rL  c                 &    | j         dz
  | j        z
  S )NrS   )r  rZ  ra  s    r|   r  zIKEv2_Notify.<lambda>
  s    18b=1;;V r~   c                     | j         dk    S )Nr   rV  r  s    r|   r  zIKEv2_Notify.<lambda>  s    E) r~   )r  r  r  r  r  r  r	   r  r   r   IKEv2NotifyMessageTypesr   r   IKEv2GatewayIDTypesr   r   r   r   rw   r~   r|   rO  rO    s       D+BQB/gt%788iuc22vq"9::UB,C,CDDDL2%M%MO O O66	
 	

 	M,+>??22	
 	

 	M+tWc::22	
 	

 	WWk224O4OPXgu--/J/JK GR5J5JKKK  32
	
 
	
 	L"2V2VWWW))	
 	
?$3 $KKKr~   rO  c                       e Zd ZdZej        dd          edded                    edd           e	dd	d
           gz   ZdS )IKEv2_KEzIKEv2 Key ExchangeNr+   groupr   r-   r  ker  c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_KE.<lambda>  s    szA~ r~   r  )
r  r  r  r  r  r  r   r  r   r   rw   r~   r|   rk  rk    sl        D+BQB/w#;A#>??
61T2+E+EFFF3 KKKr~   rk  c                       e Zd ZdZej        dd          edddddd	d
d           edd           e e	dd          d f e
dd          d fg eddd                     gz   ZdS )	IKEv2_IDiz IKEv2 Identification - InitiatorNr+   IDtyper(   r   r   
Email_addrr   Keyr(   r)   r+   r/   rT   r  r   IDr]  c                     | j         dk    S r_  rq  r  s    r|   r  zIKEv2_IDi.<lambda>       q r~   rb  c                     | j         dk    S Nr/   rw  r  s    r|   r  zIKEv2_IDi.<lambda>!      CJ!O r~   r  c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_IDi.<lambda>#      3:> r~   r  r  r  r  r  r  r  r	   r   r   r   r   r   rw   r~   r|   rp  rp            -D+BQB/h{v,S^di#j#jkkVQ{++-H-HI$&&(C(CD Lr/I/IJJJ	
 	

3 
KKKr~   rp  c                       e Zd ZdZej        dd          edddddd	d
d           edd           e e	dd          d f e
dd          d fg eddd                     gz   ZdS )	IKEv2_IDrz IKEv2 Identification - ResponderNr+   rq  r(   r   r   rr  r   rs  rt  r  r   ru  r]  c                     | j         dk    S r_  rw  r  s    r|   r  zIKEv2_IDr.<lambda>/  rx  r~   rb  c                     | j         dk    S rz  rw  r  s    r|   r  zIKEv2_IDr.<lambda>0  r{  r~   r  c                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_IDr.<lambda>2  r}  r~   r  r~  rw   r~   r|   r  r  (  r  r~   r  c                       e Zd ZdZdS )IKEv2_Encryptedz!IKEv2 Encrypted and AuthenticatedNr  r  r  r  rw   r~   r|   r  r  7  s        .DDDr~   r  c            
           e Zd ZdZ edde           edddd           e edd          d	 f e	dd
          d fg e
ddd                     gZd ZdS )ConfigurationAttributezIKEv2 Configuration AttributerP  r(   r  Nvaluer  r]  c                 *    | j         dk    o| j        dv S )Nr-   )r(   r)   r+   r-   r1   r?   r  rP  r  s    r|   r  zConfigurationAttribute.<lambda>C  s    SZ1_P=P1P r~   rb  c                 *    | j         dk    o| j        dv S )Nr<   )rS   r8   ra   r  r  s    r|   r  zConfigurationAttribute.<lambda>E  s    SZ2-J#(l2J r~   r  c                     | j         S r  r  r  s    r|   r  zConfigurationAttribute.<lambda>G  s    cj r~   r  c                 
    d|fS )Nr~   rw   r  s     r|   r  z&ConfigurationAttribute.extract_paddingK  s    Avr~   )r  r  r  r  r    IKEv2ConfigurationAttributeTypesr   r   r   r   r   r  r  rw   r~   r|   r  r  ;  s        *Dvq"BCChgs33+..PPR'5))JJL L"2H2HIII	
 	
K    r~   r  c            	           e Zd ZdZej        dd          edde           edd           e	dde
d	 
          gz   ZdS )IKEv2_CPzIKEv2 ConfigurationNr+   CFGTyper(   r  r   
attributesc                     | j         dz
  S r  r  r  s    r|   r  zIKEv2_CP.<lambda>U  r5  r~   r  )r  r  r  r  r  r  r	   !IKEv2ConfigurationPayloadCFGTypesr   r   r  rw   r~   r|   r  r  O  ss         D+BQB/i$EFFVQd,B$>$>	@ 	@ 	@3 KKKr~   r  c                   ~    e Zd ZdZej        dd          edd           edd           eddd	 
          gz   ZdS )IKEv2_Encrypted_Fragmentz*IKEv2 Encrypted and Authenticated FragmentNr+   frag_numberr(   
frag_totalr  r  c                     | j         dz
  S r  r  r  s    r|   r  z!IKEv2_Encrypted_Fragment.<lambda>^  r  r~   r  )r  r  r  r  r  r  r   r   rw   r~   r|   r  r  Y  sd        7D+BQB/
=!$$
<##VR-G-GHHH3 KKKr~   r  c                   j    e Zd ZdZej        dd          edde           eddd 	          gz   ZdS )
IKEv2_CERTREQzIKEv2 Certificate RequestNr+   cert_encodingr   cert_authorityr  c                     | j         dz
  S rz  r  r  s    r|   r  zIKEv2_CERTREQ.<lambda>f  s    3:PQ> r~   r  )	r  r  r  r  r  r  r	   IKEv2CertificateEncodingsr   rw   r~   r|   r  r  b  sY        &D+BQB/oq*CDD%r7Q7QRRR3 KKKr~   r  c                       e Zd ZdZej        dd          edde           e e	d e
            e
d           d	 f e	d e            ed
           d fg eddd                     gz   ZdS )
IKEv2_CERTzIKEv2 CertificateNr+   r  r-   	cert_datac                     | j         dz
  S rz  r  r  s    r|   r  zIKEv2_CERT.<lambda>q      
Q r~   r  c                     | j         dk    S r  r  r  s    r|   r  zIKEv2_CERT.<lambda>r      S.!3 r~   c                     | j         dz
  S rz  r  r  s    r|   r  zIKEv2_CERT.<lambda>t  r  r~   c                     | j         dk    S )Nr3   r  r  s    r|   r  zIKEv2_CERT.<lambda>u  r  r~   r  c                     | j         dz
  S rz  r  r  s    r|   r  zIKEv2_CERT.<lambda>w  s    #*q. r~   )r  r  r  r  r  r  r	   r  r   r   r   r   r   rw   r~   r|   r  r  j  s        D+BQB/oq*CDDYY[[),F,FH H H335  XXZZ,F,FH H H335	 Lb6P6PQQQ
	
 
	
3 KKKr~   r  c                       e Zd ZdZdS )	IKEv2_EAPzIKEv2 Extensible AuthenticationNr  rw   r~   r|   r  r  ~  s        ,DDDr~   r  c                       e Zd ZdZdS )
IKEv2_GSPMzGeneric Secure Password MethodNr  rw   r~   r|   r  r    s        +DDDr~   r  c                       e Zd ZdZdS )	IKEv2_IDgzGroup IdentificationNr  rw   r~   r|   r  r    s        !DDDr~   r  c                       e Zd ZdZdS )	IKEv2_GSAzGroup Security AssociationNr  rw   r~   r|   r  r    s        'DDDr~   r  c                       e Zd ZdZdS )IKEv2_KDzKey DownloadNr  rw   r~   r|   r  r    s        DDDr~   r  c                       e Zd ZdZdS )IKEv2_PSzPuzzle SolutionNr  rw   r~   r|   r  r    s        DDDr~   r  )r  i  )dport)sport)r  r  c                     t          t          |           t                      z  t          t	          d          d          z  t          t                                z  fi |S )z.Send a IKEv2 SA to an IP and wait for answers.)dstr5   rt   )r  r  )rH  )r$   r    r!   r  r&   rG  r  )ipkwargss     r|   	ikev2scanr    st    bRjjj355 5*Q--35$7 $7 $7 79A~GWGW9X9X9XY d d\bd d dr~   )a__doc__r  scapy.packetr   r   r   r   r   r   scapy.fieldsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scapy.layers.x509r   r   scapy.layers.inetr    r!   scapy.layers.ipsecr"   scapy.layers.isakmpr#   scapy.sendrecvr$   scapy.configr%   scapy.volatiler&   IKEv2AttributeTypesitemsr  r  r  r  rh  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  r>  rB  rG  rK  rO  rk  rp  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rw   r~   r|   <module>r     s>  
  
                                                            . 2 1 1 1 1 1 1 1 % % % % % % % % & & & & & & & & & & & &             % % % % % %
 		
z	
u	
 v	
 u		

 v	
 v	
 z	
 w	
 z	
 		
 		
 	
 	
 	
 	
  !	
" #	
$ #$$#&!3	
 	
 	
> 	 """ &
	
 
	
 		
 	
( 		
{	
|	
 |	
 		

 	
 	
 	
 	
 	
 	
 	
 "	
 "	
 "	
 	
  !	
" ##	
$ $####1	
 	
 	
< 	#	
 	
{d d L 0C0I0I0K0K    0C0I0I0K0K   
    *.//7  S%SS S 	S
 S S S S S S S "S S S S   !S" !#S S$ %S& 'S( )S* +S, -S.  /S0 
1S2 
3S4 
#5S6 
7S8 
$9S: 
);S< 
8=S> 
?S@ 
'ASB 
:CSD 
*ES S SF 
%GSH 
ISJ 
#KSL 
#MSN 
$OSP 
 QSR 
9SST 
USV 
?WSX 
$YSZ 
![S\ 
]S^ 
:_S` 
aSb 
cSd 
eSf 
<gS S Sh 
=iSj 
?kSl 
9mSn 
?oSp 
qSr 
$sSt 
&uSv 
"wSx 
,ySz 
0{S| 
"}S~ 
&S@ 
$ASB 
=CSD 
=ESF 
?GSH 
IS SJ *&#$#7##/#eS S S l    +&*('+&       	% % !$$$ $ 	$
 $ $ $ $ $ $ $ $ $ $ $  !$" #$$ 	&+/$ $ $  4PP*P +P $	P
 !P !P &P P "P `P P  P P P P  !P" #P P$  %P& 'P( $)P* "+P, "-P. /P0 	1P2 	3P4 5P6 7P8 $9P: 0;P< (=P> %?P@ 'APB #CPD .EP P PF &GPH .IPJ #KPL $MPN 1OPP !QPR SPT UPV (WPX !YPZ "[P\ ']P^ '_P` 'aPb &cPd ePf (gP P Ph iPj 0kPl mPn *oPp !qPr LsPt 5uPv wPx !yPz &{P| $}P~ P@ APB #CPD EPF *GPH 'IP P PJ %KPL MPN OPP &QPR -SPT &UPV WPX YPZ $[P\ #]P^ _P` aPb JcPd 0ePf 7gPh iPj +kP P Pl mPn %oPp qPr sPt "uPv wPx +yPz &{P| }P~ -P@ 1APB +CPD *EPF GPH 'IPJ KPL 	+MP P PN OPP 	)QPR 	=SPT 	9UPV WPX 	YPZ 	*[P\ 	#]P^ 	_P` aPb 	ecPd 	*ePf 	gPh 	1iPj 	#kPl 	.mPn 	%oP P Pp 	%qPr 	1sPt 	"uPv 	$wPx 	,yPz 	P{P| 	0}P~ 	*P@ 	%APB 	fCPD EPF 	GPH 	-IPJ 	/KPL MPN 	8OPP 	-QP PR 
.	;		!	2	1	$_P P Pdvz { 	
     	     
   !" #$ 	3   < 	  F F F F FF F F F
    M   D	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q    M       m   	 	 	 	 	] 	 	 	           ]       f   &
 
 
 
 
/ 
 
 

 
 
 
 
/ 
 
 
       "       	 	 	 	 	 	 	 		 	 	 	 	 	 	 		 	 	 	 	= 	 	 	    }       -   & & & & &= & & &R    }                 / / / / /m / / /    V   (    }       }       M          (- - - - - - - -, , , , , , , ," " " " " " " "( ( ( ( ( ( ( (    }       }   
 M> : : : : M? ; ; ; ; M8" 5 5 5 5 M8" 5 5 5 5 M92 6 6 6 6 M92 6 6 6 6 M:B 7 7 7 7 M=r : : : : M:B 7 7 7 7 M;R 8 8 8 8 M<b 9 9 9 9 M<b 9 9 9 9 M> ; ; ; ; M92 6 6 6 6 M92 6 6 6 6 M? < < < < M8" 5 5 5 5 M92 6 6 6 6 M:B 7 7 7 7 M92 6 6 6 6 M92 6 6 6 6 M8" 5 5 5 5 M3" E E E E M8" 5 5 5 5 V3 ' ' ' ' V3 ' ' ' ' sE % % % % sE % % % % c53 / / / /        w   d d d d dr~   