add rustfmt.toml and set group_imports = "StdExternalCrate"

This commit is contained in:
Heiko Schaefer 2022-11-03 11:44:59 +01:00
parent 87a80a4797
commit 27697cb2c5
No known key found for this signature in database
GPG key ID: 4A849A1904CCBD7D
44 changed files with 109 additions and 116 deletions

View file

@ -39,10 +39,10 @@ cargo-fmt:
stage: lint
image: rust:latest
before_script:
- rustup component add rustfmt
- rustup toolchain install nightly && rustup component add --toolchain nightly rustfmt
- *report-rust
script:
- cargo fmt -- --check
- cargo +nightly fmt -- --check
cache: [ ]
cargo-deny:

View file

@ -4,14 +4,14 @@
//! Wrapping of cards for tests. Open a list of cards, based on a
//! TestConfig configuration file
use anyhow::Result;
use pcsc::ShareMode;
use serde_derive::Deserialize;
use std::collections::BTreeMap;
use anyhow::Result;
use openpgp_card::{CardBackend, Error};
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_scdc::ScdBackend;
use pcsc::ShareMode;
use serde_derive::Deserialize;
const SHARE_MODE: Option<ShareMode> = Some(ShareMode::Shared);

View file

@ -1,14 +1,13 @@
// SPDX-FileCopyrightText: 2021 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use std::str::FromStr;
use sequoia_openpgp::Cert;
use anyhow::Result;
use card_functionality::cards::TestConfig;
use card_functionality::tests::*;
use card_functionality::util;
use sequoia_openpgp::Cert;
fn main() -> Result<()> {
env_logger::init();

View file

@ -1,9 +1,9 @@
// SPDX-FileCopyrightText: 2021 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use std::str::FromStr;
use anyhow::Result;
use card_functionality::cards::TestConfig;
use card_functionality::tests::*;
use card_functionality::util;

View file

@ -2,7 +2,6 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};

View file

@ -2,7 +2,6 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use card_functionality::cards::TestConfig;
use card_functionality::tests::*;

View file

@ -1,18 +1,11 @@
// SPDX-FileCopyrightText: 2021-2022 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use std::convert::TryFrom;
use std::str::FromStr;
use std::string::FromUtf8Error;
use thiserror;
use sequoia_openpgp::parse::Parse;
use sequoia_openpgp::policy::StandardPolicy;
use sequoia_openpgp::serialize::SerializeInto;
use sequoia_openpgp::types::{HashAlgorithm, SymmetricAlgorithm};
use sequoia_openpgp::Cert;
use anyhow::Result;
use openpgp_card::algorithm::AlgoSimple;
use openpgp_card::card_do::{KeyGenerationTime, Sex};
use openpgp_card::{Error, KeyType, OpenPgp, OpenPgpTransaction, StatusBytes};
@ -21,6 +14,12 @@ use openpgp_card_sequoia::util::{
make_cert, public_key_material_and_fp_to_key, public_key_material_to_key,
};
use openpgp_card_sequoia::{state::Transaction, Card};
use sequoia_openpgp::parse::Parse;
use sequoia_openpgp::policy::StandardPolicy;
use sequoia_openpgp::serialize::SerializeInto;
use sequoia_openpgp::types::{HashAlgorithm, SymmetricAlgorithm};
use sequoia_openpgp::Cert;
use thiserror;
use crate::cards::TestCardData;
use crate::util;

View file

