
    h                     t   d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	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 ddlm Z  dd	l!m"Z"m#Z# dd
l$m%Z%m&Z&m'Z' dZ(g dZ)d Z*	 ddddd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+d,d-d.d/d0d1dd2d3d4d5d6d7Z,i dd8dd9dd:dd;dd<dd=dd>d d?d"d@d$dAd&dBd(dCd*dDd,dEd.dFd0dGddHdIdJdKdLd7Z-i ddMddNddOd dPd"dQd$dRd(dSdTdUdVdWd*dXd,dYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndo	Z.i ddpddqddrd dsd"dtd$dud(dvdTdwdVdxd*dyd,dzdZd{d\d|d^d}d`d~dbddddddddddddddo	Z/ G d d          Z0 G d de0e
          Z1 G d de1          Z2ddddddddZ3 G d de          Z4 G d d          Z5 G d dMe5e
          Z6 G d dNe5e
          Z7 G d dOe5e
          Z8 G d dPe5e
          Z9 G d dQe5e
          Z: G d dRe5e
          Z; G d dSe5e
          Z< G d dUe5e
          Z= G d de5e
          Z> G d de5e
          Z? G d de5e
          Z@ G d de5e
          ZA G d de5e
          ZB G d deB          ZC G d dae5e
          ZD G d dce5e
          ZE G d dee5e
          ZF G d dfe5e
          ZG G d dge5e
          ZH G d dhe5e
          ZI G d die5e
          ZJ G d djeJ          ZK G d dke5e
          ZL G d dleJ          ZM G d dme5e
          ZN G d dne5e
          ZOi ddddddddddddddd dÓd"dēd$dœd&dƓd(dǓdTdȓdVdɓd*dʓd,d˓dZd̓i d\d͓d^dΓ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dd ddddddddd	d
ddޓddddddddddZP G d de0e
          ZQ G d d/e0e
          ZR G d de5e
          ZS G d d4e0e
          ZT G d de5e
          ZU G d d6eT          ZV G d de0e
          ZW G d deW          ZX G d  d!e          ZY G d" de0e
          ZZ G d# de0e
          Z[ G d$ de[          Z\ G d% de0e
          Z] G d& d!e0e
          Z^ G d' d#e0e
          Z_ G d( d%e0e
          Z` G d) d'e`          Za G d* d)e0e
          Zb G d+ d+e0e
          Zc G d, d-e0e
          Zd G d- d5e0e
          Ze G d. d1e0e
          Zf G d/ d2e0e
          Zg G d0 d3ee          Zh ee"e1e(1            ee#e2e(1            ee&e1e(2            ee'e2e(1           dS (3  z.
SCTP (Stream Control Transmission Protocol).
    N)orbraw)RandBin)conf)Packetbind_layers)BitFieldByteEnumFieldFieldFieldLenFieldFieldListFieldIPFieldIntEnumFieldIntFieldMultipleTypeFieldPacketListFieldPadFieldShortEnumField
