1 个不稳定版本
0.5.0 | 2024年4月25日 |
---|
#2161 在 加密学
158 每月下载次数
在 4 个库中使用 (3 直接)
230KB
10K SLoC
Bitwarden 加密库
这是一个 Bitwarden SDK 的内部库,不要直接依赖于它,而是使用 bitwarden
库。
此库不遵循语义版本控制,其公共接口可能随时更改。
lib.rs
:
Bitwarden 密码学原语
此库包含 SDK 中使用的密码学原语。总体目标是为此库处理所有困难的密码学操作,并向 SDK 的其余部分暴露高级概念。
通常,你不应该需要编辑此库!这里编写的内容需要额外的注意和关注,以确保密码学原语是安全的。
示例
use bitwarden_crypto::{SymmetricCryptoKey, KeyEncryptable, KeyDecryptable, CryptoError};
async fn example() -> Result<(), CryptoError> {
let key = SymmetricCryptoKey::generate(rand::thread_rng());
let data = "Hello, World!".to_owned();
let encrypted = data.clone().encrypt_with_key(&key)?;
let decrypted: String = encrypted.decrypt_with_key(&key)?;
assert_eq!(data, decrypted);
Ok(())
}
开发注意事项
此库预计将提供对密码学操作的长期支持。为此,在对此库进行更改时应考虑以下事项
- 将公共接口限制到最低限度。
- 破坏性更改应很少发生,并且应得到充分沟通。
- 密钥和加密数据的可序列化表示必须无限期支持,因为我们没有更新所有数据的方法。
约定
- 以
derive_
前缀的纯函数,确定性地从输入“推导”密钥。 - 以
make_
前缀的函数生成非确定性的密钥。
与 clients
的不同之处
与其他 Bitwarden 客户端相比,存在一些值得注意的差异。这些更改是为了引入命名约定、改进最佳实践和抽象内部复杂性而进行的。
CryptoService.makeSendKey
和AccessService.createAccessToken
被通用的derive_shareable_key
替换。- 将主密钥操作,如
makeMasterKey
和hashMasterKey
,移动到 MasterKey 结构体。
依赖项
~7–9.5MB
~186K SLoC