
    mbiNL                       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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dxi e
 G d d                      Z(dyd$Z)dzd'Z*dzd(Z+d{d*Z,d|d}d/Z-d~d2Z.	 ddd7Z/dd:Z0 edxi e
 G d; d<                      Z1 edxi e
 G d= d>                      Z2 e             G d? d@                      Z3i d dAe4fddBe5fddCe4fddDe5fddEe5fdFdGe5fdHdIe5fdJdKe5fdLdMe5fdNdOe5fdPdQe5fdRdSe5fdTdUe6fdVdWe1fdXdYe5fdZd[e4fdd\e4fd]e2fd^e5fd_e4fd`Z7ddaZ8ddcZ9ddeZ:ddfZ;ddgZ<ddiZ= G dj dke          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dxi e
 G dl dm                      ZK edxi e
 G dn do                      ZL edxi e
 G dp dq                      ZMddsZNddwZOdS )    )annotationsN)	dataclass)IntEnum   )DATACLASS_KWARGS)AeadAes128GcmBufferRangeSet   @              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     _/var/www/html/mdtn/previsions/meteo_cartes/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?   /   s-        GHIEGGGr<   r?   r   r   c                    i | ]\  }}||	S r;   r;   .0ivs      r=   
<dictcomp>rK   C   +     % % %aAq% % %r<   c                    i | ]\  }}||	S r;   r;   rG   s      r=   rK   rK   O   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   T   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   Z   s         @/$$LLLT?!!!!QQr<   rT   packet_without_tagrZ   original_destination_cidrV   rX   returnc                   t          dt          |          z   t          |           z             }|                    t          |                     |                    |           |                    |            |                                sJ |t
          j        k    rt          }t          }nt          }t          }t          |d          }|                    |d|j                  }t          |          t          k    sJ |S )z9
    Calculate the integrity tag for a RETRY packet.
    r   capacitys   null!12bytesr<   )r	   len
push_uint8
push_byteseofrO   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_tagrx   u   s     !c":;;;cBT>U>UU
V
V
VCNN3/00111NN+,,,NN%&&&7799%///+/

+/
 ?33D++JSXFFM}!99999r<   
first_byteboolc                    | t           z  rdS dS NTF)PACKET_SPIN_BITry   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   name
ValueError)rV   version_names     r=   pretty_protocol_versionr      sY    !*7338 ! ! ! !....|....s    &&rt   r	   host_cid_lengthrU   c           
     `   |                                  }d}g }d}|                                 }t          |          r|                                 }|                                 }|t          k    rt          d| d          |                     |          }	|                                 }
|
t          k    rt          d|
 d          |                     |
          }|t          j        k    rqt          j
        }|                                 s;|                    |                                            |                                 ;|                                  }n|t          z  st          d          |t          j        k    rt          |dz  dz	           }nt           |dz  dz	           }|t          j        k    r>|                                 }|                     |          }|                                 }n|t          j        k    r|                                 }nz|t          j        k    r|                                 }nU| j        |                                  z
  t,          z
  }|                     |          }|                     t,                    }d}|                                  |z   }|| j        k    rt          d	          nE|t          z  st          d          d }t          j        }|                     |          }	d}| j        }t1          ||||z
  |	||||
          S )Nr<   zDestination CID is too long (z bytes)zSource CID is too long (zPacket fixed bit is zero0   r   r   zPacket payload is truncated)rV   rW   rY   r[   r\   r]   r^   r`   )tell
pull_uint8r   pull_uint32CONNECTION_ID_MAX_SIZEr   
pull_bytesrO   rP   r?   rD   rl   appendPACKET_FIXED_BITrR   !PACKET_LONG_TYPE_DECODE_VERSION_2!PACKET_LONG_TYPE_DECODE_VERSION_1r@   pull_uint_varrA   rB   rh   rs   rE   rT   )rt   r   packet_startr^   r`   r]   ry   rV   destination_cid_lengthr[   source_cid_lengthr\   rW   
packet_endtoken_lengthrest_lengths                   r=   pull_quic_headerr      s.   88::L ME!!Jj!! B" //##!$!1!1!$:::O0FOOO   ..)?@@NN,,555R8IRRRSSS^^$566
)555 )<Kggii ="))#//*;*;<<< ggii =JJ!11 = !;<<<-777?$&1, @$&1, n444"0022|44!//11 777!//11 888!//11"|chhjj8;SS|44 #/G H H k1JCL(( !>??? )
 -- 	97888$,..99
