All Projects → mcginty → Snow

mcginty / Snow

Licence: other
A Rust implementation of the Noise Protocol Framework

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Snow

Noise
.NET Standard 1.3 implementation of the Noise Protocol Framework (revision 33 of the spec)
Stars: ✭ 124 (-71.56%)
Mutual labels:  noise, cryptography, crypto
Helib
HElib is an open-source software library that implements homomorphic encryption. It supports the BGV scheme with bootstrapping and the Approximate Number CKKS scheme. HElib also includes optimizations for efficient homomorphic evaluation, focusing on effective use of ciphertext packing techniques and on the Gentry-Halevi-Smart optimizations.
Stars: ✭ 2,749 (+530.5%)
Mutual labels:  cryptography, crypto
Orion
Usable, easy and safe pure-Rust crypto
Stars: ✭ 227 (-47.94%)
Mutual labels:  cryptography, crypto
Keys
Key management is hard
Stars: ✭ 733 (+68.12%)
Mutual labels:  noise, cryptography
Wycheproof
Project Wycheproof tests crypto libraries against known attacks.
Stars: ✭ 2,299 (+427.29%)
Mutual labels:  cryptography, crypto
Nsec
A modern and easy-to-use cryptographic library for .NET Core based on libsodium
Stars: ✭ 217 (-50.23%)
Mutual labels:  cryptography, crypto
Cryptopp
free C++ class library of cryptographic schemes
Stars: ✭ 3,150 (+622.48%)
Mutual labels:  cryptography, crypto
Memguard
Secure software enclave for storage of sensitive information in memory.
Stars: ✭ 2,036 (+366.97%)
Mutual labels:  cryptography, crypto
Disco
a protocol to encrypt communications and a cryptographic library based on Disco
Stars: ✭ 178 (-59.17%)
Mutual labels:  noise, crypto
WeDPR-Lab-Java-SDK
Java SDK of WeDPR-Lab-Core; WeDPR即时可用场景式隐私保护高效解决方案核心算法组件通用Java SDK
Stars: ✭ 18 (-95.87%)
Mutual labels:  cryptography, crypto
S2n Tls
s2n : an implementation of the TLS/SSL protocols
Stars: ✭ 4,029 (+824.08%)
Mutual labels:  cryptography, crypto
Gun
An open source cybersecurity protocol for syncing decentralized graph data.
Stars: ✭ 15,172 (+3379.82%)
Mutual labels:  cryptography, crypto
Pkcs11interop
Managed .NET wrapper for unmanaged PKCS#11 libraries
Stars: ✭ 170 (-61.01%)
Mutual labels:  cryptography, crypto
Armadillo
A shared preference implementation for confidential data in Android. Per default uses AES-GCM, BCrypt and HKDF as cryptographic primitives. Uses the concept of device fingerprinting combined with optional user provided passwords and strong password hashes.
Stars: ✭ 226 (-48.17%)
Mutual labels:  cryptography, crypto
Pwnshop
Exploit Development, Reverse Engineering & Cryptography
Stars: ✭ 167 (-61.7%)
Mutual labels:  cryptography, crypto
Libhydrogen
A lightweight, secure, easy-to-use crypto library suitable for constrained environments.
Stars: ✭ 247 (-43.35%)
Mutual labels:  cryptography, crypto
Simon Speck
The SIMON and SPECK families of lightweight block ciphers. #nsacyber
Stars: ✭ 146 (-66.51%)
Mutual labels:  cryptography, crypto
Branca
🔑 Secure alternative to JWT. Authenticated Encrypted API Tokens for Go.
Stars: ✭ 147 (-66.28%)
Mutual labels:  cryptography, crypto
Awesome Cryptography
A curated list of cryptography resources and links.
Stars: ✭ 3,475 (+697.02%)
Mutual labels:  cryptography, crypto
Privatebin
A minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bits AES.
Stars: ✭ 3,622 (+730.73%)
Mutual labels:  cryptography, crypto

Snow

Crates.io Docs.rs Build Status dependency status

totally official snow logo

An implementation of Trevor Perrin's Noise Protocol that is designed to be Hard To Fuck Up™.

🔥 Warning 🔥 This library has not received any formal audit.

What's it look like?

See examples/simple.rs for a more complete TCP client/server example.

let mut noise = snow::Builder::new("Noise_NN_25519_ChaChaPoly_BLAKE2s".parse()?)
                    .build_initiator()?;

let mut buf = [0u8; 65535];

// write first handshake message
noise.write_message(&[], &mut buf)?;

// receive response message
let incoming = receive_message_from_the_mysterious_ether();
noise.read_message(&incoming, &mut buf)?;

// complete handshake, and transition the state machine into transport mode
let mut noise = noise.into_transport_mode()?;

See the full documentation at https://docs.rs/snow.

Implemented

Snow is currently tracking against Noise spec revision 34.

However, a not all features have been implemented yet (pull requests welcome):

Crypto

Cryptographic providers are swappable through Builder::with_resolver(), but by default it chooses select, artisanal pure-Rust implementations (see Cargo.toml for a quick overview).

Other Providers

ring

ring is a crypto library based off of BoringSSL and is significantly faster than most of the pure-Rust implementations.

If you enable the ring-resolver feature, Snow will include a resolvers::ring module as well as a RingAcceleratedResolver available to be used with Builder::with_resolver().

If you enable the ring-accelerated feature, Snow will default to choosing ring's crypto implementations when available.

libsodium

libsodium is a fork of NaCl focused on improved usability and regular maintenance.

Compatibility caveat

libsodium blacklists a set of low-order points that it deems unsafe because they would output an all-zeroes result.

Noise does not validate Curve25519 points, so if another Noise implementation provides an all-zero (or another low-order) public key for some reason (be it testing, or a real life foot-shot), if you use the libsodium backend of snow, it will error in a way that's not fully compatible with the specification.

Resolver primitives supported

default ring libsodium
CSPRNG
25519
448
AESGCM
ChaChaPoly
SHA256
SHA512
BLAKE2s
BLAKE2b

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].