<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mirrors/arti.git/crates/tor-proto/src/client/channel/handshake.rs, branch arti-v2.2.0</title>
<subtitle>mirror of https://gitlab.torproject.org/tpo/core/arti
</subtitle>
<id>http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v2.2.0</id>
<link rel='self' href='http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v2.2.0'/>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/'/>
<updated>2026-03-26T19:20:16Z</updated>
<entry>
<title>tor-proto: Port to web-time-compat</title>
<updated>2026-03-26T19:20:16Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2026-03-26T14:33:04Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=11f365738ade6ba75eedee83d7d19f8877da7d65'/>
<id>urn:sha1:11f365738ade6ba75eedee83d7d19f8877da7d65</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tor-proto: fix the relay initiator's SLOG digest</title>
<updated>2026-03-19T20:31:09Z</updated>
<author>
<name>Steven Engler</name>
<email>opara@torproject.org</email>
</author>
<published>2026-03-05T00:13:11Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=0515e9b8c93126a60d824a54c710bb79e298a62b'/>
<id>urn:sha1:0515e9b8c93126a60d824a54c710bb79e298a62b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>proto: Set the link protocol outside the recv VERSIONS helper</title>
<updated>2026-03-19T20:31:09Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-03-11T17:11:16Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=24413da7004f4a89b4e9afde4036398693cce52d'/>
<id>urn:sha1:24413da7004f4a89b4e9afde4036398693cce52d</id>
<content type='text'>
It used to work for an initiator to set the link protocol once a
VERSIONS is received because initiator send their VERSIONS before. This
failed with responders because a responder channel sends their VERSIONS
after receiving one from the initiator.

This reverse logic means that the channel cell handler was transitionned
to the Handshake state before a responder was able to send a VERSIONS
cell leading to a failure because VERSIONS cell aren't allowed at the
Handshake state.

To fix this, the send/recv or recv/send is now explicit per channel type
and once this is done and successful, the link protocol is set. A
`set_link_protocol()` is added to the ChannelBaseHandshake trait so it
can be used to set the cell handler.

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
<entry>
<title>proto: New UnverifiedInitiatorChannel</title>
<updated>2026-03-19T20:31:09Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-03-04T18:28:44Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=2539784719e15f1e545dd3617f3bdbc4236883c2'/>
<id>urn:sha1:2539784719e15f1e545dd3617f3bdbc4236883c2</id>
<content type='text'>
Both client and relay specialized channel now use it as their inner base
channel so they can use the same common verify() function since it is
the same validation for both.

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
<entry>
<title>proto: Move cert validation per specialized channel</title>
<updated>2026-03-19T20:31:08Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-03-04T17:56:16Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=8507c3b3948c0fb6566b6748fe84eea0039afcd8'/>
<id>urn:sha1:8507c3b3948c0fb6566b6748fe84eea0039afcd8</id>
<content type='text'>
Remove the last part from check_internal() that is specific to an
initiator channel.

At this commit, all three specialized channel do the verify process
within their own verify() function.

The client and relay initiator both look at the TLS cert (code
duplication unfortunately). And the relay responder looks at the
LINK_AUTH cert extracting the peer KP_link_ed key for validation.

The CERTS cell is removed from UnverifiedChannel as it is now only
useful within the verification process which is now specialized.

A series of TODO(relay) is added to point out the current problem and
how to fix them.

The next step is to create an UnverifiedInitiatorChannel that will hold
the verity_tls_cert() function and peer cert information which is only
relevant to an initiator. This will remove code duplication.

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
<entry>
<title>proto: Use RelayIds in a VerifiedChannel</title>
<updated>2026-03-19T20:31:08Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-03-04T16:33:06Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=4958c861bca0b61a60cf33f0f6605788b7b1e4dd'/>
<id>urn:sha1:4958c861bca0b61a60cf33f0f6605788b7b1e4dd</id>
<content type='text'>
In order to pull this off, make
UnverifiedChannel::check_relay_identities() to return a RelayIds that it
builds after checking if they match the peer we were expecting.

This part is moved in this commit so once check_relay_identities()
returns, we are certain of the relay identity validity on both "it
identified properly" and "it is the right expected relay".

This makes it that the check_relay_identities() returns the RelayIds,
the signing key and the RSA id digest (which is needed for
authentication later).

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
<entry>
<title>tor-proto: remove `is_expecting_auth_challenge()`</title>
<updated>2026-03-03T19:57:04Z</updated>
<author>
<name>Steven Engler</name>
<email>opara@torproject.org</email>
</author>
<published>2026-03-02T22:59:33Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=0a58995b58706372c9eb2c142a19551ad04feff0'/>
<id>urn:sha1:0a58995b58706372c9eb2c142a19551ad04feff0</id>
<content type='text'>
The responder always sends an AUTH_CHALLENGE cell.
</content>
</entry>
<entry>
<title>safelog: Rename MaybeSensitive::hidden/visible()</title>
<updated>2026-03-03T15:51:33Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-03-03T14:04:43Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=4a52785b3f48f867c8986cb7b8ff6923c73a2652'/>
<id>urn:sha1:4a52785b3f48f867c8986cb7b8ff6923c73a2652</id>
<content type='text'>
Rename them to respectively sensitive() and not_sensitive().

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
<entry>
<title>proto: Channel handshake minor cleanup</title>
<updated>2026-03-03T15:51:33Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-02-25T16:48:25Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=435eda2513628e4add8c800e5a5ab307c6981fa7'/>
<id>urn:sha1:435eda2513628e4add8c800e5a5ab307c6981fa7</id>
<content type='text'>
To make the code a bit better here. Also, at this commit, the
UnverifiedChannel::finish() and VerifiedChannel::finish() are basically
the exact same.

A refactoring to use a finish() helper would work nicely.

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
<entry>
<title>proto: Setup the channel PeerInfo in the specialized finish()</title>
<updated>2026-03-03T15:51:33Z</updated>
<author>
<name>David Goulet</name>
<email>dgoulet@torproject.org</email>
</author>
<published>2026-02-25T16:34:20Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=daa614ee0bf5a48ef3bfb9e51323ccd8e87d9628'/>
<id>urn:sha1:daa614ee0bf5a48ef3bfb9e51323ccd8e87d9628</id>
<content type='text'>
Every specific types know if the peer is sensitive or not so now the
finish() of each of these channel types builds the right PeerInfo with
MaybeSensitive.

This is passed on the Channel so from that point on, the Channel will
never leak peer data in the logs.

Signed-off-by: David Goulet &lt;dgoulet@torproject.org&gt;
</content>
</entry>
</feed>
