
    kjlN                     *   d dl Z d dlZd dlZd dlmZ d dlmZ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dZdZ e j.                  d      Z e j.                  d      Z e j.                  d      Z e j.                  d      ZdZdZ G d de      Z G d de      Zej@                  Z!ej@                  d ejD                  dejF                  dejH                  diZ% e&d e%jO                         D              Z(ej@                  dejD                  dejF                  dejH                  d iZ) e&d e)jO                         D              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'Z0d(e-d"e1fd)Z2d(e-d"e1fd*Z3d&e-d"e4fd+Z5dsd,ed-e
e-   d"e,fd.Z6d&e-d/ed0e-d"e-fd1Z7	 dtd&e-d2e/d3e/d%e/d4e/d5e-d"e/fd6Z8d2e/d3e/d7e	e-   d"e/fd8Z9e G d9 d:             Z:e G d; d<             Z;e G d= d>             Z<i d d?e/fdd@e-fddAe/fddBe-fddCe-fdDdEe-fdFdGe-fdHdIe-fdJdKe-fdLdMe-fdNdOe-fdPdQe-fdRdSe1fdTdUe:fdVdWe-fdXdYe/fddZe/fd[e;fd\e-fd]e/fd^Z=d,ed"e:fd_Z>d,edUe:d"dfd`Z?d,edae-d"e;fdbZ@d,ed[e;d"dfdcZAd,ed"e<fddZBd,edee<d"dfdfZC G dg dhe      ZD eEeDj                  eDj                  eDj                  eDj                  eDj                  g      ZK eEeDj                  eDj                  eDj                  eDj                  g      ZL eEeDj                  eDj                  eDj                  eDj                  g      ZPe G di dj             ZQe G dk dl             ZRe G dm dn             ZSd,ed"eee-f   fdoZTd,edpedqe-d"e-fdrZUy)u    N)	dataclass)EnumIntEnum)ListOptionalTuple)AESGCM   )Buffer   )RangeSet   @              be0c690b9f66575a1d766b54e368c84e 8fb4b01b56ac48e260fbcbcead7ccc92461599d35d632bf2239825bbd86969bc2d7c6d9990efb04a   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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VERSION_NEGOTIATION_ERRORCRYPTO_ERROR     \/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/aioquic/quic/packet.pyr   r      sj    HN # #M  $Lr>   r   c                   $    e Zd ZdZdZdZdZdZdZy)QuicPacketTyper   r   r
   r   r   r   N)	r(   r)   r*   INITIALZERO_RTT	HANDSHAKERETRYVERSION_NEGOTIATIONONE_RTTr=   r>   r?   rA   rA   0   s!    GHIEGr>   rA   r   c              #   *   K   | ]  \  }}||f  y wNr=   .0ivs      r?   	<genexpr>rN   D         )1QF)   c              #   *   K   | ]  \  }}||f  y wrI   r=   rJ   s      r?   rN   rN   P   rO   rP   c                       e Zd ZdZdZdZy)QuicProtocolVersionr   r   iC3kN)r(   r)   r*   NEGOTIATION	VERSION_1	VERSION_2r=   r>   r?   rS   rS   U   s    KIIr>   rS   c                   x    e Zd ZU ee   ed<   	 eed<   	 eed<   	 eed<   	 eed<   	 eed<   	 eed<   	 ee   ed<   y	)

QuicHeaderversionpacket_typepacket_lengthdestination_cid
source_cidtokenintegrity_tagsupported_versionsN)	r(   r)   r*   r   int__annotations__rA   bytesr   r=   r>   r?   rX   rX   [   sQ    c]@/$$LT?S	!Qr>   rX   	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=   )rd   re   rf   windowhalf_window	candidates         r?   decode_packet_numberrl   v   st     (]FA+KfqjM)Y6IH{**yGv;M/M6!!	X+	+	V0C6!!r>   packet_without_tagoriginal_destination_cidrY   c                    t        dt        |      z   t        |       z         }|j                  t        |             |j                  |       |j                  |        |j	                         sJ |t
        j                  k(  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eofrS   rV   RETRY_AEAD_KEY_VERSION_2RETRY_AEAD_NONCE_VERSION_2RETRY_AEAD_KEY_VERSION_1RETRY_AEAD_NONCE_VERSION_1r	   encryptdataRETRY_INTEGRITY_TAG_SIZE)rm   rn   rY   bufaead_key
aead_nonceaeadr_   s           r?   get_retry_integrity_tagr      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 rI   )boolPACKET_SPIN_BITr   s    r?   get_spin_bitr      s    
_,--r>   c                 &    t        | t        z        S rI   )r   PACKET_LONG_HEADERr   s    r?   is_long_headerr      s    
//00r>   c                 d    	 t        |       j                  }d| dd| dS # t        $ r d}Y w xY w)zF
    Return a user-friendly representation of a protocol version.
    UNKNOWN0x08xz ())rS   name
ValueError)rY   version_names     r?   pretty_protocol_versionr      sF    !*7388 }B|nA..  ! !s   ! //r}   host_cid_lengthc           
         | j                         }d }d}g }d}| j                         }t        |      rA| j                         }| j                         }|t        kD  rt        d|z        | j                  |      }	| j                         }
|
t        kD  rt        d|
z        | j                  |
      }|t        j                  k(  rbt        j                  }| j                         s0|j                  | j                                | j                         s0| j                         }n|t        z  st        d      |t        j                  k(  rt        |dz  dz	     }nt         |dz  dz	     }|t        j"                  k(  r2| j%                         }| j                  |      }| j%                         }n|t        j&                  k(  r| j%                         }np|t        j(                  k(  r| j%                         }nL| j*                  | j                         z
  t,        z
  }| j                  |      }| j                  t,              }d}| j                         |z   }|| j*                  kD  rPt        d      |t        z  st        d      d }t        j.                  }| j                  |      }	d}| j*                  }t1        ||||z
  |	||||	      S )
Nr>   z&Destination CID is too long (%d bytes)z!Source CID is too long (%d bytes)zPacket fixed bit is zero0   r   r   zPacket payload is truncated)rY   rZ   r[   r\   r]   r^   r_   r`   )tell
pull_uint8r   pull_uint32CONNECTION_ID_MAX_SIZEr   
pull_bytesrS   rT   rA   rF   ru   appendPACKET_FIXED_BITrV   !PACKET_LONG_TYPE_DECODE_VERSION_2!PACKET_LONG_TYPE_DECODE_VERSION_1rB   pull_uint_varrC   rD   rq   r|   rG   rX   )r}   r   packet_startrY   r_   r`   r^   r   destination_cid_lengthr\   source_cid_lengthr]   rZ   
packet_endtoken_lengthrest_lengths                   r?   pull_quic_headerr      s   88:LGME!Jj! //#!$!1!$::8;QQ  ..)?@NN,55@CTTUU^^$56
)555 )<<Kggi"))#//*;< ggiJ!11 !;<<-777?$&1, @$&1, n444"002|4!//1 7 77!//1 8 88!//1"||chhj8;SS|4 #/G H k1JCLL( !>??
 --788$,,..9
\\
 </'#-	 	r>   rZ   bitsc                 t    | t         j                  k(  rt        }nt        }t        t
        z  ||   dz  z  |z  S )z8
    Encode the first byte of a long header packet.
    r   )rS   rV   !PACKET_LONG_TYPE_ENCODE_VERSION_2!PACKET_LONG_TYPE_ENCODE_VERSION_1r   r   )rY   rZ   r   long_type_encodes       r?   encode_long_header_first_byter     sK     %///<<
	
;
'1
,	- 	r>   r]   r\   retry_tokenunusedc                 >   t        dt        |      z   t        |      z   t        |      z   t        z         }|j                  t	        | t
        j                  |             |j                  |        |j                  t        |             |j                  |       |j                  t        |             |j                  |       |j                  |       |j                  t        |j                  ||              |j                         sJ |j                  S )Nr   rp   )rY   )r   rr   r|   rs   r   rA   rE   push_uint32rt   r   r{   ru   )rY   r]   r\   rn   r   r   r}   s          r?   encode_quic_retryr      s     
o

j/ k
 #	#C NN0.:N:NPVWXOOGNN3'(NN?#NN3z?#NN:NN;NN*BGT 779988Or>   r`   c                    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   rp   r   r   )r   rr   rs   osurandomr   r   rS   rT   rt   r{   )r]   r\   r`   r}   rY   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   strra   rb   rc   r=   r>   r?   r   r   T  s4    5c?++5c?++  r>   r   c                   (    e Zd ZU eed<   ee   ed<   y)QuicVersionInformationchosen_versionavailable_versionsN)r(   r)   r*   ra   rb   r   r=   r>   r?   r   r   \  s    S	!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<   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version_informationmax_datagram_frame_sizequantum_readiness)r(   r)   r*   r   r   rc   rb   r   ra   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   b  s1   :>&>&*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<@"89@-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&   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_uint16rc   r   	ipaddressIPv4AddressIPv6Addressr   r   )
r}   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   rt   r   r   packedpush_uint16rc   r   r   rs   rr   r   r   )r}   r   s     r?   push_quic_preferred_addressr     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>   lengthc                     | j                         }g }t        |dz  dz
        D ]!  }|j                  | j                                # |dk(  sd|v rt        d      t	        ||      S )Nr   r   r   z.Version Information must not contain version 0)r   r   )r   ranger   r   r   )r}   r   r   r   rL   s        r?   pull_quic_version_informationr     sv    __&N6Q;?# 5!!#//"345 a#55IJJ!%- r>   c                 ~    | j                  |j                         |j                  D ]  }| j                  |        y rI   )r   r   r   )r}   r   rY   s      r?   push_quic_version_informationr     s8     OO'667&99 ! !r>   c                 x   t               }| j                         s| j                         }| j                         }| j                         }|t        v rt        |   \  }}|t
        u rt        ||| j                                n|t        u rt        ||| j                  |             n^|t        u rt        ||t        |              n?|t        u rt        ||t        | |             nt        ||d       n| j                  |       | j                         ||z   k7  rt        d      | j                         s|S )NTz)Transport parameter length does not match)r   ru   r   r   PARAMSra   setattrrc   r   r   r   r   r   r   )r}   paramsparam_id	param_lenparam_start
param_name
param_types          r?   pull_quic_transport_parametersr     s   $&Fggi$$&%%'	hhjv%+H%5"J
S 
C,=,=,?@u$
CNN9,EF33
,G,LM551#yA 
D1 NN9%88:y00HII5 ggi8 Mr>   r   c                    t         j                         D ]  \  }\  }}t        ||      }||dust        d      }|t        u r|j                  |       nC|t        u r|j                  |       n)|t        u rt        ||       n|t        u rt        ||       | j                  |       | j                  |j                                | j                  |j                          y )NFi   rp   )r   itemsgetattrr   ra   push_uint_varrc   rt   r   r   r   r   r   r{   )r}   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55-iE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                                 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*   ra   rb   r=   r>   r?   r'  r'  M  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-  T  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>   r{   Ffinr   offsetN)
r(   r)   r*   r{   rc   rb   r0  r   r1  ra   r=   r>   r?   r/  r/  Z  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   addr   )r}   rangesetenddelayack_range_count	ack_count_s          r?   pull_ack_framer:  a  s    zH



CE'')O!!#ILLy#'*9C?# s  "Q&&%%'	S9_cAg.y	
 U?r>   r4  r6  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   )rr   r   stopstart)r}   r4  r6  rangesindexrr=  s          r?   push_ack_framerA  q  s    ]FQJEAaffqj!eeaffqj177*+GGE
!)
UO%!&&.1,-!&&177*Q./ !) Mr>   rI   )r   )Vbinasciir   r   dataclassesr   enumr   r   typingr   r   r   +cryptography.hazmat.primitives.ciphers.aeadr	   bufferr   r4  r   r   r   r   r   PACKET_NUMBER_MAX_SIZE	unhexlifyrx   rv   ry   rw   r|   STATELESS_RESET_TOKEN_SIZEr   rA   rB   PACKET_TYPE_INITIALrC   rD   rE   r   dictr   r   r   r   rS   rX   ra   rl   rc   r   r   r   r   r   r   r   r   r   r   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:  rA  r=   r>   r?   <module>rQ     sR     	 !  ( ( >      -8--.PQ -8--.PQ /X//0JK /X//0JK   G *T  %,, 
 AQa!	% ! %) ):@@B) % ! AQa!	% ! %) ):@@B) % !
'  R R R4C 3 # # "9>IL
6.S .T .1s 1t 1/S /S /V& V8C= VJ Vr-580   $	
   :(-CG9
. ! ! ! " " "
 . . ..
/
7
s
#
 	"E
*
 	!3
'	

 	s
#
 	/
5
 	0#
6
 	(#
.
 	%s
+
 	$c
*
 	
%
 	?C
 
 	%t
,
 	 4
5
 	'
-
  	)5
1!
" 	'
/#
& !"8
9&, %(-
4V 0D 2<	<$8<	<(v s ?U &!	!&<!	! 3J B+	+0+	+. G  : !*%%''!  &%%''	   $$##''	       
    53#7   ( 3 3 r>   