()
| 340 | |
| 341 | #[test] |
| 342 | fn key_rotation() { |
| 343 | let dir = tempfile::tempdir().unwrap(); |
| 344 | let key1_path = dir.path().join("key1"); |
| 345 | let key2_path = dir.path().join("key2"); |
| 346 | let mut k1 = [0u8; 32]; |
| 347 | let mut k2 = [0u8; 32]; |
| 348 | getrandom::fill(&mut k1).unwrap(); |
| 349 | getrandom::fill(&mut k2).unwrap(); |
| 350 | std::fs::write(&key1_path, k1).unwrap(); |
| 351 | std::fs::write(&key2_path, k2).unwrap(); |
| 352 | use std::os::unix::fs::PermissionsExt as _; |
| 353 | std::fs::set_permissions(&key1_path, std::fs::Permissions::from_mode(0o600)).unwrap(); |
| 354 | std::fs::set_permissions(&key2_path, std::fs::Permissions::from_mode(0o600)).unwrap(); |
| 355 | |
| 356 | let mut enc = VolumeEncryption::new(VolumeEncryptionConfig { |
| 357 | master_key_path: Some(key1_path), |
| 358 | enabled: true, |
| 359 | ..Default::default() |
| 360 | }); |
| 361 | enc.load_master_key().unwrap(); |
| 362 | |
| 363 | // Generate DEK with key1. |
| 364 | let (dek1, _) = enc.generate_dek().unwrap(); |
| 365 | |
| 366 | // Rotate to key2. |
| 367 | enc.rotate_master_key(&key2_path).unwrap(); |
| 368 | |
| 369 | // Generate DEK with key2 — should be different. |
| 370 | let (dek2, _) = enc.generate_dek().unwrap(); |
| 371 | assert_ne!(dek1, dek2); // Different DEKs (random). |
| 372 | } |
| 373 | |
| 374 | #[test] |
| 375 | fn not_active_without_key() { |
nothing calls this directly
no test coverage detected