use relicario_core::{ crypto::KdfParams, generate_recovery_qr_with_params, recovery_qr_to_svg, unwrap_recovery_qr_with_params, }; fn fast_params() -> KdfParams { KdfParams { argon2_m: 256, argon2_t: 1, argon2_p: 1 } } fn test_secret() -> [u8; 32] { let mut s = [0u8; 32]; for (i, b) in s.iter_mut().enumerate() { *b = i as u8; } s } #[test] fn roundtrip_recovers_image_secret() { let passphrase = "correct-horse-battery-staple"; let secret = test_secret(); let payload = generate_recovery_qr_with_params(passphrase, &secret, &fast_params()) .expect("generate ok"); let recovered = unwrap_recovery_qr_with_params(payload.as_bytes(), passphrase, &fast_params()) .expect("unwrap ok"); assert_eq!(recovered.as_ref(), &secret); } #[test] fn wrong_passphrase_fails_decrypt() { let secret = test_secret(); let payload = generate_recovery_qr_with_params("right-pass", &secret, &fast_params()) .expect("generate ok"); let result = unwrap_recovery_qr_with_params(payload.as_bytes(), "wrong-pass", &fast_params()); assert!(result.is_err()); } #[test] fn payload_is_109_bytes() { let secret = test_secret(); let payload = generate_recovery_qr_with_params("test", &secret, &fast_params()) .expect("generate ok"); assert_eq!(payload.as_bytes().len(), 109); } #[test] fn svg_output_is_non_empty_xml() { let secret = test_secret(); let payload = generate_recovery_qr_with_params("test", &secret, &fast_params()) .expect("generate ok"); let svg = recovery_qr_to_svg(&payload); assert!(svg.contains("