get_txc!() now assumes the OpenPGP application should be re-selected, by default

This commit is contained in:
Heiko Schaefer 2022-01-20 03:08:41 +01:00
parent 6100ec4318
commit 36b9fb2770
No known key found for this signature in database
GPG key ID: 4A849A1904CCBD7D
6 changed files with 23 additions and 18 deletions

View file

@ -10,7 +10,7 @@ fn main() -> Result<()> {
println!("The following OpenPGP cards are connected to your system:"); println!("The following OpenPGP cards are connected to your system:");
for mut card in PcscCard::cards()? { for mut card in PcscCard::cards()? {
let mut txc: TxClient = openpgp_card_pcsc::get_txc!(card, true)?; let mut txc: TxClient = openpgp_card_pcsc::get_txc!(card)?;
let open = Open::new(&mut txc)?; let open = Open::new(&mut txc)?;
println!(" {}", open.application_identifier()?.ident()); println!(" {}", open.application_identifier()?.ident());

View file

@ -682,8 +682,8 @@ pub fn run_test(
use anyhow::anyhow; use anyhow::anyhow;
let mut txc = openpgp_card_pcsc::get_txc!(card_client, true) let mut txc =
.map_err(|e| anyhow!(e))?; openpgp_card_pcsc::get_txc!(card_client).map_err(|e| anyhow!(e))?;
// let mut txc = TxClient::new(&mut tx, card_caps, reader_caps); // let mut txc = TxClient::new(&mut tx, card_caps, reader_caps);
t(&mut txc, param) t(&mut txc, param)

View file

@ -36,7 +36,7 @@ fn main() -> Result<(), Box<dyn Error>> {
if let Ok(test_card_ident) = test_card_ident { if let Ok(test_card_ident) = test_card_ident {
let mut card = PcscCard::open_by_ident(&test_card_ident)?; let mut card = PcscCard::open_by_ident(&test_card_ident)?;
let mut txc = openpgp_card_pcsc::get_txc!(card, true)?; let mut txc = openpgp_card_pcsc::get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -147,7 +147,7 @@ fn main() -> Result<(), Box<dyn Error>> {
// Open fresh Card for decrypt // Open fresh Card for decrypt
// ----------------------------- // -----------------------------
let mut card = PcscCard::open_by_ident(&test_card_ident)?; let mut card = PcscCard::open_by_ident(&test_card_ident)?;
let mut txc = openpgp_card_pcsc::get_txc!(card, true)?; let mut txc = openpgp_card_pcsc::get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -188,7 +188,7 @@ fn main() -> Result<(), Box<dyn Error>> {
// Open fresh Card for signing // Open fresh Card for signing
// ----------------------------- // -----------------------------
let mut card = PcscCard::open_by_ident(&test_card_ident)?; let mut card = PcscCard::open_by_ident(&test_card_ident)?;
let mut txc = openpgp_card_pcsc::get_txc!(card, true)?; let mut txc = openpgp_card_pcsc::get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -220,7 +220,7 @@ fn main() -> Result<(), Box<dyn Error>> {
println!("The following OpenPGP cards are connected to your system:"); println!("The following OpenPGP cards are connected to your system:");
for mut card in PcscCard::cards()? { for mut card in PcscCard::cards()? {
let mut txc = openpgp_card_pcsc::get_txc!(card, true)?; let mut txc = openpgp_card_pcsc::get_txc!(card)?;
let open = Open::new(&mut txc)?; let open = Open::new(&mut txc)?;
println!(" {}", open.application_identifier()?.ident()); println!(" {}", open.application_identifier()?.ident());

View file

@ -20,10 +20,15 @@ const FEATURE_MODIFY_PIN_DIRECT: u8 = 0x07;
/// in PcscCard) /// in PcscCard)
#[macro_export] #[macro_export]
macro_rules! get_txc { macro_rules! get_txc {
($card:expr, $reselect:expr) => {{ ($card:expr $(, $reselect:expr)? ) => {{
use openpgp_card::{Error, SmartcardError}; use openpgp_card::{Error, SmartcardError};
use pcsc::{Disposition, Protocols, ShareMode}; use pcsc::{Disposition, Protocols, ShareMode};
// use std::collections::HashMap;
#[allow(unused_assignments)]
let mut reselect = true;
$(
reselect = $reselect;
)?
let mut was_reset = false; let mut was_reset = false;
@ -52,7 +57,7 @@ macro_rules! get_txc {
// For initial card-opening, we don't do this, then // For initial card-opening, we don't do this, then
// the caller always expects a card that has not // the caller always expects a card that has not
// been "select"ed yet. // been "select"ed yet.
if $reselect { if reselect {
TxClient::select(&mut txc)?; TxClient::select(&mut txc)?;
} }

View file

@ -16,7 +16,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let cli = cli::Cli::from_args(); let cli = cli::Cli::from_args();
let mut card = PcscCard::open_by_ident(&cli.ident)?; let mut card = PcscCard::open_by_ident(&cli.ident)?;
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
let pinpad_verify = txc.feature_pinpad_verify(); let pinpad_verify = txc.feature_pinpad_verify();
let pinpad_modify = txc.feature_pinpad_modify(); let pinpad_modify = txc.feature_pinpad_modify();

View file

@ -72,7 +72,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
cmd, cmd,
} => { } => {
let mut card = util::open_card(&ident)?; let mut card = util::open_card(&ident)?;
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -139,7 +139,7 @@ fn list_cards() -> Result<()> {
println!("Available OpenPGP cards:"); println!("Available OpenPGP cards:");
for mut card in cards { for mut card in cards {
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
let open = Open::new(&mut txc)?; let open = Open::new(&mut txc)?;
println!(" {}", open.application_identifier()?.ident()); println!(" {}", open.application_identifier()?.ident());
@ -155,7 +155,7 @@ fn set_identity(
id: u8, id: u8,
) -> Result<(), Box<dyn std::error::Error>> { ) -> Result<(), Box<dyn std::error::Error>> {
let mut card = util::open_card(ident)?; let mut card = util::open_card(ident)?;
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
<dyn CardClient>::set_identity(&mut txc, id)?; <dyn CardClient>::set_identity(&mut txc, id)?;
@ -174,7 +174,7 @@ fn print_status(ident: Option<String>, verbose: bool) -> Result<()> {
} }
}; };
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -328,7 +328,7 @@ fn decrypt(
let input = util::open_or_stdin(input.as_deref())?; let input = util::open_or_stdin(input.as_deref())?;
let mut card = util::open_card(ident)?; let mut card = util::open_card(ident)?;
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -354,7 +354,7 @@ fn sign_detached(
let mut input = util::open_or_stdin(input.as_deref())?; let mut input = util::open_or_stdin(input.as_deref())?;
let mut card = util::open_card(ident)?; let mut card = util::open_card(ident)?;
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
let mut open = Open::new(&mut txc)?; let mut open = Open::new(&mut txc)?;
@ -373,7 +373,7 @@ fn sign_detached(
fn factory_reset(ident: &str) -> Result<()> { fn factory_reset(ident: &str) -> Result<()> {
println!("Resetting Card {}", ident); println!("Resetting Card {}", ident);
let mut card = util::open_card(ident)?; let mut card = util::open_card(ident)?;
let mut txc = get_txc!(card, true)?; let mut txc = get_txc!(card)?;
Open::new(&mut txc)?.factory_reset() Open::new(&mut txc)?.factory_reset()
} }