#stream-cipher #traits #crypto

no-std hc-128

HC-128流密码

1个不稳定版本

使用旧Rust 2015

0.0.0 2019年10月22日

#36 in #stream-cipher

MIT/Apache

7KB

RustCrypto: 流密码

Project Chat dependency status Apache2/MIT licensed HAZMAT

纯Rust编写的流密码集合。

⚠️ 安全警告: 危险品!

此存储库中的Crate不确保密文是真实的(即通过使用MAC来验证密文完整性),如果使用不当可能会导致严重漏洞!

除了chacha20 crate外,此存储库中的其他Crate尚未接受任何正式的加密和安全审查/审计。

自行承担风险!

Crate

名称 Crate名称 Crates.io 文档 MSRV 安全
ChaCha chacha20 crates.io Documentation MSRV 1.65 💚
HC-256 hc-256 crates.io Documentation MSRV 1.65 💛
Rabbit rabbit crates.io Documentation MSRV 1.65 💛
RC4 rc4 crates.io Documentation MSRV 1.65 💔
Salsa20 salsa20 crates.io Documentation MSRV 1.65 💚

安全级别图例

以下描述了与每个哈希函数(即算法,而不是特定实现)相关的安全级别评分。

心形 描述
💚 没有已知的成功攻击
💛 理论破解:安全性低于声称的
💔 实践中已演示攻击:尽可能避免

最小支持的Rust版本(MSRV)策略

MSRV提升被视为破坏性变更,并且只有在次要版本提升的情况下才会执行。

示例

Crate功能以在cipher crate中定义的特性为依据。

让我们用ChaCha20来演示同步流密码的使用方法

use chacha20::ChaCha20;
// Import relevant traits
use chacha20::cipher::{KeyIvInit, StreamCipher, StreamCipherSeek};
use hex_literal::hex;

let key = [0x42; 32];
let nonce = [0x24; 12];
let plaintext = hex!("00010203 04050607 08090a0b 0c0d0e0f");
let ciphertext = hex!("e405626e 4f1236b3 670ee428 332ea20e");

// Key and IV must be references to the `GenericArray` type.
// Here we use the `Into` trait to convert arrays into it.
let mut cipher = ChaCha20::new(&key.into(), &nonce.into());

let mut buffer = plaintext.clone();

// apply keystream (encrypt)
cipher.apply_keystream(&mut buffer);
assert_eq!(buffer, ciphertext);

let ciphertext = buffer.clone();

// ChaCha ciphers support seeking
cipher.seek(0u32);

// decrypt ciphertext by applying keystream again
cipher.apply_keystream(&mut buffer);
assert_eq!(buffer, plaintext);

// stream ciphers can be used with streaming messages
cipher.seek(0u32);
for chunk in buffer.chunks_mut(3) {
    cipher.apply_keystream(chunk);
}
assert_eq!(buffer, ciphertext);

许可协议

所有Crate均受以下任一许可协议的许可:

任选其一。

贡献

除非你明确表示,否则任何有意提交以包含在你提交的工作中的贡献,根据Apache-2.0许可证定义,应如上所述双许可,不附加任何额外条款或条件。

依赖关系

~12KB