# mix_link
[![](https://travis-ci.org/sphinx-cryptography/mix_link.png?branch=master)](https://www.travis-ci.org/sphinx-cryptography/mix_link) [![](https://img.shields.io/crates/v/mix_link.svg)](https://crates.io/crates/mix_link) [![](https://docs.rs/mix_link/badge.svg)](https://docs.rs/mix_link/)
This crate provides a Noise Protocol Framework based cryptographic
link layer wire protocol for constructing mix networks.
# warning
This code has not been formally audited. Use it at your own risk!
# details
This wire protocol is designed to construct mix networks.
You can read the design specification document here:
* https://github.com/katzenpost/docs/blob/master/specs/wire-protocol.rst
However note that I've change the prologue value (our protocol version number) to 1
instead of 0 to differentiate it from the older version which used NewHope Simple.
We now use the newer KEM, Kyber.
This cryptographic link layer protocol uses ``Noise_XXhfs_25519+Kyber1024_ChaChaPoly_BLAKE2b``.
You can read about the XX handshake pattern here in the Noise Protocol specification document:
* http://noiseprotocol.org/noise.html
However you'll also want to understand our hybrid forward secrecy protocol modification
using the Kyber post-quantum key encapsulation mechanism. Please see "KEM-based Hybrid Forward Secrecy for Noise":
* https://github.com/noiseprotocol/noise_hfs_spec/blob/master/output/noise_hfs.pdf
# Usage
To import `mix_link`, add the following to the dependencies section of
your project's `Cargo.toml`:
```toml
mix_link = "^0.1.0"
```
Then import the crate as:
```rust,no_run
extern crate mix_link;
```
# acknowledgments
Thanks to Yawning Angel for the design of this wire protocol.
Thanks to Daan Sprenkels for implementing Kyber1024 HFS for Snow.
# license
GNU AFFERO GENERAL PUBLIC LICENSE