Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign upRaw handshake I/O for QUIC #187
Conversation
This comment has been minimized.
This comment has been minimized.
coveralls
commented
Jul 22, 2018
•
This comment has been minimized.
This comment has been minimized.
|
Took a swing at an API for key derivations. I had to touch a whole bunch of stuff to make that happen, so I'd really like to hear opinions on the approaches taken before I fill it out the rest of the way. |
Ralith
force-pushed the
Ralith:quic-13
branch
2 times, most recently
from
f22039e
to
1b63d6d
Jul 24, 2018
djc
reviewed
Jul 27, 2018
src/key_schedule.rs Outdated
ctz
reviewed
Jul 29, 2018
src/client/hs.rs Outdated
This comment has been minimized.
This comment has been minimized.
|
Thanks for the feedback! I'll dig into the proposed changes later today. |
Ralith
force-pushed the
Ralith:quic-13
branch
from
f51f495
to
2eed3c5
Jul 29, 2018
This comment has been minimized.
This comment has been minimized.
|
Applied the requested changes. I'll now start filling out the remaining key derivation functionality. Still hoping to hear some thoughts on the refactoring needed for getting outgoing messages and alerts prior to encryption and fragmentation. |
Ralith
force-pushed the
Ralith:quic-13
branch
from
2eed3c5
to
9466328
Jul 29, 2018
This comment has been minimized.
This comment has been minimized.
|
Tests currently failing on edit: Found the proper way to disable these. |
Ralith
force-pushed the
Ralith:quic-13
branch
3 times, most recently
from
0700268
to
c5e045d
Jul 29, 2018
This comment has been minimized.
This comment has been minimized.
If I were doing this I'd extract a trait from the necessary functions on |
Ralith
force-pushed the
Ralith:quic-13
branch
from
c5e045d
to
4e525b0
Aug 4, 2018
This comment has been minimized.
This comment has been minimized.
And then have a no-op implementation for QUIC? Hmm, that could work. I wonder if it would be cleaner to instead defer all encryption and fragmentation as late as possible (i.e. perform it on-demand inside |
Ralith
force-pushed the
Ralith:quic-13
branch
from
4e525b0
to
18d2197
Aug 4, 2018
This comment has been minimized.
This comment has been minimized.
This sounds like it would map better to what QUIC is doing these days. |
Ralith
force-pushed the
Ralith:quic-13
branch
from
18d2197
to
252fb31
Oct 7, 2018
This comment has been minimized.
This comment has been minimized.
|
After some discussion with @djc we realized there's a much less invasive approach to handling outgoing messages. I think the necessary API is now fully prototyped; next steps should be to try to use it in practice, and gather any further feedback. |
This comment has been minimized.
This comment has been minimized.
|
It would be nice if |
Ralith
force-pushed the
Ralith:quic-13
branch
2 times, most recently
from
477aaac
to
be6348e
Oct 7, 2018
This comment has been minimized.
This comment has been minimized.
|
Travis seems to be failing because |
Ralith
force-pushed the
Ralith:quic-13
branch
4 times, most recently
from
9e9021c
to
f173930
Oct 7, 2018
This comment has been minimized.
This comment has been minimized.
|
Quinn is now employing the full breadth of this API to successfully communication with other implementations speaking the current draft, which is fortunately less invasive than draft-13 was. I think we're ready for another round of review. |
Ralith
force-pushed the
Ralith:quic-13
branch
4 times, most recently
from
4f7b8bf
to
28a1f4b
Jan 6, 2019
This comment has been minimized.
This comment has been minimized.
|
This looks all reasonable to me, code-wise. The things I'd like to see are some basic tests that exercise the new public API (in |
This comment has been minimized.
This comment has been minimized.
|
Good thought, I'll bang that out. Reviewing this code, I've also been thinking about making |
Ralith
force-pushed the
Ralith:quic-13
branch
2 times, most recently
from
72ad59e
to
7ce4cde
Jan 6, 2019
This comment has been minimized.
This comment has been minimized.
|
This test covers everything except |
Ralith
force-pushed the
Ralith:quic-13
branch
from
7ce4cde
to
af5d2e0
Jan 7, 2019
Ralith
force-pushed the
Ralith:quic-13
branch
from
af5d2e0
to
4e77142
Jan 8, 2019
This comment has been minimized.
This comment has been minimized.
|
I managed to fill in the necessary parts for QUIC 0-RTT support without too much disruption. I also added the transport parameters to client session storage under QUIC, because this is always required and is very simple for rustls to provide. |
This comment has been minimized.
This comment has been minimized.
|
This'll get merged tomorrow. |
Ralith
added some commits
Nov 24, 2018
Ralith
force-pushed the
Ralith:quic-13
branch
from
bcbe4a8
to
6cb4756
Jan 12, 2019
This comment has been minimized.
This comment has been minimized.
|
Rebased, and added some last-minute internal fixes isolated into the final Note that most of the server-sized 0-RTT changes here are generally applicable to TLS1.3, and should be pulled out of the feature guards if/when conventional TLS1.3 0-RTT is implemented. Still dunno what's going on with the bogo tests trying to combine TLS1.2 with QUIC, but presumably it's a trivial fix. |
Ralith commentedJul 22, 2018
•
edited
This works towards supporting the new QUIC TLS interface, wherein QUIC subsumes the TLS record layer, taking over responsibility for fragmentation, encryption/decryption, and communication of alerts.
While
read_hsas written should handle incoming data correctly, I'm unsure how to proceed with handling outgoing handshake data and alerts. The current implementation performs encoding of alerts, encryption, and fragmentation eagerly, all of which are undesired.Ideally I'd like to defer these operations to being performed on demand, so that the QUIC interface can easily pass the data out as-is, while the regular interface performs the transformations necessary for conventional use. This seems likely to be a more invasive change, so before I proceed I'd like feedback on the idea, and input on how to approach implementing it.
This interface will likely need to be further extended with helpers to perform the necessary key derivation, which uses different labels than that of TLS.