#base64 #pem #private-key #phc

no-std base64ct

Base64 (RFC 4648) 的纯Rust实现,避免了任何数据相关分支/LUT的使用,从而提供了可移植的“尽力而为”恒定时间操作和嵌入式友好的no_std支持

11个稳定版本

1.6.0 2023年2月26日
1.5.3 2022年10月18日
1.5.2 2022年8月23日
1.5.1 2022年6月27日
0.2.1 2021年3月8日

#11 in 编码

Download history 720583/week @ 2024-03-14 735161/week @ 2024-03-21 706548/week @ 2024-03-28 775243/week @ 2024-04-04 768092/week @ 2024-04-11 763277/week @ 2024-04-18 742710/week @ 2024-04-25 751998/week @ 2024-05-02 757827/week @ 2024-05-09 803850/week @ 2024-05-16 787774/week @ 2024-05-23 852385/week @ 2024-05-30 813555/week @ 2024-06-06 810145/week @ 2024-06-13 792491/week @ 2024-06-20 654228/week @ 2024-06-27

3,239,407 每月下载量
2,901 个crate中使用 (118 个直接使用)

Apache-2.0 OR MIT

72KB
1.5K SLoC

RustCrypto: 恒定时间Base64

crate Docs Build Status Apache2/MIT licensed Rust Version Project Chat

Base64 (RFC 4648) 的纯Rust实现。

实现了多个Base64字母表,没有数据相关分支或查找表,从而提供了可移植的“尽力而为”恒定时间操作。

支持no_std环境,并在核心API中避免堆分配(但还提供可选的alloc支持,方便使用)。

文档

关于

此crate以恒定时间实现几个Base64字母表,以抵抗侧信道攻击,旨在用于像存储加密私钥(如pem-rfc7468 crate中的“PEM”格式)这样的编码/解码。

论文Util::Lookup: Exploiting key decoding in cryptographic libraries展示了如何使用非恒定时间Base64解析器的泄漏从SGX enclaves中实际提取RSA私钥。

填充变体需要(=)填充。未填充的变体明确拒绝此类填充。

显式不允许空白字符,但Decoder::new_wrappedEncoder::new_wrapped模式提供固定宽度的换行。

支持的Base64变体

  • 标准Base64: [A-Z][a-z][0-9]+/
  • URL安全的Base64: [A-Z], [a-z], [0-9], -, _
  • bcrypt Base64: ., /, [0-9], [A-Z], [a-z]
  • crypt(3) Base64: ., -, [0-9], [A-Z], [a-z]

支持的最小Rust版本

此crate至少需要Rust 1.60

我们可能会在将来更改MSRV,但将伴随着小版本号的增加。

许可证

根据您的选择,许可方式为以下之一

贡献

除非您明确声明,否则您有意提交给作品(根据Apache-2.0许可证定义)的任何贡献,将如上所述双重许可,没有任何附加条款或条件。

无运行时依赖