@ -1,10 +1,14 @@
// SPDX-FileCopyrightText: 2021 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use std::io::Write;
use std::time::SystemTime;
use anyhow::Result;
use openpgp_card::card_do::KeyGenerationTime;
use openpgp_card::{KeyType, OpenPgpTransaction};
use openpgp_card_sequoia::sq_util;
use openpgp_card_sequoia::util::vka_as_uploadable_key;
use sequoia_openpgp::parse::stream::{
DetachedVerifierBuilder, MessageLayer, MessageStructure, VerificationHelper,
};
@ -13,11 +17,6 @@ use sequoia_openpgp::policy::{Policy, StandardPolicy};
use sequoia_openpgp::serialize::stream::{Armorer, Encryptor, LiteralWriter, Message};
use sequoia_openpgp::Cert;
use openpgp_card::card_do::KeyGenerationTime;
use openpgp_card::{KeyType, OpenPgpTransaction};
use openpgp_card_sequoia::sq_util;
use openpgp_card_sequoia::util::vka_as_uploadable_key;
pub const SP: &StandardPolicy = &StandardPolicy::new();
pub(crate) fn upload_subkeys(

View file

@ -1,11 +1,10 @@
// SPDX-FileCopyrightText: 2021 Wiktor Kwapisiewicz <wiktor@metacode.biz>
// SPDX-License-Identifier: MIT OR Apache-2.0
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
use openpgp::parse::{stream::DecryptorBuilder, Parse};
use openpgp::policy::StandardPolicy;
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
use sequoia_openpgp as openpgp;
fn main() -> Result<(), Box<dyn std::error::Error>> {

View file

@ -1,10 +1,9 @@
// SPDX-FileCopyrightText: 2021 Wiktor Kwapisiewicz <wiktor@metacode.biz>
// SPDX-License-Identifier: MIT OR Apache-2.0
use openpgp::serialize::stream::{Armorer, Message, Signer};
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_sequoia::{state::Open, Card};
use openpgp::serialize::stream::{Armorer, Message, Signer};
use sequoia_openpgp as openpgp;
fn main() -> Result<(), Box<dyn std::error::Error>> {

View file

@ -1,20 +1,18 @@
// SPDX-FileCopyrightText: 2021-2022 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use std::env;
use std::error::Error;
use sequoia_openpgp::parse::Parse;
use sequoia_openpgp::policy::StandardPolicy;
use sequoia_openpgp::Cert;
use anyhow::Result;
use openpgp_card::card_do::Sex;
use openpgp_card::KeyType;
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_sequoia::sq_util;
use openpgp_card_sequoia::{state::Open, Card};
use sequoia_openpgp::parse::Parse;
use sequoia_openpgp::policy::StandardPolicy;
use sequoia_openpgp::Cert;
// Filename of test key and test message to use

View file

@ -2,17 +2,15 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::anyhow;
use openpgp::crypto;
use openpgp::crypto::mpi;
use openpgp::crypto::SessionKey;
use openpgp::packet;
use openpgp::parse::stream::{DecryptionHelper, MessageStructure, VerificationHelper};
use openpgp::types::{Curve, SymmetricAlgorithm};
use sequoia_openpgp as openpgp;
use openpgp_card::crypto_data::Cryptogram;
use openpgp_card::OpenPgpTransaction;
use sequoia_openpgp as openpgp;
use crate::PublicKey;

View file

@ -141,12 +141,6 @@
//! # }
//! ```
use crate::decryptor::CardDecryptor;
use crate::signer::CardSigner;
use crate::state::{Admin, Open, Sign, State, Transaction, User};
use crate::util::{
public_key_material_and_fp_to_key, public_to_fingerprint, vka_as_uploadable_key,
};
use openpgp::packet::{key, Key};
use openpgp_card::algorithm::{Algo, AlgoInfo, AlgoSimple};
use openpgp_card::card_do::{
@ -161,6 +155,13 @@ use sequoia_openpgp::cert::prelude::ValidErasedKeyAmalgamation;
use sequoia_openpgp::packet::key::SecretParts;
use sequoia_openpgp::types::{HashAlgorithm, SymmetricAlgorithm};
use crate::decryptor::CardDecryptor;
use crate::signer::CardSigner;
use crate::state::{Admin, Open, Sign, State, Transaction, User};
use crate::util::{
public_key_material_and_fp_to_key, public_to_fingerprint, vka_as_uploadable_key,
};
mod decryptor;
mod privkey;
mod signer;

View file

@ -12,11 +12,10 @@ use openpgp::packet::{
Key,
};
use openpgp::types::Timestamp;
use sequoia_openpgp as openpgp;
use openpgp_card::card_do::{Fingerprint, KeyGenerationTime};
use openpgp_card::crypto_data::{CardUploadableKey, EccKey, EccType, PrivateKeyMaterial, RSAKey};
use openpgp_card::Error;
use sequoia_openpgp as openpgp;
use sequoia_openpgp::types::Curve;
/// A SequoiaKey represents the private cryptographic key material of an

View file

@ -4,14 +4,12 @@
use std::convert::TryInto;
use anyhow::anyhow;
use openpgp::crypto;
use openpgp::crypto::mpi;
use openpgp::types::{Curve, PublicKeyAlgorithm};
use sequoia_openpgp as openpgp;
use openpgp_card::crypto_data::Hash;
use openpgp_card::OpenPgpTransaction;
use sequoia_openpgp as openpgp;
use crate::PublicKey;

View file

@ -5,9 +5,9 @@
//!
//! These helpers are (almost) entirely unrelated to OpenPGP card.
use anyhow::{anyhow, Context, Result};
use std::io;
use anyhow::{anyhow, Context, Result};
use openpgp::armor;
use openpgp::cert::amalgamation::key::{ErasedKeyAmalgamation, ValidErasedKeyAmalgamation};
use openpgp::crypto;
@ -19,10 +19,10 @@ use openpgp::parse::{
use openpgp::policy::Policy;
use openpgp::serialize::stream::{Message, Signer};
use openpgp::{Cert, Fingerprint};
use openpgp_card::{Error, KeyType};
use sequoia_openpgp as openpgp;
use crate::{CardDecryptor, CardSigner};
use openpgp_card::{Error, KeyType};
/// Retrieve a (sub)key from a Cert, for a given KeyType.
///

View file

@ -7,7 +7,6 @@ use std::convert::TryFrom;
use std::convert::TryInto;
use anyhow::{anyhow, Result};
use openpgp::cert::amalgamation::key::ValidErasedKeyAmalgamation;
use openpgp::crypto::mpi;
use openpgp::packet::Signature;
@ -20,12 +19,11 @@ use openpgp::types::{
HashAlgorithm, KeyFlags, PublicKeyAlgorithm, SignatureType, SymmetricAlgorithm, Timestamp,
};
use openpgp::{Cert, Packet};
use sequoia_openpgp as openpgp;
use openpgp_card::algorithm::{Algo, Curve};
use openpgp_card::card_do::{Fingerprint, KeyGenerationTime};
use openpgp_card::crypto_data::{CardUploadableKey, PublicKeyMaterial};
use openpgp_card::{Error, KeyType};
use sequoia_openpgp as openpgp;
use crate::privkey::SequoiaKey;
use crate::state::Transaction;

View file

@ -9,13 +9,13 @@
//! [`AlgoSimple`] offers a shorthand for specifying an algorithm,
//! specifically for key generation on the card.
use std::convert::TryFrom;
use std::fmt;
use crate::card_do::ApplicationRelatedData;
use crate::crypto_data::EccType;
use crate::{keys, oid, Error, KeyType};
use std::convert::TryFrom;
use std::fmt;
/// A shorthand way to specify algorithms (e.g. for key generation).
#[derive(Clone, Copy, Debug)]
#[non_exhaustive]

View file

@ -1,9 +1,10 @@
// SPDX-FileCopyrightText: 2021 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use crate::{Error, StatusBytes};
use std::convert::{TryFrom, TryInto};
use crate::{Error, StatusBytes};
/// Response from the card to a command.
///
/// This object contains pure payload, without the status bytes.
@ -114,9 +115,10 @@ impl TryFrom<Vec<u8>> for RawResponse {
#[cfg(test)]
mod tests {
use crate::apdu::response::RawResponse;
use std::convert::TryFrom;
use crate::apdu::response::RawResponse;
#[test]
fn test_two_bytes_data_response() {
let res = RawResponse::try_from(vec![0x01, 0x02, 0x90, 0x00]).unwrap();

View file

@ -3,11 +3,12 @@
//! OpenPGP card data objects (DO)
use chrono::{DateTime, Utc};
use std::convert::{TryFrom, TryInto};
use std::fmt::{Display, Formatter, Write};
use std::time::{Duration, UNIX_EPOCH};
use chrono::{DateTime, Utc};
use crate::{algorithm::Algo, tlv::Tlv, Error, KeySet, KeyType, Tags};
mod algo_attrs;

View file

@ -4,11 +4,11 @@
//! 4.4.3.11 Algorithm Information
use std::convert::TryFrom;
use std::fmt;
use nom::branch::alt;
use nom::combinator::map;
use nom::{branch, bytes::complete as bytes, combinator, multi, sequence};
use std::fmt;
use crate::algorithm::{Algo, AlgoInfo};
use crate::card_do::{algo_attrs, complete};

View file

@ -3,9 +3,10 @@
//! 4.2.1 Application Identifier (AID)
use nom::{bytes::complete as bytes, number::complete as number};
use std::convert::TryFrom;
use nom::{bytes::complete as bytes, number::complete as number};
use crate::card_do::{complete, ApplicationIdentifier};
fn parse(input: &[u8]) -> nom::IResult<&[u8], ApplicationIdentifier> {

View file

@ -122,10 +122,12 @@ impl TryFrom<(&[u8], u16)> for ExtendedCapabilities {
#[cfg(test)]
mod test {
use crate::card_do::extended_cap::ExtendedCapabilities;
use hex_literal::hex;
use std::convert::TryFrom;
use hex_literal::hex;
use crate::card_do::extended_cap::ExtendedCapabilities;
#[test]
fn test_yk5() {
// YubiKey 5

View file

@ -4,10 +4,11 @@
//! 4.1.3.1 Extended length information
//! (Introduced in V3.0)
use std::convert::TryFrom;
use nom::{bytes::complete::tag, number::complete as number, sequence};
use crate::card_do::{complete, ExtendedLengthInfo};
use std::convert::TryFrom;
fn parse(input: &[u8]) -> nom::IResult<&[u8], (u16, u16)> {
let (input, (_, cmd, _, resp)) = nom::combinator::all_consuming(sequence::tuple((

View file

@ -3,11 +3,12 @@
//! Fingerprint for a single key slot
use nom::{bytes::complete as bytes, combinator, sequence};
use std::convert::TryFrom;
use std::convert::TryInto;
use std::fmt;
use nom::{bytes::complete as bytes, combinator, sequence};
use crate::card_do::{Fingerprint, KeySet};
use crate::Error;

View file

@ -3,9 +3,10 @@
//! 6 Historical Bytes
use std::convert::TryFrom;
use crate::card_do::{CardCapabilities, CardServiceData, HistoricalBytes};
use crate::Error;
use std::convert::TryFrom;
impl CardCapabilities {
pub fn command_chaining(&self) -> bool {
@ -199,9 +200,10 @@ impl TryFrom<&[u8]> for HistoricalBytes {
#[cfg(test)]
mod test {
use super::*;
use std::convert::TryInto;
use super::*;
#[test]
fn test_split_tl() {
assert_eq!(split_tl(0x31), (3, 1));

View file

@ -3,11 +3,13 @@
//! Generation date/time of key pair (see spec pg. 24)
use crate::card_do::{KeyGenerationTime, KeySet};
use crate::Error;
use std::convert::TryFrom;
use chrono::{DateTime, NaiveDateTime, Utc};
use nom::{combinator, number::complete as number, sequence};
use std::convert::TryFrom;
use crate::card_do::{KeyGenerationTime, KeySet};
use crate::Error;
impl From<KeyGenerationTime> for DateTime<Utc> {
fn from(kg: KeyGenerationTime) -> Self {
@ -73,9 +75,10 @@ impl TryFrom<&[u8]> for KeySet<KeyGenerationTime> {
#[cfg(test)]
mod test {
use super::*;
use std::convert::TryInto;
use super::*;
#[test]
fn test() {
let data3 = [

View file

@ -3,9 +3,10 @@
//! PW status Bytes (see spec page 23)
use std::convert::TryFrom;
use crate::card_do::PWStatusBytes;
use crate::Error;
use std::convert::TryFrom;
impl PWStatusBytes {
/// PUT DO for PW Status Bytes accepts either 1 or 4 bytes of data.
@ -75,9 +76,10 @@ impl TryFrom<&[u8]> for PWStatusBytes {
#[cfg(test)]
mod test {
use super::*;
use std::convert::TryInto;
use super::*;
#[test]
fn test() {
let data = [0x0, 0x40, 0x40, 0x40, 0x3, 0x0, 0x3];

View file

@ -38,14 +38,13 @@ mod oid;
mod openpgp;
mod tlv;
pub use crate::errors::{Error, SmartcardError, StatusBytes};
pub use crate::openpgp::{OpenPgp, OpenPgpTransaction};
use std::convert::TryInto;
use std::ops::{Deref, DerefMut};
use crate::apdu::commands;
use crate::card_do::ApplicationRelatedData;
pub use crate::errors::{Error, SmartcardError, StatusBytes};
pub use crate::openpgp::{OpenPgp, OpenPgpTransaction};
use crate::tlv::{tag::Tag, value::Value, Tlv};
/// The CardBackend trait defines a connection with an OpenPGP card via a

View file

@ -5,9 +5,10 @@ pub(crate) mod length;
pub(crate) mod tag;
pub(crate) mod value;
use nom::{bytes::complete as bytes, combinator};
use std::convert::TryFrom;
use nom::{bytes::complete as bytes, combinator};
use crate::card_do::complete;
use crate::tlv::{length::tlv_encode_length, tag::Tag, value::Value};
@ -81,9 +82,10 @@ impl TryFrom<&[u8]> for Tlv {
#[cfg(test)]
mod test {
use hex_literal::hex;
use std::convert::TryFrom;
use hex_literal::hex;
use super::{Tlv, Value};
use crate::{Error, Tags};

View file

@ -5,10 +5,10 @@
//! `openpgp-card`. It uses the PCSC middleware to access the OpenPGP
//! application on smart cards.
use iso7816_tlv::simple::Tlv;
use std::collections::HashMap;
use std::convert::TryInto;
use iso7816_tlv::simple::Tlv;
use openpgp_card::card_do::ApplicationRelatedData;
use openpgp_card::{CardBackend, CardCaps, CardTransaction, Error, PinType, SmartcardError};

4
rustfmt.toml Normal file
View file

@ -0,0 +1,4 @@
# SPDX-FileCopyrightText: 2022 Heiko Schaefer <heiko@schaefer.name>
# SPDX-License-Identifier: CC0-1.0
group_imports = "StdExternalCrate"

View file

@ -7,15 +7,15 @@
//!
//! Note that (unlike `openpgp-card-pcsc`), this backend doesn't implement transaction guarantees.
use std::sync::Mutex;
use futures::StreamExt;
use lazy_static::lazy_static;
use openpgp_card::{CardBackend, CardCaps, CardTransaction, Error, PinType, SmartcardError};
use sequoia_ipc::assuan::Response;
use sequoia_ipc::gnupg::{Agent, Context};
use std::sync::Mutex;
use tokio::runtime::Runtime;
use openpgp_card::{CardBackend, CardCaps, CardTransaction, Error, PinType, SmartcardError};
lazy_static! {
static ref RT: Mutex<Runtime> = Mutex::new(tokio::runtime::Runtime::new().unwrap());
}

View file

@ -3,16 +3,15 @@
// SPDX-FileCopyrightText: 2022 Nora Widdecke <mail@nora.pink>
// SPDX-License-Identifier: MIT OR Apache-2.0
use std::path::PathBuf;
use anyhow::{anyhow, Result};
use clap::{Parser, ValueEnum};
use openpgp_card_sequoia::state::{Admin, Open, Transaction};
use openpgp_card_sequoia::types::AlgoSimple;
use openpgp_card_sequoia::util::public_key_material_to_key;
use sequoia_openpgp::types::{HashAlgorithm, SymmetricAlgorithm};
use std::path::PathBuf;
use openpgp_card_sequoia::{sq_util, PublicKey};
use openpgp_card_sequoia::{types::KeyType, Card};
use sequoia_openpgp::cert::prelude::ValidErasedKeyAmalgamation;
use sequoia_openpgp::packet::key::{SecretParts, UnspecifiedRole};
use sequoia_openpgp::packet::Key;
@ -20,11 +19,9 @@ use sequoia_openpgp::parse::Parse;
use sequoia_openpgp::policy::Policy;
use sequoia_openpgp::policy::StandardPolicy;
use sequoia_openpgp::serialize::SerializeInto;
use sequoia_openpgp::types::{HashAlgorithm, SymmetricAlgorithm};
use sequoia_openpgp::Cert;
use openpgp_card_sequoia::types::AlgoSimple;
use openpgp_card_sequoia::{types::KeyType, Card};
use crate::versioned_output::{OutputBuilder, OutputFormat, OutputVersion};
use crate::{output, util, ENTER_ADMIN_PIN, ENTER_USER_PIN};

View file

@ -7,9 +7,8 @@ use std::path::PathBuf;
use anyhow::Result;
use clap::{Parser, ValueEnum};
use openpgp_card_sequoia::{state::Open, Card};
use openpgp_card_sequoia::types::KeyType;
use openpgp_card_sequoia::{state::Open, Card};
use crate::versioned_output::{OutputBuilder, OutputFormat, OutputVersion};
use crate::ENTER_USER_PIN;

View file

@ -2,11 +2,10 @@
// SPDX-FileCopyrightText: 2022 Nora Widdecke <mail@nora.pink>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::{anyhow, Result};
use clap::Parser;
use std::path::PathBuf;
use anyhow::{anyhow, Result};
use clap::Parser;
use openpgp_card_sequoia::{state::Open, Card};
use sequoia_openpgp::{
parse::{stream::DecryptorBuilder, Parse},

View file

@ -6,7 +6,6 @@ use std::path::PathBuf;
use anyhow::Result;
use clap::Parser;
use openpgp_card_sequoia::{state::Open, state::Transaction, Card};
use crate::util;

View file

@ -3,16 +3,14 @@
// SPDX-FileCopyrightText: 2022 Nora Widdecke <mail@nora.pink>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::Result;
use clap::Parser;
use std::path::PathBuf;
use openpgp_card_sequoia::{state::Open, Card};
use sequoia_openpgp::serialize::SerializeInto;
use anyhow::Result;
use clap::Parser;
use openpgp_card_sequoia::types::KeyType;
use openpgp_card_sequoia::util::public_key_material_and_fp_to_key;
use openpgp_card_sequoia::{state::Open, Card};
use sequoia_openpgp::serialize::SerializeInto;
use crate::output;
use crate::pick_card_for_reading;

View file

@ -2,11 +2,10 @@
// SPDX-FileCopyrightText: 2022 Nora Widdecke <mail@nora.pink>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::{anyhow, Result};
use clap::Parser;
use std::path::{Path, PathBuf};
use anyhow::{anyhow, Result};
use clap::Parser;
use openpgp_card_sequoia::{state::Open, Card};
use sequoia_openpgp::serialize::stream::{Armorer, Message, Signer};

View file

@ -5,9 +5,8 @@
use anyhow::Result;
use clap::Parser;
use openpgp_card_sequoia::{state::Open, Card};
use openpgp_card_sequoia::types::KeyType;
use openpgp_card_sequoia::{state::Open, Card};
use crate::output;
use crate::pick_card_for_reading;

View file

@ -5,9 +5,8 @@
use anyhow::Result;
use clap::Parser;
use openpgp_card_sequoia::{state::Open, Card};
use openpgp_card_sequoia::types::KeyType;
use openpgp_card_sequoia::{state::Open, Card};
use crate::output;
use crate::pick_card_for_reading;

View file

@ -5,13 +5,11 @@
use anyhow::Result;
use clap::Parser;
use sequoia_openpgp::Cert;
use openpgp_card_sequoia::types::CardBackend;
use openpgp_card_sequoia::util::make_cert;
use openpgp_card_sequoia::PublicKey;
use openpgp_card_sequoia::{state::Open, state::Transaction, Card};
use sequoia_openpgp::Cert;
mod cli;
mod commands;

View file

@ -1,9 +1,9 @@
// SPDX-FileCopyrightText: 2021-2022 Heiko Schaefer <heiko@schaefer.name>
// SPDX-License-Identifier: MIT OR Apache-2.0
use anyhow::{anyhow, Context, Result};
use std::path::{Path, PathBuf};
use anyhow::{anyhow, Context, Result};
use openpgp_card_pcsc::PcscBackend;
use openpgp_card_sequoia::state::{Admin, Sign, Transaction, User};
use openpgp_card_sequoia::types::{

View file

@ -1,10 +1,11 @@
// SPDX-FileCopyrightText: 2022 Lars Wirzenius <liw@liw.fi>
// SPDX-License-Identifier: MIT OR Apache-2.0
use std::str::FromStr;
use clap::ValueEnum;
use semver::Version;
use serde::{Serialize, Serializer};
use std::str::FromStr;
#[derive(Debug, Copy, Clone, Eq, PartialEq, ValueEnum)]
pub enum OutputFormat {