#noise #protocols #crypto

snow

A pure-rust implementation of the Noise Protocol Framework

53 个版本

0.9.6 2024年1月26日
0.9.4 2023年11月11日
0.9.2 2023年3月13日
0.9.0 2022年2月3日
0.0.1-preview.102017年3月21日

#17 in 加密学

Download history 102262/week @ 2024-04-15 102615/week @ 2024-04-22 92639/week @ 2024-04-29 89657/week @ 2024-05-06 108103/week @ 2024-05-13 104488/week @ 2024-05-20 113709/week @ 2024-05-27 114883/week @ 2024-06-03 95198/week @ 2024-06-10 91937/week @ 2024-06-17 108284/week @ 2024-06-24 89824/week @ 2024-07-01 87697/week @ 2024-07-08 97819/week @ 2024-07-15 109286/week @ 2024-07-22 96899/week @ 2024-07-29

394,322 个月下载量
377 个 crate 中使用 (直接使用 42 个)

Apache-2.0 OR MIT

615KB
3.5K SLoC

Snow

Crates.io Docs.rs Build Status dependency status

totally official snow logo

Snow 是 Trevor Perrin 的 Noise 协议 的实现,旨在设计为“难以搞砸”。

🔥 警告 🔥 此库尚未经过任何正式审计。

它看起来像什么?

请参阅 examples/simple.rs 以获取更完整的 TCP 客户端/服务器示例。

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()?;

请参阅完整的文档:https://docs.rs/snow

实现

Snow 目前正在跟踪 Noise 规范修订版 34

然而,并非所有功能都已实现(欢迎 pull request)

加密

通过 Builder::with_resolver() 可在加密提供者之间进行切换,但默认情况下它会选择一些手工制作的纯 Rust 实现(请参阅 Cargo.toml 以快速了解概述)。

其他提供者

ring

ring 是一个基于 BoringSSL 的加密库,并且比大多数纯 Rust 实现要快得多。

如果您启用 ring-resolver 功能,Snow 将包括一个 resolvers::ring 模块以及一个可用的 RingAcceleratedResolver,可以与 Builder::with_resolver() 一起使用。

如果您启用 ring-accelerated 功能,Snow 在可用的情况下将默认选择 ring 的加密实现。

支持的解析器原语

默认 ring
CSPRNG
25519
448
AESGCM
ChaChaPoly
SHA256
SHA512
BLAKE2s
BLAKE2b

许可证

根据您的选择,许可协议为

贡献

除非您明确声明,否则您有意提交以包含在您的工作中的任何贡献,根据 Apache-2.0 许可证定义,均应如上双许可,而无需任何其他条款或条件。

依赖关系

~0.1–18MB
~229K SLoC