rust crate providing Sphinx packet cryptography
Clone or download
Pull request Compare This branch is 11 commits ahead of applied-mixnetworks:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches
src
tests
.gitignore
.travis.yml
Cargo.toml
LICENSE
README.md

README.md

rust-sphinxcrypto

This crate provides a concrete parameterization of the Sphinx cryptographic packet format and follows this "Sphinx Mix Network Cryptographic Packet Format Specification" document:

https://github.com/katzenpost/docs/blob/master/specs/sphinx.rst

Sphinx has the following features:

  • Single Use Reply Blocks
  • per hop bitwise unlinkability
  • indistinguishable replies
  • hidden the path length
  • hidden the relay position
  • tagging attack detection
  • reply attack detection

Read the Sphinx paper, Sphinx: A Compact and Provably Secure Mix Format by George Danezis and Ian Goldberg. See https://cypherpunks.ca/~iang/pubs/Sphinx_Oakland09.pdf

warning

This code has not been formally audited by a cryptographer. It therefore should not be considered safe or correct. Use it at your own risk!

details

The currently implemented Sphinx cryptographic parameterization is:

  • EXP(X, Y) - X25519
  • MAC(K, M), H(M) - Blake2b
  • S(K, IV) - Chacha20
  • KDF(SALT, IKM) - HKDF Sha256
  • SPRP_Encrypt(K, M)/SPRP_Decrypt(K, M) - AEZ

The Sphinx packet geometry is parameterized in the constants submodule.

Usage

To import sphinxcrypto, add the following to the dependencies section of your project's Cargo.toml:

sphinxcrypto = "^0.0.13"

Then import the crate as:

extern crate sphinxcrypto;

acknowledgments

This library is a Rust language port of Yawning's Katzenpost Sphinx implementation:

https://github.com/katzenpost/core/tree/master/sphinx

Thanks to Jeff Burdges for helping me with some of my rust problems.

license

GNU AFFERO GENERAL PUBLIC LICENSE