1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
U
Z±dÒ|ã@s$ddlZddlZddlZddlmZddlZddlZddlmZddlm    Z    ddl
Z
ddl m Z ddl mZddlmZmZmZe
 ¡Ze d    ¡Ze  e j¡Ze e¡e  e j¡Ze e¡ejjd
d ejd ed gdd
gdZ dd„Z!ed dd dœdd„ƒZ"e dd„ƒZ#edd„ƒZ$dd„Z%dd„Z&dd„Z'dd „Z(d!d"„Z)d#d$„Z*d%d&„Z+d'd(„Z,d)d*„Z-d+d,„Z.d-d.„Z/d/d0„Z0d1d2„Z1ed3d4„ƒZ2d5d6„Z3d7d8„Z4e d9d:„ƒZ5ej 6d;¡d<d=„ƒZ7ej 6d;¡d>d?„ƒZ8ej 6d;¡d@dA„ƒZ9ej 6d;¡dBdC„ƒZ:dDdE„Z;dFdG„Z<dHdI„Z=dJdK„Z>dLdM„Z?dS)NéN)Ú DTLSEndpoint)Úasynccontextmanager)Úcount)ÚSSL)ÚFakeNeté)ÚslowÚ
binds_ipv6Úgc_collect_harderz example.comÚipv6FT)ZmarksZipv4)ÚidscKsB| dd¡}|rtjj}ntjj}tjjtjj|d}t|f|ŽS)Nr F)ÚtypeÚfamily)ÚpopÚtrioÚsocketÚAF_INET6ÚAF_INETÚ
SOCK_DGRAMr)Úkwargsr rÚsock©rúKd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/tests/test_dtls.pyÚendpoints  
r)Ú
autocancelÚmtur c s t|dŒ}|rd}nd}|j |df¡IdHt ¡4IdHšF}‡fdd„}| |jt|¡IdH||j ¡fV|r‚|j     
¡W5QIdHRXW5QRXdS)N©r z::1ú    127.0.0.1rc“s°td|jj ¡›d|j›ƒˆdk    r0| ˆ¡z\tdƒ| ¡IdHtdƒ|2z23dHW}td|›d|j›ƒ| |¡IdHqT6Wntj    k
rªtdƒYnXdS)Nzecho handler started: server z client zserver starting do_handshakezserver finished do_handshakezechoing ú -> zecho handler channel broken)
ÚprintrrÚ getsocknameZ peer_addressÚset_ciphertext_mtuÚ do_handshakeÚsendrÚBrokenResourceError)Z dtls_channelÚpacket©rrrÚ echo_handler3sÿ
z&dtls_echo_server.<locals>.echo_handler) rrÚbindrÚ open_nurseryÚstartÚserveÚ
server_ctxr Ú cancel_scopeÚcancel)rrr ÚserverÚ    localhostÚnurseryr'rr&rÚdtls_echo_server)s  r2c Ãs8t|d4IdHš\}}t|dú}| |t¡}t tj¡| ¡W5QRX|     ¡IdH| 
d¡IdH|  ¡IdHdks†t ‚| 
d¡IdH|  ¡IdHdks¬t ‚t t ¡| 
d¡IdHW5QRX| d¡| ¡}| d¡| ¡|ksþt ‚| d¡| ¡|kst ‚W5QRXW5QIdHRXdS)NróhellosgoodbyeóiÒiá)r2rÚconnectÚ
client_ctxÚpytestÚraisesrZNeedHandshakeErrorÚget_cleartext_mtur"r#ÚreceiveÚAssertionErrorÚ
ValueErrorr!)r Úserver_endpointÚaddressÚclient_endpointZclient_channelZcleartext_mtu_1234rrrÚ
test_smokeMs$   
 
 
r@c
ƒs@d}t d¡‰tƒ‰ˆ ¡tƒ4IdHš\}}t ¡4IdHšÞ‰‡‡fdd„‰‡‡fdd„}|ˆ_t|ƒD]¬}t    dƒt    dƒt    dƒt
ƒ„}|  |t ¡}t    dƒ|  ¡IdHt    d    ƒt|ƒ ¡}t d
¡,}    | |¡IdH| ¡IdH|ksút‚W5QRX|    jsȐqqÈW5QRXqnW5QIdHRXW5QIdHRXdS) Nièrc“sÀˆjddddgddddgdd}t|j›d    |j›d
|›ƒ|dkrJdS|dkr^ˆ |¡q|dkr€t ˆ ¡d ¡IdHq|dksŒt‚t|j›d    |j›d |j     
¡›ƒˆ  |¡q¼qdS) NZdeliverZdropZdupeÚdelaygffffffæ?gš™™™™™¹?)Úweightsrrz: éz : delivered ) ÚchoicesrÚsourceZ destinationZ send_packetrÚsleepÚrandomr;ÚpayloadÚhexÚdeliver_packet)r%Úop)ÚfnÚrrrÚ route_packetps&
 
þý  ÿ
z:test_handshake_over_terrible_network.<locals>.route_packetcs*zˆ ˆ|¡Wntk
r$YnXdS©N)Ú
start_soonÚ RuntimeError©r%)r1rNrrÚroute_packet_wrapperœszBtest_handshake_over_terrible_network.<locals>.route_packet_wrapperzP################################################################################zclient starting do_handshakezclient finished do_handshakeé
)rGÚRandomrÚenabler2rr)rNÚrangerrr5r6r"ÚstrÚencodeÚ move_on_afterr#r:r;Úcancelled_caught)
Úautojump_clockZ
HANDSHAKESÚ_r>rSÚir?ÚclientÚmsgÚcscoper)rLr1rMrNrÚ$test_handshake_over_terrible_networkfs0
,     rbc
Ãsltƒ4IdHšN\}}tƒ8}| |t¡}| d¡IdH| ¡IdHdksNt‚W5QRXW5QIdHRXdS)Nóxyz)r2rr5r6r#r:r;©r]r>r?r_rrrÚtest_implicit_handshakeºs
 rec ÃsÒtƒÂ}tƒ°}|j d¡IdHt ¡4IdHš|}dd„}| |jt|¡IdH| |j     ¡t
¡}t ¡4IdHš }|  |j d¡|  |j ¡W5QIdHRX|j ¡W5QIdHRXW5QRXW5QRXdS)N©rrc
Ós@t ¡4IdHš }| |jd¡| |j¡W5QIdHRXdS)Ns from server)rr)rPr#r:)Úchannelr1rrrÚhandlerËsz!test_full_duplex.<locals>.handlers from client)rrr(rr)r*r+r,r5r r6rPr#r:r-r.)r=r?Zserver_nurseryrhr_r1rrrÚtest_full_duplexÄsÿric ÃsÀtƒ4IdHš¢\}}tƒŒ}| |t¡}| ¡IdH| ¡t tj    ¡| 
d¡IdHW5QRXt tj    ¡|  ¡IdHW5QRX| ¡|  ¡IdHW5QRXW5QIdHRXdS)Nóabc) r2rr5r6r"Úcloser7r8rÚClosedResourceErrorr#r:ÚacloserdrrrÚtest_channel_closingÜs rnc
Ãs<tdd4IdHš\}}| ¡W5QIdHRX| ¡dS)NF)r)r2rk)r=r>rrrÚ!test_serve_exits_cleanly_on_closeîsroc Ãsštƒ4IdHšz\}}tƒ4IdHšT\}}tƒ<}| |t¡}| |t¡}| d¡IdH| d¡IdH| ¡IdHdks„t‚| ¡IdHdksšt‚| ¡t     t
j ¡| d¡IdHW5QRXt     t
j ¡| ¡IdHW5QRXt     t
j ¡| |t¡W5QRXt
  ¡4IdHš<}t     t
j ¡$dd„}|  |jt|¡IdHW5QRXW5QIdHRXW5QRXW5QIdHRXW5QIdHRXdS)NrjrcZxxxcÓsdSrOr©r]rrrÚ null_handler sz+test_client_multiplex.<locals>.null_handler)r2rr5r6r#r:r;rkr7r8rrlr)r*r+r,)r]Zaddress1Zaddress2r?Úclient1Úclient2r1rqrrrÚtest_client_multiplexös&,
  rtc
Ãs8tj ¡$}t t¡t|ƒW5QRXW5QRXdSrO)rrr7r8r<r)ÚsrrrÚtest_dtls_over_dgram_onlys  rvc Ãsâdd„}tƒÊ}|j d¡IdHt ¡4IdHšT}| |jt|¡IdHt     tj
¡| |jt|¡IdHW5QRX|j   ¡W5QIdHRXt ¡4IdHš&}| |jt|¡IdH|j   ¡W5QIdHRXW5QRXdS)NcÓsdSrOrrprrrrqsz'test_double_serve.<locals>.null_handlerrf) rrr(rr)r*r+r,r7r8ZBusyResourceErrorr-r.)rqr=r1rrrÚtest_double_serves rwc Ãsˆtƒ}| ¡tƒj}tƒX}|j d¡IdHt d¡&}| |j ¡t    ¡}| 
¡IdHW5QRX|j spt ‚W5QRXW5QRXdS)Nrféd) rrVrrr(rrZr5r r6r"r[r;)r\rLrrrsrargrrrÚtest_connect_to_non_server+s ryc     Ãstƒ}| ¡dD]ú}tƒ4IdHšÜ\}}t|dÂ}|j|ksDt‚| |t¡}t|dƒD],}|     t
|ƒ  ¡¡IdHt   d¡IdHq\| ¡}|jdks t‚t|ƒD]"}| ¡IdHt
|ƒ  ¡ks¨t‚q¨|     d¡IdH| ¡IdHdksòt‚W5QRXW5QIdHRXqdS)N)rTé)Úincoming_packets_bufferéésbuffer clear now)rrVr2rr{r;r5r6rWr#rXrYrrFZ
statisticsZ incoming_packets_dropped_in_trior:)    r\rLÚ buffer_sizer]r>r?r_r^ÚstatsrrrÚtest_incoming_buffer_overflow7s     r€cÃs¼tƒ}| ¡ddlm}m}m}m}m}m}m    }|||j
|j d|||j ddddt dƒdƒdƒ}    |    d}
|    dd…} |    dd…} t|    ƒ} d    | d
<|||j
|j d|||j d dddt dƒdƒdƒ}|||j
|j d|||j d dddt dƒdƒddƒ}|||j
|j dd dƒ}|||j
|j dt d ƒddƒ}tƒ4IdHšj\}}tjjtjjdH}d d|
| | | ||||f
D](}| ||¡IdHt d¡IdHqtW5QRXW5QIdHRXdS)Nr)ÚRecordÚ encode_recordÚHandshakeFragmentÚencode_handshake_fragmentÚ ContentTypeÚ HandshakeTypeÚProtocolVersionrT)Úmsg_typeZmsg_lenZmsg_seqZ frag_offsetZfrag_lenÚfrag)Ú content_typeÚversionZ epoch_seqnorHóéÿÿÿÿééÿé rzr4é#óÿ©r rcr})rrVÚ
trio._dtlsrr‚rƒr„r…r†r‡Z    handshakeZDTLS10Ú client_helloÚbytesÚ    bytearrayr2rrrÚsendtorF)r\rLrr‚rƒr„r…r†r‡r•Zclient_hello_extendedZclient_hello_shortZclient_hello_really_shortZclient_hello_corrupt_record_lenZclient_hello_fragmentedZ$client_hello_trailing_data_in_recordZhandshake_emptyZ client_hello_truncated_in_cookier]r>rZ
bad_packetrrrÚ*test_server_socket_doesnt_crash_on_garbageJs¸$
úÿüÿ  úÿüÿúÿ
öüÿüÿ    
üÿ    ö r™c ƒs´tƒ‰ˆ ¡ddlm‰m‰t ¡„‰tdƒ‰‡‡‡‡‡fdd„}|ˆ_t    ƒ4IdHšB\}}t
ƒ }|  |t ¡}|  ¡IdHW5QRXq^ˆjs–t‚W5QIdHRXW5QRXdS)Nr)Údecode_client_hello_untrustedÚ    BadPacketrcs”zˆ|jƒ\}}}Wnˆk
r(Yn^Xt|ƒdkr†t|jƒ}tˆƒ}|t|ƒkrht|ƒd}ˆ ¡||dN<tj||d}ˆ |¡dS)Nrr})rH)rHÚlenr—Únextr.ÚattrZevolverJ)r%r]ÚcookierHÚoffset©r›raršrLZoffset_to_corruptrrrNÆs 
  z2test_invalid_cookie_rejected.<locals>.route_packet)rrVr”ršr›rÚ CancelScoperrNr2rr5r6r"r[r;)r\rNr]r>r_rgrr¡rÚtest_invalid_cookie_rejectedºs
 r£c ƒs$tƒ}| ¡tƒ}tƒò}|j d¡IdHt ¡4IdHš¾}d‰‡‡fdd„}| |jt    |¡IdHt
