| Crates.io | rust_mobile_secrets_vault |
| lib.rs | rust_mobile_secrets_vault |
| version | 0.2.0 |
| created_at | 2025-11-23 11:39:42.438811+00 |
| updated_at | 2025-11-23 11:58:08.532113+00 |
| description | A secure, encrypted secrets vault for mobile-backend or embedded Rust services with versioning and key rotation |
| homepage | |
| repository | https://github.com/emorilebo/rust_mobile_secrets_vault |
| max_upload_size | |
| id | 1946414 |
| size | 70,817 |
A secure, encrypted secrets vault for mobile backends and embedded Rust services with versioning and key rotation support.
Add to your Cargo.toml:
[dependencies]
rust_mobile_secrets_vault = "0.2.0"
use rust_mobile_secrets_vault::{KeySource, SecretVault};
use std::path::Path;
// Create a vault
let key = vec![42u8; 32]; // In production, generate securely
let mut vault = SecretVault::new(
KeySource::Bytes(key),
Path::new("vault.yaml"),
None
)?;
// Store a secret
vault.set("api_key", b"my_secret_key")?;
// Retrieve it
if let Some(secret) = vault.get("api_key")? {
println!("API Key: {}", String::from_utf8_lossy(&secret));
}
# Initialize a new vault
vault init --key-out master.key
# Store a secret
vault set database_password "supersecret" --key-path master.key
# Retrieve a secret
vault get database_password --key-path master.key
# Rotate the master key
vault rotate --key-path master.key --new-key-out new_master.key
# List versions
vault list-versions database_password --key-path new_master.key
let vault = SecretVault::builder()
.master_key(KeySource::Env("VAULT_KEY".to_string()))
.vault_path("secure_vault.yaml")
.audit_path("audit.log")
.build()?;
// Update a secret (creates new version)
vault.set("api_key", b"new_value")?;
// Get specific version
if let Some(old_value) = vault.get_version("api_key", 1)? {
println!("Version 1: {}", String::from_utf8_lossy(&old_value));
}
// List all versions
let versions = vault.list_versions("api_key")?;
println!("Available versions: {:?}", versions);
// Generate new key
let new_key = vec![/* 32 secure random bytes */];
// Rotate (re-encrypts all secrets)
vault.rotate(KeySource::Bytes(new_key))?;
| Command | Description |
|---|---|
init |
Initialize a new vault and generate master key |
set <key> <value> |
Store or update a secret |
get <key> |
Retrieve the latest version of a secret |
delete <key> |
Delete a secret and all its versions |
rotate |
Rotate the master encryption key |
list-versions <key> |
List all versions for a secret |
--vault-path <PATH> - Path to vault file (default: vault.yaml)--key-path <PATH> - Path to master key file--key-env <VAR> - Environment variable containing master key--audit-path <PATH> - Path to audit log fileSee the examples/ directory for complete working examples:
Run examples with:
cargo run --example basic_usage
cargo run --example key_rotation
cargo run --example builder_pattern
The library uses a custom VaultError type for precise error handling:
match vault.get("missing_key") {
Ok(Some(value)) => println!("Found: {:?}", value),
Ok(None) => println!("Secret not found"),
Err(VaultError::DecryptionFailed(msg)) => eprintln!("Decryption error: {}", msg),
Err(e) => eprintln!("Error: {}", e),
}
Contributions are welcome! Please ensure:
cargo test)cargo fmt)cargo clippy)MIT OR Apache-2.0
VaultError) for better type safetyget_version() method to retrieve specific secret versionslist_keys() method to list all secrets in vaultexamples/ directory