
    @OOf>                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ dd	lmZ d
ZdZdZeez  d z  Zeez  dz  Zeez  dz  Zeez  dz  ZeZdZdZdZ e j8                  d      Z e j8                  d      Z e j8                  d      Z e j8                  d      Z dZ!dZ" G d de      Z# G d de      Z$e G d d             Z%de&de&de&de&fd Z'd!e(d"e(d#e&de(fd$Z)d%e&de*fd&Z+d#e&de*fd'Z,d%e&de*fd(Z-dgd)ed*e	e&   de%fd+Z.d#e&d,e(d-e(d"e(d.e(de(fd/Z/d,e(d-e(d0ee&   de(fd1Z0e G d2 d3             Z1e G d4 d5             Z2i d d6e(fdd7e&fdd8e(fd9d:e&fdd;e&fd<d=e&fd>d?e&fd@dAe&fdBdCe&fdDdEe&fdFdGe&fdHdIe&fdJdKe*fdLdMe1fdNdOe&fdPdQe(fddRe(fdSe&fdTe(fdUZ3d)ede1fdVZ4d)edMe1ddfdWZ5d)ede2fdXZ6d)edYe2ddfdZZ7 G d[ d\e      Z8 e9e8jt                  e8jv                  e8jx                  e8jz                  e8j|                  g      Z? e9e8jt                  e8jv                  e8jz                  e8j|                  g      Z@ e9e8j                  e8j                  e8jx                  e8j                  g      ZDe G d] d^             ZEe G d_ d`             ZFe G da db             ZGd)ede
ee&f   fdcZHd)eddedee&de&fdfZIy)h    N)	dataclass)IntEnum)ListOptionalTuple)AESGCM   )Buffer   )RangeSet   @          0             ccce187ed09a09d05728155a6cb96be1 be0c690b9f66575a1d766b54e368c84ee54930f97f2136f0530a8c1c461599d35d632bf2239825bbc                   P    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZy)QuicErrorCoder   r   r	      r               	   
                     N)__name__
__module____qualname__NO_ERRORINTERNAL_ERRORCONNECTION_REFUSEDFLOW_CONTROL_ERRORSTREAM_LIMIT_ERRORSTREAM_STATE_ERRORFINAL_SIZE_ERRORFRAME_ENCODING_ERRORTRANSPORT_PARAMETER_ERRORCONNECTION_ID_LIMIT_ERRORPROTOCOL_VIOLATIONINVALID_TOKENAPPLICATION_ERRORCRYPTO_BUFFER_EXCEEDEDKEY_UPDATE_ERRORAEAD_LIMIT_REACHEDCRYPTO_ERROR     T/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/aioquic/quic/packet.pyr   r   "   sd    HN # #M Lr=   r   c                   $    e Zd ZdZdZdZdZdZdZy)QuicProtocolVersionr   r   l     ~ l     ~ l     ~ l      ~ N)	r(   r)   r*   NEGOTIATION	VERSION_1DRAFT_29DRAFT_30DRAFT_31DRAFT_32r<   r=   r>   r@   r@   6   s     KIHHHHr=   r@   c                   p    e Zd ZU eed<   ee   ed<   eed<   eed<   eed<   dZeed<   dZ	eed<   d	Z
eed
<   y)
QuicHeaderis_long_headerversionpacket_typedestination_cid
source_cidr=   tokenintegrity_tagr   rest_lengthN)r(   r)   r*   bool__annotations__r   intbytesrN   rO   rP   r<   r=   r>   rH   rH   ?   sB    c]E5M5Kr=   rH   	truncatednum_bitsexpectedreturnc                     d|z  }|dz  }||dz
   z  | z  }|||z
  k  r|d|z
  k  r||z   S |||z   kD  r
||k\  r||z
  S |S )z
    Recover a packet number from a truncated packet number.

    See: Appendix A - Sample Packet Number Decoding Algorithm
    r   r	   l            r<   )rU   rV   rW   windowhalf_window	candidates         r>   decode_packet_numberr]   K   st     (]FA+KfqjM)Y6IH{**yGv;M/M6!!	X+	+	V0C6!!r=   packet_without_tagoriginal_destination_cidrJ   c                    t        dt        |      z   t        |       z         }|j                  t        |             |j                  |       |j                  |        |j	                         sJ t        |      rt        }t        }nt        }t        }t        |      }|j                  |d|j                        }t        |      t        k(  sJ |S )z9
    Calculate the integrity tag for a RETRY packet.
    r   capacityr=   )r
   len
