| Crates.io | keyden |
| lib.rs | keyden |
| version | 0.1.7 |
| created_at | 2025-05-14 02:31:40.179889+00 |
| updated_at | 2025-05-14 02:44:41.646525+00 |
| description | Keyden: a simple CLI and library for managing, rotating, and generating secret keys safely. |
| homepage | |
| repository | https://github.com/vivsh/keyden |
| max_upload_size | |
| id | 1672784 |
| size | 35,984 |
Keyden is a lightweight tool for managing, rotating, and retrieving secret keys.
It is designed to be both a fast command-line utility and a pure Rust library โ making secure key management simple for applications and developers.
std, no async runtime needed.Keyden is built to be:
RwLock with parking_lot.Install Keyden CLI:
cargo install keyden
Or include it in your project:
[dependencies]
keyden = "0.1"
Keyden CLI manages secret keys through four subcommands:
| Subcommand | Description |
|---|---|
rotate [file] |
Rotate keys. Generates new ones if count is insufficient. |
current [file] |
Print the latest active secret key. |
list [file] |
List all keys and their creation timestamps. |
generate |
Generate a one-time temporary secret key (not stored). |
Rotate keys in a file:
keyden rotate ./keys.txt
Rotate with custom key size:
keyden rotate ./keys.txt --size 256
Retrieve the current active key:
keyden current ./keys.txt
List all keys:
keyden list ./keys.txt
Generate a temporary secret key without storing:
keyden generate --size 512
KEYDEN_FILEInstead of providing [file] every time, you can set a default file path:
export KEYDEN_FILE=./keys.txt
keyden rotate
keyden list
keyden current
If the positional file argument is missing, Keyden automatically tries $KEYDEN_FILE.
Cargo.toml:[dependencies]
keyden = "0.1"
use keyden::file_store::FileKeyStore;
use keyden::key_manager::KeyManager;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load a file-backed key store
let store = FileKeyStore::new("./keys.txt")?;
// Build the manager
let manager = KeyManager::builder(store)
.size(128)
.count(2)
.ttl_secs(86400) // 1 day
.build()?;
// Rotate if needed
manager.rotate_keys()?;
// Get current key
if let Some(current) = manager.current_key() {
println!("Current key: {}", current.secret);
}
// Generate a temporary one-time key
let temp = KeyManager::generate_temp_key(256);
println!("Temporary key: {}", temp.secret);
Ok(())
}
chmod 600 keys.txt).keyden/
โโโ src/
โ โโโ main.rs # CLI entry point
โ โโโ lib.rs # Library exports
โ โโโ commons.rs # Common types: KeyStore, KeyMaterial
โ โโโ file_store.rs # File-based KeyStore backend
โ โโโ key_manager.rs # KeyManager: rotation, reload, listing
โ โโโ utils.rs # Helpers (e.g., generate_secret)
โโโ Cargo.toml
โโโ README.md
โโโ .gitignore
โโโ LICENSE
Licensed under either of:
at your option.