Crate tor_circmgr

source ·
Expand description

tor-circmgr

tor-circmgr: circuits through the Tor network on demand.

Overview

This crate is part of Arti, a project to implement Tor in Rust.

In Tor, a circuit is an encrypted multi-hop tunnel over multiple relays. This crate’s purpose, long-term, is to manage a set of circuits for a client. It should construct circuits in response to a client’s needs, and preemptively construct circuits so as to anticipate those needs. If a client request can be satisfied with an existing circuit, it should return that circuit instead of constructing a new one.

Compile-time features

  • specific-relay: Support for connecting to a relay via specifically provided connection instructions, rather than using information from a Tor network directory.

  • full: Enable all features above.

Experimental and unstable features

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

  • experimental-api: Add additional non-stable APIs to our public interfaces.

  • experimental: Enable all the above experimental features.

License: MIT OR Apache-2.0


  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. 

Re-exports

pub use isolation::IsolationToken;

Modules

Facilities to build circuits directly, instead of via a circuit manager.
Types related to stream isolation
Code to construct paths through the Tor network

Structs

A Circuit Manager (CircMgr) manages a set of circuits, returning them when they’re suitable, and launching them if they don’t already exist.
Configuration for circuit timeouts, expiration, and so on.
A stream of SkewEstimate events.
A unique cryptographic identifier for a selected guard or fallback directory.
Rules for building paths over the network.
Configuration for preemptive circuits.
An estimate of how skewed our clock is, plus a summary of why we think so.
A port that we want to connect to as a client.
Set of requested target ports, mostly for use in error reporting

Enums

Represents what we know about the Tor network.
An error returned while looking up or building a circuit
An activity that can succeed or fail, and whose success or failure can be attributed to a guard.

Traits

Configuration for a circuit manager
Configuration for a guard manager

Type Definitions

A Result type as returned from this crate.