
    F2jMD                       d dl mZ 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
 ddlmZ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j         dej!        dej"        diZ#d e#$                                D             Z%ej        dej         dej!        dej"        d iZ&d e&$                                D             Z' G d de          Z( edti e
 G d d                      Z)dud%Z*dvd(Z+dvd)Z,dwd+Z-dxdyd0Zdzd3Z.	 d{d|d8Z/d}d;Z0 edti e
 G d< d=                      Z1 edti e
 G d> d?                      Z2 e             G d@ dA                      Z3i dBdCe4fddDe5fddEe5fddFe5fdGdHe5fdIdJe2fddKe5fdLdMe5fdNdOe5fdPdQe4fdRdSe5fdTdUe5fd dVe4fddWe4fdXdYe5fdZd[e5fd\d]e6fd^e1fd_e5fd`e4fdae4fdbZ7d~dcZ8ddeZ9ddgZ:ddhZ;ddiZ<ddkZ= G dl dme          Z> e?e>j@        e>jA        e>jB        e>jC        e>jD        g          ZE e?e>j@        e>jA        e>jC        e>jD        g          ZF e?e>jG        e>jH        e>jB        e>jI        g          ZJ edti e
 G dn do                      ZK edti e
 G dp dq                      ZL edti e
 G dr ds                      ZMdS )    )annotationsN)	dataclass)IntEnum   )DATACLASS_KWARGS)AeadAes128GcmBuffer)pull_quic_header   @              be0c690b9f66575a1d766b54e368c84e 8fb4b01b56ac48e260fbcbcead7ccc92461599d35d632bf2239825bbd86969bc2d7c6d9990efb04a   c                  V    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S )QuicErrorCoder      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     W/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/qh3/quic/packet.pyr   r      sv        HN # #M  $LLLr<   r   c                  &    e Zd ZdZdZdZdZdZdZdS )QuicPacketTyper   r   r   r   r   r   N)	r&   r'   r(   INITIALZERO_RTT	HANDSHAKERETRYVERSION_NEGOTIATIONONE_RTTr;   r<   r=   r?   r?   0   s-        GHIEGGGr<   r?   r   r   c                    i | ]\  }}||	S r;   r;   .0ivs      r=   
<dictcomp>rK   D   +     % % %aAq% % %r<   c                    i | ]\  }}||	S r;   r;   rG   s      r=   rK   rK   P   rL   r<   c                      e Zd ZdZdZdZdS )QuicProtocolVersionr   r   iC3kN)r&   r'   r(   NEGOTIATION	VERSION_1	VERSION_2r;   r<   r=   rO   rO   U   s        KIIIIr<   rO   c                  n    e Zd ZU ded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 ded
<   	 ded<   	 ded<   dS )
QuicHeader
int | Noneversionr?   packet_typeintpacket_lengthbytesdestination_cid
source_cidtokenintegrity_tag	list[int]supported_versionsNr&   r'   r(   __annotations__r;   r<   r=   rT   rT   [   s         @/$$LLLT?!!!!QQr<   rT   packet_without_tagrZ   original_destination_cidrV   rX   returnc                D   t          dt          |          z   t          |           z             }|                    t          |                     |                    |           |                    |            |                                st          d          |t          j        k    rt          }t          }nt          }t          }t          |d          }|                    |d|j                  }t          |          t          k    rt          d          |S )z9
    Calculate the integrity tag for a RETRY packet.
    r   capacityz'Retry pseudo packet was not fully builts   null!12bytesr<   z*Retry integrity tag has an unexpected size)r	   len
push_uint8
push_byteseof
ValueErrorrO   rR   RETRY_AEAD_KEY_VERSION_2RETRY_AEAD_NONCE_VERSION_2RETRY_AEAD_KEY_VERSION_1RETRY_AEAD_NONCE_VERSION_1r   encrypt_with_noncedataRETRY_INTEGRITY_TAG_SIZE)rc   rd   rV   bufaead_key
aead_nonceaeadr^   s           r=   get_retry_integrity_tagry   v   s	    !c":;;;cBT>U>UU
V
V
VCNN3/00111NN+,,,NN%&&&7799 DBCCC%///+/

+/
 ?33D++JSXFFM
=555EFFFr<   
first_byteboolc                    | t           z  rdS dS NTF)PACKET_SPIN_BITrz   s    r=   get_spin_bitr      s    O# t5r<   c                    | t           z  rdS dS r}   )PACKET_LONG_HEADERr   s    r=   is_long_headerr      s    && t5r<   strc                f    	 t          |           j        }n# t          $ r d}Y nw xY wd| dd| dS )zF
    Return a user-friendly representation of a protocol version.
    UNKNOWN0x08xz ())rO   namerm   )rV   version_names     r=   pretty_protocol_versionr      sY    !*7338 ! ! ! !....|....s    &&ru   r	   host_cid_lengthrU   c                    |                                  }t          | j        ||          \
  }}}}}}}	}
}}|                     ||z              t	          |t          |          |||||	t          |
                    S )N)rV   rW   rY   r[   r\   r]   r^   r`   )tell_pull_quic_header_rawraw_dataseekrT   r?   list)ru   r   packet_startrV   rW   rY   r[   r\   r]   r^   r`   _encrypted_offset
end_offsets                r=   r
   r
      s    88::L 	clL/JJ HH\--...";//#'# 233	 	 	 	r<   rW   bitsc                |    | 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   )rO   rR   !PACKET_LONG_TYPE_ENCODE_VERSION_2!PACKET_LONG_TYPE_ENCODE_VERSION_1r   PACKET_FIXED_BIT)rV   rW   r   long_type_encodes       r=   encode_long_header_first_byter      sN     %///<<
	
;
'1
,	- 	r<   r\   r[   retry_tokenunusedc                   t          dt          |          z   t          |          z   t          |          z   t          z             }|                    t	          | t
          j        |                     |                    |            |                    t          |                     |                    |           |                    t          |                     |                    |           |                    |           |                    t          |j
        ||                      |                                st          d          |j
        S )Nr   rg   )rV   z Retry packet was not fully built)r	   ri   rt   rj   r   r?   rC   push_uint32rk   ry   rs   rl   rm   )rV   r\   r[   rd   r   r   ru   s          r=   encode_quic_retryr      sG    
o


j// k

 #	#  C NN0.:NPVWWXXXOOGNN3''(((NN?###NN3z??###NN:NN;NN*BGTTT   7799 =;<<<8Or<   r`   r_   c                N   t          dt          |          z   t          |           z   dt          |          z  z             }|                    t          j        d          d         t
          z             |                    t          j                   |                    t          |                     |	                    |           |                    t          |                      |	                    |            |D ]}|                    |           |j
        S )Nr   r   rg   r   r   )r	   ri   rj   osurandomr   r   rO   rP   rk   rs   )r\   r[   r`   ru   rV   s        r=   encode_quic_version_negotiationr      s    
o


j// c$%%
%&  C NN2:a==#&88999OO'3444NN3''(((NN?###NN3z??###NN:% ! !    8Or<   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )QuicPreferredAddressztuple[str, int] | Noneipv4_addressipv6_addressrZ   connection_idstateless_reset_tokenNra   r;   r<   r=   r   r     sB         ((((((((      r<   r   c                  $    e Zd ZU ded<   ded<   dS )QuicVersionInformationrX   chosen_versionr_   available_versionsNra   r;   r<   r=   r   r     s*         !!!!!!r<   r   c                  D   e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   dZ
ded
<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dS )QuicTransportParametersNzbytes | None"original_destination_connection_idrU   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_delayFzbool | Nonedisable_active_migrationzQuicPreferredAddress | Nonepreferred_addressactive_connection_id_limitinitial_source_connection_idretry_source_connection_idzQuicVersionInformation | Noneversion_informationmax_datagram_frame_sizequantum_readinessgoogle_connection_optionsztuple[int, bytes] | Nonegreased_transport_parameter)r&   r'   r(   r   rb   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     s        7;&;;;;#'''''*.....'+++++#'''''59&99996:'::::.22222+/////*.....%))))) $M$$$$,11111599999-1111115 5555/333339=====*.....&*****.22222 =A@@@@@@r<   r   r#   r   r   r   r   r   r   r$   r   r   r   r   r   r   i(1  r   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r   )r!   r"   r   i7  c                (   d }|                      d          }|                                 }|t          d          k    r#t          t	          j        |                    |f}d }|                      d          }|                                 }|t          d          k    r#t          t	          j        |                    |f}|                                 }|                      |          }|                      d          }	t          ||||	          S )Nr   r   )r   r   r   r   )	
pull_bytespull_uint16rZ   r   	ipaddressIPv4AddressIPv6Address
pull_uint8r   )
ru   r   	ipv4_host	ipv4_portr   	ipv6_host	ipv6_portconnection_id_lengthr   r   s
             r=   pull_quic_preferred_addressr   V  s    Lq!!I!!IE!HHI1)<<==yILr""I!!IE"III1)<<==yI>>++NN#788MNN2..!!#3	   r<   Nonec                   |j         X|                     t          j        |j         d                   j                   |                     |j         d                    n"|                     t          d                     |j        X|                     t          j        |j        d                   j                   |                     |j        d                    n"|                     t          d                     | 	                    t          |j                             |                     |j                   |                     |j                   d S )Nr   r   r      )r   rk   r   r   packedpush_uint16rZ   r   r   rj   ri   r   r   )ru   r   s     r=   push_quic_preferred_addressr   o  s$    %1y,->-KA-NOOVWWW)6q9::::uQxx   %1y,->-KA-NOOVWWW)6q9::::uRyy!!!NN3(677888NN$2333NN$:;;;;;r<   lengthc                    |                                  }g }t          |dz  dz
            D ])}|                    |                                             *|dk    sd|v rt          d          t	          ||          S )Nr   r   r   z.Version Information must not contain version 0)r   r   )pull_uint32rangeappendrm   r   )ru   r   r   r   rI   s        r=   pull_quic_version_informationr     s    __&&N6Q;?## 5 5!!#//"3"34444 a#555IJJJ!%-   r<   c                x    |                      |j                   |j        D ]}|                      |           d S N)r   r   r   )ru   r   rV   s      r=   push_quic_version_informationr     sK     OO'6777&9 ! !    ! !r<   c                   t                      }t                      }|                                 s|                                 }|                                 }|                                 }||v rt          d|d          |                    |           |t          v rt          |         \  }}|t          u r$t          |||                                            n|t          u r%t          |||                     |                     nx|t          u rt          ||t          |                      nP|t          u r t          ||t          | |                     n't          ||d           n|                     |           |                                 ||z   k    rt          d          |                                 |S )Nz Duplicate transport parameter 0xxTz)Transport parameter length does not match)r   setrl   pull_uint_varr   rm   addPARAMSrX   setattrrZ   r   r   r   r   r   )ru   paramsseenparam_id	param_lenparam_start
param_name
param_types           r=   pull_quic_transport_parametersr     s   $&&FUUDggii J$$&&%%''	hhjj tLLLLMMMv%+H%5"J
S  
C,=,=,?,?@@@@u$$
CNN9,E,EFFFF333
,G,L,LMMMM5551#yAA    
D1111 NN9%%%88::y000HIII? ggii JB Mr<   r   c                   t                                           D ][\  }\  }}|dk    r_|j        X|j        \  }}|                     |           |                     t	          |                     |r|                     |           t          ||          }||durt          d          }|t          u r|                    |           nR|t          u r|                    |           n3|t          u rt          ||           n|t          u rt          ||           |                     |           |                     |                                           |                     |j                   ]d S )Nr$   Fi   rg   )r   itemsr   push_uint_varri   rk   getattrr	   rX   rZ   r   r   r   r   r   rs   )	ru   r   r   r   r   	grease_idgrease_valueparam_value	param_bufs	            r=   push_quic_transport_parametersr     s    /5llnn + +**:z t B N&,&H#I|i(((c,//000 -|,,,fj11"{%'?'?...IS  ''4444u$$$$[1111333+I{CCCC555-iEEEh'''inn..///NN9>***/+ +r<   c                  v    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dS )QuicFrameTyper   r   r   r   r   r   r   r   r   r   r$   r      r                                 0   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 ded<   ded<   ded<   dS )QuicResetStreamFramerX   
error_code
final_size	stream_idNra   r;   r<   r=   r&  r&    s+         OOOOOONNNNNr<   r&  c                  $    e Zd ZU ded<   ded<   dS )QuicStopSendingFramerX   r'  r)  Nra   r;   r<   r=   r+  r+  %  s"         OOONNNNNr<   r+  c                  :    e Zd ZU dZded<   dZded<   dZded	<   d
S )QuicStreamFramer<   rZ   rs   Fr{   finr   rX   offsetN)r&   r'   r(   rs   rb   r.  r/  r;   r<   r=   r-  r-  +  s?         DCFOOOOOOr<   r-  r;   )rc   rZ   rd   rZ   rV   rX   re   rZ   )rz   rX   re   r{   )rV   rX   re   r   r   )ru   r	   r   rU   re   rT   )rV   rX   rW   r?   r   rX   re   rX   )r   )rV   rX   r\   rZ   r[   rZ   rd   rZ   r   rZ   r   rX   re   rZ   )r\   rZ   r[   rZ   r`   r_   re   rZ   )ru   r	   re   r   )ru   r	   r   r   re   r   )ru   r	   r   rX   re   r   )ru   r	   r   r   re   r   )ru   r	   re   r   )ru   r	   r   r   re   r   )N
__future__r   binasciir   r   dataclassesr   enumr   _compatr   _hazmatr   r	   r
   r   r   r   r~   CONNECTION_ID_MAX_SIZEPACKET_NUMBER_MAX_SIZE	unhexlifyrp   rn   rq   ro   rt   STATELESS_RESET_TOKEN_SIZEr   r?   r@   PACKET_TYPE_INITIALrA   rB   rC   r   r   !PACKET_LONG_TYPE_DECODE_VERSION_1r   !PACKET_LONG_TYPE_DECODE_VERSION_2rO   rT   ry   r   r   r   r   r   r   r   r   r   rZ   rX   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=   <module>rA     s   " " " " " "      				 ! ! ! ! ! !       & & & & & & + + + + + + + + ? ? ? ? ? ?    -8-.PQQ -8-.PQQ /X/0JKK /X/0JKK       G   *    W    %, 
 AQa!	% !% %8>>@@% % % ! AQa!	% !% %8>>@@% % % !
    '    R R R R R R R R4   :      / / / /    >   0     <   . ! ! ! ! ! ! ! ! " " " " " " " "
 A A A A A A A A8
)5
1
s
#
 	s
#
 	!3
'	

 	(#
.
 	 "8
9
 &,
 	0#
6
 	$c
*
 (%0
 	%s
+
 	/
5
 	/
7
  	"E
*!
" 	
%#
$ 	?C
 %
& 	%t
,'
(  4
5'
-'
/ %(/
 
 
6   2< < < <(   &! ! ! !$ $ $ $N+ + + +@         G      : !*	%'! !  &I%'	    i$#'	                  
          r<   