Repository navigation
v1.2.1
一次审计后的内部优化。没有 API 变化,没有密码学行为变化 —— 1.2.0 产生的
密文与 1.2.1 完全互通,升级不需要重新加密任何数据。
性能
- 解密不再重建 AES 密钥调度。 原本密钥环循环里对每一把钥匙调一次
Aes256Gcm::new_from_slice,包括本来就已建好的主密钥 —— 单密钥部署下等于
每请求白算一遍密钥调度,外加两次Box分配。现在整环的 cipher 在构造时
一次建好,解密只剩 AEAD 解封本身。 encrypt()先做廉价的形状判定再决定要不要认证。 原本对每个字符串都直接
试一次完整 AEAD 解封;明文通常根本不是合法 base64,到形状判定就被挡掉。
两阶段保留了原有的正确性:形状像密文的明文(base64 解出来首字节恰好是
0x01)仍会被正确地加密,不会被误判成密文存进去。- DB 侧解密少两次堆分配。 原本
decoded[1..].to_vec()再
plain.to_vec();现在就地跳过版本字节、就地截掉 PKCS#7 补位,
String::from_utf8直接接管同一个缓冲。
依赖
- 去掉两个声明了却一行都没引用的可选依赖:
bee_router与ecat-middleware。
两个适配层实际只用 axum(e-cat 另需 tower / http 两个 trait 来源)。
实测依赖树:bee-rustfeature 171 → 90 个 crate,ecat118 → 90 个。 - 去掉
zeroize的zeroize_derivefeature —— 本 crate 没有一处
derive(Zeroize),用到的只有Zeroizing包装类型。
修复
- 六个框架集成模块的文档示例根本编译不过,一直没被发现。
actix/rocket/
poem/warp/ecat/salvo的模块级示例里写的是
let guard = /* … */;——/* … */是块注释,那行实际是let guard = ;,
语法错误。这些示例都挂在 feature 后面,而此前的 feature 验证跑的是
cargo test --features X --lib,--lib不跑文档测试,于是六处一起漏了过去。
现在示例改为真正构造一个守卫,顺带把poem(少use EndpointExt)与
salvo(示例引用了非默认 feature 才有的affix_state)两处一并修正。
新增的 CI 跑的是不带--lib的cargo test --features X,这类问题以后会在
推送时就被挡住。
文档
- 补齐 23 处
# Errors文档段落(clippymissing_errors_doc从 23 条降到 0)。
逐个写明会返回哪些Error变体、什么条件下返回 —— 对 docs.rs 上的读者来说
这是最先要看的一段。 KeyRing::is_empty()补上准确文档:它恒为false(环按构造至少含主密钥),
并点明「守卫配没配密钥」该看len() == 1而不是它。DbEncrypter::decrypt的文档里写明:密钥错时 ECB 不保证报错 ——
没有认证就没有可靠的判据,这是 ECB 的固有性质,不是实现缺陷。
新增
- CI(
.github/workflows/ci.yml):fmt · clippy(-D warnings)· 默认与 serde 测试 ·
MSRV 1.88 实机验证(Cargo.toml声明的版本得真的能编)· 每个 feature 一个
矩阵 job ·cargo publish --dry-run打包验证。此前推送没有任何自动检查。