Skip to main content

pd_cipher::keys::providers::memory

In-memory key storage provider implementation. In-memory key provider implementation.

Provides a simple, fast key storage solution for development, testing, and scenarios where persistence is not required.

Structs

InMemoryKeyProvider

In-memory key provider for development and testing.

InMemoryKeyProvider stores keys in memory using a thread-safe HashMap. Keys are lost when the provider is dropped, making this suitable for temporary operations, testing, and development scenarios.

Security Considerations

  • Keys are stored in process memory and are not encrypted at rest
  • Keys may be visible in memory dumps or swap files
  • No protection against memory access by other processes
  • Suitable for development but not production use

Thread Safety

This provider is thread-safe and can be safely shared across threads using Arc<InMemoryKeyProvider>.

Examples

Basic Usage

use pd_cipher::keys::providers::{KeyProvider, memory::InMemoryKeyProvider};
use pd_cipher::keys::EncryptionAlgorithm;

# fn example() -> pd_cipher::Result<()> {
let mut provider = InMemoryKeyProvider::new();

// Generate and store a key
let key = provider.generate_key(EncryptionAlgorithm::Aes256Gcm)?;
let key_id = provider.store_key("my-key", key, Some("Test key".to_string()))?;

// Load the key back
let loaded_key = provider.load_key(&key_id)?;
# Ok(())
# }

With Key Derivation

use pd_cipher::keys::providers::{KeyProvider, KeyDerivationParams, memory::InMemoryKeyProvider};
use pd_cipher::keys::EncryptionAlgorithm;

# fn example() -> pd_cipher::Result<()> {
let provider = InMemoryKeyProvider::new();

use pd_cipher::constants::PBKDF2_DEFAULT_ITERATIONS;

let params = KeyDerivationParams {
password: "secure-password".to_string(),
salt: None, // Will be generated
iterations: PBKDF2_DEFAULT_ITERATIONS,
};

let derived_key = provider.derive_key(&params, EncryptionAlgorithm::XChaCha20Poly1305)?;
# Ok(())
# }
pub struct InMemoryKeyProvider