arti/crates/tor-linkspec
Nick Mathewson 4841b50c9f Minimize the required version for each dependency.
I found these versions empirically, by using the following process:

First, I used `cargo tree --depth 1 --kind all` to get a list of
every immediate dependency we had.

Then, I used `cargo upgrade --workspace package@version` to change
each dependency to the earliest version with which (in theory) the
current version is semver-compatible.  IOW, if the current version
was 3.2.3, I picked "3".  If the current version was 0.12.8, I
picked "0.12".

Then, I used `cargo +nightly upgrade -Z minimal-versions` to
downgrade Cargo.lock to the minimal listed version for each
dependency.  (I had to override a few packages; see .gitlab-ci.yml
for details).

Finally, I repeatedly increased the version of each of our
dependencies until our code compiled and the tests passed.  Here's
what I found that we need:

anyhow >= 1.0.5: Earlier versions break our hyper example.

async-broadcast >= 0.3.2: Earlier versions fail our tests.

async-compression 0.3.5: Earlier versions handled futures and tokio
    differently.

async-trait >= 0.1.2: Earlier versions are too buggy to compile our
    code.

clap 2.33.0: For Arg::default_value_os().

coarsetime >= 0.1.20: exposed as_ticks() function.

curve25519-dalek >= 3.2: For is_identity().

generic-array 0.14.3: Earlier versions don't implement
    From<&[T; 32]>

httparse >= 1.2: Earlier versions didn't implement Error.

itertools at 0.10.1: For at_most_once.

rusqlite >= 0.26.3: for backward compatibility with older rustc.

serde 1.0.103: Older versions break our code.

serde_json >= 1.0.50: Since we need its Value type to implement Eq.

shellexpand >= 2.1: To avoid a broken dirs crate version.

tokio >= 1.4: For Handle::block_on().

tracing >= 0.1.18: Previously, tracing_core and tracing had separate
    LevelFilter types.

typenum >= 1.12: Compatibility with rust-crypto crates

x25519-dalek >= 1.2.0: For was_contributory().

Closes #275.
2022-01-07 19:08:58 -05:00
..
src extend lints to include 'clippy::all' 2021-12-28 20:15:40 +00:00
Cargo.toml Minimize the required version for each dependency. 2022-01-07 19:08:58 -05:00
README.md Move all crates into a `crates` subdirectory. 2021-08-27 09:53:09 -04:00

README.md

tor-linkspec

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.

License: MIT OR Apache-2.0