# tor-hsservice

Provide an [onion service](https://community.torproject.org/onion-services/)
on the Tor network.

## Overview

This crate is part of
[Arti](https://gitlab.torproject.org/tpo/core/arti/),
a project to implement [Tor](https://www.torproject.org/) in Rust.

It provides a service-side implementation of the onion service protocol,
which enables Tor clients to provide
a responder-anonymous service on the network.
Other parties can connect to an onion service without learning where it is hosted.

This crate provides a low-level implementation of the onion service protocol
that may not be suitable for typical users.
Most users will instead want to use the `arti` binary
to run an onion service proxy, or use the `TorClient::launch_onion_service` API
in the `arti-client` crate.

## Limitations

This crate is a work in progress.

As of February 2024, there are some features missing that are necessary for
running a secure, private onion service.  Notably these include:

 * Resistance to denial of service attacks
    * Support for proof-of-work checking and validation
    * Detection and response to out-of-memory conditions
 * Vanguard relays for resistance to path discovery
 * Descriptor encryption keys,
   so that only certain clients to connect to the service.
  * Removal of old keys and state information.
    (Currently, the on-disk state will grow slowly but without bound,
    with sensitive information retained indefinitely.)

## Reference

You can learn more about the protocols here as part of the onion services
[Specification](https://spec.torproject.org/rend-spec/index.html).

LICENSE: MIT OR Apache-2.0

When the `hs-pow-full` feature is used, we link with LGPL licensed dependencies.
