#container #encryption #storage #random #xchachapoly1305

无std privatebox

一个轻量级且易于使用的API,用于加密您的数据

1个不稳定版本

0.1.1 2021年5月26日
0.1.0 2021年5月26日

#1914 in 加密学

MIT许可

36KB
420 代码行

PrivateBox crates.io docs.rs license

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