diff --git a/card-functionality/src/list-cards.rs b/card-functionality/src/list-cards.rs index ffb46a3..701fe69 100644 --- a/card-functionality/src/list-cards.rs +++ b/card-functionality/src/list-cards.rs @@ -3,16 +3,15 @@ use anyhow::Result; -use openpgp_card::OpenPgp; use openpgp_card_pcsc::PcscBackend; -use openpgp_card_sequoia::card::Open; +use openpgp_card_sequoia::card::Card; fn main() -> Result<()> { println!("The following OpenPGP cards are connected to your system:"); - for card in PcscBackend::cards(None)? { - let mut pgp = OpenPgp::new(Box::new(card)); - let open = Open::new(pgp.transaction()?)?; + for backend in PcscBackend::cards(None)? { + let mut card = Card::new(backend); + let open = card.transaction()?; println!(" {}", open.application_identifier()?.ident()); } diff --git a/openpgp-card-examples/Cargo.toml b/openpgp-card-examples/Cargo.toml index 8e9083d..5588278 100644 --- a/openpgp-card-examples/Cargo.toml +++ b/openpgp-card-examples/Cargo.toml @@ -14,7 +14,6 @@ documentation = "https://docs.rs/crate/openpgp-card-examples" [dependencies] sequoia-openpgp = "1.3" nettle = "7" -openpgp-card = { path = "../openpgp-card" } openpgp-card-pcsc = { path = "../pcsc" } openpgp-card-sequoia = { path = "../openpgp-card-sequoia" } chrono = "0.4" diff --git a/openpgp-card-examples/src/bin/decrypt.rs b/openpgp-card-examples/src/bin/decrypt.rs index a372424..4c8c7bb 100644 --- a/openpgp-card-examples/src/bin/decrypt.rs +++ b/openpgp-card-examples/src/bin/decrypt.rs @@ -1,9 +1,8 @@ // SPDX-FileCopyrightText: 2021 Wiktor Kwapisiewicz // SPDX-License-Identifier: MIT OR Apache-2.0 -use openpgp_card::OpenPgp; use openpgp_card_pcsc::PcscBackend; -use openpgp_card_sequoia::card::Open; +use openpgp_card_sequoia::card::Card; use openpgp::parse::{stream::DecryptorBuilder, Parse}; use openpgp::policy::StandardPolicy; @@ -20,10 +19,10 @@ fn main() -> Result<(), Box> { let card_ident = &args[0]; let pin_file = &args[1]; - let card = PcscBackend::open_by_ident(card_ident, None)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let card_backend = PcscBackend::open_by_ident(card_ident, None)?; - let mut open = Open::new(pgp.transaction()?)?; + let mut card = Card::new(card_backend); + let mut open = card.transaction()?; let pin = std::fs::read(pin_file)?; diff --git a/openpgp-card-examples/src/bin/detach-sign.rs b/openpgp-card-examples/src/bin/detach-sign.rs index eb42655..7aa36c0 100644 --- a/openpgp-card-examples/src/bin/detach-sign.rs +++ b/openpgp-card-examples/src/bin/detach-sign.rs @@ -1,9 +1,8 @@ // SPDX-FileCopyrightText: 2021 Wiktor Kwapisiewicz // SPDX-License-Identifier: MIT OR Apache-2.0 -use openpgp_card::OpenPgp; use openpgp_card_pcsc::PcscBackend; -use openpgp_card_sequoia::card::Open; +use openpgp_card_sequoia::card::Card; use openpgp::serialize::stream::{Armorer, Message, Signer}; use sequoia_openpgp as openpgp; @@ -19,10 +18,10 @@ fn main() -> Result<(), Box> { let card_ident = &args[0]; let pin_file = &args[1]; - let card = PcscBackend::open_by_ident(card_ident, None)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let card_backend = PcscBackend::open_by_ident(card_ident, None)?; - let mut open = Open::new(pgp.transaction()?)?; + let mut card = Card::new(card_backend); + let mut open = card.transaction()?; let pin = std::fs::read(pin_file)?; diff --git a/openpgp-card-sequoia/examples/test.rs b/openpgp-card-sequoia/examples/test.rs index f5ecf03..15178ad 100644 --- a/openpgp-card-sequoia/examples/test.rs +++ b/openpgp-card-sequoia/examples/test.rs @@ -35,8 +35,8 @@ fn main() -> Result<(), Box> { let test_card_ident = env::var("TEST_CARD_IDENT"); if let Ok(test_card_ident) = test_card_ident { - let card = PcscBackend::open_by_ident(&test_card_ident, None)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let backend = PcscBackend::open_by_ident(&test_card_ident, None)?; + let mut pgp = OpenPgp::new(backend); let mut open = Open::new(pgp.transaction()?)?; @@ -140,8 +140,8 @@ fn main() -> Result<(), Box> { // ----------------------------- // Open fresh Card for decrypt // ----------------------------- - let card = PcscBackend::open_by_ident(&test_card_ident, None)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let backend = PcscBackend::open_by_ident(&test_card_ident, None)?; + let mut pgp = OpenPgp::new(backend); let mut open = Open::new(pgp.transaction()?)?; @@ -180,8 +180,8 @@ fn main() -> Result<(), Box> { // ----------------------------- // Open fresh Card for signing // ----------------------------- - let card = PcscBackend::open_by_ident(&test_card_ident, None)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let backend = PcscBackend::open_by_ident(&test_card_ident, None)?; + let mut pgp = OpenPgp::new(backend); let mut open = Open::new(pgp.transaction()?)?; @@ -212,8 +212,8 @@ fn main() -> Result<(), Box> { println!("The following OpenPGP cards are connected to your system:"); - for card in PcscBackend::cards(None)? { - let mut pgp = OpenPgp::new(Box::new(card)); + for backend in PcscBackend::cards(None)? { + let mut pgp = OpenPgp::new(backend); let open = Open::new(pgp.transaction()?)?; diff --git a/openpgp-card-sequoia/src/lib.rs b/openpgp-card-sequoia/src/lib.rs index a9daaa1..0fa001e 100644 --- a/openpgp-card-sequoia/src/lib.rs +++ b/openpgp-card-sequoia/src/lib.rs @@ -18,7 +18,7 @@ //! //! # fn main() -> Result<(), Box> { //! for card in PcscBackend::cards(None)? { -//! let mut pgp = OpenPgp::new(Box::new(card)); +//! let mut pgp = OpenPgp::new(card); //! let mut open = Open::new(pgp.transaction()?)?; //! println!("Found OpenPGP card with ident '{}'", //! open.application_identifier()?.ident()); @@ -36,7 +36,7 @@ //! //! # fn main() -> Result<(), Box> { //! let card = PcscBackend::open_by_ident("abcd:12345678", None)?; -//! let mut pgp = OpenPgp::new(Box::new(card)); +//! let mut pgp = OpenPgp::new(card); //! let mut open = Open::new(pgp.transaction()?)?; //! # Ok(()) //! # } @@ -60,7 +60,7 @@ //! // Open card via PCSC //! use sequoia_openpgp::policy::StandardPolicy; //! let card = PcscBackend::open_by_ident("abcd:12345678", None)?; -//! let mut pgp = OpenPgp::new(Box::new(card)); +//! let mut pgp = OpenPgp::new(card); //! let mut open = Open::new(pgp.transaction()?)?; //! //! // Get authorization for user access to the card with password @@ -98,7 +98,7 @@ //! // Open card via PCSC //! use sequoia_openpgp::policy::StandardPolicy; //! let card = PcscBackend::open_by_ident("abcd:12345678", None)?; -//! let mut pgp = OpenPgp::new(Box::new(card)); +//! let mut pgp = OpenPgp::new(card); //! let mut open = Open::new(pgp.transaction()?)?; //! //! // Get authorization for signing access to the card with password @@ -125,7 +125,7 @@ //! # fn main() -> Result<(), Box> { //! // Open card via PCSC //! let card = PcscBackend::open_by_ident("abcd:12345678", None)?; -//! let mut pgp = OpenPgp::new(Box::new(card)); +//! let mut pgp = OpenPgp::new(card); //! let mut open = Open::new(pgp.transaction()?)?; //! //! // Get authorization for admin access to the card with password diff --git a/tools/src/bin/opgpcard/main.rs b/tools/src/bin/opgpcard/main.rs index b7c914b..6a866be 100644 --- a/tools/src/bin/opgpcard/main.rs +++ b/tools/src/bin/opgpcard/main.rs @@ -18,7 +18,7 @@ use sequoia_openpgp::Cert; use openpgp_card::algorithm::AlgoSimple; use openpgp_card::card_do::{Sex, TouchPolicy}; use openpgp_card::{CardBackend, KeyType, OpenPgp}; -use openpgp_card_sequoia::card::{Admin, Open}; +use openpgp_card_sequoia::card::{Admin, Card, Open}; use openpgp_card_sequoia::util::{ make_cert, public_key_material_and_fp_to_key, public_key_material_to_key, }; @@ -105,7 +105,7 @@ fn main() -> Result<(), Box> { user_pin, } => { let card = util::open_card(&ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let mut open = Open::new(pgp.transaction()?)?; let user_pin = util::get_pin(&mut open, user_pin, ENTER_USER_PIN); @@ -175,7 +175,7 @@ fn main() -> Result<(), Box> { cmd, } => { let card = util::open_card(&ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let mut open = Open::new(pgp.transaction()?)?; let admin_pin = util::get_pin(&mut open, admin_pin, ENTER_ADMIN_PIN); @@ -348,7 +348,7 @@ fn main() -> Result<(), Box> { } cli::Command::Pin { ident, cmd } => { let card = util::open_card(&ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let pgpt = pgp.transaction()?; let pinpad_modify = pgpt.feature_pinpad_modify(); @@ -562,7 +562,7 @@ fn list_cards() -> Result<()> { let cards = util::cards()?; if !cards.is_empty() { for card in cards { - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let open = Open::new(pgp.transaction()?)?; println!(" {}", open.application_identifier()?.ident()); } @@ -574,7 +574,7 @@ fn list_cards() -> Result<()> { fn set_identity(ident: &str, id: u8) -> Result<(), Box> { let card = util::open_card(ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let mut pgpt = pgp.transaction()?; pgpt.set_identity(id)?; @@ -586,11 +586,11 @@ fn set_identity(ident: &str, id: u8) -> Result<(), Box> { /// is plugged in, that card is returned. (We don't This fn pick_card_for_reading(ident: Option) -> Result> { if let Some(ident) = ident { - Ok(Box::new(util::open_card(&ident)?)) + Ok(util::open_card(&ident)?) } else { let mut cards = util::cards()?; if cards.len() == 1 { - Ok(Box::new(cards.pop().unwrap())) + Ok(cards.pop().unwrap()) } else if cards.is_empty() { Err(anyhow::anyhow!("No cards found")) } else { @@ -986,7 +986,7 @@ fn decrypt( let input = util::open_or_stdin(input)?; let card = util::open_card(ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let mut open = Open::new(pgp.transaction()?)?; @@ -1011,7 +1011,7 @@ fn sign_detached( let mut input = util::open_or_stdin(input)?; let card = util::open_card(ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut pgp = OpenPgp::new(card); let mut open = Open::new(pgp.transaction()?)?; @@ -1032,9 +1032,9 @@ fn sign_detached( fn factory_reset(ident: &str) -> Result<()> { println!("Resetting Card {}", ident); let card = util::open_card(ident)?; - let mut pgp = OpenPgp::new(Box::new(card)); + let mut card = Card::new(card); - let mut open = Open::new(pgp.transaction()?)?; + let mut open = card.transaction()?; open.factory_reset().map_err(|e| anyhow!(e)) } diff --git a/tools/src/bin/opgpcard/util.rs b/tools/src/bin/opgpcard/util.rs index 918b085..6603808 100644 --- a/tools/src/bin/opgpcard/util.rs +++ b/tools/src/bin/opgpcard/util.rs @@ -10,12 +10,12 @@ use openpgp_card::{CardBackend, Error, StatusBytes}; use openpgp_card_pcsc::PcscBackend; use openpgp_card_sequoia::card::{Admin, Open, Sign, User}; -pub(crate) fn cards() -> Result, Error> { - PcscBackend::cards(None).map(|cards| cards.into_iter().collect()) +pub(crate) fn cards() -> Result>, Error> { + PcscBackend::cards(None).map(|cards| cards.into_iter().map(|c| c.into()).collect()) } -pub(crate) fn open_card(ident: &str) -> Result { - PcscBackend::open_by_ident(ident, None) +pub(crate) fn open_card(ident: &str) -> Result, Error> { + Ok(PcscBackend::open_by_ident(ident, None)?.into()) } /// Get pin from file. Or via user input, if no file and no pinpad is available.