An implementation of the Noise Protocol by Trevor Perrin that is designed to be Hard To Fuck Up™.
See the documentation at https://docs.rs/snow.
🔥 This library is in the state of preview - do everyone a favor and only use this for fun or criticizing the author's code for now.
Snow is currently tracking and working on fully implementing the revision 32 specification.
pskN
modifierfallback
modifierCryptographic providers are swappable through NoiseBuilder::with_provider()
, but by default it chooses select, artisanal
pure-Rust implementations (see Cargo.toml
for a quick overview).
If you enable the ring-accelerated
feature, Snow will default to choosing ring
's much faster crypto implementations when supported.
If you enable the ring-resolver
feature, Snow will include a ring_wrapper module as well as a RingAcceleratedResolver
available to be used with NoiseBuilder::with_resolver()
.
See examples/simple.rs
for a more complete TCP client/server example.
```rust let noise = NoiseBuilder::new("NoiseNNChaChaPolyBLAKE2s".parse().unwrap()) .buildinitiator() .unwrap();
let mut buf = [0u8; 65535];
// write first handshake message noise.write_message(&[0u8; 0], &mut buf).unwrap();
// receive response message let incoming = receivemessagefromthemysteriousether(); noise.readmessage(&incoming, &mut buf).unwrap();
// complete handshake, and transition the state machine into transport mode let noise = noise.intotransportmode(); ```
Work in progress. Unreviewed. Unaudited. All APIs are unstable. Don't use for security critical purposes. Side effects may include nausea, heart palpatations, yolocryptosis, and permanent sexual dysfunction.