From 6cf8d7998859cdcd0d3007ce2dd49d20c7fb9be3 Mon Sep 17 00:00:00 2001 From: Simon Wicky Date: Tue, 20 May 2025 16:03:47 +0200 Subject: [PATCH] adding proper noise key announcing on nodes --- nym-node/Cargo.toml | 2 ++ nym-node/nym-node-requests/Cargo.toml | 1 + nym-node/nym-node-requests/src/api/mod.rs | 14 +++++++++++--- .../nym-node-requests/src/api/v1/node/models.rs | 13 ++++--------- nym-node/src/node/http/helpers/mod.rs | 3 ++- nym-node/src/node/mod.rs | 7 ++++++- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/nym-node/Cargo.toml b/nym-node/Cargo.toml index 72eb5924eb..1972823d70 100644 --- a/nym-node/Cargo.toml +++ b/nym-node/Cargo.toml @@ -55,6 +55,8 @@ nym-config = { path = "../common/config" } nym-crypto = { path = "../common/crypto", features = ["asymmetric", "rand"] } nym-nonexhaustive-delayqueue = { path = "../common/nonexhaustive-delayqueue" } nym-mixnet-client = { path = "../common/client-libs/mixnet-client" } +nym-noise = { path = "../common/nymnoise" } +nym-noise-keys = { path = "../common/nymnoise/keys" } nym-pemstore = { path = "../common/pemstore" } nym-sphinx-acknowledgements = { path = "../common/nymsphinx/acknowledgements" } nym-sphinx-addressing = { path = "../common/nymsphinx/addressing" } diff --git a/nym-node/nym-node-requests/Cargo.toml b/nym-node/nym-node-requests/Cargo.toml index 9e88943930..0d1628f34b 100644 --- a/nym-node/nym-node-requests/Cargo.toml +++ b/nym-node/nym-node-requests/Cargo.toml @@ -26,6 +26,7 @@ nym-crypto = { path = "../../common/crypto", features = [ "serde", ] } nym-exit-policy = { path = "../../common/exit-policy" } +nym-noise-keys = { path = "../../common/nymnoise/keys" } nym-wireguard-types = { path = "../../common/wireguard-types", default-features = false } # feature-specific dependencies: diff --git a/nym-node/nym-node-requests/src/api/mod.rs b/nym-node/nym-node-requests/src/api/mod.rs index c2ae5badb4..49132ea6e2 100644 --- a/nym-node/nym-node-requests/src/api/mod.rs +++ b/nym-node/nym-node-requests/src/api/mod.rs @@ -105,8 +105,10 @@ impl Display for ErrorResponse { #[cfg(test)] mod tests { + use super::*; use nym_crypto::asymmetric::{ed25519, x25519}; + use nym_noise_keys::{NoiseVersion, VersionedNoiseKey}; use rand_chacha::rand_core::SeedableRng; #[test] @@ -114,7 +116,10 @@ mod tests { let mut rng = rand_chacha::ChaCha20Rng::from_seed([0u8; 32]); let ed22519 = ed25519::KeyPair::new(&mut rng); let x25519_sphinx = x25519::KeyPair::new(&mut rng); - let x25519_noise = x25519::KeyPair::new(&mut rng); + let x25519_noise = VersionedNoiseKey { + version: NoiseVersion::V1, + x25519_pubkey: *x25519::KeyPair::new(&mut rng).public_key(), + }; let host_info = crate::api::v1::node::models::HostInformation { ip_address: vec!["1.1.1.1".parse().unwrap()], @@ -136,7 +141,7 @@ mod tests { keys: crate::api::v1::node::models::HostKeys { ed25519_identity: *ed22519.public_key(), x25519_sphinx: *x25519_sphinx.public_key(), - x25519_noise: Some(*x25519_noise.public_key()), + x25519_noise: Some(x25519_noise), }, }; @@ -189,7 +194,10 @@ mod tests { keys: crate::api::v1::node::models::HostKeys { ed25519_identity: legacy_info_noise.keys.ed25519_identity.parse().unwrap(), x25519_sphinx: legacy_info_noise.keys.x25519_sphinx.parse().unwrap(), - x25519_noise: Some(legacy_info_noise.keys.x25519_noise.parse().unwrap()), + x25519_noise: Some(VersionedNoiseKey { + version: NoiseVersion::V1, + x25519_pubkey: legacy_info_noise.keys.x25519_noise.parse().unwrap(), + }), }, }; diff --git a/nym-node/nym-node-requests/src/api/v1/node/models.rs b/nym-node/nym-node-requests/src/api/v1/node/models.rs index 5f047912fa..04655e3f88 100644 --- a/nym-node/nym-node-requests/src/api/v1/node/models.rs +++ b/nym-node/nym-node-requests/src/api/v1/node/models.rs @@ -3,10 +3,8 @@ use celes::Country; use nym_crypto::asymmetric::ed25519::{self, serde_helpers::bs58_ed25519_pubkey}; -use nym_crypto::asymmetric::x25519::{ - self, - serde_helpers::{bs58_x25519_pubkey, option_bs58_x25519_pubkey}, -}; +use nym_crypto::asymmetric::x25519::{self, serde_helpers::bs58_x25519_pubkey}; +use nym_noise_keys::VersionedNoiseKey; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::net::IpAddr; @@ -124,10 +122,7 @@ pub struct HostKeys { /// Base58-encoded x25519 public key of this node used for the noise protocol. #[serde(default)] - #[serde(with = "option_bs58_x25519_pubkey")] - #[schemars(with = "Option")] - #[cfg_attr(feature = "openapi", schema(value_type = Option))] - pub x25519_noise: Option, + pub x25519_noise: Option, } #[derive(Serialize)] @@ -150,7 +145,7 @@ impl From for LegacyHostKeysV2 { x25519_sphinx: value.x25519_sphinx.to_base58_string(), x25519_noise: value .x25519_noise - .map(|k| k.to_base58_string()) + .map(|k| k.x25519_pubkey.to_base58_string()) .unwrap_or_default(), } } diff --git a/nym-node/src/node/http/helpers/mod.rs b/nym-node/src/node/http/helpers/mod.rs index a819bdd062..04114832e1 100644 --- a/nym-node/src/node/http/helpers/mod.rs +++ b/nym-node/src/node/http/helpers/mod.rs @@ -7,13 +7,14 @@ use crate::node::http::api::api_requests; use crate::node::http::error::NymNodeHttpError; use nym_crypto::asymmetric::{ed25519, x25519}; use nym_node_requests::api::SignedHostInformation; +use nym_noise_keys::VersionedNoiseKey; pub mod system_info; pub(crate) fn sign_host_details( config: &Config, x22519_sphinx: &x25519::PublicKey, - x25519_noise: &x25519::PublicKey, + x25519_noise: &VersionedNoiseKey, ed22519_identity: &ed25519::KeyPair, ) -> Result { let x25519_noise = if config.mixnet.debug.unsafe_disable_noise { diff --git a/nym-node/src/node/mod.rs b/nym-node/src/node/mod.rs index f3b3b3b1b9..63a1a41b07 100644 --- a/nym-node/src/node/mod.rs +++ b/nym-node/src/node/mod.rs @@ -44,6 +44,8 @@ use nym_network_requester::{ use nym_node_metrics::events::MetricEventsSender; use nym_node_metrics::NymNodeMetrics; use nym_node_requests::api::v1::node::models::{AnnouncePorts, NodeDescription}; +use nym_noise::config::{NoiseConfig, NoiseNetworkView}; +use nym_noise_keys::VersionedNoiseKey; use nym_sphinx_acknowledgements::AckKey; use nym_sphinx_addressing::Recipient; use nym_task::{ShutdownManager, ShutdownToken, TaskClient}; @@ -700,7 +702,10 @@ impl NymNode { let host_details = sign_host_details( &self.config, self.x25519_sphinx_keys.public_key(), - self.x25519_noise_keys.public_key(), + &VersionedNoiseKey { + version: nym_noise::NOISE_VERSION, + x25519_pubkey: *self.x25519_noise_keys.public_key(), + }, &self.ed25519_identity_keys, )?;