From 35896d779c07323af112ccd2252d57ea973ace3e Mon Sep 17 00:00:00 2001 From: Maxime Van Hees Date: Thu, 20 Jun 2024 10:58:39 +0200 Subject: [PATCH] Keys only loaded when needed --- myceliumd-private/src/main.rs | 31 +++++++++++++++++++++++-------- myceliumd/src/main.rs | 25 +++++++++++++++---------- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/myceliumd-private/src/main.rs b/myceliumd-private/src/main.rs index 864b065..664f035 100644 --- a/myceliumd-private/src/main.rs +++ b/myceliumd-private/src/main.rs @@ -276,14 +276,14 @@ async fn main() -> Result<(), Box> { .unwrap_or_else(|| PathBuf::from(DEFAULT_KEY_FILE)); // Load the keypair for this node, or generate a new one if the file does not exist. - let node_keys = if key_path.exists() { - let sk = load_key_file(&key_path).await?; - let pk = crypto::PublicKey::from(&sk); - debug!("Loaded key file at {key_path:?}"); - Some((sk, pk)) - } else { - None - }; + // let node_keys = if key_path.exists() { + // let sk = load_key_file(&key_path).await?; + // let pk = crypto::PublicKey::from(&sk); + // debug!("Loaded key file at {key_path:?}"); + // Some((sk, pk)) + // } else { + // None + // }; match cli.command { None => { @@ -297,6 +297,7 @@ async fn main() -> Result<(), Box> { _ => None, }; + let node_keys = get_node_keys(&key_path).await?; let node_secret_key = if let Some((node_secret_key, _)) = node_keys { node_secret_key } else { @@ -370,6 +371,7 @@ async fn main() -> Result<(), Box> { } Some(cmd) => match cmd { Command::Inspect { json, key } => { + let node_keys = get_node_keys(&key_path).await?; let key = if let Some(key) = key { PublicKey::try_from(key.as_str())? } else if let Some((_, node_pub_key)) = node_keys { @@ -449,6 +451,19 @@ async fn main() -> Result<(), Box> { Ok(()) } +async fn get_node_keys( + key_path: &PathBuf, +) -> Result, io::Error> { + if key_path.exists() { + let sk = load_key_file(key_path).await?; + let pk = crypto::PublicKey::from(&sk); + debug!("Loaded key file at {key_path:?}"); + Ok(Some((sk, pk))) + } else { + Ok(None) + } +} + async fn load_key_file(path: &Path) -> Result where T: From<[u8; 32]>, diff --git a/myceliumd/src/main.rs b/myceliumd/src/main.rs index b4ff219..ede85a9 100644 --- a/myceliumd/src/main.rs +++ b/myceliumd/src/main.rs @@ -258,18 +258,9 @@ async fn main() -> Result<(), Box> { .key_file .unwrap_or_else(|| PathBuf::from(DEFAULT_KEY_FILE)); - // Load the keypair for this node, or generate a new one if the file does not exist. - let node_keys = if key_path.exists() { - let sk = load_key_file(&key_path).await?; - let pk = crypto::PublicKey::from(&sk); - debug!("Loaded key file at {key_path:?}"); - Some((sk, pk)) - } else { - None - }; - match cli.command { None => { + let node_keys = get_node_keys(&key_path).await?; let node_secret_key = if let Some((node_secret_key, _)) = node_keys { node_secret_key } else { @@ -343,6 +334,7 @@ async fn main() -> Result<(), Box> { } Some(cmd) => match cmd { Command::Inspect { json, key } => { + let node_keys = get_node_keys(&key_path).await?; let key = if let Some(key) = key { PublicKey::try_from(key.as_str())? } else if let Some((_, node_pub_key)) = node_keys { @@ -422,6 +414,19 @@ async fn main() -> Result<(), Box> { Ok(()) } +async fn get_node_keys( + key_path: &PathBuf, +) -> Result, io::Error> { + if key_path.exists() { + let sk = load_key_file(key_path).await?; + let pk = crypto::PublicKey::from(&sk); + debug!("Loaded key file at {key_path:?}"); + Ok(Some((sk, pk))) + } else { + Ok(None) + } +} + async fn load_key_file(path: &Path) -> Result where T: From<[u8; 32]>,