diff --git a/Cargo.lock b/Cargo.lock index b31fb88..117b2c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,19 +46,41 @@ dependencies = [ "bech32", "console", "elliptic-curve", + "env_logger", "gumdrop", + "log", "p256", "sha2", "x509-parser", "yubikey-piv", ] +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + [[package]] name = "arrayvec" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "0.1.7" @@ -319,6 +341,19 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +[[package]] +name = "env_logger" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "ff" version = "0.8.0" @@ -399,6 +434,15 @@ dependencies = [ "syn", ] +[[package]] +name = "hermit-abi" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +dependencies = [ + "libc", +] + [[package]] name = "hkdf" version = "0.10.0" @@ -419,6 +463,12 @@ dependencies = [ "digest", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "lazy_static" version = "1.4.0" @@ -788,6 +838,8 @@ version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] @@ -986,6 +1038,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + [[package]] name = "terminal_size" version = "0.1.16" @@ -1089,6 +1150,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index ce73ec2..b34369c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,9 @@ age-plugin = "0.0" bech32 = "0.8" console = "0.14" elliptic-curve = "0.8" +env_logger = "0.8" gumdrop = "0.8" +log = "0.4" p256 = "0.7" sha2 = "0.9" x509-parser = "0.9" diff --git a/src/main.rs b/src/main.rs index 10246e2..fa128c0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ use age_plugin::run_state_machine; use gumdrop::Options; +use log::warn; use yubikey_piv::{ certificate::PublicKeyInfo, key::{RetiredSlotId, SlotId}, @@ -142,7 +143,19 @@ fn list(all: bool) -> Result<(), Error> { let mut readers = Readers::open()?; for reader in readers.iter()? { - let mut yubikey = reader.open()?; + let mut yubikey = match reader.open() { + Ok(yk) => yk, + Err(e) => { + use std::error::Error; + let reason = if let Some(inner) = e.source() { + format!("{}: {}", e, inner) + } else { + e.to_string() + }; + warn!("Ignoring {}: {}", reader.name(), reason); + continue; + } + }; for key in Key::list(&mut yubikey)? { // We only use the retired slots. @@ -194,6 +207,12 @@ fn list(all: bool) -> Result<(), Error> { } fn main() -> Result<(), Error> { + env_logger::builder() + .format_timestamp(None) + .filter_level(log::LevelFilter::Off) + .parse_default_env() + .init(); + let opts = PluginOptions::parse_args_default_or_exit(); if [opts.generate, opts.identity, opts.list, opts.list_all]