test(core): recovery_qr roundtrip + error cases
This commit is contained in:
60
crates/relicario-core/tests/recovery_qr.rs
Normal file
60
crates/relicario-core/tests/recovery_qr.rs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
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("<svg"), "SVG output should contain <svg tag");
|
||||||
|
assert!(!svg.is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bad_magic_returns_error() {
|
||||||
|
let mut bad = [0u8; 109];
|
||||||
|
bad[0..4].copy_from_slice(b"NOPE");
|
||||||
|
let result = unwrap_recovery_qr_with_params(&bad, "pass", &fast_params());
|
||||||
|
assert!(result.is_err());
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user