1 个不稳定版本

0.5.0 2024年4月25日

#2161加密学

Download history 128/week @ 2024-04-22 39/week @ 2024-04-29 44/week @ 2024-05-06 42/week @ 2024-05-13 76/week @ 2024-05-20 48/week @ 2024-05-27 63/week @ 2024-06-03 76/week @ 2024-06-10 91/week @ 2024-06-17 85/week @ 2024-06-24 35/week @ 2024-07-01 34/week @ 2024-07-08 49/week @ 2024-07-15 39/week @ 2024-07-22 34/week @ 2024-07-29

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.makeSendKeyAccessService.createAccessToken 被通用的 derive_shareable_key 替换。
  • 将主密钥操作,如 makeMasterKeyhashMasterKey,移动到 MasterKey 结构体。

依赖项

~7–9.5MB
~186K SLoC