cll2v0/app/admin.rs

144 lines
5.3 KiB
Rust

use clap::{Parser, Subcommand};
// use ed25519_dalek::{Signature, SigningKey};
use cll2v0::{
// db,
config,
// keys::{self}
};
/// cll2v0 is a playground for rust libraries.
/// This is signing service.
#[derive(Parser)]
#[command(arg_required_else_help(true), version, about)]
struct Args {
#[command(subcommand)]
cmd: Option<Command>,
}
#[derive(Subcommand)]
enum Command {
/// Generate a default config
GenConfig, // /// Add new ephemeral key to an existing persistent key
// Add {
// ephemeral_key: String,
// persistent_key: String,
// expires_at: i64,
// },
// /// Revoke an existing ephemeral key
// Revoke { ephemeral_key: String },
// /// Check persistent keys are available and display
// Check,
// /// Gen from seed some sensible ephemeral key args to be used with `add`
// Gen { seed: u8 },
// /// Sign a message
// Sign {
// signing_key: String,
// message: String,
// },
// /// Verify a message
// Verify {
// verifying_key: String,
// message: String,
// signature: String,
// },
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
let args = Args::parse();
// let (_, pool) = db::start_db().await?;
match args.cmd {
Some(Command::GenConfig) => {
let c = config::Config::default().to_string()?;
println!("{}", c);
}
// Some(Command::Add {
// ephemeral_key,
// persistent_key,
// expires_at,
// }) => {
// println!("Adding new ephemeral key '{ephemeral_key}'");
// let e = keys::from_hex(&ephemeral_key).expect("cannot parse key");
// let p = keys::from_hex(&persistent_key).expect("cannot parse key");
// let res = db::add_ephemeral_key(&pool, &e, &p, expires_at).await?;
// println!("Added new ekey: {}", res);
// }
// Some(Command::Revoke { ephemeral_key }) => {
// let e = keys::from_hex(&ephemeral_key).expect("cannot parse key");
// let res = db::revoke_ephemeral_key(&pool, &e).await?;
// println!("Revoked key: {}", res);
// }
// Some(Command::Check) => {
// eprintln!("!Check skipped");
// let res = db::list_persistent_keys(&pool).await?;
// println!("Persistent keys:");
// res.into_iter()
// .for_each(|key| println!("{}", keys::to_hex(&key)));
// let res = db::list_ephemeral_keys(&pool).await?;
// println!("ephemeral keys:");
// res.into_iter()
// .for_each(|(e, p, t)| println!("{} {} {t}", keys::to_hex(&e), keys::to_hex(&p)))
// }
// Some(Command::Gen { seed }) => {
// let ekey = SigningKey::from_bytes(&[
// seed, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0,
// ]);
// println!("Ephemeral signing key:");
// println!("{}", keys::signing_key_to_hex(&ekey));
// let res = db::list_persistent_keys(&pool).await?;
// let idx = (seed as usize) % res.len();
// let pkey = res.get(idx);
// match pkey {
// None => eprintln!("No persistent keys found"),
// Some(pkey) => {
// let now: usize = std::time::SystemTime::now()
// .duration_since(std::time::UNIX_EPOCH)
// .unwrap()
// .as_millis()
// .try_into()
// .unwrap();
// let twenty_mins_from_now = 20usize * 60 * 1000 + now;
// println!("Args");
// println!(
// "{} {} {}",
// keys::to_hex(&ekey.verifying_key()),
// keys::to_hex(pkey),
// twenty_mins_from_now
// )
// }
// }
// }
// Some(Command::Sign {
// signing_key,
// message,
// }) => {
// let mut skey = keys::signing_key_from_hex(&signing_key).unwrap();
// let msg = hex::decode(message).unwrap();
// let sig = keys::sign(&mut skey, msg);
// println!("{}", hex::encode(sig.to_bytes()))
// }
// Some(Command::Verify {
// verifying_key,
// message,
// signature,
// }) => {
// let vkey = keys::from_hex(&verifying_key).unwrap();
// let msg = hex::decode(message).unwrap();
// let sig = Signature::from_bytes(
// &TryInto::<[u8; 64]>::try_into(hex::decode(signature).unwrap()).unwrap(),
// );
// let res = keys::verify(&vkey, &msg, &sig).unwrap();
// println!("{:?}", res);
// }
None => {
println!("See help");
}
}
Ok(())
}