enigma-storage 0.0.1

Encrypted local storage for Enigma with mandatory at-rest encryption and cross-platform key vault providers.
Documentation
use rand::RngCore;
use tempfile::tempdir;

use crate::error::Result;
use crate::key_provider::ForeignKeyProvider;
use crate::storage::EncryptedStore;

#[test]
fn foreign_provider_roundtrip() -> Result<()> {
    let mut key_bytes = [0u8; 32];
    rand::thread_rng().fill_bytes(&mut key_bytes);
    let provider = ForeignKeyProvider::new(key_bytes);
    let dir = tempdir().map_err(|e| crate::error::EnigmaStorageError::BackendError(e.to_string()))?;
    let path = dir.path().join("db");
    let path_str = path
        .to_str()
        .ok_or_else(|| crate::error::EnigmaStorageError::BackendError("invalid path".into()))?;
    let store = EncryptedStore::open(path_str, "test", &provider)?;
    store.put("alpha", b"one")?;
    let fetched = store.get("alpha")?;
    assert_eq!(fetched, Some(b"one".to_vec()));
    assert_eq!(store.delete("alpha")?, true);
    assert_eq!(store.get("alpha")?, None);
    Ok(())
}