
    @OOfZ                         d dl Z d dlmZ d dlmZ d dlmZmZ ddlm	Z	 ddl
mZmZ dd	lmZ d
edefdZ G d d      Zy)    N)Tuple)hashes)paddingrsa   )Buffer)pull_opaquepush_opaque   )NetworkAddressaddrreturnc                 z    t        j                  | d         j                  t        | d   dz	  | d   dz  g      z   S )Nr   r         )	ipaddress
ip_addresspackedbytes)r   s    S/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/aioquic/quic/retry.pyencode_addressr      s=    Q(//%aAtAwQU~8V2WWW    c                   J    e Zd Zd
dZdedededefdZdededeeef   fd	Zy)QuicRetryTokenHandlerr   Nc                 <    t        j                  dd      | _        y )Ni  i   )public_exponentkey_size)r   generate_private_key_key)selfs    r   __init__zQuicRetryTokenHandler.__init__   s    ,,UTR	r   r   "original_destination_connection_idretry_source_connection_idc           	      |   t        d      }t        |dt        |             t        |d|       t        |d|       | j                  j	                         j                  |j                  t        j                  t        j                  t        j                               t        j                         d             S )Ni   )capacityr   mgf	algorithmlabel)r   r
   r   r   
public_keyencryptdatar   OAEPMGF1r   SHA256)r    r   r"   r#   bufs        r   create_tokenz"QuicRetryTokenHandler.create_token   s     c"CN401C>?C67yy##%--HHLLLL1V]]_TX
 	
r   tokenc                 j   t        | j                  j                  |t        j                  t        j
                  t        j                               t        j                         d                   }t        |d      }t        |d      }t        |d      }|t        |      k7  rt        d      ||fS )Nr&   )r,   r   zRemote address does not match.)r   r   decryptr   r-   r.   r   r/   r	   r   
ValueError)r    r   r2   r0   encoded_addrr"   r#   s          r   validate_tokenz$QuicRetryTokenHandler.validate_token%   s    ""V]]_5$mmo	
 #3*-8a-@*%0a%8">$//=>>13MMMr   )r   N)	__name__
__module____qualname__r!   r   r   r1   r   r7    r   r   r   r      s[    S

 -2
 %*	

 

"N> N% NE%QV,DW Nr   r   )r   typingr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   bufferr   tlsr	   r
   
connectionr   r   r   r   r;   r   r   <module>rB      s<      1 B  * &X XE X%N %Nr   