//! Data models for the vault crate // Only keep serde derives on structs, remove unused imports #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct VaultMetadata { pub name: String, pub keyspaces: Vec, // ... other vault-level metadata } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] pub struct KeyspaceMetadata { pub name: String, pub salt: [u8; 16], // Unique salt for this keyspace pub encrypted_blob: Vec, pub created_at: Option, // Unix timestamp pub tags: Option>, // ... other keyspace metadata } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] pub struct KeyspaceData { pub keypairs: Vec, // ... other keyspace-level metadata } impl zeroize::Zeroize for KeyspaceData { fn zeroize(&mut self) { for key in &mut self.keypairs { key.zeroize(); } self.keypairs.zeroize(); } } impl zeroize::Zeroize for KeyEntry { fn zeroize(&mut self) { self.private_key.zeroize(); // Optionally, zeroize other fields if needed } } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct KeyEntry { pub id: String, pub key_type: KeyType, pub private_key: Vec, // Only present in memory after decryption pub public_key: Vec, pub metadata: Option, } #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum KeyType { Secp256k1, Ed25519, // ... } #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] pub struct KeyMetadata { pub name: Option, pub created_at: Option, pub tags: Option>, // ... }