| Crates.io | sifredb-key-file |
| lib.rs | sifredb-key-file |
| version | 0.1.1 |
| created_at | 2025-11-13 06:43:21.635509+00 |
| updated_at | 2025-11-14 00:45:20.803015+00 |
| description | File-based key provider for SifreDB |
| homepage | |
| repository | https://github.com/Tuntii/sifredb |
| max_upload_size | |
| id | 1930509 |
| size | 28,359 |
File-based key provider for SifreDB.
Add this to your Cargo.toml:
[dependencies]
sifredb = "0.1"
sifredb-key-file = "0.1"
use sifredb_key_file::FileKeyProvider;
use std::path::Path;
// Initialize a new key directory
let key_dir = Path::new("./keys");
FileKeyProvider::init(key_dir)?;
use sifredb_key_file::FileKeyProvider;
let provider = FileKeyProvider::new("./keys")?;
use sifredb::prelude::*;
use sifredb_key_file::FileKeyProvider;
let provider = FileKeyProvider::new("./keys")?;
let vault = DeterministicVault::with_provider(provider);
let context = EncryptionContext::new("users", "email");
let ciphertext = vault.encrypt(b"alice@example.com", &context)?;
Keys are stored in a hierarchical directory structure:
./keys/
├── tenant_a/
│ ├── users_email_v1.key
│ └── orders_total_v1.key
└── tenant_b/
└── users_email_v1.key
use sifredb::prelude::*;
use sifredb_key_file::FileKeyProvider;
let provider = FileKeyProvider::new("./keys")?;
// Old context with version 1
let old_context = EncryptionContext::new("users", "email")
.with_tenant("tenant_a")
.with_version(1);
// New context with version 2
let new_context = old_context.clone().with_version(2);
// Decrypt with old key, re-encrypt with new key
let plaintext = vault.decrypt(&old_ciphertext, &old_context)?;
let new_ciphertext = vault.encrypt(&plaintext, &new_context)?;
For production environments, consider:
KeyProvider traitLicensed under either of:
at your option.
Contributions are welcome! Please feel free to submit a Pull Request.