dƒt  ¡&‰|  |j  ¡t¡}| ¡IdHW5QRXˆjs²t‚t
dƒ|  |j  ¡t¡}| ¡IdHdksât‚t d¡IdH|j ¡W5QIdHRXW5QRXW5QRXdS)    NrfTc    “stˆrXd‰tdƒˆ ¡t d¡IdHtdƒt tj¡| ¡IdHW5QRXntdƒ| d¡IdHdS)NFz'handler: first time, cancelling connectgà?z"handler: handshake should fail nowz&handler: not first time, sending hellor3)    rr.rrFr7r8r$r"r#©rg©Zconnect_cscopeZ
first_timerrrhñszAtest_client_cancels_handshake_and_starts_new_one.<locals>.handlerzclient: starting first connectzclient: starting second connectr3rT)rrVrrr(rr)r*r+r,rr¢r5r r6r"r[r;r:rFr-r.)r\rLr/r_r1rhrgrr¥rÚ0test_client_cancels_handshake_and_starts_new_oneås$
 
r¦c ƒsdtƒR}tƒ>}|j d¡IdH|j d¡IdHdd„‰‡fdd„}t ¡4IdHšä}| |jt|¡IdH| |jtˆ¡IdH| |j     ¡t
¡}|  d¡IdH|  ¡IdHdksÂt ‚| |j     ¡t
¡}| ¡IdHt tj¡|  d¡IdHW5QRX|  d¡IdH|  ¡IdHdks2t ‚|j ¡W5QIdHRXW5QRXW5QRXdS)    NrfcÓs(|2z3dHW}| |¡IdHq6dSrO)r#)rgr%rrrr'sz-test_swap_client_server.<locals>.echo_handlerc    “s*t tj¡ˆ|ƒIdHW5QRXdSrO)r7r8rr$r¤©r'rrÚcrashing_echo_handlersz6test_swap_client_server.<locals>.crashing_echo_handlers b as clientsassociation brokens a as client)rrr(rr)r*r+r,r5r r6r#r:r;r"r7r8r$r-r.)ÚaÚbr¨r1Zb_to_aZa_to_brr§rÚtest_swap_client_servers$ r«c ƒsÈtƒ‰ˆ ¡d‰‡‡fdd„}|ˆ_tƒ4IdHš„\}‰tƒn‰t ¡4IdHšL}‡‡fdd„}| |¡t d¡IdHd‰|j     
dˆj      ¡¡IdHW5QIdHRXW5QRXW5QIdHRXdS)    NTcs*ˆrtd|ƒdStd|ƒˆ |¡dS)Nzdropped packetzdelivered packet)rrJrR©Ú
blackholedrLrrrN9s
 
 
z@test_openssl_retransmit_doesnt_break_stuff.<locals>.route_packetc“sHˆ ˆt¡}|jddIdH| d¡IdH| ¡IdHdksDt‚dS)Ngø?©Zinitial_retransmit_timeoutóhi)r5r6r"r#r:r;)r_)r>r?rrÚ    connecterMs z=test_openssl_retransmit_doesnt_break_stuff.<locals>.connectergš™™™™™ñ?Fóxxx) rrVrNr2rrr)rPrFrr˜r )rNr=r1r°r)r>r­r?rLrÚ*test_openssl_retransmit_doesnt_break_stuff/s 
ÿr²c     ƒs¬tƒ‰ˆ ¡d‰‡‡fdd„}|ˆ_tƒ4IdHšh\}}dD]X}tƒH}t ¡}d‰| |t¡}|j    |dIdHt ¡}|||ksŒt
‚W5QRXq>W5QIdHRXdS)NTcsˆr
d‰n
ˆ |¡dS©NF)rJrRr¬rrrNiszCtest_initial_retransmit_timeout_configuration.<locals>.route_packet)r}rér®) rrVrNr2rrÚ current_timer5r6r"r;)    r\rNr]r>Útr_ZbeforergÚafterrr¬rÚ-test_initial_retransmit_timeout_configurationcs r¸c
ƒs®d‰tƒ‰ˆ ¡‡‡fdd„}|ˆ_tˆd4IdHšf\}}tƒP}| |t¡}| ˆ¡| ¡IdH|     d¡IdH| 
¡IdHdkst ‚W5QRXW5QIdHRXdS)Ni,csBtd|›ƒtdt|jƒ›ƒt|jƒˆks4t‚ˆ |¡dS)Nú delivering zpayload size: )rrœrHr;rJrR©ZMTUrLrrrN…sz9test_explicit_tiny_mtu_is_respected.<locals>.route_packetr&r¯) rrVrNr2rr5r6r!r"r#r:r;)rNr/r>r_rgrrºrÚ#test_explicit_tiny_mtu_is_respected}s 
r»c
ƒs¾tƒ‰ˆ ¡|rd‰nd‰‡‡fdd„}|ˆ_t|d4IdHšl\}}t|dR}| |t¡}| d¡| d¡IdH|     ¡IdHdkst
‚|  ¡dks t
‚W5QRXW5QIdHRXdS)    NiÐi$cs:t|jƒˆkrtd|›ƒntd|›ƒˆ |¡dS)Nz    dropping r¹)rœrHrrJrR©rLrrrrN¡sz@test_handshake_handles_minimum_network_mtu.<locals>.route_packetri'rci(#) rrVrNr2rr5r6r!r#r:r;r9)r r\rNr]r>r?r_rr¼rÚ*test_handshake_handles_minimum_network_mtu–s  
r½z$always:unclosed DTLS:ResourceWarningc    Ãs„tj ¡j}dd„}t t¡(|ƒIdH}tj ¡IdHt    ƒW5QRXtj ¡IdHtj ¡j}||kstt
‚||ks€t
‚dS)Nc Ósœtƒ}tjjtjjdn}| d¡IdH| | ¡t¡}t ¡4IdHš,}|     |j
¡tj   ¡IdH|j  ¡W5QIdHRXW5QRXtj ¡j}|S)Nr“rf)rrrrr(r5r r6r)rPr"ÚtestingÚwait_all_tasks_blockedr-r.ÚlowlevelÚcurrent_statisticsÚ tasks_living)ÚeruÚcr1Ú during_tasksrrrÚstart_and_forget_endpointÁs $ zDtest_system_task_cleaned_up_on_gc.<locals>.start_and_forget_endpoint) rrÀrÁrÂr7ÚwarnsÚResourceWarningr¾r¿r
r;)Z before_tasksrÆrÅZ after_tasksrrrÚ!test_system_task_cleaned_up_on_gc¹s     rÉc    Ãs8tƒ}t t¡~tƒW5QRXtj ¡IdHdSrO)rr7rÇrÈr
rr¾r¿©rÃrrrÚ!test_gc_before_system_task_startsÝs
 rËc    Ãs–tƒ}| ¡tƒ}|j d¡IdH| ¡tj ¡IdHtjjtjj    d}| 
d|j  ¡¡IdHW5QRXt   t¡~tƒW5QRXdS)Nrfr“r±)rrVrrr(Z_ensure_receive_looprr¾r¿rr˜r r7rÇrÈr
)rLrÃrurrrÚtest_gc_as_packet_receivedès" rÌc    Cs4dd„}t |¡}t t¡~tƒW5QRXdS)NcÓstƒ}| ¡tƒSrO)rrVr)rLrrrÚmainÿsz&test_gc_after_trio_exits.<locals>.main)rÚrunr7rÇrÈr
)rÍrÃrrrÚtest_gc_after_trio_exitsýs
    
 rÏc    Ãs0tƒ }|j ¡tj ¡IdHW5QRXdSrO)rrrkrr¾r¿rÊrrrÚ'test_already_closed_socket_doesnt_crashs
rÐc ƒsŒtƒ‰ˆ ¡tƒ4IdHš`\‰}‡‡fdd„}|ˆ_tƒ6}t d¡ | |t¡}|     ¡IdHW5QRXW5QRXW5QIdHRXdS)Ncsˆ |¡ˆj ¡dSrO)rJrrkrR©rLr/rrrNs
zEtest_socket_closed_while_processing_clienthello.<locals>.route_packetrT)
rrVr2rNrrrZr5r6r")r\r>rNr?r_rrÑrÚ/test_socket_closed_while_processing_clienthellos  rÒc ƒs¶tƒ}| ¡dd„}||_tƒ4IdHš|\}}tƒf}| |t¡‰t ¡4IdHš8}‡fdd„}|     |¡t 
d¡IdH| |t¡W5QIdHRXW5QRXW5QIdHRXdS)NcSsdSrOrrRrrrrN/szGtest_association_replaced_while_handshake_running.<locals>.route_packetc    “s*t tj¡ˆ ¡IdHW5QRXdSrO)r7r8rr$r"r©Úc1rrÚdoomed_handshake9szKtest_association_replaced_while_handshake_running.<locals>.doomed_handshakerT) rrVrNr2rr5r6rr)rPrF)r\rLrNr]r>r?r1rÕrrÓrÚ1test_association_replaced_while_handshake_running+s  
rÖc Ãs”tƒ}| ¡dd„}||_tƒ4IdHšZ\}}tƒD}| |t¡}| |t¡t t    j
¡|  ¡IdHW5QRXW5QRXW5QIdHRXdS)NcSs dst‚dSr³)r;rRrrrrNIszGtest_association_replaced_before_handshake_starts.<locals>.route_packet) rrVrNr2rr5r6r7r8rr$r")rLrNr]r>r?rÔrrrÚ1test_association_replaced_before_handshake_startsDs  r×c ÃsÄtƒ4IdHš¦\}}tƒ}t ¡4IdHšn}tddƒD] }| d|ft¡}| |j¡q8| |t¡}|     d¡IdH| 
¡IdHdksŒt ‚|j   ¡W5QIdHRXW5QRXW5QIdHRXdS)Nr}rTrr±)r2rrr)rWr5r6rPr"r#r:r;r-r.)r]r>r?r1r^rgrrrÚtest_send_to_closed_local_portVs rØ)@r7rZ trio.testingrrGržÚasync_generatorrÚ    itertoolsrZtrustmeZOpenSSLrZtrio.testing._fake_netrZ_core.tests.tutilrr    r
ÚCAÚcaZ
issue_certZ server_certÚContextZ DTLS_METHODr,Zconfigure_certr6Zconfigure_trustÚmarkZ parametrizeÚparamZparametrize_ipv6rr2r@rbrerirnrortrvrwryr€r™r£r¦r«r²r¸r»r½ÚfilterwarningsrÉrËrÌrÏrÐrÒrÖr×rØrrrrÚ<module>sz     
 
 
ÿ
#
 
S
 p++
3
"
 
#