#tor #download #arti #async

tor-dirmgr

Bootstrap and update an accurate Tor network directory

30 releases (17 breaking)

new 0.17.0 Apr 2, 2024
0.16.0 Mar 4, 2024
0.15.0 Feb 5, 2024
0.13.0 Dec 4, 2023
0.0.0 Jun 24, 2021

#538 in Network programming

Download history 158/week @ 2023-12-11 156/week @ 2023-12-18 129/week @ 2023-12-25 74/week @ 2024-01-01 344/week @ 2024-01-08 389/week @ 2024-01-15 133/week @ 2024-01-22 120/week @ 2024-01-29 238/week @ 2024-02-05 150/week @ 2024-02-12 101/week @ 2024-02-19 492/week @ 2024-02-26 1978/week @ 2024-03-04 612/week @ 2024-03-11 946/week @ 2024-03-18 1472/week @ 2024-03-25

5,042 downloads per month
Used in 13 crates (2 directly)

MIT/Apache

4.5MB
72K SLoC

tor-dirmgr

Code to fetch, store, and update Tor directory information.

Overview

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

In its current design, Tor requires a set of up-to-date authenticated directory documents in order to build multi-hop anonymized circuits through the network.

This directory manager crate is responsible for figuring out which directory information we lack, downloading what we're missing, and keeping a cache of it on disk.

Compile-time features

  • mmap (default) -- Use memory mapping to reduce the memory load for reading large directory objects from disk.

  • routerdesc -- (Incomplete) support for downloading and storing router descriptors.

  • compression (default) -- Build support for downloading compressed documents. Requires a C compiler.

  • bridge-client: Provide APIs used to fetch and use bridge information.

  • full -- Enable all features above.

Non-additive features

  • static -- Try to link with a static copy of sqlite3.

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-api: Add additional non-stable APIs to our public interfaces.

  • dirfilter: enable an experimental mechanism to modify incoming directory information before it is used.

  • experimental: Enable all the above experimental features.

[^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

~61MB
~1M SLoC