7 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2022年5月20日 |
---|---|
0.3.1 | 2022年1月14日 |
0.2.0 | 2022年1月3日 |
0.1.3 | 2021年12月25日 |
#1172 in 密码学
每月下载 3,179 次
用于 2 crates
32KB
690 行
雪暴
基于 Noise 协议 和 snow 的 Rust 异步流/数据包的极简加密协议。
快速入门
雪暴允许您为任何实现了 AsyncRead + AsyncWrite + Unpin
的流提供安全性。例如,Tokio 中的 TcpStream
。注意,底层连接需要是可靠的。
创建密钥对
// Noise protocol params, see: http://www.noiseprotocol.org/noise.html#protocol-names-and-modifiers
// Use `KK` to enable bidirectional identity verification
static PATTERN: &str = "Noise_KK_25519_ChaChaPoly_BLAKE2s";
// Generate a private / public key pair
let key_pair = snowstorm::Builder::new(PATTERN.parse()?).generate_keypair().unwrap()
客户端
// Connect to the peer
let stream = TcpStream::connect("127.0.0.1:12345").await?;
// The client should build an initiator to launch the handshake process
let initiator = snowstorm::Builder::new(PATTERN.parse()?)
.local_private_key(local_private_key)
.remote_public_key(remote_public_key)
.build_initiator()?;
// Start handshaking
let mut secured_stream = NoiseStream::handshake(stream, initiator).await?;
// A secured stream `NoiseStream<T>` will be return once the handshake is done
secured_stream.write_all(b"hello world").await?;
服务器
// Accept a `TcpStream` from the listener
let listener = TcpListener::bind("127.0.0.1:12345").await?;
let (stream, _) = listener.accept().await?;
// The server needs a responder to handle handshake reqeusts from clients
let responder = snowstorm::Builder::new(PATTERN.parse()?)
.local_private_key(local_private_key)
.remote_public_key(remote_public_key)
.build_responder()?;
// Start handshaking
let mut secured_stream = NoiseStream::handshake(stream, responder).await?;
let mut buf = [0; 1024];
secured_stream.read(&mut buf).await?;
规范
流
[ length
(2 字节,小端) ] [ noise message
(length
字节) ]
数据包
[ nonce
(8 字节) ] [ noise message
]
待办事项
- UDP 支持
- 文档
- 基准测试
- async-std 支持
依赖关系
~3.5–5.5MB
~91K SLoC