a
    kÄ#ds  ã                   @   sð   d Z ddl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 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
„ d
eeƒZG dd„ deeƒZG dd„ deeƒZG dd„ deƒZG dd„ deeƒZeeeedœZe e¡ dS )z,
Secure Neighbor Discovery (SEND) - RFC3971
é    )Úabsolute_import)ÚPacket)	ÚBitFieldÚ	ByteFieldÚFieldLenFieldÚPacketFieldÚPacketLenFieldÚ
ShortFieldÚStrFixedLenFieldÚStrLenFieldÚUTCTimeField)ÚX509_SubjectPublicKeyInfo)Úicmp6ndoptsclsÚ_ICMPv6NDGuessPayload)Úchb)ÚRandBinc                   @   s@   e Zd Zd Zeddƒedddddd„ d	�edd
dd„ d�gZdS )ÚICMPv6NDOptNonceÚtypeé   ÚlenNÚnonceÚBc                 C   s   t t|d d ƒƒS )Né   g       @)ÚintÚround©ÚpktÚx© r   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/send.pyÚ<lambda>   ó    zICMPv6NDOptNonce.<lambda>©Ú	length_ofÚfmtÚadjustÚ c                 C   s   | j d d S )Né   r   ©r   ©r   r   r   r   r       r!   ©Zlength_from)Ú__name__Ú
__module__Ú__qualname__Únamer   r   r   Úfields_descr   r   r   r   r      s
   þr   c                   @   s6   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,   r-   r.   r   r   r   r/   r   r   r   r   r0       s   
ýr0   c                	   @   sT   e Zd Zd Zeddƒedddddd„ d	�ed
dƒedddd�edddd„ d�gZ	dS )ÚICMPv6NDOptRsaSigr   é   r   NZsignature_padr   c                 C   s   |d d S )Né   r'   r   r   r   r   r   r    +   r!   zICMPv6NDOptRsaSig.<lambda>r"   r2   r   Zkey_hashr&   é   ©Úlengthc                 C   s   | j d d S )Nr'   r7   r(   r)   r   r   r   r    .   r!   r*   )
r+   r,   r-   r.   r   r   r	   r
   r   r/   r   r   r   r   r5   (   s   ür5   c                   @   sF   e Zd ZdZededd�dd�edddd�ed	d
ƒedeƒ eƒgZ	dS )Ú
CGA_ParamszCGA Parameters data structureÚmodifierr8   )Úsizer9   Z	subprefixr&   r'   Úccr   ZpubkeyN)
r+   r,   r-   r.   r
   r   r   r   r   r/   r   r   r   r   r;   1   s   ÿýr;   c                
   @   sp   e Zd Zd Zeddƒedddddd„ d	�ed
dddd�eddƒeddedd„ d�edddd„ d�gZ	dd„ Z
dS )ÚICMPv6NDOptCGAr   é   r   NÚ
CGA_PARAMSr   c                 C   s   || j  d d S )Né   r'   ©Ú	padlengthr   r   r   r   r    =   r!   zICMPv6NDOptCGA.<lambda>r"   rD   r   Úpadding)r#   r$   r2   r&   c                 C   s   | j d | j d S )Nr'   rB   )r   rD   r)   r   r   r   r    @   r!   r*   c                 C   s   | j S )NrC   r)   r   r   r   r    A   r!   c                 C   sd   t | jƒ}d|  d }|d d… td| | d ƒ t|ƒ |dd| …  }|d| | 7 }|S )NrB   r'   é   é   ó    )r   rA   r   )ÚselfÚpZpayZl_Ztmp_lenr   r   r   Ú
post_buildC   s
    
8zICMPv6NDOptCGA.post_build)r+   r,   r-   r.   r   r   r   r;   r   r/   rK   r   r   r   r   r?   :   s   ûr?   )r@   r6   r1   r   N)Ú__doc__Ú
__future__r   Zscapy.packetr   Zscapy.fieldsr   r   r   r   r   r	   r
   r   r   Zscapy.layers.x509r   Zscapy.layers.inet6r   r   Zscapy.compatr   Zscapy.volatiler   r   r0   r5   r;   r?   Zsend_icmp6ndoptsclsÚupdater   r   r   r   Ú<module>   s$   ,		ý