1个不稳定版本
0.1.1 | 2021年5月26日 |
---|---|
0.1.0 |
|
#1914 in 加密学
36KB
420 代码行
PrivateBox
PrivateBox提供了一个轻量级且易于使用的API来加密您的数据。它的目的是做一件事情,即围绕RustCrypto XChaCha20Poly1305 AEAD加密算法提供一个简单的封装和验证器。
PrivateBox受到Cocoon的启发/基于其构建。PrivateBox旨在成为一个更小的API,具有更大的灵活性,支持关联数据,并使用XChaCha进行随机非ces。
生成密钥
示例仅使用数组生成密钥以减少代码重复。然而,密钥应该是随机的或伪随机的(例如,从密码等东西派生)。
示例
use rand_core::{OsRng, RngCore};
let mut key = [0u8; 32];
OsRng.fill_bytes(&mut key);
分离加密/解密
分离加密/解密方法就地计算以避免重新分配。它返回一个前缀(nonce和标签),该前缀用于解密。这对于no_std
构建来说很合适,当您想避免数据重新分配并想自行管理序列化时。
示例
let mut privatebox = PrivateBox::new(&[1;32], OsRng);
let mut message = *b"secret data";
let assoc_data = *b"plain text";
let detached_prefix = privatebox.encrypt_detached(&mut message, &assoc_data)?;
assert_ne!(&message, b"secret data");
privatebox.decrypt_detached(&mut message, &assoc_data, &detached_prefix)?;
assert_eq!(&message, b"secret data");
请参阅文档以获取示例和更多信息。
PrivateBox容器
加密/解密方法为您处理序列化并返回一个容器。它使得使用存储的关联数据和使用独立关联数据变得容易。它比分离加密/解密简单得多。它使用alloc
(默认启用)。
示例
let mut privatebox = PrivateBox::new(&[1; 32], OsRng);
t header = &[5, 4, 3, 2];
let metadata = &[3, 3, 3];
let wrapped = privatebox.encrypt(b"secret data", header, metadata).expect("encrypt");
let (message, authenticated_header) = privatebox.decrypt(&wrapped, metadata).expect("decrypt");
assert_eq!(message, b"secret data");
assert_eq!(&authenticated_header, header);
请参阅文档以获取示例和更多信息。
依赖项
~715KB
~12K SLoC