Noise-Rust
Implementation of the Noise Protocol Framework in Rust.
Status
Revision 34 is implemented.
Test vectors from cacophony and snow are successfully verified.
Philosophy
- Simple: straightforward implementation, small amount of code, almost no
dependencies, supports
no_std. - Fast: static dispatch, no heap allocation necessary.
- Unopinionated: flexible, primitive API, does not dictate how it should be used.
Documentation
Crates
This repository contains several crates. The noise-protocol crate
contains the abstract implementation of the protocol
framework. Several sibling crates, namely noise-sodiumoxide,
noise-ring and noise-rust-crypto, provide concrete implementations
of the needed crypto primitives. They are wrappers around
sodiumoxide, ring and rust-crypto, respectively.
The following table shows what primitives each of these crates supports:
| X25519 | AES-256-GCM | Chacha20-Poly1305 | SHA-256 | SHA-512 | BLAKE2s | BLAKE2b | |
|---|---|---|---|---|---|---|---|
| ring | ✔ | ✔ | ✔ | ✔ | |||
| sodiumoxide | ✔ | ✔ | ✔ | ✔ | ✔ | ||
| rust-crypto | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
You can also plug in other primitive implementations by implementing the DH,
Cipher and Hash traits.
no_std usage
The noise-protocol crate supports no_std, if default features are
disabled.
The noise-ring crate supports no_std.
License
Unlicense.