summaryrefslogtreecommitdiff
path: root/crates/tor-proto
Commit message (Collapse)AuthorAgeFilesLines
...
| * | padding: Give CircEnt in a Channel a handle for the PaddingController.Nick Mathewson2025-09-027-99/+169
| | | | | | | | | | | | | | | This requires some annoying plumbing to make sure that the right types wind up in the right places.
| * | proto: Turn CircEnt variants into struct-like format.Nick Mathewson2025-09-022-29/+72
| | | | | | | | | | | | (I'm about to add more fields.)
| * | padding: Install a PaddingController in each circuit.Nick Mathewson2025-09-023-5/+16
| | | | | | | | | | | | Also, use it to report that we have queued normal data.
| * | padding: track which hop each queued cell is for.Nick Mathewson2025-09-026-31/+106
| | | | | | | | | | | | | | | | | | | | | | | | We'll need this so that we can tell the right padding machine(s) which of them just had a queue flush. This is not yet 100% done; the unfinished parts are marked with XXXXs.
* | | tor-proto: fix bug in `congestion_signals`Steven Engler2025-09-031-1/+3
| |/ |/|
* | Merge branch 'maybenot-backend' into 'main'Nick Mathewson2025-09-026-1/+1354
|\| | | | | | | | | Define and implement a backend padding API, based on maybenot. See merge request tpo/core/arti!3185
| * padding: document when we set next_scheduled_wakeupNick Mathewson2025-09-021-0/+3
| |
| * padding: Call hops "target" rather than "final" for clarityNick Mathewson2025-09-021-4/+6
| |
| * padding: s/can_bypass/is_bypassable/ for clarity.Nick Mathewson2025-09-022-10/+11
| |
| * padding: Clarify next_expiration vs next_scheduled_wakeupNick Mathewson2025-09-021-4/+9
| |
| * padding: Several comment/style fixes from @gabi-250Nick Mathewson2025-09-024-8/+11
| |
| * Define and implement a backend padding API, based on maybenot.Nick Mathewson2025-09-026-1/+1340
| | | | | | | | | | | | | | | | There are incomplete pieces, marked with "TODO circpad". There is no integration into the circuit reactor code yet. Part of #63
* | Merge branch 'chan-handshake-refactor' into 'main'David Goulet2025-09-021-121/+262
|\ \ | |/ |/| | | | | proto: Refactor channel handshake code for upcoming relay handshake See merge request tpo/core/arti!3182
| * proto: Move is_authenticating() into the base initiator handshake traitDavid Goulet2025-09-021-7/+10
| | | | | | | | | | | | | | | | Initiator always know if they will authenticate or not. Responder is different as a relay doesn't know until the end of the handshake if it is responding to a relay or a client. Signed-off-by: David Goulet <[email protected]>
| * proto: Various channel handshake fixesDavid Goulet2025-09-021-21/+38
| | | | | | | | | | | | | | | | | | | | These are following the review of MR 3182. They are put in a single commit because the git absorb has a large amount of conflicts on rebase and this commit allows the reviewers to see what happened. The base branch was rebased on main due to the need for 3184. Signed-off-by: David Goulet <[email protected]>
| * proto: Fix unit tests after changesDavid Goulet2025-09-021-5/+5
| | | | | | | | Signed-off-by: David Goulet <[email protected]>
| * proto: Add a helper to calculate the handshake clock skewDavid Goulet2025-09-021-12/+33
| | | | | | | | | | | | In the spirit of avoidin code duplication. Signed-off-by: David Goulet <[email protected]>
| * proto: Add a channel initiator handshake base traitDavid Goulet2025-09-021-76/+118
| | | | | | | | | | | | | | | | | | All initiator handshake will implement this in order to get access to the helper function to receive the relay responder cells. Relay will implement this in future commits. Signed-off-by: David Goulet <[email protected]>
| * proto: Introduce a ChannelBaseHandshake traitDavid Goulet2025-09-021-37/+96
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Client and relay handhsake share a lot of code because they both send/recv the same cells, just handles them differently for verification. This is the base trait for all handshake implementing basic getters and VERSIONS cell handling. This will allow the RelayInitiatorHandshake and RelayResponderHandshake to use this common code. See, traits are fun. Win-win-win. Signed-off-by: David Goulet <[email protected]>
| * proto: Put in a ChannelFrame<T> into the client handshakeDavid Goulet2025-09-021-10/+9
| | | | | | | | | | | | | | | | | | | | | | | | The ClientInitiatorHandshake holds a "tls" sink but the very first thing we do is transform it to a ChannelFrame<T>. Instead, just store the frame to the object directly so we can then use a channel frame uniformily accross its lifetime. This will be useful for the future refactoring paving the way for relay channel authentication. Signed-off-by: David Goulet <[email protected]>
* | Merge branch 'const-assert-cleanly' into 'main'Nick Mathewson2025-09-021-2/+1
|\ \ | |/ |/| | | | | various crates: Switch to "assert in const" pattern See merge request tpo/core/arti!3217
| * tor-proto: Switched to "assert in const" patternhashcatHitman2025-09-011-2/+1
| | | | | | | | | | | | | | Replaced use of [`static_assertions::const_assert`] with the newly available "assert in const" pattern. Signed-off-by: hashcatHitman <[email protected]>
* | Update to derive-deftly 1.3.0Ian Jackson2025-09-021-1/+1
|/
* proto: Use allow(unused) instead of expect(unused).Gabriela Moldovan2025-08-291-1/+1
| | | | | | | | | | | With rustc 1.85, this `expect(unused)` triggers a "lint expectation unfulfilled" error, because rust thinks the struct *is* used (because of the d-d `TryFrom` implementation), despite the fact that it's never actually constructed. This isn't a problem on newer versions (it's correctly identified as unused/dead code on 1.89, for example). Using `allow` instead of `expect` is slightly less nice, but it makes `clippy` pass on 1.85 too.
* Remove semver.md filesNick Mathewson2025-08-281-2/+0
|
* Bump the minor version of every published crate except for `arti`.Nick Mathewson2025-08-281-23/+23
| | | | | | | | Per policy, we bump the minor version of every tor-*, arti-* crate on each release. We have updated our MSRV, so we're treating this as a breaking change for our non-(arti/tor)-prefixed crates too.
* Merge branch 'new-criterion' into 'main'Alexander Hansen Færøy2025-08-281-2/+2
|\ | | | | | | | | | | | | Upgrade to criterion 0.7 Closes #2026 See merge request tpo/core/arti!3199
| * Upgrade to criterion 0.7Nick Mathewson2025-08-271-2/+2
| | | | | | | | | | | | Closes #2026. We can do this now that criterion-cycles-per-byte has also upgraded.
* | proto: Move TunnelId to a separate, shared module (fmt).Gabriela Moldovan2025-08-286-6/+6
| |
* | proto: Move TunnelId to a separate, shared module.Gabriela Moldovan2025-08-2810-58/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | The `TunnelId*` types will be reused in the relay reactor (exit relays need to have the concept of a "tunnel ID" because of conflux). Now the `relay::reactor` module only has a single import from `client` (for the `unwrap_or_shutdown` helper, which we should be able to remove soon). From now, we will avoid importing anything from `client` in the `relay` module, and instead prefer refactoring the code as needed (to pull the implementation-agnostic parts outside of `client`). This commit has no functional changes, just code motion.
* | proto: Add a circuit module shared between client and relay impls.Gabriela Moldovan2025-08-2820-34/+41
| | | | | | | | | | | | | | This is just code motion (I suggest reviewing with `--color-moved`). This also moves the implementation-agnostic parts from `tor_proto::client::circuit` to a new `tor_proto::circuit` module.
* | Merge branch 'relay-chan-msg' into 'main'gabi-2502025-08-281-31/+72
|\ \ | |/ |/| | | | | proto: Add a new RelayCircChanMsg message subclass. See merge request tpo/core/arti!3198
| * proto: Avoid referring to restricted ChanMsgs as "subclasses".Gabriela Moldovan2025-08-281-5/+5
| |
| * proto: Add a new RelayCircChanMsg message subclass.Gabriela Moldovan2025-08-281-0/+43
| | | | | | | | | | This will be used to restrict the types of messages that can be sent on the relay-specific channels.
| * proto: Derive ChanMsgSubclass for CreateResponse, ClientCircChanMsg.Gabriela Moldovan2025-08-271-32/+5
| | | | | | | | | | This enables us to remove the open-coded implementations in favor of the derived version.
| * proto: Add d-d macro for creating AnyChanMsg subclasses.Gabriela Moldovan2025-08-271-1/+26
| | | | | | | | | | | | The code for generating these is repetitive (see `CreateResponse` and `ClientChanMsg`), and we will soon need a `RelayChanMsg` type too, so now is a good time to introduce a helper for generating the boilerplate.
* | tor-proto: don't allow consecutive XOFF messagesSteven Engler2025-08-271-1/+14
|/
* proto: Only allow VERSIONS cell for the new handshake stateDavid Goulet2025-08-272-51/+20
| | | | | | | | | Due to this, it is not possible to get a VPADDING before because it requires a link protocol version to decideon the encoding: https://gitlab.torproject.org/tpo/core/torspec/-/issues/366 Signed-off-by: David Goulet <[email protected]>
* Merge branch 'arti-p112-docs' into 'main'David Goulet2025-08-213-0/+40
|\ | | | | | | | | proto: tweak docs to say where the prop349 checks are implemented See merge request tpo/core/arti!3171
| * proto: Indent line in docs to satisfy clippy.Gabriela Moldovan2025-08-211-1/+1
| |
| * proto: Add prop349 note about the resolve stream handler.Gabriela Moldovan2025-08-201-0/+14
| |
| * proto: Document how handle_meta_cell can cause circuit teardown.Gabriela Moldovan2025-08-201-0/+14
| |
| * proto: Add docs about the lifecycle of MetaCellHandlers.Gabriela Moldovan2025-08-201-0/+12
| |
* | proto: Remove the AUTHORIZE as a parsable cellDavid Goulet2025-08-213-24/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | The AUTHORIZE cell command is simply reserved but not defined. The tor specification, at this point in time, is allowing such cell before the handshake starts but it is very unclear on what ordering is allowed nor how many can are allowed. C-tor silents drop them like VPADDING and so clearly unused. Instead of dealing with it, simply remove its support but keeping its reserved number. Signed-off-by: David Goulet <[email protected]>
* | proto: Add a channel handler comment and a fixDavid Goulet2025-08-211-3/+8
| | | | | | | | Signed-off-by: David Goulet <[email protected]>
* | proto: Return AUTHORIZE, VPADDING and VERSIONS at handshakeDavid Goulet2025-08-212-24/+65
| | | | | | | | | | | | | | | | When starting a handshake, we were only expecting a VERSIONS which is not what the protocol say. An AUTHORIZE and VPADDING can arrive before a VERSIONS. Signed-off-by: David Goulet <[email protected]>
* | proto: Allow padding in all channel message setsDavid Goulet2025-08-211-3/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | First of all, VPADDING has been added in link protocol version 3 so it was missing from v4. Second, after closely looking at C-tor and the spec, it appears that we allow VPADDING at any point on a channel which should simply be silently dropped. Any number in any order. Third, couple sets were missing the PADDING cell which is only allowed on an open channel. Signed-off-by: David Goulet <[email protected]>
* | tor-proto: simplify some match statementsSteven Engler2025-08-201-46/+26
| |
* | proto: Change (crate) to (super) for all objects in msg.rsDavid Goulet2025-08-201-25/+25
| | | | | | | | Signed-off-by: David Goulet <[email protected]>
* | proto: Cleanup allow(unused)David Goulet2025-08-202-4/+0
| | | | | | | | Signed-off-by: David Goulet <[email protected]>