1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
// SPDX-FileCopyrightText: Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
#![allow(dead_code)]
use std::env;
use anyhow::Result;
use openpgp_card::state::Open;
use openpgp_card::Card;
use pgp::{Deserializable, SignedPublicKey};
use crate::cards::TestConfig;
use crate::util::{
run_test, test_decrypt, test_keygen, test_print_algo_info, test_print_caps, test_reset,
test_set_user_data, test_sign, TestResult,
};
mod cards;
mod util;
#[ignore]
#[test]
fn keygen() -> Result<()> {
env_logger::init();
let config = match env::var("TEST_CONFIG") {
Ok(path) => TestConfig::load(&path)?,
Err(_) => TestConfig::load("config/test-cards.toml")?, // fallback
};
let cards = config.into_cardapps();
for card in cards {
println!("** Run tests on card {} **", card.get_name());
let mut c: Card<Open> = card.get_card()?;
println!(" -> Card opened");
let mut tx = c.transaction()?;
println!(" started transaction");
// println!("Get pubkey");
// let _ = run_test(&mut tx, test_get_pub, &[])?;
println!("Caps");
let _ = run_test(&mut tx, test_print_caps, &[])?;
// continue; // only print caps
println!("Reset");
let _ = run_test(&mut tx, test_reset, &[])?;
println!("Algo info");
let _ = run_test(&mut tx, test_print_algo_info, &[])?;
// Set user data because keygen expects a name (for the user id)
println!("Set user data");
let _ = run_test(&mut tx, test_set_user_data, &[])?;
let algos = {
let config = card.get_config();
if let Some(keygen) = &config.keygen {
keygen.clone()
} else {
vec![]
}
};
for algo in algos {
println!("Generate key [{algo}]");
let res = run_test(&mut tx, test_keygen, &[&algo])?;
if let TestResult::Text(cert_str) = &res[0] {
// sign
print!(" Sign");
let sign_out = run_test(&mut tx, test_sign, &[cert_str])?;
println!(" {sign_out:x?}");
// decrypt
let (spk, _) = SignedPublicKey::from_string(cert_str)?;
let ciphertext = util::encrypt_to("Hello world!\n", &spk)?;
print!(" Decrypt");
let dec_out = run_test(&mut tx, test_decrypt, &[cert_str, &ciphertext])?;
println!(" {dec_out:x?}");
} else {
panic!("Didn't get back a Cert from test_keygen");
};
}
println!();
}
Ok(())
}
|