@@ -98,7 +98,9 @@ pub struct NoiseSession {
98
98
#[ derive( Clone , Copy , Debug , PartialEq ) ]
99
99
enum State {
100
100
Initial ,
101
+ ZeroRtt ,
101
102
Handshake ,
103
+ OneRtt ,
102
104
Data ,
103
105
}
104
106
@@ -130,7 +132,7 @@ impl Session for NoiseSession {
130
132
}
131
133
}
132
134
133
- fn next_1rtt_keys ( & mut self ) -> Option < KeyPair < Self :: PacketKey > > {
135
+ fn next_1rtt_keys ( & mut self ) -> KeyPair < Self :: PacketKey > {
134
136
if !self . is_handshaking ( ) {
135
137
self . xoodyak . ratchet ( ) ;
136
138
}
@@ -150,10 +152,10 @@ impl Session for NoiseSession {
150
152
remote : client,
151
153
} ,
152
154
} ;
153
- Some ( key)
155
+ key
154
156
}
155
157
156
- fn read_handshake ( & mut self , handshake : & [ u8 ] ) -> Result < ( bool , Option < Keys < Self > > ) , TransportError > {
158
+ fn read_handshake ( & mut self , handshake : & [ u8 ] ) -> Result < bool , TransportError > {
157
159
tracing:: trace!( "read_handshake {:?} {:?}" , self . state, self . side) ;
158
160
match ( self . state , self . side ) {
159
161
( State :: Initial , Side :: Server ) => {
@@ -195,14 +197,8 @@ impl Session for NoiseSession {
195
197
Side :: Server ,
196
198
& mut Cursor :: new ( & mut transport_parameters) ,
197
199
) ?) ;
198
- let packet = self . next_1rtt_keys ( ) . unwrap ( ) ;
199
- self . state = State :: Handshake ;
200
- self . zero_rtt_key = Some ( packet. remote . clone ( ) ) ;
201
- let keys = Keys {
202
- header : HEADER_KEYPAIR ,
203
- packet,
204
- } ;
205
- Ok ( ( true , Some ( keys) ) )
200
+ self . state = State :: ZeroRtt ;
201
+ Ok ( true )
206
202
}
207
203
( State :: Handshake , Side :: Client ) => {
208
204
let ( remote_e, rest) = handshake. split_at ( 32 ) ;
@@ -227,14 +223,8 @@ impl Session for NoiseSession {
227
223
Side :: Client ,
228
224
& mut Cursor :: new ( & mut transport_parameters) ,
229
225
) ?) ;
230
- let packet = self . next_1rtt_keys ( ) . unwrap ( ) ;
231
- self . state = State :: Data ;
232
- self . zero_rtt_key . take ( ) ;
233
- let keys = Keys {
234
- header : HEADER_KEYPAIR ,
235
- packet,
236
- } ;
237
- Ok ( ( true , Some ( keys) ) )
226
+ self . state = State :: OneRtt ;
227
+ Ok ( true )
238
228
}
239
229
_ => Err ( TransportError {
240
230
code : TransportErrorCode :: CONNECTION_REFUSED ,
@@ -277,7 +267,11 @@ impl Session for NoiseSession {
277
267
let mut tag = [ 0 ; 16 ] ;
278
268
self . xoodyak . squeeze ( & mut tag) ;
279
269
handshake. extend_from_slice ( & tag) ;
280
- let packet = self . next_1rtt_keys ( ) . unwrap ( ) ;
270
+ self . state = State :: ZeroRtt ;
271
+ None
272
+ }
273
+ ( State :: ZeroRtt , _) => {
274
+ let packet = self . next_1rtt_keys ( ) ;
281
275
self . state = State :: Handshake ;
282
276
self . zero_rtt_key = Some ( packet. local . clone ( ) ) ;
283
277
Some ( Keys {
@@ -301,7 +295,15 @@ impl Session for NoiseSession {
301
295
let mut tag = [ 0 ; 16 ] ;
302
296
self . xoodyak . squeeze ( & mut tag) ;
303
297
handshake. extend_from_slice ( & tag) ;
304
- let packet = self . next_1rtt_keys ( ) . unwrap ( ) ;
298
+ let packet = self . next_1rtt_keys ( ) ;
299
+ self . state = State :: Data ;
300
+ Some ( Keys {
301
+ header : HEADER_KEYPAIR ,
302
+ packet,
303
+ } )
304
+ }
305
+ ( State :: OneRtt , _) => {
306
+ let packet = self . next_1rtt_keys ( ) ;
305
307
self . state = State :: Data ;
306
308
Some ( Keys {
307
309
header : HEADER_KEYPAIR ,
0 commit comments