o
    .j                     @  s\   d dl mZ d dlZddlmZmZ ddlmZmZ ddl	m
Z
 dddZG dd dZdS )    )annotationsN   )BufferRsa)pull_opaquepush_opaque   )NetworkAddressaddrr	   returnbytesc                 C  s,   t | d jt| d d? | d d@ g S )Nr   r         )	ipaddress
ip_addresspackedr   )r
    r   C/home/thesage/.local/lib/python3.10/site-packages/qh3/quic/retry.pyencode_address
   s   ,r   c                   @  s*   e Zd ZdddZdd
dZdddZdS )QuicRetryTokenHandlerr   Nonec                 C  s   t dd| _d S )Ni   )key_size)r   _key)selfr   r   r   __init__   s   zQuicRetryTokenHandler.__init__r
   r	   "original_destination_connection_idr   retry_source_connection_idc                 C  s@   t dd}t|dt| t|d| t|d| | j|jS )Ni   )capacityr   )r   r   r   r   encryptdata)r   r
   r   r   bufr   r   r   create_token   s
   
z"QuicRetryTokenHandler.create_tokentokentuple[bytes, bytes]c                 C  sd   |rt |dkrtdt| j|d}t|d}t|d}t|d}|t|kr.td||fS )N   z,Ciphertext length must be equal to key size.)r   r   zRemote address does not match.)len
ValueErrorr   r   decryptr   r   )r   r
   r"   r    encoded_addrr   r   r   r   r   validate_token   s   


z$QuicRetryTokenHandler.validate_tokenN)r   r   )r
   r	   r   r   r   r   r   r   )r
   r	   r"   r   r   r#   )__name__
__module____qualname__r   r!   r)   r   r   r   r   r      s    

r   )r
   r	   r   r   )
__future__r   r   _hazmatr   r   tlsr   r   
connectionr	   r   r   r   r   r   r   <module>   s    
