feat: update device key handling

This commit is contained in:
Jamie Pine 2025-12-03 15:54:27 -08:00
parent bbdc2d6d67
commit fc41ad9f0f
2 changed files with 16 additions and 9 deletions

10
Cargo.lock generated
View File

@ -8020,6 +8020,15 @@ dependencies = [
"rustfft",
]
[[package]]
name = "redb"
version = "2.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eca1e9d98d5a7e9002d0013e18d5a9b000aee942eb134883a82f06ebffb6c01"
dependencies = [
"libc",
]
[[package]]
name = "redox_syscall"
version = "0.5.17"
@ -8867,6 +8876,7 @@ dependencies = [
"pretty_assertions",
"rand 0.8.5",
"ratatui 0.29.0",
"redb",
"regex",
"reqwest 0.11.27",
"ring 0.16.20",

View File

@ -1,7 +1,6 @@
//! Device manager for handling device lifecycle
use super::config::DeviceConfig;
use crate::crypto::device_key_manager::{DeviceKeyError, DeviceKeyManager};
use crate::domain::device::{Device, OperatingSystem};
use std::collections::HashMap;
use std::path::PathBuf;
@ -31,15 +30,15 @@ pub enum DeviceError {
LockPoisoned,
#[error("Master key error: {0}")]
MasterKey(#[from] DeviceKeyError),
MasterKey(String),
}
/// Manages the current device state
pub struct DeviceManager {
/// Current device configuration
config: Arc<RwLock<DeviceConfig>>,
/// Master encryption key manager
device_key_manager: DeviceKeyManager,
/// Device master key (cached)
device_key: Arc<RwLock<[u8; 32]>>,
/// Custom data directory (if any)
data_dir: Option<PathBuf>,
/// Pre-library cache: Paired devices from DeviceRegistry (slug -> device_id)
@ -102,15 +101,13 @@ impl DeviceManager {
}
}
// Use fallback file for master key when using custom data directory
// Load or create device key from fallback file
let master_key_path = data_dir.join("master_key");
let device_key_manager = DeviceKeyManager::new_with_fallback(master_key_path)?;
// Initialize master key on first run
device_key_manager.get_or_create_master_key()?;
let device_key = load_or_create_device_key(&master_key_path)?;
Ok(Self {
config: Arc::new(RwLock::new(config)),
device_key_manager,
device_key: Arc::new(RwLock::new(device_key)),
data_dir: Some(data_dir.clone()),
paired_device_cache: Arc::new(RwLock::new(HashMap::new())),
})