From 7a088ee6e32ae585a39e31329f3dd02bff02f6c3 Mon Sep 17 00:00:00 2001 From: Dastan-glitch Date: Thu, 10 Aug 2023 00:09:06 +0300 Subject: [PATCH] bin/darkirc: add abbility to recover our own public key from secret key --- bin/darkirc/src/main.rs | 17 +++++++++++++++++ bin/darkirc/src/settings.rs | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/bin/darkirc/src/main.rs b/bin/darkirc/src/main.rs index 56f8c6730..92714683f 100644 --- a/bin/darkirc/src/main.rs +++ b/bin/darkirc/src/main.rs @@ -120,6 +120,23 @@ async fn realmain(settings: Args, executor: Arc>) -> Result<( return Ok(()) } + if settings.secret.is_some() { + let secret = settings.secret.clone().unwrap(); + let bytes: [u8; 32] = bs58::decode(secret).into_vec()?.try_into().unwrap(); + let secret = crypto_box::SecretKey::from(bytes); + let pubkey = secret.public_key(); + let pub_encoded = bs58::encode(pubkey.as_bytes()).into_string(); + + if settings.output.is_some() { + let datastore = expand_path(&settings.output.unwrap())?; + save_json_file(&datastore, &pub_encoded, false)?; + } else { + println!("Public key recoverd: {}", pub_encoded); + } + + return Ok(()) + } + if settings.gen_secret { let secret_key = crypto_box::SecretKey::generate(&mut OsRng); let encoded = bs58::encode(secret_key.to_bytes()); diff --git a/bin/darkirc/src/settings.rs b/bin/darkirc/src/settings.rs index 919b12d38..3baeb59ca 100644 --- a/bin/darkirc/src/settings.rs +++ b/bin/darkirc/src/settings.rs @@ -75,6 +75,10 @@ pub struct Args { #[structopt(long)] pub gen_secret: bool, + /// Recover public key from secret key + #[structopt(long = "recover_pubkey")] + pub secret: Option, + /// Path to save keypair in #[structopt(short)] pub output: Option,