mcginty/snow
mcginty/snow has 1,120 GitHub stars and 152 forks. GitHot measured 0 stars in 24 hours and +3 in 7 days. Last checked 2026-11-13 05:18 UTC. Last push 2026-07-06.
측정된 스타 증가
- in 24h
- 0
- in 7 days
- +3
- in 15 days
- 기록 수집 중
- in 1 month
- 기록 수집 중
서로 겹치는 기간의 순증가량이며 일별 합계가 아닙니다. 측정값이 없으면 비워 둡니다. 스타는 관심도를 나타내며 품질을 보장하지 않습니다.
소개
A Rust implementation of the Noise Protocol Framework
보안README.md
OriginalSnow

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.
Specification
Snow is tracking against Noise spec revision 34,
the latest Noise Protocol version. All features are implemented with the exception of
the fallback modifier
(PRs 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.
Resolver primitives supported
| default | ring | |
|---|---|---|
| CSPRNG | :heavy_check_mark: | :heavy_check_mark: |
| 25519 | :heavy_check_mark: | :heavy_check_mark: |
| 448 | ||
| P-256:checkered_flag: | :heavy_check_mark: | |
| AESGCM | :heavy_check_mark: | :heavy_check_mark: |
| ChaChaPoly | :heavy_check_mark: | :heavy_check_mark: |
| XChaChaPoly:checkered_flag: | :heavy_check_mark: | |
| SHA256 | :heavy_check_mark: | :heavy_check_mark: |
| SHA512 | :heavy_check_mark: | :heavy_check_mark: |
| BLAKE2s | :heavy_check_mark: | |
| BLAKE2b | :heavy_check_mark: | |
| BLAKE3 | :heavy_check_mark: |
[!Note] :checkered_flag: P-256 and XChaChaPoly are not in the official specification of Noise, and thus need to be enabled via the feature flags
use-p256anduse-xchacha20poly1305, respectively.
no_std support and feature selection
Snow can be used in no_std environments if alloc is provided.
By default, Snow uses the standard library, default crypto resolver and a selected collection
of crypto primitives. To use Snow in no_std environments or make other kinds of customized
setups, use Snow with default-features = false. This way you will individually select
the components you wish to use. default-resolver is the only built-in resolver that
currently supports no_std.
To use a custom setup with default-resolver, enable your desired selection of cryptographic primitives:
| Primitive | Feature flag | |
|---|---|---|
| DHs | Curve25519 | use-curve25519 |
| P-256:checkered_flag: | use-p256 |
|
| Ciphers | AES-GCM | use-aes-gcm |
| ChaChaPoly | use-chacha20poly1305 |
|
| XChaChaPoly:checkered_flag: | use-xchacha20poly1305 |
|
| Hashes | SHA-256 | use-sha2 |
| SHA-512 | use-sha2 |
|
| BLAKE2s | use-blake2 |
|
| BLAKE2b | use-blake2 |
|
| BLAKE3:checkered_flag: | use-blake3 |
[!Note] :checkered_flag: XChaChaPoly and P-256 are not in the official specification of Noise, but they are supported by Snow.
Example configurations
Curve25519 + AES-GCM + SHA-2 with standard library features.
default-features = false
features = [
"use-curve25519",
"use-aes-gcm",
"use-sha2",
"std",
]
Curve25519 + ChaChaPoly + BLAKE2 without standard library.
default-features = false
features = [
"use-curve25519",
"use-chacha20poly1305",
"use-blake2",
]
getrandom support
Most crypto implementations supported by default-resolver will require
getrandom.
If your target platform is not directly supported you might have to provide a custom implementation in your crate root. Check out their documentation for details.
License
snow is offered with a dual choice-of-license between:
where you may choose either of these licenses to follow for this work.
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.
관련 프로젝트 살펴보기
trimstray/the-book-of-secret-knowledge
영감을 주는 목록, 매뉴얼, 치트시트, 블로그, 팁, 원라이너, CLI/웹 도구 등을 모은 컬렉션.
258,176 스타Hack-with-Github/Awesome-Hacking
해커, 펜테스터, 보안 연구자를 위한 다양한 Awesome 목록 모음.
125,360 스타swisskyrepo/PayloadsAllTheThings
웹 애플리케이션 보안과 모의 침투 테스트/CTF에 유용한 페이로드 및 우회 방법 목록.
82,649 스타caddyserver/caddy
빠르고 확장 가능한 멀티플랫폼 HTTP/1-2-3 웹 서버이며, 자동 HTTPS를 지원합니다
79,038 스타