enigma-storage 0.0.1

Encrypted local storage for Enigma with mandatory at-rest encryption and cross-platform key vault providers.
Documentation
#[cfg(any(
    all(windows, feature = "provider-windows-dpapi"),
    all(target_os = "macos", feature = "provider-macos-keychain"),
    all(target_os = "linux", feature = "provider-linux-secret-service")
))]
use std::env;

#[cfg(any(
    all(windows, feature = "provider-windows-dpapi"),
    all(target_os = "macos", feature = "provider-macos-keychain"),
    all(target_os = "linux", feature = "provider-linux-secret-service")
))]
use crate::error::{EnigmaStorageError, Result};

#[cfg(all(windows, feature = "provider-windows-dpapi"))]
use crate::key_provider::WindowsDpapiKeyProvider;
#[cfg(all(target_os = "macos", feature = "provider-macos-keychain"))]
use crate::key_provider::MacosKeychainKeyProvider;
#[cfg(all(target_os = "linux", feature = "provider-linux-secret-service"))]
use crate::key_provider::LinuxSecretServiceKeyProvider;
#[cfg(any(all(windows, feature = "provider-windows-dpapi"), all(target_os = "macos", feature = "provider-macos-keychain"), all(target_os = "linux", feature = "provider-linux-secret-service")))]
use tempfile::tempdir;

#[cfg(all(windows, feature = "provider-windows-dpapi"))]
#[test]
fn windows_dpapi_provider_smoke() -> Result<()> {
    if env::var("RUN_PLATFORM_TESTS").unwrap_or_default() != "1" {
        return Ok(());
    }
    let dir = tempdir().map_err(|e| EnigmaStorageError::BackendError(e.to_string()))?;
    let provider = WindowsDpapiKeyProvider::new(dir.path());
    let key1 = provider.get_or_create_master_key()?;
    let key2 = provider.get_master_key()?;
    assert_eq!(key1.as_bytes(), key2.as_bytes());
    Ok(())
}

#[cfg(all(target_os = "macos", feature = "provider-macos-keychain"))]
#[test]
fn macos_keychain_provider_smoke() -> Result<()> {
    if env::var("RUN_PLATFORM_TESTS").unwrap_or_default() != "1" {
        return Ok(());
    }
    let dir = tempdir().map_err(|e| EnigmaStorageError::BackendError(e.to_string()))?;
    let provider = MacosKeychainKeyProvider::new(dir.path(), "platform");
    let key1 = provider.get_or_create_master_key()?;
    let key2 = provider.get_master_key()?;
    assert_eq!(key1.as_bytes(), key2.as_bytes());
    Ok(())
}

#[cfg(all(target_os = "linux", feature = "provider-linux-secret-service"))]
#[test]
fn linux_secret_service_provider_smoke() -> Result<()> {
    if env::var("RUN_PLATFORM_TESTS").unwrap_or_default() != "1" {
        return Ok(());
    }
    let dir = tempdir().map_err(|e| EnigmaStorageError::BackendError(e.to_string()))?;
    let provider = LinuxSecretServiceKeyProvider::new(dir.path(), "platform");
    let key1 = provider.get_or_create_master_key()?;
    let key2 = provider.get_master_key()?;
    assert_eq!(key1.as_bytes(), key2.as_bytes());
    Ok(())
}