#tor #relay #ip-address #arti #identity #link #specifier

tor-linkspec

Parts of the Tor protocol that indicate specific relays on the network

35 releases (20 breaking)

0.25.0 Dec 2, 2024
0.24.0 Oct 31, 2024
0.23.0 Sep 30, 2024
0.20.0 Jun 27, 2024
0.0.0 Jun 24, 2021

#973 in Network programming

Download history 1511/week @ 2024-08-21 1511/week @ 2024-08-28 1849/week @ 2024-09-04 1071/week @ 2024-09-11 1299/week @ 2024-09-18 1896/week @ 2024-09-25 1215/week @ 2024-10-02 900/week @ 2024-10-09 1038/week @ 2024-10-16 1108/week @ 2024-10-23 2239/week @ 2024-10-30 1077/week @ 2024-11-06 1997/week @ 2024-11-13 2002/week @ 2024-11-20 2297/week @ 2024-11-27 1463/week @ 2024-12-04

7,860 downloads per month
Used in 46 crates (16 directly)

MIT/Apache

1MB
16K SLoC

tor-linkspec

Descriptions of Tor relays, as used to connect to them.

Overview

The tor-linkspec crate provides traits and data structures that describe how to connect to Tor relays.

When describing the location of a Tor relay on the network, the Tor protocol uses a set of "link specifiers", each of which corresponds to a single aspect of the relay's location or identity—such as its IP address and port, its Ed25519 identity key, its (legacy) RSA identity fingerprint, or so on. This crate's LinkSpec type encodes these structures.

When a client is building a circuit through the Tor network, it needs to know certain information about the relays in that circuit. This crate's ChanTarget and CircTarget traits represent objects that describe a relay on the network that a client can use as the first hop, or as any hop, in a circuit.

This crate is part of Arti, a project to implement Tor in Rust. Several other crates in Arti depend on it. You will probably not need this crate yourself unless you are interacting with the Tor protocol at a fairly low level.

tor-linkspec is a separate crate so that it can be used by other crates that expose link specifiers and by crates that consume them.

Future work

TODO: Possibly we should rename this crate. "Linkspec" is a pretty esoteric term in the Tor protocols.

TODO: Possibly the link specifiers and the *Target traits belong in different crates.

Compile-time features

  • pt-client -- Build with enhanced data types to support pluggable transports.

  • full -- Build with all the features above.

Experimental and unstable features

Note that the APIs enabled by these features are NOT covered by semantic versioning[^1] guarantees: we might break them or remove them between patch versions.

  • experimental -- Build with all experimental features above. (Currently, there are no experimental features in this crate, but there may be in the future.)

[^1]: Remember, semantic versioning is what makes various cargo features work reliably. To be explicit: if you want cargo update to only make safe changes, then you cannot enable these features.

License: MIT OR Apache-2.0

Dependencies

~19–30MB
~443K SLoC