
    hL                     8   d 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 ddlmZ ddlmZmZ ddlmZ ddlmZ  G d d	ee          Z G d
 dee          Z G d dee          Z G d de          Z G d dee          ZeeeedZ ej        e           dS )z,
Secure Neighbor Discovery (SEND) - RFC3971
    )Packet)	BitField	ByteFieldFieldLenFieldPacketFieldPacketLenField
ShortFieldStrFixedLenFieldStrLenFieldUTCTimeField)X509_SubjectPublicKeyInfo)icmp6ndoptscls_ICMPv6NDGuessPayload)chb)RandBinc                   h    e Zd Zd Z edd           eddddd            edd	d
           gZdS )ICMPv6NDOptNoncetype   lenNnonceBc                 F    t          t          |dz   dz                      S )N   g       @)introundpktxs     V/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/send.py<lambda>zICMPv6NDOptNonce.<lambda>   s%    `cdiklopkptvjvdwdw`x`x     	length_offmtadjust c                     | j         dz  dz
  S )N   r   r   r   s    r    r!   zICMPv6NDOptNonce.<lambda>   s    CGaKRSO r"   length_from)__name__
__module____qualname__namer   r   r   fields_desc r"   r    r   r      s^        D9VR(( =SQxQxyyy;w8S8STTTVKKKr"   r   c                   p    e Zd Zd Z edd           edd           eddd           edd	          gZd	S )
ICMPv6NDOptTmstpr      r   r   reservedr   0   	timestampN)r.   r/   r0   r1   r   r   r   r2   r3   r"   r    r5   r5      sX        D9VR((9UA&&8J2..<T224KKKr"   r5   c            	           e Zd Zd Z edd           eddddd            ed	d
           eddd           eddd           gZ	dS )ICMPv6NDOptRsaSigr      r   Nsignature_padr   c                     |dz   dz  S )N   r)   r3   r   s     r    r!   zICMPv6NDOptRsaSig.<lambda>*   s    ijmoiotuhu r"   r#   r7   r   key_hashr'      lengthc                     | j         dz  dz
  S )Nr)   r?   r*   r+   s    r    r!   zICMPv6NDOptRsaSig.<lambda>-   s    CGVWKZ\L\ r"   r,   )
r.   r/   r0   r1   r   r   r	   r
   r   r2   r3   r"   r    r;   r;   '   s        D9VR(( =SYuYuvvv:j!,,##J2>>>;@\@\]]]	_KKKr"   r;   c                       e Zd ZdZ ed ed          d           eddd           ed	d
           ed e            e          gZ	dS )
CGA_ParamszCGA Parameters data structuremodifierrA   )sizerB   	subprefixr'   r)   ccr   pubkeyN)
r.   r/   r0   r1   r
   r   r   r   r   r2   r3   r"   r    rF   rF   0   s        *D##JR0@0@0@LLL##KA>>>9T1%%;x)B)B)D)D8: :;KKKr"   rF   c            
           e Zd Zd Z edd           eddddd            ed	d
dd           edd
           edded            eddd           gZ	d Z
dS )ICMPv6NDOptCGAr      r   N
CGA_PARAMSr   c                 "    || j         z   dz   dz  S )N   r)   	padlengthr   s     r    r!   zICMPv6NDOptCGA.<lambda><   s$    fgjmjwfwz{f{  AB  fB r"   r#   rS   r   padding)r$   r%   r7   r'   c                 ,    | j         dz  | j        z
  dz
  S )Nr)   rQ   )r   rS   r+   s    r    r!   zICMPv6NDOptCGA.<lambda>?   s    X[X_bcXcfifsXsvwXw r"   r,   c                     | j         S )NrR   r+   s    r    r!   zICMPv6NDOptCGA.<lambda>@   s    cm r"   c                     t          | j                  }d|z    dz  }|d d         t          d|z   |z   dz            z   t          |          z   |dd|z            z   }|d|z  |z   z  }|S )NrQ   r)             )r   rO   r   )selfppayl_tmp_lens        r    
post_buildzICMPv6NDOptCGA.post_buildB   s}    !!F)a-bqbECR')a/0003w<<?!Aa"fH+M	Ww$$r"   )r.   r/   r0   r1   r   r   r   rF   r   r2   r`   r3   r"   r    rM   rM   9   s        D9VR(( =#  WB  WB  C  C  C =a9#NNN9Z++!>,JLwLwxxx;y":S:STTTVK    r"   rM   )rN   r<   r6   r   N)__doc__scapy.packetr   scapy.fieldsr   r   r   r   r   r	   r
   r   r   scapy.layers.x509r   scapy.layers.inet6r   r   scapy.compatr   scapy.volatiler   r   r5   r;   rF   rM   send_icmp6ndoptsclsupdater3   r"   r    <module>rj      s          L L L L L L L L L L L L L L L L L L L L L L 7 7 7 7 7 7 D D D D D D D D       " " " " " "V V V V V,f V V V4 4 4 4 4,f 4 4 4_ _ _ _ _-v _ _ _; ; ; ; ; ; ; ;    *F   " *,++  
  ) * * * * *r"   