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 path length
- hidden 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:
= "^0.0.15"
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
