Skip to content

Commit 1ab0e8b

Browse files
committed
Works with upstream.
1 parent 0717818 commit 1ab0e8b

File tree

2 files changed

+25
-23
lines changed

2 files changed

+25
-23
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ bytes = "1.0.1"
1212
chacha20poly1305 = { version = "0.7.1", features = ["reduced-round"] }
1313
curve25519-dalek = "3.1.0"
1414
ed25519-dalek = "1.0.1"
15-
quinn-proto = { git = "https://github.com/dvc94ch/quinn", branch = "read-handshake-returns-keys", default-features = false, features = ["ring"] }
15+
quinn-proto = { version = "0.7.2", default-features = false, features = ["ring"] }
1616
rand_core = "0.5.1"
1717
ring = "0.16.20"
1818
sha2 = "0.9.3"
1919
subtle = "2.4.0"
2020
tracing = "0.1.25"
2121
x25519-dalek = "1.1.1"
2222
xoodoo = "0.1.0"
23-
zeroize = "1.2.0"
23+
zeroize = "1.3.0"

src/session.rs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ pub struct NoiseSession {
9898
#[derive(Clone, Copy, Debug, PartialEq)]
9999
enum State {
100100
Initial,
101+
ZeroRtt,
101102
Handshake,
103+
OneRtt,
102104
Data,
103105
}
104106

@@ -130,7 +132,7 @@ impl Session for NoiseSession {
130132
}
131133
}
132134

133-
fn next_1rtt_keys(&mut self) -> Option<KeyPair<Self::PacketKey>> {
135+
fn next_1rtt_keys(&mut self) -> KeyPair<Self::PacketKey> {
134136
if !self.is_handshaking() {
135137
self.xoodyak.ratchet();
136138
}
@@ -150,10 +152,10 @@ impl Session for NoiseSession {
150152
remote: client,
151153
},
152154
};
153-
Some(key)
155+
key
154156
}
155157

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> {
157159
tracing::trace!("read_handshake {:?} {:?}", self.state, self.side);
158160
match (self.state, self.side) {
159161
(State::Initial, Side::Server) => {
@@ -195,14 +197,8 @@ impl Session for NoiseSession {
195197
Side::Server,
196198
&mut Cursor::new(&mut transport_parameters),
197199
)?);
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)
206202
}
207203
(State::Handshake, Side::Client) => {
208204
let (remote_e, rest) = handshake.split_at(32);
@@ -227,14 +223,8 @@ impl Session for NoiseSession {
227223
Side::Client,
228224
&mut Cursor::new(&mut transport_parameters),
229225
)?);
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)
238228
}
239229
_ => Err(TransportError {
240230
code: TransportErrorCode::CONNECTION_REFUSED,
@@ -277,7 +267,11 @@ impl Session for NoiseSession {
277267
let mut tag = [0; 16];
278268
self.xoodyak.squeeze(&mut tag);
279269
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();
281275
self.state = State::Handshake;
282276
self.zero_rtt_key = Some(packet.local.clone());
283277
Some(Keys {
@@ -301,7 +295,15 @@ impl Session for NoiseSession {
301295
let mut tag = [0; 16];
302296
self.xoodyak.squeeze(&mut tag);
303297
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();
305307
self.state = State::Data;
306308
Some(Keys {
307309
header: HEADER_KEYPAIR,

0 commit comments

Comments
 (0)