\
 </'#-	 	 	 	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   r   )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J |j
        S )Nr   rg   )rV   )r	   ri   rs   rj   r   r?   rC   push_uint32rk   rx   rr   rl   )rV   r\   r[   rd   r   r   rt   s          r=   encode_quic_retryr     s<    
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   rr   )r\   r[   r`   rt   rV   s        r=   encode_quic_version_negotiationr   1  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   H  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   P  s*         !!!!!!r<   r   c                  (   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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)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   V  sy        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=====*.....&*******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 }|                      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   )	r   pull_uint16rZ   r   	ipaddressIPv4AddressIPv6Addressr   r   )
rt   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!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   )rt   r   s     r=   push_quic_preferred_addressr     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   )r   ranger   r   r   )rt   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   )rt   r   rV   s      r=   push_quic_version_informationr     sK     OO'6777&9 ! !    ! !r<   c                   t                      }|                                 sg|                                 }|                                 }|                                 }|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          |                                 g|S )NTz)Transport parameter length does not match)r   rl   r   r   PARAMSrX   setattrrZ   r   r   r   r   r   r   )rt   paramsparam_id	param_lenparam_start
param_name
param_types          r=   pull_quic_transport_parametersr     s   $&&Fggii J$$&&%%''	hhjj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I5 ggii J8 Mr<   r   c                $   t                                           D ]\  }\  }}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 )NFi   rg   )r   itemsgetattrr	   rX   push_uint_varrZ   rk   r   r   r   r   r   rr   )rt   r   r   r   r   param_value	param_bufs          r=   push_quic_transport_parametersr     s$    /5llnn + +**:z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                                 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 ded<   ded<   ded<   dS )QuicResetStreamFramerX   
error_code
final_size	stream_idNra   r;   r<   r=   r!  r!  A  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&  H  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   rr   Frz   finr   rX   offsetN)r&   r'   r(   rr   rb   r)  r*  r;   r<   r=   r(  r(  N  s?         DCFOOOOOOr<   r(  tuple[RangeSet, int]c                   t                      }|                                 }|                                 }|                                 }|                                 }|                    ||z
  |dz              ||z  }t          |          D ]Q}||                                 dz   z  }|                                 }|                    ||z
  |dz              ||z  }R||fS )Nr   r   )r
   r   addr   )rt   rangesetenddelayack_range_count	ack_count_s          r=   pull_ack_framer4  U  s    zzH




CE''))O!!##ILLy#'***9C?##  s  ""Q&&%%''	S9_cAg...yU?r<   r.  r
   r0  c                   t          |          }|dz
  }||         }|                     |d         dz
             |                     |           |                     |           |                     |d         dz
  |d         z
             |d         }|dk    rc|dz  }||         }|                     ||d         z
  dz
             |                     |d         |d         z
  dz
             |d         }|dk    c|S )Nr   r   )ri   r   )rt   r.  r0  rangesindexrstarts          r=   push_ack_framer:  e  s   ]]FQJEAadQheeadQh1o&&&aDE
!))
UO%!A$,*+++!A$1+/***! !)) Mr<   r;   )rc   rZ   rd   rZ   rV   rX   re   rZ   )ry   rX   re   rz   )rV   rX   re   r   r   )rt   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   )rt   r	   re   r   )rt   r	   r   r   re   r   )rt   r	   r   rX   re   r   )rt   r	   r   r   re   r   )rt   r	   re   r   )rt   r	   r   r   re   r   )rt   r	   re   r+  )rt   r	   r.  r
   r0  rX   re   rX   )P
__future__r   binasciir   r   dataclassesr   enumr   _compatr   _hazmatr   r	   r
   r   r   r}   r   PACKET_NUMBER_MAX_SIZE	unhexlifyro   rm   rp   rn   rs   STATELESS_RESET_TOKEN_SIZEr   r?   r@   PACKET_TYPE_INITIALrA   rB   rC   r   r   r   r   r   rO   rT   rx   r   r   r   r   r   r   r   r   r   r   rZ   rX   rz   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(  r4  r:  r;   r<   r=   <module>rI     s   " " " " " "      				 ! ! ! ! ! !       & & & & & & 5 5 5 5 5 5 5 5 5 5    -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   6      / / / /X X X X Xv   0     :   . ! ! ! ! ! ! ! ! " " " " " " " "
 + + + + + + + +.
/
7
s
#
 	"E
*
 	!3
'	

 	s
#
 	/
5
 	0#
6
 	(#
.
 	%s
+
 	$c
*
 	
%
 	?C
 
 	%t
,
 	 4
5
 	'
-
  	)5
1!
" 	'
/#
& !"8
9&, %(-
 
 
4   2< < < <(   &! ! ! !   B+ + + +.         G      : !*	%'! !  &I%'	    i$#'	                  
                 r<   