From 21676451fdfc6f5d54349f709ae33a4d4a99c987 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Wed, 30 Apr 2025 01:19:21 +0800 Subject: [PATCH] feat: v1.11.17 --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/cmd_external_public_key.rs | 36 +++++++++++++++++++++++ src/cmd_external_sign.rs | 52 ++++++++++++++++++++++++++++++++++ src/cmd_external_spec.rs | 30 ++++++++++++++++++++ src/main.rs | 6 ++++ 6 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/cmd_external_public_key.rs create mode 100644 src/cmd_external_sign.rs create mode 100644 src/cmd_external_spec.rs diff --git a/Cargo.lock b/Cargo.lock index 8f9a22f..f20c352 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -508,7 +508,7 @@ dependencies = [ [[package]] name = "card-cli" -version = "1.11.16" +version = "1.11.17" dependencies = [ "aes-gcm-stream", "authenticator 0.3.1", diff --git a/Cargo.toml b/Cargo.toml index f733375..2f01838 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "card-cli" -version = "1.11.16" +version = "1.11.17" authors = ["Hatter Jiang "] edition = "2018" diff --git a/src/cmd_external_public_key.rs b/src/cmd_external_public_key.rs new file mode 100644 index 0000000..88e8fe0 --- /dev/null +++ b/src/cmd_external_public_key.rs @@ -0,0 +1,36 @@ +use crate::util; +use clap::{App, Arg, ArgMatches, SubCommand}; +use rust_util::util_clap::{Command, CommandError}; +use serde_json::Value; +use std::collections::BTreeMap; + +pub struct CommandImpl; + +impl Command for CommandImpl { + fn name(&self) -> &str { + "external_public_key" + } + + fn subcommand<'a>(&self) -> App<'a, 'a> { + SubCommand::with_name(self.name()) + .about("External public key subcommand") + .arg( + Arg::with_name("parameter") + .long("parameter") + .takes_value(true) + .required(true) + .help("Parameter"), + ) + } + + fn run(&self, _arg_matches: &ArgMatches, sub_arg_matches: &ArgMatches) -> CommandError { + let _parameter = sub_arg_matches.value_of("parameter").unwrap(); + + let mut json = BTreeMap::new(); + json.insert("success", Value::Bool(true)); + json.insert("public_key_base64", "**".into()); + + util::print_pretty_json(&json); + Ok(None) + } +} diff --git a/src/cmd_external_sign.rs b/src/cmd_external_sign.rs new file mode 100644 index 0000000..58a02e3 --- /dev/null +++ b/src/cmd_external_sign.rs @@ -0,0 +1,52 @@ +use crate::util; +use clap::{App, Arg, ArgMatches, SubCommand}; +use rust_util::util_clap::{Command, CommandError}; +use serde_json::Value; +use std::collections::BTreeMap; + +pub struct CommandImpl; + +impl Command for CommandImpl { + fn name(&self) -> &str { + "external_sign" + } + + fn subcommand<'a>(&self) -> App<'a, 'a> { + SubCommand::with_name(self.name()) + .about("External sign subcommand") + .arg( + Arg::with_name("alg") + .long("alg") + .takes_value(true) + .required(true) + .help("Algorithm, e.g. RS256, RS384, RS512, ES256, ES384, ES512"), + ) + .arg( + Arg::with_name("parameter") + .long("parameter") + .takes_value(true) + .required(true) + .help("Parameter"), + ) + .arg( + Arg::with_name("message-base64") + .long("message-base64") + .takes_value(true) + .required(true) + .help("Message in base64"), + ) + } + + fn run(&self, _arg_matches: &ArgMatches, sub_arg_matches: &ArgMatches) -> CommandError { + let _alg = sub_arg_matches.value_of("alg").unwrap(); + let _parameter = sub_arg_matches.value_of("parameter").unwrap(); + let _message_base64 = sub_arg_matches.value_of("message-base64").unwrap(); + + let mut json = BTreeMap::new(); + json.insert("success", Value::Bool(true)); + json.insert("signature_base64", "**".into()); + + util::print_pretty_json(&json); + Ok(None) + } +} diff --git a/src/cmd_external_spec.rs b/src/cmd_external_spec.rs new file mode 100644 index 0000000..60a91b9 --- /dev/null +++ b/src/cmd_external_spec.rs @@ -0,0 +1,30 @@ +use crate::util; +use clap::{App, ArgMatches, SubCommand}; +use rust_util::util_clap::{Command, CommandError}; +use serde_json::Value; +use std::collections::BTreeMap; + +pub struct CommandImpl; + +impl Command for CommandImpl { + fn name(&self) -> &str { + "external_spec" + } + + fn subcommand<'a>(&self) -> App<'a, 'a> { + SubCommand::with_name(self.name()).about("External spec subcommand") + } + + fn run(&self, _arg_matches: &ArgMatches, _sub_arg_matches: &ArgMatches) -> CommandError { + let mut json = BTreeMap::new(); + json.insert("success", Value::Bool(true)); + json.insert( + "agent", + format!("card-external-provider/{}", env!("CARGO_PKG_VERSION")).into(), + ); + json.insert("specification", "External/1.0.0-alpha".into()); + + util::print_pretty_json(&json); + Ok(None) + } +} diff --git a/src/main.rs b/src/main.rs index e9bf4bf..a97ee48 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,9 @@ mod cmd_chall_config; mod cmd_convert_jwk_to_pem; mod cmd_convert_pem_to_jwk; mod cmd_ec_verify; +mod cmd_external_public_key; +mod cmd_external_sign; +mod cmd_external_spec; mod cmd_file_sign; mod cmd_file_verify; mod cmd_hmac_decrypt; @@ -154,6 +157,9 @@ fn inner_main() -> CommandError { Box::new(cmd_keypair_keychain_export::CommandImpl), Box::new(cmd_convert_pem_to_jwk::CommandImpl), Box::new(cmd_convert_jwk_to_pem::CommandImpl), + Box::new(cmd_external_spec::CommandImpl), + Box::new(cmd_external_public_key::CommandImpl), + Box::new(cmd_external_sign::CommandImpl), ]; #[allow(clippy::vec_init_then_push)]