Set of libraries for privacy-preserving networking & internet applications written in rust. Supports mix networks (Tor, I2P, Nym), proxies, end-to-end encryption without central authorities/PKI (Noise-based encryption protocols like lightning wire protocol, NTLS etc).
The library provides three main components, structured as modules:
- Network addresses (sub-crate
cypheraddr
), which allow simple use of- Tor, Nym, I2P and other mix networks and SOCKS proxies
- P2P addresses with node public keys
- May be used in a way that prevents using DNS names (outside mixnet scope).
- Noise protocol framework (sub-crate
noise-framework
) for end-to-end encrypted network communications. - SOCKS5 client (sub-crate
socks5-client
) for accessing Tor and other mixnets via proxy.
All the components has a minimal set of non-optional dependencies and short compile times. For instance, SOCKS5 proxy and cyphernet addresses both have zero non-optional dependencies.
The library tries to minimize number of dependencies. Most of its functionality is available via non-default features, like:
noise
: support for noise protocols;mixnets
: supports for mixnet network addresses, includingtor
,nym
,i2p
(may require additional crypto libraries for parsing public keys);serde
: encoding for addresses types;dns
: enable use of DNS names alongside IP addresses and mixnet names.
Network addresses provided by the library include the following types:
InetHost
- IP addr or DNS nameHostName
- IP, DNS, Tor, I2P, Nym host name (no port or proxy information)NetAddr
- any type of host name + port informationPartialAddr
- any type of host name + optional port, which defaults to generic const if not providedPeerAddr
- any of the above addresses + node public key for authenticationProxiedHost
- host name + proxy (there are IP/DNS w/o proxy and with proxy)ProxiedAddr
- any of the above addresses + proxy (thus IP/DNS is always proxied)
Documentation
API reference documentation for the library can be accessed at https://docs.rs/cyphernet/.
About cyphernet
Cyphernet is a conceptual approach for a privacy-preserving networking, based on the following stack of layers: