Stream the following services https://gitlab.torproject.org/tpo/core/arti.git
Go to file
Lennart Kloock 5c075be5c4
Fix warning sign emoji in tor-client doc
2021-08-12 16:01:22 +02:00
.gitlab/issue_templates Adds issue creation templates for bugs, features, proposals and documentation. 2020-12-17 13:57:06 -03:00
arti Make MAX_CIRC_DIRTINESS configurable. 2021-08-10 09:37:38 -04:00
arti-corpora@69223345c2 Update arti-corpora to latest. 2021-08-06 09:45:52 -04:00
caret Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
doc Fix typos and other spelling mistakes 2021-07-31 18:02:35 +02:00
maint Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
retry-error Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-bytes Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-cell Add brackets and remove colon for better consistency 2021-08-12 15:06:28 +02:00
tor-cert Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-chanmgr Fix typos in tor-chanmgr 2021-08-12 15:30:32 +02:00
tor-checkable Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-circmgr Reorder doc headlines in tor-circmgr 2021-08-12 15:36:34 +02:00
tor-client Fix warning sign emoji in tor-client doc 2021-08-12 16:01:22 +02:00
tor-config Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-consdiff Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-dirclient Merge remote-tracking branch 'origin/mr/51' 2021-08-09 16:00:53 -04:00
tor-dirmgr Update state.rs info message 2021-08-09 20:08:07 +00:00
tor-linkspec Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-llcrypto Add unnecessary_wraps to the big warning list. 2021-08-06 16:20:37 -04:00
tor-netdir Use real network parameters to set unused-circ timeouts. 2021-08-10 10:46:31 -04:00
tor-netdoc Rerun readmes.sh 2021-08-11 20:10:36 +02:00
tor-persist Don't try to lock an already-locked lockfile. 2021-08-09 10:06:41 -04:00
tor-proto Add brackets and remove colon for better consistency 2021-08-12 15:06:28 +02:00
tor-protover Fix typos in tor-protover README.md and docs 2021-08-11 19:10:56 +02:00
tor-rtcompat Sync docs with readmes 2021-08-11 20:08:24 +02:00
tor-rtmock Rerun readmes.sh 2021-08-11 20:10:36 +02:00
tor-socksproto Fix code snippet in tor-socksproto README.md and docs 2021-08-11 19:33:34 +02:00
tor-units Rerun readmes.sh 2021-08-11 20:10:36 +02:00
.gitignore Add a script with the command I've been using for coverage 2021-05-26 10:46:17 -04:00
.gitlab-ci.yml Use cargo audit with "-D warnings". 2021-07-21 09:33:32 -04:00
.gitmodules Update arti-corpora to latest. 2021-08-06 09:45:52 -04:00
CODE_OF_CONDUCT CoC: Stop saying that Arti is not official. 2021-06-17 07:50:38 -04:00
CONTRIBUTING.md Light edits on CONTRIBUTING.md 2021-08-09 12:42:10 -04:00
Cargo.toml Initial persistent-state-manager code. 2021-08-06 16:39:50 -04:00
README.md Run "typos" to fix a few more typos. 2021-06-17 18:45:05 -04:00
WANT_FROM_OTHER_CRATES adjust WANT_FROM_OTHER_CRATES 2021-07-21 13:11:24 -04:00

README.md

Arti: reimplementing Tor in Rust

Arti is a project to produce an embeddable, production-quality implementation of the Tor anonymity protocols in the Rust programming language.

Arti is not ready for production use; see below for more information.

Why rewrite Tor in Rust?

Rust is more secure than C. Despite our efforts, it's all too simple to mess up when using a language that does not enforce memory safety. We estimate that at least half of our tracked security vulnerabilities would have been impossible in Rust, and many of the others would have been very unlikely.

Rust enables faster development than C. Because of Rust's expressiveness and strong guarantees, we've found that we can be far more efficient and confident writing code in Rust. We hope that in the long run this will improve the pace of our software development.

Arti is more flexible than our C tor implementation. Unlike our C tor, which was designed as SOCKS proxy originally, and whose integration features were later "bolted on", Arti is designed from the ground up to work as a modular, embeddable library that other applications can use.

Arti is cleaner than our C tor implementation. Although we've tried to develop C tor well, we've learned a lot since we started it back in 2002. There are lots of places in the current C codebase where complicated "spaghetti" relationships between different pieces of code make our software needlessly hard to understand and improve.

Current status

Arti is a work-in-progress. It can connect to the Tor network, bootstrap a view of the Tor directory, and make anonymized connections over the network.

Arti is currently missing some features that are required for good privacy, and is therefore vulnerable to a lot of attacks that do not yet affect the Tor network. Therefore, you should probably not use Arti in production if you want any kind of privacy at all.

There are absolutely no guarantees about API stability yet: if you write code that uses Arti, you should expect that

Trying it out today

Arti can act as a SOCKS proxy that uses the Tor network. (Not a very secure or anonymous one!) It knows how to download directory information and how to load it from cache, but it doesn't try to download more than one directory per run.

To try it out, run the demo program in arti as follows. It will open a SOCKS proxy on port 9150.

% cargo run --release

Again, do not use this program yet if you need anonymity, privacy, security, or stability.

Helping out

Have a look at our contributor guidelines.

Roadmap

Thanks to a generous grant from Zcash Open Major Grants (ZOMG), we're able to devote some significant time to Arti in the years 2021-2022. Here is our rough set of plans for what we hope to deliver when.

The goal times below are complete imagination, based on broad assumptions about developer availability. Please don't take them too seriously until we can get our project manager to sign off on them.

  • Arti 0.0.1: Minimal Secure Client (Goal: end of October 2021??)

    • Target audience: developers
    • Guard support
    • Stream Isolation
    • High test coverage
    • Draft APIs for basic usage
    • Code cleanups
    • and more...
  • Arti 0.1.0: Okay for experimental embedding (Goal: Mid March, 2022??)

    • Target audience: beta testers
    • Performance: preemptive circuit construction
    • Performance: circuit build timeout inference
    • API support for embedding
    • API support for status reporting
    • Correct timeout behavior
    • and more...
  • Arti 1.0.0: Initial stable release (Goal: Mid September, 2022??)

    • Target audience: initial users
    • Security audit
    • Stable API
    • Stable CLI
    • Stable configuration format
    • Automatic detection and response of more kinds of network problems
    • More performance work
    • and more...
  • Arti 1.1.0: Anti-censorship features (Goal: End of october, 2022?)

    • Target audience: censored users
    • Bridges
    • Pluggable transports
    • and more...?
  • Arti 1.2.0: Onion service support (not funded, timeframe TBD)

  • Arti 2.0.0: Feature parity with C tor as a client (not funded, timeframe TBD)

  • Arti ?.?.?: Relay support

How can I help out?

See CONTRIBUTING.md for a few ideas for how to get started.

Licence

This code is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

(The above notice, or something like it, seems to be pretty standard in Rust projects, so I'm using it here too. This instance of it is copied from the RustCrypto project's README.md file.)