use passkey_crypto::{
AvailableBackend, AvailableRng, CryptoBackend, PublicKeyT, SecretKeyT, rng::RngBackend,
};
use passkey_types::ctap2::AuthenticatorData;
#[test]
fn private_key_cose_round_trip_sanity_check() {
let algs = AvailableBackend.enumerate_algorithms();
for alg in algs {
let original_private_key = AvailableBackend
.generate_key(alg)
.unwrap_or_else(|_| panic!("Backend does not support {:?}", alg));
let private_cose = original_private_key.to_cose_key();
let public_key = original_private_key.public_key();
let auth_data = AuthenticatorData::new("future.1password.com", None, &AvailableBackend);
let mut signature_target = auth_data.to_vec();
signature_target.extend(AvailableRng::random_vec(32));
let mut reconstructed_private_key =
<AvailableBackend as CryptoBackend>::SecretKey::from_cose_key(&private_cose)
.expect("to get a private key");
let signature = reconstructed_private_key.sign(&signature_target);
public_key
.verify(&signature_target, &signature)
.unwrap_or_else(|_| panic!("failed to verify signature for {:?}", alg));
}
}