Prevent passphrase mistakes with confirmation prompt (#7207)
This commit is contained in:
parent
a35087a5ed
commit
b874441a47
|
@ -41,6 +41,18 @@ impl KeypairWithSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Prompts user for a passphrase and then asks for confirmirmation to check for mistakes
|
||||||
|
pub fn prompt_passphrase(prompt: &str) -> Result<String, Box<dyn error::Error>> {
|
||||||
|
let passphrase = prompt_password_stderr(&prompt)?;
|
||||||
|
if !passphrase.is_empty() {
|
||||||
|
let confirmed = rpassword::prompt_password_stderr("Enter same passphrase again: ")?;
|
||||||
|
if confirmed != passphrase {
|
||||||
|
return Err("Passphrases did not match".into());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(passphrase)
|
||||||
|
}
|
||||||
|
|
||||||
/// Reads user input from stdin to retrieve a seed phrase and passphrase for keypair derivation
|
/// Reads user input from stdin to retrieve a seed phrase and passphrase for keypair derivation
|
||||||
pub fn keypair_from_seed_phrase(
|
pub fn keypair_from_seed_phrase(
|
||||||
keypair_name: &str,
|
keypair_name: &str,
|
||||||
|
@ -54,11 +66,11 @@ pub fn keypair_from_seed_phrase(
|
||||||
);
|
);
|
||||||
|
|
||||||
if skip_validation {
|
if skip_validation {
|
||||||
let passphrase = prompt_password_stderr(&passphrase_prompt)?;
|
let passphrase = prompt_passphrase(&passphrase_prompt)?;
|
||||||
keypair_from_seed_phrase_and_passphrase(&seed_phrase, &passphrase)
|
keypair_from_seed_phrase_and_passphrase(&seed_phrase, &passphrase)
|
||||||
} else {
|
} else {
|
||||||
let mnemonic = Mnemonic::from_phrase(seed_phrase, Language::English)?;
|
let mnemonic = Mnemonic::from_phrase(seed_phrase, Language::English)?;
|
||||||
let passphrase = prompt_password_stderr(&passphrase_prompt)?;
|
let passphrase = prompt_passphrase(&passphrase_prompt)?;
|
||||||
let seed = Seed::new(&mnemonic, &passphrase);
|
let seed = Seed::new(&mnemonic, &passphrase);
|
||||||
keypair_from_seed(seed.as_bytes())
|
keypair_from_seed(seed.as_bytes())
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ use clap::{
|
||||||
};
|
};
|
||||||
use num_cpus;
|
use num_cpus;
|
||||||
use solana_clap_utils::keypair::{
|
use solana_clap_utils::keypair::{
|
||||||
keypair_from_seed_phrase, ASK_KEYWORD, SKIP_SEED_PHRASE_VALIDATION_ARG,
|
keypair_from_seed_phrase, prompt_passphrase, ASK_KEYWORD, SKIP_SEED_PHRASE_VALIDATION_ARG,
|
||||||
};
|
};
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
pubkey::write_pubkey_file,
|
pubkey::write_pubkey_file,
|
||||||
|
@ -236,7 +236,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
NO_PASSPHRASE.to_string()
|
NO_PASSPHRASE.to_string()
|
||||||
} else {
|
} else {
|
||||||
eprintln!("Generating a new keypair");
|
eprintln!("Generating a new keypair");
|
||||||
rpassword::prompt_password_stderr(
|
prompt_passphrase(
|
||||||
"For added security, enter a passphrase (empty for no passphrase): ",
|
"For added security, enter a passphrase (empty for no passphrase): ",
|
||||||
)?
|
)?
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue