diff --git a/openpgp-card-sequoia/src/main.rs b/openpgp-card-sequoia/src/main.rs index bcb25af..3152a17 100644 --- a/openpgp-card-sequoia/src/main.rs +++ b/openpgp-card-sequoia/src/main.rs @@ -10,14 +10,13 @@ use sequoia_openpgp::policy::StandardPolicy; use sequoia_openpgp::Cert; use openpgp_card::card_do::Sex; -use openpgp_card::{CardApp, KeyType}; +use openpgp_card::KeyType; use openpgp_card_pcsc::PcscClient; -// use openpgp_card_scdc::ScdClient; use openpgp_card_sequoia::card::Open; use openpgp_card_sequoia::sq_util::{decryption_helper, sign_helper}; -// Filename of test key and test message to use: +// Filename of test key and test message to use // const TEST_KEY_PATH: &str = "../example/test4k.sec"; // const TEST_ENC_MSG: &str = "../example/encrypted_to_rsa4k.asc"; @@ -31,67 +30,50 @@ const TEST_ENC_MSG: &str = "../example/encrypted_to_25519.asc"; fn main() -> Result<(), Box> { env_logger::init(); - // Ident of the OpenPGP Card that will be used for tests. + // Ident of an OpenPGP Card to use for these tests let test_card_ident = env::var("TEST_CARD_IDENT"); - // // "serial" for opening a specific card through scdaemon - // let test_card_serial = env::var("TEST_CARD_SERIAL")?; - if let Ok(test_card_ident) = test_card_ident { - println!("** get card"); - let mut oc = + let mut open = Open::open_card(PcscClient::open_by_ident(&test_card_ident)?)?; - println!(); - - // let mut oc = CardBase::open_card(ScdClient::open_by_serial( - // None, - // &test_card_serial, - // )?)?; // card metadata - println!("** get aid"); - let app_id = oc.application_identifier()?; - println!("app id: {:x?}", app_id); - println!(); + let app_id = open.application_identifier()?; + println!("{:x?}\n", app_id); - let eli = oc.extended_length_information()?; - println!("extended_length_info: {:?}", eli); - println!(); + let eli = open.extended_length_information()?; + println!("extended_length_info: {:?}\n", eli); - let hist = oc.historical_bytes()?; - println!("{:#x?}", hist); - println!(); + let hist = open.historical_bytes()?; + println!("{:#x?}\n", hist); - let ext = oc.extended_capabilities()?; - println!("{:#x?}", ext); - println!(); + let ext = open.extended_capabilities()?; + println!("{:#x?}\n", ext); - let pws = oc.pw_status_bytes()?; - println!("{:#x?}", pws); - println!(); + let pws = open.pw_status_bytes()?; + println!("{:#x?}\n", pws); // cardholder - let ch = oc.cardholder_related_data()?; - println!("{:#x?}", ch); - println!(); + let ch = open.cardholder_related_data()?; + println!("{:#x?}\n", ch); // crypto-ish metadata - let fp = oc.fingerprints()?; - println!("Fingerprint {:#x?}", fp); - println!(); + let fp = open.fingerprints()?; + println!("Fingerprint {:#x?}\n", fp); - match oc.algorithm_information() { + match open.algorithm_information() { Ok(Some(ai)) => println!("Algorithm information:\n{}", ai), Ok(None) => println!("No Algorithm information found"), Err(e) => println!("Error getting Algorithm information: {:?}", e), } - let algo = oc.algorithm_attributes(KeyType::Signing)?; + println!("Current algorithm attributes on card:"); + let algo = open.algorithm_attributes(KeyType::Signing)?; println!("Sig: {}", algo); - let algo = oc.algorithm_attributes(KeyType::Decryption)?; + let algo = open.algorithm_attributes(KeyType::Decryption)?; println!("Dec: {}", algo); - let algo = oc.algorithm_attributes(KeyType::Authentication)?; + let algo = open.algorithm_attributes(KeyType::Authentication)?; println!("Aut: {}", algo); println!(); @@ -100,144 +82,129 @@ fn main() -> Result<(), Box> { // CAUTION: Write commands ahead! // Try not to overwrite your production cards. // --------------------------------------------- + assert_eq!(app_id.ident(), test_card_ident); - let check = oc.check_admin_verified(); - println!("has pw3 been verified yet? {:x?}\n", check); + let check = open.check_admin_verified(); + println!("has admin (pw3) been verified yet?\n{:x?}\n", check); - println!("factory reset"); - oc.factory_reset()?; + println!("factory reset\n"); + open.factory_reset()?; - if oc.verify_admin("12345678").is_ok() { - println!("pw3 verify ok"); + open.verify_admin("12345678")?; + println!("verify for admin ok"); - let check = oc.check_user_verified(); - println!("has pw1/82 been verified yet? {:x?}", check); + let check = open.check_user_verified(); + println!("has user (pw1/82) been verified yet? {:x?}", check); - // actually take Admin - let mut oc_admin = oc.admin_card().expect("just verified"); + // Use Admin access to card + let mut admin = open.admin_card().expect("just verified"); - let res = oc_admin.set_name("Bar< Result<(), Box> { println!("The following OpenPGP cards are connected to your system:"); - let cards = PcscClient::cards()?; - for c in cards { - let mut ca = CardApp::from(c); - - let ard = ca.get_application_related_data()?; - let app_id = ard.get_application_id()?; - - let ident = app_id.ident(); - println!(" '{}'", ident); + for card in PcscClient::cards()? { + let open = Open::open_card(card)?; + println!(" {}", open.application_identifier()?.ident()); } }