a
    kÄ#dU  ã                   @   sr   d Z ddlZddlmZ ddlmZ ejr^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ƒZdS )z
Stateless HKDF for TLS 1.3.
é    N)Úconf)Ú	_get_hash)Údefault_backend)ÚHKDFÚ
HKDFExpand)ÚHash)ÚHMACc                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )Ú
TLS13_HKDFÚsha256c                 C   s   t |ƒ| _d S ©N)r   Úhash)ÚselfÚ	hash_name© r   úS/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/tls/crypto/hkdf.pyÚ__init__   s    zTLS13_HKDF.__init__c                 C   s6   | j }t||j|d tƒ ƒ}|d u r,d|j }| |¡S )Nó    )r   r   Údigest_sizer   Z_extract)r   ÚsaltZikmÚhÚhkdfr   r   r   Úextract   s
    
zTLS13_HKDF.extractc                 C   s    | j }t|||tƒ ƒ}| |¡S r   )r   r   r   Zderive)r   ZprkÚinfoÚLr   r   r   r   r   Úexpand!   s    zTLS13_HKDF.expandc                 C   s^   t  d|¡}|t  ddt|ƒ ¡7 }|d7 }||7 }|t  dt|ƒ¡7 }||7 }|  |||¡S )Nz!HÚBé   s   tls13 )ÚstructÚpackÚlenr   )r   ÚsecretÚlabelÚ
hash_valueÚlengthZ
hkdf_labelr   r   r   Úexpand_label&   s    zTLS13_HKDF.expand_labelc                 C   s:   t | jtƒ d�}| |¡ | ¡ }| jj}|  ||||¡S )N©Úbackend)r   r   r   ÚupdateÚfinalizer   r$   )r   r    r!   Úmessagesr   Zhash_messagesÚhash_lenr   r   r   Úderive_secret/   s
    
zTLS13_HKDF.derive_secretc                 C   s\   | j j}|  |dd|¡}t| j tƒ d�}| |¡ | ¡ }t|| j tƒ ƒ}| |¡ | ¡ S )Ns   finishedó    r%   )r   r   r$   r   r   r'   r(   r   )r   ZbasekeyZhandshake_contextr*   Zfinished_keyr   r"   Zhmr   r   r   Úcompute_verify_data6   s    

zTLS13_HKDF.compute_verify_dataN)r
   )	Ú__name__Ú
__module__Ú__qualname__r   r   r   r$   r+   r-   r   r   r   r   r	      s   
	r	   )Ú__doc__r   Zscapy.configr   Zscapy.layers.tls.crypto.pkcs1r   Zcrypto_validZcryptography.hazmat.backendsr   Z'cryptography.hazmat.primitives.kdf.hkdfr   r   Z%cryptography.hazmat.primitives.hashesr   Z#cryptography.hazmat.primitives.hmacr   Úobjectr	   r   r   r   r   Ú<module>   s   