#tor #relay #tor-arti #arti

tor-relay-selection

Logic to select Tor relays for specific purposes

13 breaking releases

new 0.30.0 May 1, 2025
0.28.0 Mar 3, 2025
0.25.0 Dec 2, 2024
0.24.0 Oct 31, 2024
0.20.0 Jun 27, 2024

#1717 in Network programming

Download history 1735/week @ 2025-01-11 1281/week @ 2025-01-18 1344/week @ 2025-01-25 1347/week @ 2025-02-01 2763/week @ 2025-02-08 1329/week @ 2025-02-15 1242/week @ 2025-02-22 1497/week @ 2025-03-01 1212/week @ 2025-03-08 1209/week @ 2025-03-15 908/week @ 2025-03-22 1323/week @ 2025-03-29 898/week @ 2025-04-05 2125/week @ 2025-04-12 1792/week @ 2025-04-19 1671/week @ 2025-04-26

6,683 downloads per month
Used in 43 crates (5 directly)

MIT/Apache and maybe LGPL-3.0-only

1.5MB
21K SLoC

tor-relay-selection

Logic to select Tor relays for specific purposes

Overview

The tor-relay-selection crate provides higher-level functions in order to select Tor relays for specific purposes, or check whether they are suitable for those purposes. It wraps lower-level functionality from tor-netdir.

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

Design

Our main types are RelayUsage, RelayExclusion, RelayRestriction, and RelaySelector.

A RelayUsage answers the question "what is this relay for?"

A RelayExclusion excludes one or more relays as having already been selected, or as sharing families with already-selected relays.

A RelayRestriction imposes additional restrictions on a relay.

A RelaySelector is a collection of a usage, an exclusion, and any number of restrictions.

In a RelaySelector, usages and restrictions can be strict or flexible. If we fail to pick a relay, and there are any flexible usages/restrictions, then we remove those usages/restrictions to produce a relaxed selector and we try again.

License: MIT OR Apache-2.0

Dependencies

~23–35MB
~535K SLoC