
rscrypto v0.8.0
Rust 加密库,零默认依赖:BLAKE3、Ed25519/X25519、哈希、MAC、KDF、AEAD 和校验和,支持完整 SIMD/ASM 加速
rscrypto
rscrypto 将密码学原语、密码学哈希与快速哈希、密码哈希以及校验和统一在一个特性模型之下。
目标平台门控的 SIMD 与汇编可加速可移植的 Rust 后端,而无需生产环境中的 C/FFI、OpenSSL 或系统库依赖。
rscrypto 是一个原语库,而非 TLS 栈、PKI 工具包、密钥存储或协议实现。
实测性能
性能声明仅限于确切的保留测试活动和等效工作负载。 修正后的 2026 年 9 月测试活动包含 19,614 个已完成用例, 其中包括修正后的 ML-KEM 和 Argon2 对比, 但尚未整理出替代的汇总评分卡。 混合了熵、密钥准备、输出表示或盐长度的旧汇总数据仍属历史记录,并非当前性能声明。
基准测试概览 记录了各测试活动、特定目标的结果以及剩余限制。
对比契约 定义了等效的 ML-KEM 和 Argon2 工作负载。
保障
安全声明采用失败关闭机制:缺失或过期的证据会移除该声明,而非放宽门槛。
- 正确性证据结合了 NIST、RFC、上游和 Wycheproof 测试向量, 并辅以独立实现、属性测试、负向测试和 Miri。
- 模糊测试目标覆盖生产实现中的原语、解析器、状态机和 trait 边界。 最小化种子可作为测试重放,并设有独立的 sanitizer 通道。
- 可移植与加速版本的差分测试覆盖原生目标上的长度、对齐、 尾部、状态转换、分派和回退行为。
- 常量时间测试框架在
ct.toml中清点确切操作, 并结合优化后的链接二进制检查、针对声明固定形状内核的 BINSEC 证明, 以及针对声明端到端用例的 DudeCT 计时测试。 - 秘密所有者会遮蔽
Debug并在 drop 时清除已初始化的存储。 复制规则因类型而异:带密钥的 BLAKE2/BLAKE3 状态支持Clone。 所有权清单 列出了这些边界。 验证失败是不透明的;失败的 AEAD 解密会清除未认证的明文。
常量时间声明仅在所需目标、特性、编译器、配置文件和操作的证据通过时才成立。 看起来无分支的源代码不被视为证明。
请查阅 测试证据、常量时间模型、秘密生命周期 和 威胁模型。
剩余的独立审查缺口是第三方安全审计。
项目目前无法资助此类审计。
自动化证据不能替代该审查,因此 rscrypto 不声称已通过审计、
FIPS 140-3 验证、形式化验证,或整个 crate 为常量时间。
请通过 GitHub 私有漏洞报告 按照
SECURITY.md 流程报告疑似漏洞,而非公开 issue。
仅安装你使用的部分
最小 no_std SHA-2 构建:
[dependencies]
rscrypto = { version = "0.10", default-features = false, features = ["sha2"] }
启用操作系统随机性的完整原语栈:
[dependencies]
rscrypto = { version = "0.10", features = ["full", "getrandom"] }
默认特性是 std;default-features = false 会将其移除。
仅对从操作系统获取盐、密钥、nonce 或 RSA 密钥生成熵的 API 启用 getrandom。
特性指南 说明了构建选择;Cargo.toml 拥有确切的特性图。
快速开始
use rscrypto::Sha256;
let one_shot = Sha256::digest(b"hello world");
let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");
assert_eq!(hasher.finalize(), one_shot);
哈希 API 支持一次性与流式使用。
AEAD、签名、RSA、P-256 和 P-384 ECDH、X25519、ML-KEM、密码哈希
以及后端自省的可运行工作流位于 examples/README.md。
原语与特性映射
| 类别 | 包含内容 | 启用方式 |
|---|---|---|
| 校验和 | CRC-16、CRC-24、CRC-32、CRC-32C、CRC-64/XZ、CRC-64/NVMe | checksums 或叶子特性 |
| 密码学哈希 | SHA-2、SHA-3、SHAKE、cSHAKE、BLAKE2、BLAKE3、Ascon-Hash/XOF/CXOF | crypto-hashes 或叶子特性 |
| 快速哈希 | XXH3-64/128、RapidHash V3-64 | fast-hashes 或叶子特性 |
| MAC 与 KDF | HMAC-SHA-2/SHA-3、KMAC128/256、Poly1305、HKDF-SHA-2、PBKDF2-HMAC-SHA-2 | macs、kdfs 或叶子特性 |
| 密码哈希 | Argon2d/i/id、scrypt、有界 PHC 密码记录 | password-hashing 或叶子特性 |
| 签名与 RSA | ECDSA P-256/P-384、Ed25519、ML-DSA-44/65/87、RSA 签名、验证、加密和密钥生成 | signatures 或叶子特性 |
| 密钥交换与 KEM | P-256 ECDH、P-384 ECDH、X25519、ML-KEM-512/768/1024 | key-exchange 或叶子特性 |
| AEAD | AES-GCM、AES-GCM-SIV、AES-SIV-CMAC、ChaCha20-Poly1305、XChaCha20-Poly1305、AEGIS-256、Ascon-AEAD128 | aead 或叶子特性 |
仅用于兼容性的 WebSocket accept 摘要需要 websocket-sha1,
该特性被排除在 full 及所有其他伞形特性之外。
请使用 docs.rs 查看确切的类型和方法。
平台与分派
可移植的 Rust 实现是逐字节的权威。
编译时目标支持,以及在启用 std 时检测到的运行时 CPU 能力,
会选择符合条件的 SIMD 或汇编内核。
不支持的加速会回退到可移植 Rust。
平台指南 说明了支持的目标目录、分派、no_std 覆盖范围
以及 portable-only 的限制。
项目
指南和示例描述了随附的源代码。 对于已发布的依赖,请使用匹配版本的 API 文档。
更改代码前请阅读 CONTRIBUTING.md。
已发布的更改记录在 CHANGELOG.md 中。
许可证
在 Apache-2.0 或 MIT 下双许可,由你选择。