ShortFieldStrFixedLenFieldStrLenField
XByteField	XIntFieldXShortField)SCTP_SERVICES)IPIPerror)IP6FieldIPv6IPerror6   (   r   l   d l   pvB iPl   5 i5i&l   d) l   X i۲xi8(kl   ;+3 iCMl   LP~ l   '?X i$<^io^l   lDjD l   7b i4l   pP/ isӯ%i 6l   #)	 l   5 ihiW{l   Tl i]l   ^ l   HxLx iKMNiގ l   % l   )~ i*}3l   NN iLi6il   5jh l   VT iUXi_Kl   %hr iAml   B+? l   1 i~iI0l   J l   F9# iE#l   ^n i]iYBl   Z-RH l   ~tt i}QHia[l   bR ia}l   b l   v79 iuni{Al   !f l   Km@ iH+Rl   
 i	tiTgl   Wyb+ l   sED ip9i5*l   61 il8l   oQ| l   "Z i!hi%Ql   YF l   $*=` i')uBl   M~- idi;=wl   8> l   7 i)i:l   qX ifl    \ l   ez i6ibal   aZ' l   c i`rl   }L i~7TitgGl   wj l   K?V iHtiZ$
l   Y8p i\,l   _= l   E,| iF?iTql   W l   $F! ibl   Cl i@iDi9Wl   0J l   v i*	i5|zl   6#P iݛ<l   ` l   *k; i)h/l   x; i{piKcl   HM# iglEl   d/n l   \H i_<Vic/l   `t l   @(R iCl   tk iw=i_.l   \9 l   |Q% i`isl    ik2Ul   hN l   h ibFiؤql   '4T l   /Tr i,W!l   3? iİ-i0C>l   3@w l   5D i6 PiQpCl   RF6b i"el   !u/ l   NR	 iMсvii(l   jn5 l   S i;l   vz^ iuci
3l   	x l   r*d i~@i>.Sl   =B iul   f l   !i) i"fi*8l   )O l   Z3 iٜ+l   =~ i>=iml   NX l   & iǥ1i3V"l   0U! i۱l   2l l   ,AYJ i/BGi~TIl   }v l   P iZl   i ij|iol   <; l   a' ib!i\2l   _ ivIl   uEL l   Cj i@id
Yl   g:V l   Icp iJZJl   {. = ixli^l   ] l   (aF i+[il   [` i?$l   <- l   O" i7iil   s7 l   "  i!zl   g\ i\i=HOl   >Gz l   uof iviUl   }@ ij4l   i{> l   + i'i7yl   4 l   MG1 iNjl    [| i#FLiR_l   QSZ c                     d}| D ](}|dz	  t           |t          |          z  dz           z  })| dz  }t          j        dt          j        d|                    d         S )Nl          >Iz<Ir   )crc32c_tabler   structunpackpack)bufcrccs      U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/sctp.pycrc32cr.   p   sk    
C A Aax<A4(?@@4:
C=v{45566q99    	Reserved1SHA-1	Reserved2zSHA-256)r            SCTPChunkDatar3   SCTPChunkInitr4   SCTPChunkInitAckr5   SCTPChunkSACK   SCTPChunkHeartbeatReq   SCTPChunkHeartbeatAck   SCTPChunkAbort   SCTPChunkShutdownr#   SCTPChunkShutdownAck	   SCTPChunkError
   SCTPChunkCookieEcho   SCTPChunkCookieAck   SCTPChunkShutdownComplete   SCTPChunkAuthentication@   SCTPChunkIData   SCTPChunkReConfigSCTPChunkPadSCTPChunkAddressConfAckSCTPChunkForwardTSNSCTPChunkAddressConfSCTPChunkIForwardTSN)            datainitzinit-acksackzheartbeat-reqzheartbeat-ackabortshutdownzshutdown-ackerrorzcookie-echoz
cookie-ackzshutdown-completeauthenticationzi-dataz	re-configpadaddress-configuration-ackzforward-tsnaddress-configurationzi-forward-tsnSCTPChunkParamHeartbeatInfoSCTPChunkParamIPv4AddrSCTPChunkParamIPv6AddrSCTPChunkParamStateCookieSCTPChunkParamUnrocognizedParam SCTPChunkParamCookiePreservativeSCTPChunkParamHostname    SCTPChunkParamSupportedAddrTypes   %SCTPChunkParamOutgoingSSNResetRequest%SCTPChunkParamIncomingSSNResetRequest SCTPChunkParamSSNTSNResetRequest   %SCTPChunkParamReConfigurationResponse   &SCTPChunkParamAddOutgoingStreamRequest   &SCTPChunkParamAddIncomingStreamRequest   SCTPChunkParamECNCapable  SCTPChunkParamRandom  SCTPChunkParamChunkList$SCTPChunkParamRequestedHMACFunctions!SCTPChunkParamSupportedExtensionsSCTPChunkParamFwdTSNSCTPChunkParamAddIPAddrSCTPChunkParamDelIPAddrSCTPChunkParamErrorIndicationSCTPChunkParamSetPrimaryAddrSCTPChunkParamSuccessIndicationSCTPChunkParamAdaptationLayer)	                   zheartbeat-infoIPv4r   zstate-cookiezunrecognized-paramzcookie-preservativehostname	addrtypeszout-ssn-reset-reqzin-ssn-reset-reqzssn-tsn-reset-reqzre-configuration-responsezadd-outgoing-stream-reqzadd-incoming-stream-reqzecn-capablerandomz
chunk-listzrequested-HMAC-functionszsupported-extensionszfwd-tsn-supportedzadd-IPzdel-IPzerror-indicationzset-primary-addrzsuccess-indicationzadaptation-layerc                       e Zd Zd ZdS )_SCTPChunkGuessPayloadc                     t          |          dk     rt          j        S t          |d                   }t	                                          t                              |d          t          j                  S )Nr:   r   Raw)lenr   padding_layerr   globalsgetsctpchunktypescls	raw_layer)selfpts      r-   default_payload_classz,_SCTPChunkGuessPayload.default_payload_class  sT    q66A::%%AaD		A99==!2!6!6q%!@!@$.QQQr/   N)__name__
__module____qualname__r    r/   r-   r   r     s(        R R R R Rr/   r   c                   z    e Zd Z edde           edde           edd           edd          gZd Zd ZdS )	SCTPsportr   dporttagchksumNc                     t          |t                    sdS t          j        r"| j        |j        k    r| j        |j        k    sdS dS Nr   r3   
isinstancer   r   
checkIPsrcr   r   r   others     r-   answerszSCTP.answers  K    %&& 	1? 	Z5;..Z5;..qqr/   c                     ||z  }| j         Gt          t          |                    }|d d         t          j        d|          z   |dd          z   }|S )Nr#   r%   rk   )r   r.   r   r'   r)   )r   r   payr+   s       r-   
post_buildzSCTP.post_build  sT    	S;Q..C"1"D#...2337Ar/   )	r   r   r   r   r   r   fields_descr   r   r   r/   r-   r   r     sy        !>'1m<<!>'1m<<9UA&&9Xt,,0K
      r/   r   c                       e Zd ZdZd Zd ZdS )	SCTPerrorzSCTP in ICMPc                     t          |t                    sdS t          j        r"| j        |j        k    r| j        |j        k    sdS dS r   r   r   s     r-   r   zSCTPerror.answers%  r   r/   c                 *    t          j        |           S N)r   	mysummary)r   s    r-   r   zSCTPerror.mysummary.  s    %%%r/   N)r   r   r   namer   r   r   r/   r-   r   r   "  s7        D  & & & & &r/   r   zSuccess - Nothing to dozSuccess - PerformedDeniedzError - Wrong SSNz#Error - Request already in progresszError - Bad Sequence NumberzIn Progress)r   r3   r4   r5   r:   r<   r>   c                       e Zd ZddZd ZdS )ChunkParamFieldNc                 N    t          j        | ||t          j        ||           d S )N)
count_fromlength_from)r   __init__r   r   )r   r   defaultr   r   s        r-   r   zChunkParamField.__init__A  s*     tWdnQ[ituuuuuur/   c                 <   t           j        }t          |          dk    rst          |d                   dz  t          |d                   z   }t	                                          t                              |d          t           j                  } ||          S )Nr:   r      r3   r   )r   r   r   r   r   r   sctpchunkparamtypescls)r   r   mclsr   s        r-   m2izChunkParamField.m2iD  sq    nq66Q;;AaD		C#ad))+A))-- 6 : :1e D DdnUUCs1vvr/   )NN)r   r   r   r   r   r   r/   r-   r   r   @  s;        v v v v    r/   r   c                       e Zd Zd ZdS )_SCTPChunkParamc                     d|d d          fS )Nr/   r   )r   ss     r-   extract_paddingz_SCTPChunkParam.extract_paddingO  s    AaaaDyr/   N)r   r   r   r   r   r/   r-   r   r   N  s#            r/   r   c            	       |    e Zd Z edde           edddd            e eddd	 
          dd          gZdS )rd   typer3   r   NrZ   c                     |dz   S Nr:   r   pktxs     r-   <lambda>z$SCTPChunkParamHeartbeatInfo.<lambda>V  
    a!e r/   	length_ofadjust c                     | j         dz
  S r   r   r   s    r-   r   z$SCTPChunkParamHeartbeatInfo.<lambda>X      ! r/   r   r:       padwith	r   r   r   r   sctpchunkparamtypesr   r   r   r   r   r/   r-   rd   rd   S  s        !>&!-@AA =(;(;= = =8KK4K4KM M Mw0 0 03KKKr/   c                   V    e Zd Z edde           edd           edd          gZdS )re   r   r<   r   r#   addr	127.0.0.1N)r   r   r   r   r   r   r   r   r   r/   r-   re   re   \  sE        !>&!-@AA:eQ''76;//3KKKr/   c                   V    e Zd Z edde           edd           edd          gZdS )rf   r   r>   r      r   ::1N)r   r   r   r   r   r   r   r   r   r/   r-   rf   rf   b  sE        !>&!-@AA:eR((8FE**.KKKr/   c            	       |    e Zd Z edde           edddd            e eddd	 
          dd          gZdS )rg   r   r@   r   Ncookiec                     |dz   S r   r   r   s     r-   r   z"SCTPChunkParamStateCookie.<lambda>k  r   r/   r   r   c                     | j         dz
  S r   r   r   s    r-   r   z"SCTPChunkParamStateCookie.<lambda>m  r   r/   r   r:   r   r   r   r   r/   r-   rg   rg   h  s        !>&!-@AA =(;(;= = =8KK"4K4KM M Mw0 0 03KKKr/   c            	       |    e Zd Z edde           edddd            e eddd	 
          dd          gZdS )rh   r   r#   r   Nparamc                     |dz   S r   r   r   s     r-   r   z(SCTPChunkParamUnrocognizedParam.<lambda>t  r   r/   r   r   c                     | j         dz
  S r   r   r   s    r-   r   z(SCTPChunkParamUnrocognizedParam.<lambda>v  r   r/   r   r:   r   r   r   r   r/   r-   rh   rh   q  s        !>&!-@AA =(;(;= = =8KK4K4KM M Mw0 0 03KKKr/   c                   V    e Zd Z edde           edd           edd          gZdS )ri   r   rC   r   r#   sug_cookie_incNr   r   r   r   r   r   r   r   r   r/   r-   ri   ri   z  sF        !>&!-@AA:eQ''9-t448KKKr/   c            	       |    e Zd Z edde           edddd            e eddd	 
          dd          gZdS )rj   r   rG   r   Nr   c                     |dz   S r   r   r   s     r-   r   zSCTPChunkParamHostname.<lambda>  r   r/   r   r   c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkParamHostname.<lambda>  r   r/   r   r:   r   r   r   r   r/   r-   rj   rj     s        !>&".ABB =
(;(;= = =8KK
B4K4KM M Mw0 0 03KKKr/   c                       e Zd Z edde           edddd            e eddg ed	d
e          d           dd          gZdS )rl   r   rk   r   Naddr_type_listc                     |dz   S r   r   r   s     r-   r   z)SCTPChunkParamSupportedAddrTypes.<lambda>  r   r/   r   r   	addr_typer<   c                     | j         dz
  S r   r   r   s    r-   r   z)SCTPChunkParamSupportedAddrTypes.<lambda>      37Q; r/   r   r:   r   r   )	r   r   r   r   r   r   r   r   r   r   r/   r-   rl   rl     s        !>&".ABB =8H(;(;= = =8NN+;fX+9>+qJ]+^+^7N7NP P P w0 0 03KKKr/   c                       e Zd Z edde           edddd            edd           ed	d           ed
d           e edg  e	dd          d           dd          gZ
dS )SCTPChunkParamOutSSNResetReqr   rm   r   Nstream_num_listc                     |dz   S Nrq   r   r   s     r-   r   z%SCTPChunkParamOutSSNResetReq.<lambda>  
    a"f r/   r   re_conf_req_seq_numre_conf_res_seq_numtsn
stream_numc                     | j         dz
  S r  r   r   s    r-   r   z%SCTPChunkParamOutSSNResetReq.<lambda>  s    37R< r/   r   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r-   r  r    s        !>&".ABB =8I(<(<> > >92D9992D999UD))8NN+<b+6;|T+J+J7O7OQ Q Q w0 0 0
KKKr/   r  c                       e Zd Z edde           edddd            edd           e edg  e	d	d          d
           dd          gZ
dS )SCTPChunkParamInSSNResetReqr   rI   r   Nr  c                     |dz   S Nr#   r   r   s     r-   r   z$SCTPChunkParamInSSNResetReq.<lambda>  r   r/   r   r	  r  c                     | j         dz
  S r  r   r   s    r-   r   z$SCTPChunkParamInSSNResetReq.<lambda>  r  r/   r   r:   r   r   r  r   r/   r-   r  r    s        !>&".ABB =8I(;(;= = =92D998NN+<b+6;|T+J+J7N7NP P P w0 0 0	KKKr/   r  c                   V    e Zd Z edde           edd           edd          gZdS )SCTPChunkParamSSNTSNResetReqr   rK   r   r#   r	  Nr   r   r   r   r   r   r   r   r   r/   r-   r  r    sF        !>&".ABB;ua((92D99KKKr/   r  c            	           e Zd Z edde           edd           edd           edde           edd           ed	d          gZ	dS )
SCTPChunkParamReConfigResr   rq   r   rk   r
  Nresultsender_next_tsnreceiver_next_tsn)
r   r   r   r   r   r   r   r   
resultcoder   r   r/   r-   r  r    sw        !>&".ABB;ub))92D99<$
;;9.5590$77KKKr/   r  c                       e Zd Z edde           edd           edd           edd           edd          gZdS )	"SCTPChunkParamAddOutgoingStreamReqr   rs   r   rk   r	  Nnum_new_streamreservedr  r   r/   r-   r  r    se        !>&".ABB;ub))92D99;/66;z400	KKKr/   r  c                       e Zd ZdZdS )"SCTPChunkParamAddIncomingStreamReqru   Nr   r   r   r   r   r/   r-   r"  r"    s        DDDr/   r"  c                   @    e Zd Z edde           edd          gZdS )rx   r   rw   r   r:   Nr   r   r   r   r   r   r   r   r/   r-   rx   rx     6        !>&&2EFF:eQ''+KKKr/   c            
           e Zd Z edde           edddd            e ed ed          d	 
          dd          gZ	dS )rz   r   ry   r   Nr   c                     |dz   S r   r   r   s     r-   r   zSCTPChunkParamRandom.<lambda>  r   r/   r       c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkParamRandom.<lambda>  r   r/   r   r:   r   r   )
r   r   r   r   r   r   r   r   r   r   r   r/   r-   rz   rz     s        !>&&2EFF =(;(;= = =8KK''"++4K4KM M Mw0 0 03KKKr/   c                       e Zd Z edde           edddd            e edd edde	          d	 
          dd          gZ
dS )r|   r   r{   r   N
chunk_listc                     |dz   S r   r   r   s     r-   r   z SCTPChunkParamChunkList.<lambda>  r   r/   r   chunkc                     | j         dz
  S r   r   r   s    r-   r   z SCTPChunkParamChunkList.<lambda>  r  r/   r   r:   r   r   r   r   r   r   r   r   r   r   r
   sctpchunktypesr   r   r/   r-   r|   r|     s        !>&&2EFF =(;(;= = =8NN<+8=$+W+W7N7NP P P w0 0 03KKKr/   c                       e Zd Z edde           edddd            e eddg ed	d
e          d           dd          gZ	dS )r}   r   r   r   NHMAC_functions_listc                     |dz   S r   r   r   s     r-   r   z-SCTPChunkParamRequestedHMACFunctions.<lambda>  r   r/   r   r1   HMAC_functionr3   c                     | j         dz
  S r   r   r   s    r-   r   z-SCTPChunkParamRequestedHMACFunctions.<lambda>  r  r/   r   r:   r   r   )
r   r   r   r   r   r   r   r   	hmactypesr   r   r/   r-   r}   r}     s        !>&&2EFF =8M(;(;= = =8NN+@7)+9>/1i+X+X7N7NP P P w0 0 03KKKr/   c                       e Zd Z edde           edddd            e edg d edde	          d	 
          dd          gZ
dS )r~   r   r   r   Nsupported_extensionsc                     |dz   S r   r   r   s     r-   r   z*SCTPChunkParamSupportedExtensions.<lambda>  r   r/   r   )r`   rc   rb   c                     | j         dz
  S r   r   r   s    r-   r   z*SCTPChunkParamSupportedExtensions.<lambda>  r  r/   r   r:   r   r   r0  r   r/   r-   r~   r~     s        !>&&2EFF =8N(;(;= = =8NN+A,I ,I ,I ,9=9O9=~,O ,O7N7NP P P w0 0 0
3KKKr/   c                   @    e Zd Z edde           edd          gZdS )r   r   r   r   r:   Nr%  r   r/   r-   r   r     r&  r/   c                       e Zd Z edde           edddd            edd           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S )r   r   r   r   Nr   c                     |dz   S )Nrk   r   r   s     r-   r   z SCTPChunkParamAddIPAddr.<lambda>  r  r/   r   correlation_idr   r<   addr_lenc                     |dz   S r   r   r   s     r-   r   z SCTPChunkParamAddIPAddr.<lambda>  r   r/   r   c                     | j         dk    S )Nr<   r   r   s    r-   r   z SCTPChunkParamAddIPAddr.<lambda>      akQ&6 r/   r   c                     | j         dk    S )Nr>   rC  rD  s    r-   r   z SCTPChunkParamAddIPAddr.<lambda>  rE  r/   r   c                     | j         S r   )r@  r   s    r-   r   z SCTPChunkParamAddIPAddr.<lambda>  s     r/   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r-   r   r      s        !>&&2EFF =(<(<> > >9-t44!>+q2EFF =TV(;(;= = =$$#GFK88668$HVU33668 ('4L4LN N NO OKKKr/   c                       e Zd ZdZdS )r   r   Nr#  r   r/   r-   r   r             DDDr/   c            
           e Zd Z edde           edddd            edd           e edd	d
           dd          gZ	dS )r   r   r   r   Nerror_causesc                     |dz   S r  r   r   s     r-   r   z&SCTPChunkParamErrorIndication.<lambda>  r   r/   r   r?  r   c                     | j         dz
  S r   r   r   s    r-   r   z&SCTPChunkParamErrorIndication.<lambda>  r   r/   r   r:   r   r   )
r   r   r   r   r   r   r   r   r   r   r   r/   r-   r   r     s        !>&&2EFF =(;(;= = =9-t448KK4K4KM M Mw0 0 0	3KKKr/   c                       e Zd ZdZdS )r   r   Nr#  r   r/   r-   r   r   "  rI  r/   c                   V    e Zd Z edde           edd           edd          gZdS )r   r   r   r   r#   r?  Nr   r   r/   r-   r   r   &  sF        !>&&2EFF:eQ''9-t448KKKr/   c                   V    e Zd Z edde           edd           edd          gZdS )r   r   r   r   r#   
indicationNr   r   r/   r-   r   r   ,  sE        !>&&2EFF:eQ''9\4004KKKr/   ReservedIUAM2UAM3UASUAM2PAV5UAzH.248zBICC/Q.2150.3TALIDUAASAPENRPzH.323zQ.IPC/Q.2150.3SIMCOzDDP Segment ChunkzDDP Stream Session ControlS1AP   RUAr   HNBAP   z	ForCES-HP   z	ForCES-MP   z	ForCES-LP   zSBc-AP   NBAP   
Unassigned   X2AP   IRCP   zLCS-AP   MPICH2   SABPr)  FGP!   PPP"   CALCAPP#   SSP$   zNPMP-CONTROL%   z	NPMP-DATA&   ECHO'   DISCARD(   DAYTIME)   CHARGEN*   z3GPP RNA+   z	3GPP M2AP,   z	3GPP M3AP-   zSSH/SCTP.   zDiameter/SCTP/   zDiameter/DTLS/SCTP0   R14P1   2   zWebRTC DCEPzWebRTC StringzWebRTC Binary PartialzWebRTC BinaryzWebRTC String Partialz3GPP PUAzWebRTC String EmptyzWebRTC Binary Empty)3   4   5   6   7   8   9   c                   N   e 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d            edd           edd           edd           e	dde
           e eddd           dd          gZdS )r6   r   r   r   Nr:   
delay_sackr3   	unordered	beginningendingr   rZ   c                     |dz   S r  r   r   s     r-   r   zSCTPChunkData.<lambda>{  s    UVY[U[ r/   r   r  	stream_id
stream_seqproto_idc                     | j         dz
  S r  r   r   s    r-   r   zSCTPChunkData.<lambda>  s    cgXZl r/   r   r   r   )r   r   r   r
   r1  r	   r   r   r   r   "SCTP_PAYLOAD_PROTOCOL_INDENTIFIERSr   r   r   r   r/   r-   r6   r6   s  s        =N;;8Ja008L!Q//8KA..8KA..8Ha++ =G[G[\\\9UD));{D11;|T22<
D2TUU8KKBZBZ[[[w0 0 0KKKr/   c                      e 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d            edd           edd           edd           edd           e	 e
dde          d f edd          d fg edd                     e eddd           dd          gZdS )rN   r   rM   r   Nr:   r  r   r3   r  r  r  r   rZ   c                     |dz   S Nr   r   r   s     r-   r   zSCTPChunkIData.<lambda>  r  r/   r   r  r  reserved_16
message_idppid_fsnc                     | j         dk    S )Nr3   r  r   s    r-   r   zSCTPChunkIData.<lambda>      (: r/   c                     | j         dk    S )Nr   r  r   s    r-   r   zSCTPChunkIData.<lambda>  r  r/   c                     | j         dz
  S r  r   r   s    r-   r   zSCTPChunkIData.<lambda>  s    " r/   r   r   r   )r   r   r   r
   r1  r	   r   r   r   r   r   r  r   r   r   r   r/   r-   rN   rN     sw        =^<<8Ja008L!Q//8KA..8KA..8Ha++ =(<(<> > >9UD));{D11;}d339\400$$(LT)KM M::< &Ij$77::<	 !yT224 4 8KK4L4LN N Nw0 0 0+KKKr/   c                   >    e Zd Z edd           edd          gZdS )SCTPForwardSkipr  Nr  )r   r   r   r   r   r   r/   r-   r  r    s3        :k400:lD11KKKr/   r  c            	           e Zd Z edde           edd           edddd            ed	d           eddd
           gZ	dS )rS   r   rW   flagsNr   skipsc                     |dz   S r  r   r   s     r-   r   zSCTPChunkForwardTSN.<lambda>  r   r/   r   new_tsnc                     | j         dz
  S r  r   r   s    r-   r   zSCTPChunkForwardTSN.<lambda>  s    37Q; r/   r   
r   r   r   r
   r1  r   r   r   r   r   r   r/   r-   rS   rS     s         =n==:gt,, =(;(;= = =8It,,"?7D/F/FH H HKKKr/   c                   n    e Zd Z edd           eddd           eddd           edd          gZdS )SCTPIForwardSkipr  Nr   rK   r  r3   r  )r   r   r   r   r	   r   r   r   r/   r-   r  r    sU        :k4008Jb118Kq118L$//KKKr/   r  c                       e Zd ZdZdS )rU   rY   Nr#  r   r/   r-   rU   rU     s        DDDr/   c                       e Zd Z edde           edd           edddd            ed	d           ed
d           e	dd           e	dd           edd           e
ddd           g	ZdS )r7   r   r3   r  Nr   paramsc                     |dz   S r  r   r   s     r-   r   zSCTPChunkInit.<lambda>  s    WX[]W] r/   r   init_taga_rwndn_out_streamsn_in_streamsinit_tsnc                     | j         dz
  S r  r   r   s    r-   r   zSCTPChunkInit.<lambda>  s    #'TV, r/   r   )r   r   r   r
   r1  r   r   r   r   r   r   r   r   r/   r-   r7   r7     s         =N;;:gt,, =I]I]^^^9Z..8Hd++:ot44:nd339Z.."?8T?V?VWWW	KKKr/   c                       e Zd ZdZdS )r8   r4   Nr#  r   r/   r-   r8   r8             DDDr/   c                   &    e Zd Zd Zd Zd Zd ZdS )GapAckFieldc                 4    t          j        | ||d           d S )N4s)r   r   )r   r   r   s      r-   r   zGapAckField.__init__  s    tT7D11111r/   c                     |dS d |                     d          D             \  }}t          d||g          }t          j        | S )Ns       c                 ,    g | ]}t          |          S r   )int).0es     r-   
<listcomp>z#GapAckField.i2m.<locals>.<listcomp>  s    111qCFF111r/   :>HH)splittupler'   r)   )r   r   r   staendargss         r-   i2mzGapAckField.i2m  sN    9;11AGGCLL111SeS#&''{D!!r/   c                 2    dt          j        d|          z  S )N%d:%dr  )r'   r(   r   r   r   s      r-   r   zGapAckField.m2i  s    &-q1122r/   c                 `    t          |t                    rt          |          dk    rd|z  S |S )Nr4   r  )r   r  r   r  s      r-   any2izGapAckField.any2i  s1    a 	!CFFaKKa= r/   N)r   r   r   r   r  r   r  r   r/   r-   r  r    sP        2 2 2" " "3 3 3    r/   r  c                       e Zd Z edde           edd           edd           edd           edd           e	ddd	
           e	ddd
           e
d	g  edd          d            e
dg  edd          d           g	Zd ZdS )r9   r   r5   r  Nr   cumul_tsn_ackr  	n_gap_ackgap_ack_list)count_of	n_dup_tsndup_tsn_listgap_ackc                     | j         S r   )r  r   s    r-   r   zSCTPChunkSACK.<lambda>  s
    jmjw r/   )r   dup_tsnc                     | j         S r   )r  r   s    r-   r   zSCTPChunkSACK.<lambda>  s
    hkhu r/   c                     | j         8|d d         t          j        dt          |                    z   |dd          z   }||z   S )Nr4   z>Hr:   )r   r'   r)   )r   r   r   s      r-   r   zSCTPChunkSACK.post_build  sD    8"1"D#a&&111AabbE9A3wr/   )r   r   r   r
   r1  r   r   r   r   r   r   r  r   r   r   r/   r-   r9   r9     s         =N;;:gt,,:eT**9_d338Hd++ =d^LLL =d^LLL!>."kk)T6R6R_w_wxxx!>."ii	46P6P]u]uvvv	K    r/   c                   z    e Zd Z edde           edd           edddd            eddd	 
          gZdS )r;   r   r:   r  Nr   r  c                     |dz   S r   r   r   s     r-   r   zSCTPChunkHeartbeatReq.<lambda>      WX[\W\ r/   r   c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkHeartbeatReq.<lambda>      #'TU+ r/   r   	r   r   r   r
   r1  r   r   r   r   r   r/   r-   r;   r;     sg         =N;;:gt,, =I\I\]]]"?8T?U?UVVVKKKr/   c                       e Zd ZdZdS )r=   r<   Nr#  r   r/   r-   r=   r=     r  r/   c                       e Zd Z edde           eddd           eddd           ed	dd