push_uint8
push_byteseofis_draft_versionRETRY_AEAD_KEY_DRAFT_29RETRY_AEAD_NONCE_DRAFT_29RETRY_AEAD_KEY_VERSION_1RETRY_AEAD_NONCE_VERSION_1r   encryptdataRETRY_INTEGRITY_TAG_SIZE)r^   r_   rJ   bufaead_key
aead_nonceaeadrO   s           r>   get_retry_integrity_tagrs   \   s     !c":;;cBT>UU
VCNN3/01NN+,NN%&7799 *.
+/
 (DLLS#((;M}!9999r=   
first_bytec                 &    t        | t        z        S N)rQ   PACKET_SPIN_BITrt   s    r>   get_spin_bitry   w   s    
_,--r=   c                     | t         j                  t         j                  t         j                  t         j                  fv S rv   )r@   rC   rD   rE   rF   rJ   s    r>   rg   rg   {   s8    $$$$$$$$	  r=   c                 &    t        | t        z        S rv   )rQ   PACKET_LONG_HEADERrx   s    r>   rI   rI      s    
//00r=   ro   host_cid_lengthc                 V   | j                         }d}d}t        |      r| j                         }| j                         }|t        kD  rt	        d|z        | j                  |      }| j                         }|t        kD  rt	        d|z        | j                  |      }	|t        j                  k(  r d }
| j                  | j                         z
  }n|t        z  st	        d      |t        z  }
|
t        k(  r2| j                         }| j                  |      }| j                         }nf|
t        k(  rM| j                  | j                         z
  t        z
  }| j                  |      }| j                  t              }d}n| j                         }|| j                  | j                         z
  kD  rt	        d      t!        d||
||	|||      S |t        z  st	        d      |t        z  }
| j                  |      }t!        d	d |
|dd| j                  | j                         z
  
      S )Nr=   z&Destination CID is too long (%d bytes)z!Source CID is too long (%d bytes)zPacket fixed bit is zeror   zPacket payload is truncatedT)rI   rJ   rK   rL   rM   rN   rO   rP   F)rI   rJ   rK   rL   rM   rN   rP   )
pull_uint8rI   pull_uint32CONNECTION_ID_MAX_SIZE
ValueError
pull_bytesr@   rA   rb   tellPACKET_FIXED_BITPACKET_TYPE_MASKPACKET_TYPE_INITIALpull_uint_varPACKET_TYPE_RETRYrn   rH   )ro   r~   rt   rO   rN   rJ   destination_cid_lengthrL   source_cid_lengthrM   rK   rP   token_lengths                r>   pull_quic_headerr      s   !JMEj!//#!$!1!$::8;QQ  ..)?@NN,55@CTTUU^^$56
)555K,,3K!11 !;<<$'77K11"002|4!//1 11"||chhj8;SS|4 #/G H!//1 S\\CHHJ66 !>??#+!'#	
 		
 --788 #33..9 #+sxxz1
 	
r=   rM   rL   retry_tokenc                    t        dt        |      z   t        |      z   t        |      z   t        z         }|j                  t               |j                  |        |j                  t        |             |j                  |       |j                  t        |             |j                  |       |j                  |       |j                  t        |j                  ||              |j                         sJ |j                  S )Nr   ra   r{   )
r
   rc   rn   rd   r   push_uint32re   rs   rm   rf   )rJ   rM   rL   r_   r   ro   s         r>   encode_quic_retryr      s     
o

j/ k
 #	#C NN$%OOGNN3'(NN?#NN3z?#NN:NN;NN*BGT 779988Or=   supported_versionsc                    t        dt        |      z   t        |       z   dt        |      z  z         }|j                  t        j                  d      d   t
        z         |j                  t        j                         |j                  t        |             |j                  |       |j                  t        |              |j                  |        |D ]  }|j                  |        |j                  S )Nr   r   ra   r   r   )r
   rc   rd   osurandomr}   r   r@   rA   re   rm   )rM   rL   r   ro   rJ   s        r>   encode_quic_version_negotiationr      s     
o

