#linux #keychain #password #back-end

secret-service

用于与Secret Service API接口的库

12个稳定版本 (4个主要版本)

4.0.0 2024年6月21日
3.1.0 2024年6月7日
3.0.1 2023年1月31日
2.0.2 2022年6月28日
0.2.0 2016年2月10日

#19 in 加密学

Download history 32693/week @ 2024-05-04 37950/week @ 2024-05-11 42599/week @ 2024-05-18 41032/week @ 2024-05-25 46303/week @ 2024-06-01 36428/week @ 2024-06-08 37030/week @ 2024-06-15 43681/week @ 2024-06-22 34912/week @ 2024-06-29 36408/week @ 2024-07-06 40330/week @ 2024-07-13 47937/week @ 2024-07-20 42104/week @ 2024-07-27 37898/week @ 2024-08-03 32868/week @ 2024-08-10 28614/week @ 2024-08-17

150,139 下载/每月
用于 92 个crate(13个直接使用)

MIT/Apache

110KB
2K SLoC

Secret Service

crates.io version crate documentation MSRV crates.io downloads CI

通过DBus与FreeDesktop Secret Service API交互的Rust库。

基本用法

secret-service 默认使用纯Rust实现,因此不需要在Ubuntu上安装像 libdbus-1-devlibdbus-1-3 这样的系统库。

在Cargo.toml中

添加crate时,必须选择代表所选运行时和加密后端的特性。例如

[dependencies]
secret-service = { version = "3.0.0", features = ["rt-tokio-crypto-rust"] }

可用的特性标志

  • rt-async-io-crypto-rust:使用 async-std 运行时和通过 RustCrypto 的纯Rust加密。
  • rt-async-io-crypto-openssl:使用 async-std 运行时和OpenSSL作为加密提供者。
  • rt-tokio-crypto-rust:使用 tokio 运行时和通过 RustCrypto 的纯Rust加密。
  • rt-tokio-crypto-openssl:使用 tokio 运行时和OpenSSL作为加密提供者。

请注意,带有 -openssl 特性的设置需要系统上提供OpenSSL,或者必须在 cargo 依赖树中激活 openssl crate的 bundled 特性。

在源代码中(以下示例适用于 --bin,而非 --lib)。此示例使用 tokio 作为异步运行时。

use secret_service::SecretService;
use secret_service::EncryptionType;
use std::{collections::HashMap, error::Error};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // initialize secret service (dbus connection and encryption session)
    let ss = SecretService::connect(EncryptionType::Dh).await?;

    // get default collection
    let collection = ss.get_default_collection().await?;

    // create new item
    collection.create_item(
        "test_label", // label
        HashMap::from([("test", "test_value")]), // properties
        b"test_secret", // secret
        false, // replace item with same attributes
        "text/plain" // secret content type
    ).await?;

    // search items by properties
    let search_items = ss.search_items(
        HashMap::from([("test", "test_value")])
    ).await?;

    let item = search_items.unlocked.first().ok_or("Not found!")?;

    // retrieve secret from item
    let secret = item.get_secret().await?;
    assert_eq!(secret, b"test_secret");

    // delete item (deletes the dbus object, not the struct instance)
    item.delete().await?;
    Ok(())
}

功能

  • SecretService:初始化dbus,创建明文/加密会话。
  • 集合:创建、删除、搜索。
  • 项:创建、删除、搜索、获取/设置秘密。

变更日志

请参阅 GitHub发布列表及其发布说明

版本控制

此库功能齐全,大部分已稳定其API。然而,由于此crate几乎完全依赖于 zbus crate,我们尝试将主要版本发布与其保持一致,以处理破坏性更改并随着更广泛的 zbus 生态系统一起发展。

许可证

许可协议为以下之一

根据您的选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交给作品并包含在内的任何贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~7-19MB
~276K SLoC