#[cfg(target_os = "windows")]
fn main() {
use qualia_bioauth::platform::windows::{WindowsKeyStore, api_version};
use qualia_bioauth::{AuthBoundKeyStore, MasterKey};
println!("QualiaBioAuth Windows Hello acceptance run");
println!("WebAuthn API version: {}", api_version());
let store = WindowsKeyStore::new();
let availability = store.availability();
println!("availability: {availability:?}");
if !availability.is_available() {
println!("RESULT: SKIPPED (no user-verifying platform authenticator)");
return;
}
println!("You will see three Windows Hello prompts: create, wrap, unwrap.");
match store.create() {
Ok(()) => println!("create: ok"),
Err(qualia_bioauth::Error::Unavailable { reason }) => {
println!("RESULT: PRF UNAVAILABLE: {reason}");
return;
}
Err(error) => {
println!("RESULT: FAILED at create: {error}");
std::process::exit(1);
}
}
let master = match MasterKey::generate() {
Ok(master) => master,
Err(error) => {
println!("RESULT: FAILED generating a test key: {error}");
std::process::exit(1);
}
};
let blob = match store.wrap(&master) {
Ok(blob) => {
println!("wrap: ok");
blob
}
Err(qualia_bioauth::Error::Unavailable { reason }) => {
let _ = store.delete();
println!("RESULT: PRF UNAVAILABLE: {reason}");
return;
}
Err(error) => {
let _ = store.delete();
println!("RESULT: FAILED at wrap: {error}");
std::process::exit(1);
}
};
match store.unwrap(&blob) {
Ok(restored) if restored == master => println!("unwrap: ok, the same key came back"),
Ok(_) => {
let _ = store.delete();
println!("RESULT: FAILED: the unwrapped key differs from the original");
std::process::exit(1);
}
Err(qualia_bioauth::Error::Unavailable { reason }) => {
let _ = store.delete();
println!("RESULT: PRF UNAVAILABLE: {reason}");
return;
}
Err(error) => {
let _ = store.delete();
println!("RESULT: FAILED at unwrap: {error}");
std::process::exit(1);
}
}
match store.delete_blob(&blob) {
Ok(()) => println!("delete: ok"),
Err(error) => {
println!("RESULT: FAILED at delete: {error}");
std::process::exit(1);
}
}
if store.unwrap(&blob).is_ok() {
println!("RESULT: FAILED: a deleted credential still unwraps");
std::process::exit(1);
}
println!("RESULT: roundtrip OK");
}
#[cfg(not(target_os = "windows"))]
fn main() {
println!("This diagnostic exercises the Windows backend and only runs on Windows.");
println!("RESULT: SKIPPED (not Windows)");
}