From a8b2814b172295ac4f3ff12246a3537c5568c643 Mon Sep 17 00:00:00 2001 From: ryan Date: Sun, 11 Aug 2024 19:25:25 -0400 Subject: [PATCH] make clippy happy --- crates/daemon/keyforkd-client/src/tests.rs | 4 +- crates/daemon/keyforkd/src/main.rs | 2 +- crates/daemon/keyforkd/src/service.rs | 4 +- crates/derive/keyfork-derive-age/Cargo.toml | 16 +++++ crates/derive/keyfork-derive-age/src/main.rs | 69 +++++++++++++++++++ crates/derive/keyfork-derive-key/src/main.rs | 2 +- .../derive/keyfork-derive-openpgp/src/main.rs | 2 +- .../src/extended_key/mod.rs | 4 +- .../derive/keyfork-derive-util/src/tests.rs | 4 +- .../src/bin/keyfork-shard-combine-openpgp.rs | 2 +- .../src/bin/keyfork-shard-decrypt-openpgp.rs | 2 +- .../src/bin/keyfork-shard-remote.rs | 2 +- .../src/bin/keyfork-shard-split-openpgp.rs | 2 +- crates/keyfork-shard/src/openpgp.rs | 2 +- .../src/bin/keyfork-qrcode-scan.rs | 2 +- .../qrcode/keyfork-zbar/examples/v4l-scan.rs | 2 +- crates/qrcode/keyfork-zbar/src/symbol.rs | 2 +- .../util/keyfork-crossterm/examples/is_tty.rs | 2 +- crates/util/keyfork-entropy/src/main.rs | 2 +- .../src/bin/keyfork-mnemonic-from-seed.rs | 2 +- .../examples/test-basic-prompt.rs | 2 +- crates/util/keyfork-prompt/src/terminal.rs | 6 ++ 22 files changed, 114 insertions(+), 23 deletions(-) create mode 100644 crates/derive/keyfork-derive-age/Cargo.toml create mode 100644 crates/derive/keyfork-derive-age/src/main.rs diff --git a/crates/daemon/keyforkd-client/src/tests.rs b/crates/daemon/keyforkd-client/src/tests.rs index 9bcb3e4..e0e2f8c 100644 --- a/crates/daemon/keyforkd-client/src/tests.rs +++ b/crates/daemon/keyforkd-client/src/tests.rs @@ -11,7 +11,7 @@ fn secp256k1_test_suite() { let tests = test_data() .unwrap() - .remove(&"secp256k1".to_string()) + .remove("secp256k1") .unwrap(); for seed_test in tests { @@ -70,7 +70,7 @@ fn secp256k1_test_suite() { fn ed25519_test_suite() { use ed25519_dalek::SigningKey; - let tests = test_data().unwrap().remove(&"ed25519".to_string()).unwrap(); + let tests = test_data().unwrap().remove("ed25519").unwrap(); for seed_test in tests { let seed = seed_test.seed; diff --git a/crates/daemon/keyforkd/src/main.rs b/crates/daemon/keyforkd/src/main.rs index 06e6485..03390f4 100644 --- a/crates/daemon/keyforkd/src/main.rs +++ b/crates/daemon/keyforkd/src/main.rs @@ -1,4 +1,4 @@ -//! +//! Launch the Keyfork Server from using a mnemonic passed through standard input. use keyfork_mnemonic::Mnemonic; diff --git a/crates/daemon/keyforkd/src/service.rs b/crates/daemon/keyforkd/src/service.rs index cc06a7f..d638471 100644 --- a/crates/daemon/keyforkd/src/service.rs +++ b/crates/daemon/keyforkd/src/service.rs @@ -113,7 +113,7 @@ mod tests { async fn properly_derives_secp256k1() { let tests = test_data() .unwrap() - .remove(&"secp256k1".to_string()) + .remove("secp256k1") .unwrap(); for per_seed in tests { @@ -146,7 +146,7 @@ mod tests { #[tokio::test] async fn properly_derives_ed25519() { - let tests = test_data().unwrap().remove(&"ed25519".to_string()).unwrap(); + let tests = test_data().unwrap().remove("ed25519").unwrap(); for per_seed in tests { let seed = &per_seed.seed; diff --git a/crates/derive/keyfork-derive-age/Cargo.toml b/crates/derive/keyfork-derive-age/Cargo.toml new file mode 100644 index 0000000..6d76f30 --- /dev/null +++ b/crates/derive/keyfork-derive-age/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "keyfork-derive-age" +version = "0.1.0" +edition = "2021" +license = "AGPL-3.0-only" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +keyfork-derive-util = { workspace = true, default-features = false, features = ["ed25519"] } +keyforkd-client = { workspace = true } +smex = { workspace = true } +thiserror = "1.0.48" +bech32 = "0.11.0" +keyfork-derive-path-data = { workspace = true } +ed25519-dalek = "2.1.1" diff --git a/crates/derive/keyfork-derive-age/src/main.rs b/crates/derive/keyfork-derive-age/src/main.rs new file mode 100644 index 0000000..c60a014 --- /dev/null +++ b/crates/derive/keyfork-derive-age/src/main.rs @@ -0,0 +1,69 @@ +use std::{env, process::ExitCode, str::FromStr}; + +use keyfork_derive_path_data::paths; +use keyfork_derive_util::{DerivationPath, ExtendedPrivateKey, PathError}; +use keyforkd_client::Client; + +use ed25519_dalek::SigningKey; + +type XPrv = ExtendedPrivateKey; + +/// Any error that can occur while deriving a key. +#[derive(Debug, thiserror::Error)] +pub enum Error { + /// The given path could not be parsed. + #[error("Could not parse the given path: {0}")] + PathFormat(#[from] PathError), + + /// The request to derive data failed. + #[error("Unable to perform key derivation request: {0}")] + KeyforkdClient(#[from] keyforkd_client::Error), +} + +#[allow(missing_docs)] +pub type Result = std::result::Result; + +fn validate(path: &str) -> Result { + let index = paths::AGE.inner().first().unwrap(); + + let path = DerivationPath::from_str(path)?; + assert!( + path.len() >= 2, + "Expected path of at least m/{index}/account_id'" + ); + + let given_index = path.iter().next().expect("checked .len() above"); + assert_eq!( + index, given_index, + "Expected derivation path starting with m/{index}, got: {given_index}", + ); + + Ok(path) +} + +fn run() -> Result<(), Box> { + let mut args = env::args(); + let program_name = args.next().expect("program name"); + let args = args.collect::>(); + let path = match args.as_slice() { + [path] => validate(path)?, + _ => panic!("Usage: {program_name} path"), + }; + + let mut client = Client::discover_socket()?; + // TODO: should this key be clamped to Curve25519 specs? + let xprv: XPrv = client.request_xprv(&path)?; + let hrp = bech32::Hrp::parse("AGE-SECRET-KEY-")?; + let age_key = bech32::encode::(hrp, &xprv.private_key().to_bytes())?; + println!("{}", age_key.to_uppercase()); + Ok(()) +} + +fn main() -> ExitCode { + if let Err(e) = run() { + eprintln!("Error: {e}"); + ExitCode::FAILURE + } else { + ExitCode::SUCCESS + } +} diff --git a/crates/derive/keyfork-derive-key/src/main.rs b/crates/derive/keyfork-derive-key/src/main.rs index af3b236..4a0438f 100644 --- a/crates/derive/keyfork-derive-key/src/main.rs +++ b/crates/derive/keyfork-derive-key/src/main.rs @@ -1,4 +1,4 @@ -//! +//! Query the Keyfork Server to generate a hex-encoded key for a given algorithm. use std::{env, process::ExitCode, str::FromStr}; diff --git a/crates/derive/keyfork-derive-openpgp/src/main.rs b/crates/derive/keyfork-derive-openpgp/src/main.rs index 944129f..15b21f8 100644 --- a/crates/derive/keyfork-derive-openpgp/src/main.rs +++ b/crates/derive/keyfork-derive-openpgp/src/main.rs @@ -1,4 +1,4 @@ -//! +//! Query the Keyfork Servre to derive an OpenPGP Secret Key. use std::{env, process::ExitCode, str::FromStr}; diff --git a/crates/derive/keyfork-derive-util/src/extended_key/mod.rs b/crates/derive/keyfork-derive-util/src/extended_key/mod.rs index dec928f..f18f373 100644 --- a/crates/derive/keyfork-derive-util/src/extended_key/mod.rs +++ b/crates/derive/keyfork-derive-util/src/extended_key/mod.rs @@ -41,9 +41,9 @@ //! } //! ``` -/// +#[allow(missing_docs)] pub mod private_key; -/// +#[allow(missing_docs)] pub mod public_key; pub use {private_key::ExtendedPrivateKey, public_key::ExtendedPublicKey}; diff --git a/crates/derive/keyfork-derive-util/src/tests.rs b/crates/derive/keyfork-derive-util/src/tests.rs index f1804a0..89f6799 100644 --- a/crates/derive/keyfork-derive-util/src/tests.rs +++ b/crates/derive/keyfork-derive-util/src/tests.rs @@ -15,7 +15,7 @@ fn secp256k1() { let tests = test_data() .unwrap() - .remove(&"secp256k1".to_string()) + .remove("secp256k1") .unwrap(); for per_seed in tests { @@ -62,7 +62,7 @@ fn secp256k1() { fn ed25519() { use ed25519_dalek::SigningKey; - let tests = test_data().unwrap().remove(&"ed25519".to_string()).unwrap(); + let tests = test_data().unwrap().remove("ed25519").unwrap(); for per_seed in tests { let seed = &per_seed.seed; diff --git a/crates/keyfork-shard/src/bin/keyfork-shard-combine-openpgp.rs b/crates/keyfork-shard/src/bin/keyfork-shard-combine-openpgp.rs index 7c41238..2d3eb90 100644 --- a/crates/keyfork-shard/src/bin/keyfork-shard-combine-openpgp.rs +++ b/crates/keyfork-shard/src/bin/keyfork-shard-combine-openpgp.rs @@ -1,4 +1,4 @@ -//! +//! Combine OpenPGP shards and output the hex-encoded secret. use std::{ env, diff --git a/crates/keyfork-shard/src/bin/keyfork-shard-decrypt-openpgp.rs b/crates/keyfork-shard/src/bin/keyfork-shard-decrypt-openpgp.rs index 491d0d2..88359cd 100644 --- a/crates/keyfork-shard/src/bin/keyfork-shard-decrypt-openpgp.rs +++ b/crates/keyfork-shard/src/bin/keyfork-shard-decrypt-openpgp.rs @@ -1,4 +1,4 @@ -//! +//! Decrypt a single OpenPGP shard and encapsulate it for remote transport. use std::{ env, diff --git a/crates/keyfork-shard/src/bin/keyfork-shard-remote.rs b/crates/keyfork-shard/src/bin/keyfork-shard-remote.rs index 66f7a29..b1ce407 100644 --- a/crates/keyfork-shard/src/bin/keyfork-shard-remote.rs +++ b/crates/keyfork-shard/src/bin/keyfork-shard-remote.rs @@ -1,4 +1,4 @@ -//! +//! Combine OpenPGP shards using remote transport and output the hex-encoded secret. use std::{ env, diff --git a/crates/keyfork-shard/src/bin/keyfork-shard-split-openpgp.rs b/crates/keyfork-shard/src/bin/keyfork-shard-split-openpgp.rs index 8a4b3e3..a097131 100644 --- a/crates/keyfork-shard/src/bin/keyfork-shard-split-openpgp.rs +++ b/crates/keyfork-shard/src/bin/keyfork-shard-split-openpgp.rs @@ -1,4 +1,4 @@ -//! +//! Split a hex-encoded secret into OpenPGP shards use std::{env, path::PathBuf, process::ExitCode, str::FromStr}; diff --git a/crates/keyfork-shard/src/openpgp.rs b/crates/keyfork-shard/src/openpgp.rs index 04c25f5..9112517 100644 --- a/crates/keyfork-shard/src/openpgp.rs +++ b/crates/keyfork-shard/src/openpgp.rs @@ -185,7 +185,7 @@ impl EncryptedMessage { } } -/// +/// Encoding and decoding shards using OpenPGP. pub struct OpenPGP { p: PhantomData

, } diff --git a/crates/qrcode/keyfork-qrcode/src/bin/keyfork-qrcode-scan.rs b/crates/qrcode/keyfork-qrcode/src/bin/keyfork-qrcode-scan.rs index 8621550..69e845c 100644 --- a/crates/qrcode/keyfork-qrcode/src/bin/keyfork-qrcode-scan.rs +++ b/crates/qrcode/keyfork-qrcode/src/bin/keyfork-qrcode-scan.rs @@ -1,4 +1,4 @@ -//! +#![allow(missing_docs)] use std::time::Duration; diff --git a/crates/qrcode/keyfork-zbar/examples/v4l-scan.rs b/crates/qrcode/keyfork-zbar/examples/v4l-scan.rs index d3e5813..12bb5ca 100644 --- a/crates/qrcode/keyfork-zbar/examples/v4l-scan.rs +++ b/crates/qrcode/keyfork-zbar/examples/v4l-scan.rs @@ -33,7 +33,7 @@ fn main() -> Result<(), Box> { .decode()?, ); - if let Some(symbol) = scanner.scan_image(&image).get(0) { + if let Some(symbol) = scanner.scan_image(&image).first() { println!("{}", String::from_utf8_lossy(symbol.data())); return Ok(()); } diff --git a/crates/qrcode/keyfork-zbar/src/symbol.rs b/crates/qrcode/keyfork-zbar/src/symbol.rs index f52500b..92cea20 100644 --- a/crates/qrcode/keyfork-zbar/src/symbol.rs +++ b/crates/qrcode/keyfork-zbar/src/symbol.rs @@ -1,4 +1,4 @@ -//! +//! A Symbol represents some form of encoded data. use super::sys; diff --git a/crates/util/keyfork-crossterm/examples/is_tty.rs b/crates/util/keyfork-crossterm/examples/is_tty.rs index c5aa87d..044d8af 100644 --- a/crates/util/keyfork-crossterm/examples/is_tty.rs +++ b/crates/util/keyfork-crossterm/examples/is_tty.rs @@ -1,4 +1,4 @@ -//! +#![allow(missing_docs)] use keyfork_crossterm::{ execute, diff --git a/crates/util/keyfork-entropy/src/main.rs b/crates/util/keyfork-entropy/src/main.rs index 7f36aab..f450f71 100644 --- a/crates/util/keyfork-entropy/src/main.rs +++ b/crates/util/keyfork-entropy/src/main.rs @@ -1,4 +1,4 @@ -//! +//! Generate entropy of a given size, encoded as hex. fn main() -> Result<(), Box> { let bit_size: usize = std::env::args() diff --git a/crates/util/keyfork-mnemonic/src/bin/keyfork-mnemonic-from-seed.rs b/crates/util/keyfork-mnemonic/src/bin/keyfork-mnemonic-from-seed.rs index 39cfe46..67d6aef 100644 --- a/crates/util/keyfork-mnemonic/src/bin/keyfork-mnemonic-from-seed.rs +++ b/crates/util/keyfork-mnemonic/src/bin/keyfork-mnemonic-from-seed.rs @@ -1,4 +1,4 @@ -//! +//! Generate a mnemonic from hex-encoded input. use keyfork_mnemonic::Mnemonic; diff --git a/crates/util/keyfork-prompt/examples/test-basic-prompt.rs b/crates/util/keyfork-prompt/examples/test-basic-prompt.rs index 5ee3269..11e6d97 100644 --- a/crates/util/keyfork-prompt/examples/test-basic-prompt.rs +++ b/crates/util/keyfork-prompt/examples/test-basic-prompt.rs @@ -1,4 +1,4 @@ -//! +#![allow(missing_docs)] use std::io::{stdin, stdout}; diff --git a/crates/util/keyfork-prompt/src/terminal.rs b/crates/util/keyfork-prompt/src/terminal.rs index e431215..8247c45 100644 --- a/crates/util/keyfork-prompt/src/terminal.rs +++ b/crates/util/keyfork-prompt/src/terminal.rs @@ -1,3 +1,9 @@ +//! A terminal prompt handler. +//! +//! This prompt handler uses a raw terminal device to read inputs and uses ANSI escape codes to +//! provide formatting for prompts. Because of these reasons, it is not intended to be +//! machine-readable. + use std::{ borrow::Borrow, io::{stderr, stdin, BufRead, BufReader, Read, Stderr, Stdin, Write},