Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0RTT, Early data, session ticketing, key verification, stateless reset #153

Open
wants to merge 17 commits into
base: dev
Choose a base branch
from

Conversation

dr7ana
Copy link
Collaborator

@dr7ana dr7ana commented Dec 4, 2024

Scope:

  • 0rtt/early data: Can be enabled with opt::enable_0rtt_ticketing at the endpoint level, and will apply for all connections in/out of that endpoint.
  • Session ticketing storage mode: Enabled through the same struct by passing the optional verify/put/get callbacks. The default mode is internal storage managed by libquic, but the application can take responsibility by providing all of the callbacks
  • Key verification on/off: Can be disabled with opt::disable_key_verification at the connection level by passing the struct to calls to Endpoint::{listen,connect}(...)
  • Stateless reset can be disabled with opt::disable_stateless_verification at the endpoint level

dr7ana and others added 16 commits December 11, 2024 06:25
- By passing `opt::disable_key_verification` in calls to `Endpoint::{listen,connect}(...)` the application can decide whether to use key verification for inbound or outbound connections.
- can be toggled on/off, bespoke types for handling generation and storage
- improvements, better handling, callbacks
- ping binaries added to test timing
- more thoughtful compile time checking
The copy and move constructors/operators are a decent amount of
complexity keeping track of pointers that really isn't needed because we
nearly always want these held inside a unique_ptr, and so it simplifies
things to just enforce that everywhere and fix the two occurances that
held in a value and then sort of mutated into a unique_ptr.

This also lets us make the key data const, which gives us better safety
assurances for using it as the key of a map (as we currently are).

Also makes the private fields actually private, along with the
constructors (to enforce all usage now go through make).

Also dropped some unused comparison & hashing functions.
- added RAII gnutls_datum object, used where needed. Must be careful, can double free if the memory is owned by another object or held within ngtcp2
- misc fixes from oxen-io#147
@dr7ana dr7ana force-pushed the 0rtt branch 3 times, most recently from 2028283 to c87754e Compare December 11, 2024 14:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants