add rustfmt.toml and set group_imports = "StdExternalCrate"
This commit is contained in:
parent
87a80a4797
commit
27697cb2c5
44 changed files with 109 additions and 116 deletions
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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};
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
// SPDX-License-Identifier: MIT OR Apache-2.0
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use card_functionality::cards::TestConfig;
|
||||
use card_functionality::tests::*;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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>> {
|
||||
|
|
|
@ -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>> {
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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.
|
||||
///
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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((
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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};
|
||||
|
||||
|
|
|
@ -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
4
rustfmt.toml
Normal file
|
@ -0,0 +1,4 @@
|
|||
# SPDX-FileCopyrightText: 2022 Heiko Schaefer <heiko@schaefer.name>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
group_imports = "StdExternalCrate"
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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::{
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue