Преглед изворни кода

bin/darkirc: add abbility to recover our own public key from secret key

Dastan-glitch пре 3 година
родитељ
комит
7a088ee6e3
2 измењених фајлова са 21 додато и 0 уклоњено
  1. 17 0
      bin/darkirc/src/main.rs
  2. 4 0
      bin/darkirc/src/settings.rs

+ 17 - 0
bin/darkirc/src/main.rs

@@ -120,6 +120,23 @@ async fn realmain(settings: Args, executor: Arc<smol::Executor<'_>>) -> 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());

+ 4 - 0
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<String>,
+
     /// Path to save keypair in
     #[structopt(short)]
     pub output: Option<String>,