d            e ed
dd           dd          gZ	dS )r?   r   r>   r   Nr@   TCBr   r3   r   rK  c                     |dz   S r   r   r   s     r-   r   zSCTPChunkAbort.<lambda>      ]^ab]b r/   r   r   c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkAbort.<lambda>      TWT[^_T_ r/   r   r:   r   r   )
r   r   r   r
   r1  r	   r   r   r   r   r   r/   r-   r?   r?     s         =N;;8Ja008E1a(( =ObObccc8KKH_H_```w0 0 0	KKKr/   c                   l    e Zd Z edde           edd           edd           edd          gZdS )rA   r   r@   r  Nr   r#   r  )	r   r   r   r
   r1  r   r   r   r   r   r/   r-   rA   rA     sS         =N;;:gt,,:eQ''9_d33KKKr/   c                   V    e Zd Z edde           edd           edd          gZdS )rB   r   r#   r  Nr   r:   r   r   r   r
   r1  r   r   r   r   r/   r-   rB   rB     sD         =N;;:gt,,:eQ''KKKr/   c            
           e Zd Z edde           edd           edddd            e edd	d
           dd          gZ	dS )rD   r   rC   r  Nr   rK  c                     |dz   S r   r   r   s     r-   r   zSCTPChunkError.<lambda>  r  r/   r   r   c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkError.<lambda>  r  r/   r   r:   r   r   
r   r   r   r
   r1  r   r   r   r   r   r   r/   r-   rD   rD     s         =N;;:gt,, =ObObccc8KKH_H_```w0 0 0KKKr/   c            
           e Zd Z edde           edd           edddd            e edd	d
           dd          gZ	dS )rF   r   rE   r  Nr   r   c                     |dz   S r   r   r   s     r-   r   zSCTPChunkCookieEcho.<lambda>&  r  r/   r   r   c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkCookieEcho.<lambda>'  s    cgXYk r/   r   r:   r   r   r  r   r/   r-   rF   rF   #  s         =^<<:gt,, =I\I\]]]8KK"BYBYZZZw0 0 0KKKr/   c                   V    e Zd Z edde           edd           edd          gZdS )rH   r   rG   r  Nr   r:   r  r   r/   r-   rH   rH   ,  sD         =^<<:gt,,:eQ''KKKr/   c                   p    e Zd Z edde           eddd           eddd           ed	d
          gZdS )rJ   r   rI   r   Nr@   r  r   r3   r   r:   )r   r   r   r
   r1  r	   r   r   r   r/   r-   rJ   rJ   3  sW         =^<<8Ja008E1a((:eQ''KKKr/   c                       e Zd Z edde           edd           edddd            ed	d           ed
d           e e	ddd           dd          gZ
dS )rL   r   rK   r  Nr   HMACc                     |dz   S r  r   r   s     r-   r   z SCTPChunkAuthentication.<lambda>?  r   r/   r   shared_key_idr5  r   c                     | j         dz
  S r  r   r   s    r-   r   z SCTPChunkAuthentication.<lambda>B  s    CGVWK r/   r   r:   r   r   )r   r   r   r
   r1  r   r   r   r   r   r   r   r/   r-   rL   rL   ;  s         =^<<:gt,, =(;(;= = =:ot44:ot448KK@W@WXXXw0 0 0KKKr/   c            	           e Zd Z edde           edd           edddd            ed	d
           eddd           gZ	dS )rT   r   rX   r  Nr   r  c                     |dz   S r  r   r   s     r-   r   zSCTPChunkAddressConf.<lambda>K  r   r/   r   seqr   c                     | j         dz
  S r  r   r   s    r-   r   zSCTPChunkAddressConf.<lambda>M  r  r/   r   r  r   r/   r-   rT   rT   G  s|         =~>>:gt,, =(;(;= = =8E1%%"?8T?U?UVVVKKKr/   c                   z    e Zd Z edde           edd           edddd            eddd	 
          gZdS )rP   r   rO   r  Nr   r  c                     |dz   S r   r   r   s     r-   r   zSCTPChunkReConfig.<lambda>U  r   r/   r   c                     | j         dz
  S r   r   r   s    r-   r   zSCTPChunkReConfig.<lambda>V  s    37UV; r/   r   r  r   r/   r-   rP   rP   Q  sm         =n==:gt,, =(;(;= = ="?8T?V?VWWW	KKKr/   c            
           e Zd Z edde           edd           edddd            e eddd	 
          dd          gZ	dS )rQ   r   r!   r  Nr   paddingc                     |dz   S r  r   r   s     r-   r   zSCTPChunkPad.<lambda>^  r   r/   r   c                     | j         dz
  S r  r   r   s    r-   r   zSCTPChunkPad.<lambda>`  r   r/   r   r:   r   r   r  r   r/   r-   rQ   rQ   Z  s         =n==:gt,, =	(;(;= = =8KK	44K4KM M Mw0 0 0	KKKr/   c                       e Zd ZdZdS )rR   rV   Nr#  r   r/   r-   rR   rR   e  s        DDDr/   )proto)nh)i__doc__r'   scapy.compatr   r   scapy.volatiler   scapy.configr   scapy.packetr   r   scapy.fieldsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
scapy.datar   scapy.layers.inetr   r   scapy.layers.inet6r   r   r    IPPROTO_SCTPr&   r.   r7  r   r1  r   r   r   r   r   r  r   r   rd   re   rf   rg   rh   ri   rj   rl   r  r  r  r  r  r"  rx   rz   r|   r}   r~   r   r   r   r   r   r   r   r  r6   rN   r  rS   r  rU   r7   r8   r  r9   r;   r=   r?   rA   rB   rD   rF   rH   rJ   rL   rT   rP   rQ   rR   r   r/   r-   <module>r     s     ! ! ! ! ! ! ! ! " " " " " "       , , , , , , , ,                                       ( % $ $ $ $ $ ) ) ) ) ) ) ) ) 7 7 7 7 7 7 7 7 7 7A A AH: : :& 	 	  	
         # !   	!" #$ $	
 	+   0vv z v	
   w z ~ w       !" #$ &	
!	+  0$  "	
 ( )   * / / * / 0 0 &  "!" %#$ 3/"%%+*-+5   :v v ~	
   
     # ! ! M  H!" L#$ '" 5   DR R R R R R R R    !6   .& & & & & & & &( !,$ 
	 	 	 	 	o 	 	 	       
3 3 3 3 3/6 3 3 33 3 3 3 3_f 3 3 3. . . . ._f . . .3 3 3 3 3 3 3 33 3 3 3 3ov 3 3 38 8 8 8 8 8 8 83 3 3 3 3_f 3 3 33 3 3 3 3 3 3 3    ?F   	 	 	 	 	/6 	 	 	    ?F              &       )K   + + + + + + + +
3 3 3 3 3?F 3 3 33 3 3 3 3ov 3 3 33 3 3 3 3?F 3 3 33 3 3 3 3 3 3 3+ + + + +?F + + +
    ov   (    5   3 3 3 3 3OV 3 3 3    #:   8 8 8 8 8ov 8 8 84 4 4 4 4OV 4 4 4;&z;&u;& v;& v	;&
 u;& v;& v;& w;& ;& v;& ;& ;& ;& ;& ;&  !;&" #;& ;&$ $%;&& ';&( );&* +;&, -;&. /;&0 1;&2 3;&4 5;&6 7;&8 9;&: ;;&< =;&> ?;&@ A;&B C;&D E;& ;& ;&F 	G;&H I;&J K;&L M;&N O;&P 	Q;&R 	S;&T 	U;&V 
W;&X Y;&Z [;&\ 
];&^ _;&` a;&b c;&d e;&f g;& ;&h 	u;& ;& ;& "|    *F   $    +V   8    ov       0&              .   
 
 
 
 
*F 
 
 
    }       %   (    *F   $    2F       1       +V       .       16       +V       .       /        6   	 	 	 	 	4f 	 	 	    16       .       )6       2    BL ) ) ) ) GYl 3 3 3 3 D$< ( ( ( ( Hi| 4 4 4 4 4 4r/   