From 9e0aaf08d1a89f535f04667750f3746bbb3dc7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20DOUIN?= Date: Fri, 20 Dec 2024 00:12:16 +0100 Subject: [PATCH] add scheme --- Cargo.toml | 2 +- README.md | 57 +++-------------------------------------------------- scheme.png | Bin 0 -> 52657 bytes scheme.svg | 1 + 4 files changed, 5 insertions(+), 55 deletions(-) create mode 100644 scheme.png create mode 100644 scheme.svg diff --git a/Cargo.toml b/Cargo.toml index 954f7d2..f0a27e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,7 @@ secret-service-zbus-tokio = ["dep:tokio", "secret-service-zbus"] # Linux Secret service, # Crypto provider (for encrypted sessions) # -secret-service-crypto = ["dep:num", "dep:once_cell", "dep:rand"] +secret-service-crypto = ["dep:num", "dep:once_cell", "dep:rand", "secret-service"] secret-service-openssl-std = ["dep:openssl", "secret-service-crypto"] secret-service-rust-crypto-std = ["dep:aes", "dep:block-padding", "dep:cbc", "dep:hkdf", "dep:sha2", "secret-service-crypto"] diff --git a/README.md b/README.md index 6a23db9..e8c5be7 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,10 @@ # 🔐 keyring-lib -High-level, asynchronous API for [`keyring-rs`](https://crates.io/crates/keyring), a cross-platform Rust library to manage credentials. +Cross-platform, sans I/O library to manage credentials, written in Rust. -## Features +![scheme](./scheme.svg) -- Uses [Secret Service](https://specifications.freedesktop.org/secret-service-spec/latest/) on *Linux* -- Uses the [keyutils](https://man7.org/linux/man-pages/man7/keyutils.7.html) secure, in-memory *Linux* kernel cache (if available) -- Uses default system security credential on *MacOS* and *Windows* -- Supports **tokio** and **async-std** async runtimes -- Supports **rustls** and **openssl** crypto libs -- Supports **serde** (de)serialization from/to `String` - -The library comes with 6 [cargo features](https://doc.rust-lang.org/cargo/reference/features.html), including 2 default ones: - -- **`tokio`**: enables the [tokio](https://crates.io/crates/tokio) async runtime -- `async-std`: enables the [async-std](https://crates.io/crates/async-std) async runtime -- **`rustls`**: enables the [rustls](https://crates.io/crates/rustls) crypto -- `openssl`: enables the [openssl](https://crates.io/crates/openssl) crypto -- `derive`: enables [serde](https://crates.io/crates/serde) support -- `vendored`: compiles and statically link to a copy of non-Rust vendors like OpenSSL - -## Example - -```rust -use keyring::{set_global_service_name, KeyringEntry}; - -#[tokio::main] -async fn main() { - // define the global keyring service name once - set_global_service_name("example"); - - // create a keyring entry from a key string - let entry = KeyringEntry::try_new("key").unwrap(); - - // define a secret - entry.set_secret("secret").await.unwrap(); - - // get a secret - entry.get_secret().await.unwrap(); - - // find a secret - entry.find_secret().await.unwrap(); - - // delete a secret entry - entry.delete_secret().await.unwrap(); -} -``` - -*See the full API documentation on [docs.rs](https://docs.rs/keyring-lib/latest/keyring/).* - -## FAQ - -
- Why not using keyring-rs directly? - - This library can be seen as a *convenient async wrapper* around `keyring-rs`. If you have an async app and just want to have a default keystore for any target OS, then `keyring-lib` is the right choice. If you do not have an async app, or you want more control over keystores, using `keyring-rs` is a much better choice. -
+*TODO* ## Sponsoring diff --git a/scheme.png b/scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..67ec9bd007849364d8e5d69b9bffd563fff38a24 GIT binary patch literal 52657 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�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 literal 0 HcmV?d00001 diff --git a/scheme.svg b/scheme.svg new file mode 100644 index 0000000..05aa15b --- /dev/null +++ b/scheme.svg @@ -0,0 +1 @@ +I/O ConnectorDo I/O,resume the loopStartthe loopSome(I/O)NoneFlowLoopBreakDone \ No newline at end of file