Skip to content

Commit

Permalink
keys: add does not validate keys
Browse files Browse the repository at this point in the history
Close #1805
  • Loading branch information
leighmcculloch committed Dec 19, 2024
1 parent e5454e6 commit 7a79181
Showing 1 changed file with 12 additions and 32 deletions.
44 changes: 12 additions & 32 deletions cmd/soroban-cli/src/config/secret.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ use crate::{

#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("invalid secret key")]
InvalidSecretKey,
// #[error("seed_phrase must be 12 words long, found {len}")]
// InvalidSeedPhrase { len: usize },
#[error("secret input error")]
Expand All @@ -23,52 +21,34 @@ pub enum Error {
SeedPhrase(#[from] sep5::error::Error),
#[error(transparent)]
Ed25519(#[from] ed25519_dalek::SignatureError),
#[error("Invalid address {0}")]
InvalidAddress(String),
#[error("cannot parse secret (S) or seed phrase (12 or 24 word)")]
InvalidSecretOrSeedPhrase,
#[error(transparent)]
Signer(#[from] signer::Error),
}

#[derive(Debug, clap::Args, Clone)]
#[group(skip)]
pub struct Args {
/// Add using `secret_key`
/// (deprecated) Add secret (S) key
/// Can provide with `SOROBAN_SECRET_KEY`
#[arg(long, conflicts_with = "seed_phrase")]
#[arg(long)]
pub secret_key: bool,
/// Add using 12 word seed phrase to generate `secret_key`
#[arg(long, conflicts_with = "secret_key")]
/// (deprecated) Add key using 12-24 word seed phrase
#[arg(long)]
pub seed_phrase: bool,
}

impl Args {
pub fn read_secret(&self) -> Result<Secret, Error> {
if let Ok(secret_key) = std::env::var("SOROBAN_SECRET_KEY") {
Ok(Secret::SecretKey { secret_key })
} else if self.secret_key {
println!("Type a secret key: ");
let secret_key = read_password()?;
let secret_key = PrivateKey::from_string(&secret_key)
.map_err(|_| Error::InvalidSecretKey)?
.to_string();
Ok(Secret::SecretKey { secret_key })
} else if self.seed_phrase {
println!("Type a 12 word seed phrase: ");
let seed_phrase = read_password()?;
let seed_phrase: Vec<&str> = seed_phrase.split_whitespace().collect();
// if seed_phrase.len() != 12 {
// let len = seed_phrase.len();
// return Err(Error::InvalidSeedPhrase { len });
// }
Ok(Secret::SeedPhrase {
seed_phrase: seed_phrase
.into_iter()
.map(ToString::to_string)
.collect::<Vec<_>>()
.join(" "),
})
} else {
Err(Error::PasswordRead {})
println!("Type a secret key or 24 word seed phrase:");
let secret_key = read_password()?;
let secret =
Secret::from_str(&secret_key).map_err(|_| Error::InvalidSecretOrSeedPhrase)?;
Ok(secret)
}
}
}
Expand All @@ -93,7 +73,7 @@ impl FromStr for Secret {
seed_phrase: s.to_string(),
})
} else {
Err(Error::InvalidAddress(s.to_string()))
Err(Error::InvalidSecretOrSeedPhrase)
}
}
}
Expand Down

0 comments on commit 7a79181

Please sign in to comment.