j/ c$%
%&C NN2::a=#&889OO'334NN3'(NN?#NN3z?#NN:% ! !88Or=   c                   V    e Zd ZU eeeef      ed<   eeeef      ed<   eed<   eed<   y)QuicPreferredAddressipv4_addressipv6_addressconnection_idstateless_reset_tokenN)	r(   r)   r*   r   r   strrS   rR   rT   r<   r=   r>   r   r     s4    5c?++5c?++  r=   r   c                      e Zd ZU dZee   ed<   dZee   ed<   dZ	ee   ed<   dZ
ee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   dZee   ed
<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   y)QuicTransportParametersN"original_destination_connection_idmax_idle_timeoutr   max_udp_payload_sizeinitial_max_data"initial_max_stream_data_bidi_local#initial_max_stream_data_bidi_remoteinitial_max_stream_data_uniinitial_max_streams_bidiinitial_max_streams_uniack_delay_exponentmax_ack_delayFdisable_active_migrationpreferred_addressactive_connection_id_limitinitial_source_connection_idretry_source_connection_idmax_datagram_frame_sizequantum_readiness)r(   r)   r*   r   r   rT   rR   r   rS   r   r   r   r   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   r   r<   r=   r>   r   r     s    :>&>&*hsm*-18E?1*.(3-.&*hsm*8<&<9='#=15#5.2hsm2-1Xc]1(,,#'M8C='/4htn48<x 45<04448 (5/8266-1Xc]1)-x-r=   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r!   r   r"   r   r#   r   r$   r   r%   r   r&   r   r   r   r   )r   i7  c                    d }| j                  d      }| j                         }|t        d      k7  r t        t	        j
                  |            |f}d }| j                  d      }| j                         }|t        d      k7  r t        t	        j                  |            |f}| j                         }| j                  |      }| j                  d      }	t        ||||	      S )Nr   r   )r   r   r   r   )	r   pull_uint16rT   r   	ipaddressIPv4AddressIPv6Addressr   r   )
ro   r   	ipv4_host	ipv4_portr   	ipv6_host	ipv6_portconnection_id_lengthr   r   s
             r>   pull_quic_preferred_addressr   <  s    Lq!I!IE!HI11)<=yILr"I!IE"II11)<=yI>>+NN#78MNN2.!!#3	 r=   c                    |j                   Z| j                  t        j                  |j                   d         j                         | j                  |j                   d          n| j                  t        d             |j                  Z| j                  t        j                  |j                  d         j                         | j                  |j                  d          n| j                  t        d             | j                  t        |j                               | j                  |j                         | j                  |j                         y )Nr   r   r      )r   re   r   r   packedpush_uint16rT   r   r   rd   rc   r   r   )ro   r   s     r>   push_quic_preferred_addressr   U  s     %%1y,,->-K-KA-NOVVW)66q9:uQx %%1y,,->-K-KA-NOVVW)66q9:uRy!NN3(6678NN$223NN$::;r=   c                 (   t               }| j                         s| j                         }| j                         }| j                         }|t        v rt        |   \  }}|t
        k(  rt        ||| j                                ne|t        k(  rt        ||| j                  |             n?|t        k(  rt        ||t        |              nt        ||d       n| j                  |       | j                         ||z   k(  sJ | j                         s|S )NT)r   rf   r   r   PARAMSrS   setattrrT   r   r   r   )ro   paramsparam_id	param_lenparam_start
param_name
param_types          r>   pull_quic_transport_parametersr   i  s    $&Fggi$$&%%'	hhjv%+H%5"J
S 
C,=,=,?@u$
CNN9,EF33
,G,LM
D1 NN9%xxz[94444% ggi( Mr=   r   c                    t         j                         D ]  \  }\  }}t        ||      }||dust        d      }|t        k(  r|j                  |       n0|t        k(  r|j                  |       n|t        k(  rt        ||       | j                  |       | j                  |j                                | j                  |j                          y )NFi   ra   )r   itemsgetattrr
   rS   push_uint_varrT   re   r   r   r   rm   )ro   r   r   r   r   param_value	param_bufs          r>   push_quic_transport_parametersr     s     /5lln +**:zfj1"{%'?.IS ''4u$$$[133+I{Ch'inn./NN9>>*+r=   c                   t    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZy)QuicFrameTyper   r   r	   r   r   r   r   r   r   r      r      r                                 r   1   N)r(   r)   r*   PADDINGPINGACKACK_ECNRESET_STREAMSTOP_SENDINGCRYPTO	NEW_TOKENSTREAM_BASEMAX_DATAMAX_STREAM_DATAMAX_STREAMS_BIDIMAX_STREAMS_UNIDATA_BLOCKEDSTREAM_DATA_BLOCKEDSTREAMS_BLOCKED_BIDISTREAMS_BLOCKED_UNINEW_CONNECTION_IDRETIRE_CONNECTION_IDPATH_CHALLENGEPATH_RESPONSETRANSPORT_CLOSEAPPLICATION_CLOSEHANDSHAKE_DONEDATAGRAMDATAGRAM_WITH_LENGTHr<   r=   r>   r   r     s    GD
CGLLFIKHOOLNMONHr=   r   c                   ,    e Zd ZU eed<   eed<   eed<   y)QuicResetStreamFrame
error_code
final_size	stream_idNr(   r)   r*   rS   rR   r<   r=   r>   r   r     s    OONr=   r   c                   "    e Zd ZU eed<   eed<   y)QuicStopSendingFramer   r  Nr  r<   r=   r>   r  r    s    ONr=   r  c                   8    e Zd ZU dZeed<   dZeed<   dZe	ed<   y)QuicStreamFramer=   rm   Ffinr   offsetN)
r(   r)   r*   rm   rT   rR   r  rQ   r  rS   r<   r=   r>   r  r    s    D%CFCOr=   r  c                 ~   t               }| j                         }| j                         }| j                         }| j                         }|j                  ||z
  |dz          ||z  }t        |      D ]E  }|| j                         dz   z  }| j                         }|j                  ||z
  |dz          ||z  }G ||fS )Nr   r	   )r   r   addrange)ro   rangesetenddelayack_range_count	ack_count_s          r>   pull_ack_framer    s    zH



CE'')O!!#ILLy#'*9C?# s  "Q&&%%'	S9_cAg.y	
 U?r=   r  r  c                    t        |      }|dz
  }||   }| j                  |j                  dz
         | j                  |       | j                  |       | j                  |j                  dz
  |j                  z
         |j                  }|dkD  rh|dz  }||   }| j                  ||j                  z
  dz
         | j                  |j                  |j                  z
  dz
         |j                  }|dkD  rh|S )Nr   r   )rc   r   stopstart)ro   r  r  rangesindexrr  s          r>   push_ack_framer    s    ]FQJEAaffqj!eeaffqj177*+GGE
!)
UO%!&&.1,-!&&177*Q./ !) Mr=   rv   )Jbinasciir   r   dataclassesr   enumr   typingr   r   r   +cryptography.hazmat.primitives.ciphers.aeadr   bufferr
   r  r   r}   r   rw   r   PACKET_TYPE_ZERO_RTTPACKET_TYPE_HANDSHAKEr   PACKET_TYPE_ONE_RTTr   r   PACKET_NUMBER_MAX_SIZE	unhexlifyrh   rj   ri   rk   rn   STATELESS_RESET_TOKEN_SIZEr   r@   rH   rS   r]   rT   rs   rQ   ry   rg   rI   r   r   r   r   r   r   r   r   r   r   r   	frozensetr   r   r   r   r   NON_ACK_ELICITING_FRAME_TYPESNON_IN_FLIGHT_FRAME_TYPESr   r   r   PROBING_FRAME_TYPESr   r  r  r  r  r<   r=   r>   <module>r*     sD     	 !  ( ( >    (+;;dB ),<<tC *-==D &)99D@ &    ,(,,-OP -8--.PQ .H../IJ /X//0JK   G ('    C 3 # # "9>IL
6.S .T .c d 1s 1t 1G
& G
8C= G
J G
T  $	
  8(-CG9
. ! ! ! . . .,
/
7
s
#
 	"E
*
 	!3
'	

 	s
#
 	/
5
 	0#
6
 	(#
.
 	%s
+
 	$c
*
 	
%
 	?C
 
 	%t
,
 	 4
5
 	'
-
  	)5
1!
" 	'
/#
& ', %()
0V 0D 2<	<$8<	<( 3J 2+	+0+	+* G  : !*%%''!  &%%''	   $$##''	       
    53#7   ( 3 3 r=   