# 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](https://gitlab.torproject.org/tpo/core/arti/), a project to implement [Tor](https://www.torproject.org/) 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