diff --git a/CHANGELOG.md b/CHANGELOG.md index c7f65d352c..2c56686c83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,24 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https:// ## [Unreleased] +## [v1.1.22] (2023-06-20) + +- CLI tool for querying network-requesters ([#3539]) +- Statically link OpenSSL ([#3510]) +- NymConnect - add sentry.io reporting ([#3421]) +- init command does not change version number in config.toml ([#3336]) +- [Bug] Config version does not correspond to binary version ([#3434]) + +[#3539]: https://github.com/nymtech/nym/issues/3539 +[#3510]: https://github.com/nymtech/nym/issues/3510 +[#3421]: https://github.com/nymtech/nym/issues/3421 +[#3336]: https://github.com/nymtech/nym/issues/3336 +[#3434]: https://github.com/nymtech/nym/issues/3434 + ## [v1.1.21] (2023-06-13) -- mixFetch: Change socks5 `SendRequest` to include OrderedMessage index as a field rather than making it serialized inside the `data` field ([#3534]) +- mixFetch: Change socks5 `SendRequest` to include OrderedMessage index as a field rather than making it serialized inside the `data` field + ([#3534]) - Explorer - add more data columns to the Service Provider section: ([#3474]) - network-requester: support report if they run an open proxy using `ControlRequest` API ([#3461]) - Refactor client configs (London discussion) ([#3444]) diff --git a/Cargo.lock b/Cargo.lock index bec14f676a..8d1c4656c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -322,7 +322,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -334,7 +334,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", - "getrandom 0.2.9", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -1542,7 +1542,7 @@ dependencies = [ "cosmos-sdk-proto", "ecdsa", "eyre", - "getrandom 0.2.9", + "getrandom 0.2.10", "k256", "prost 0.10.4", "prost-types 0.10.1", @@ -2618,7 +2618,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "explorer-api" -version = "1.1.21" +version = "1.1.22" dependencies = [ "chrono", "clap 4.2.7", @@ -3049,9 +3049,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "js-sys", @@ -4088,7 +4088,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.9", + "getrandom 0.2.10", "instant", "libp2p-allow-block-list", "libp2p-connection-limits", @@ -5049,7 +5049,7 @@ dependencies = [ [[package]] name = "nym-api" -version = "1.1.22" +version = "1.1.23" dependencies = [ "actix-web", "anyhow", @@ -5157,7 +5157,7 @@ dependencies = [ [[package]] name = "nym-bin-common" -version = "0.5.0" +version = "0.6.0" dependencies = [ "atty", "clap 4.2.7", @@ -5193,7 +5193,7 @@ dependencies = [ [[package]] name = "nym-cli" -version = "1.1.21" +version = "1.1.22" dependencies = [ "anyhow", "base64 0.13.1", @@ -5241,8 +5241,10 @@ dependencies = [ "nym-multisig-contract-common", "nym-name-service-common", "nym-network-defaults", + "nym-pemstore", "nym-service-provider-directory-common", "nym-sphinx", + "nym-types", "nym-validator-client", "nym-vesting-contract-common", "rand 0.6.5", @@ -5257,7 +5259,7 @@ dependencies = [ [[package]] name = "nym-client" -version = "1.1.21" +version = "1.1.22" dependencies = [ "clap 4.2.7", "dirs 4.0.0", @@ -5293,7 +5295,7 @@ dependencies = [ [[package]] name = "nym-client-core" -version = "1.1.14" +version = "1.1.15" dependencies = [ "async-trait", "base64 0.21.2", @@ -5356,7 +5358,7 @@ dependencies = [ "digest 0.9.0", "doc-comment", "ff 0.11.1", - "getrandom 0.2.9", + "getrandom 0.2.10", "group 0.11.0", "itertools", "nym-dkg", @@ -5531,7 +5533,7 @@ dependencies = [ [[package]] name = "nym-gateway" -version = "1.1.21" +version = "1.1.22" dependencies = [ "anyhow", "async-trait", @@ -5584,7 +5586,7 @@ name = "nym-gateway-client" version = "0.1.0" dependencies = [ "futures", - "getrandom 0.2.9", + "getrandom 0.2.10", "log", "nym-bandwidth-controller", "nym-coconut-interface", @@ -5684,7 +5686,7 @@ dependencies = [ [[package]] name = "nym-mixnode" -version = "1.1.22" +version = "1.1.23" dependencies = [ "anyhow", "bs58", @@ -5796,7 +5798,7 @@ dependencies = [ [[package]] name = "nym-network-requester" -version = "1.1.21" +version = "1.1.22" dependencies = [ "anyhow", "async-file-watcher", @@ -5842,7 +5844,7 @@ dependencies = [ [[package]] name = "nym-network-statistics" -version = "1.1.21" +version = "1.1.22" dependencies = [ "dirs 4.0.0", "log", @@ -5922,7 +5924,7 @@ dependencies = [ "criterion", "curve25519-dalek 3.2.0", "fastrand", - "getrandom 0.2.9", + "getrandom 0.2.10", "log", "rand 0.7.3", "rayon", @@ -6001,7 +6003,7 @@ dependencies = [ [[package]] name = "nym-socks5-client" -version = "1.1.21" +version = "1.1.22" dependencies = [ "clap 4.2.7", "lazy_static", @@ -6140,6 +6142,7 @@ dependencies = [ "nym-pemstore", "nym-sphinx-addressing", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -6167,6 +6170,7 @@ dependencies = [ "nym-crypto", "nym-sphinx-addressing", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -6198,6 +6202,7 @@ dependencies = [ "nym-sphinx-chunking", "nym-sphinx-forwarding", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -6275,7 +6280,7 @@ dependencies = [ "aes-gcm 0.10.1", "argon2", "generic-array 0.14.7", - "getrandom 0.2.9", + "getrandom 0.2.10", "rand 0.8.5", "serde", "serde_json", @@ -6369,6 +6374,7 @@ dependencies = [ "nym-service-provider-directory-common", "nym-vesting-contract", "nym-vesting-contract-common", + "openssl", "prost 0.10.4", "reqwest", "serde", @@ -7444,7 +7450,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", ] [[package]] @@ -7626,7 +7632,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "redox_syscall 0.2.16", "thiserror", ] @@ -9239,7 +9245,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom 0.2.9", + "getrandom 0.2.10", "http", "hyper", "hyper-proxy", @@ -10170,7 +10176,7 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "serde", "wasm-bindgen", ] @@ -10369,7 +10375,7 @@ name = "wasm-utils" version = "0.1.0" dependencies = [ "futures", - "getrandom 0.2.9", + "getrandom 0.2.10", "indexed_db_futures", "js-sys", "nym-store-cipher", diff --git a/Cargo.toml b/Cargo.toml index 8cdd83c22b..5ce4102ac1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,8 +113,8 @@ edition = "2021" license = "Apache-2.0" [workspace.dependencies] -async-trait = "0.1.64" anyhow = "1.0.71" +async-trait = "0.1.64" bip39 = { version = "2.0.0", features = ["zeroize"] } cfg-if = "1.0.0" cosmwasm-derive = "=1.2.5" @@ -132,6 +132,7 @@ cw-controllers = { version = "=1.0.1" } dotenvy = "0.15.6" generic-array = "0.14.7" k256 = "0.11" +getrandom = "0.2.10" lazy_static = "1.4.0" log = "0.4" once_cell = "1.7.2" diff --git a/clients/native/Cargo.toml b/clients/native/Cargo.toml index f131839b26..56ca474de7 100644 --- a/clients/native/Cargo.toml +++ b/clients/native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-client" -version = "1.1.21" +version = "1.1.22" authors = ["Dave Hrycyszyn ", "Jędrzej Stuczyński "] description = "Implementation of the Nym Client" edition = "2021" diff --git a/clients/native/src/client/config/mod.rs b/clients/native/src/client/config/mod.rs index 8072243c05..dd819471d8 100644 --- a/clients/native/src/client/config/mod.rs +++ b/clients/native/src/client/config/mod.rs @@ -75,7 +75,7 @@ impl NymConfigTemplate for Config { impl Config { pub fn new>(id: S) -> Self { Config { - base: BaseClientConfig::new(id.as_ref()), + base: BaseClientConfig::new(id.as_ref(), env!("CARGO_PKG_VERSION")), storage_paths: ClientPaths::new_default(default_data_directory(id.as_ref())), logging: Default::default(), socket: Default::default(), diff --git a/clients/socks5/Cargo.toml b/clients/socks5/Cargo.toml index 5c0558200a..8d360b6bb5 100644 --- a/clients/socks5/Cargo.toml +++ b/clients/socks5/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-socks5-client" -version = "1.1.21" +version = "1.1.22" authors = ["Dave Hrycyszyn "] description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address" edition = "2021" diff --git a/clients/socks5/src/config/mod.rs b/clients/socks5/src/config/mod.rs index 1ca4c2b0ac..f4f74942cf 100644 --- a/clients/socks5/src/config/mod.rs +++ b/clients/socks5/src/config/mod.rs @@ -70,7 +70,11 @@ impl NymConfigTemplate for Config { impl Config { pub fn new>(id: S, provider_mix_address: S) -> Self { Config { - core: CoreConfig::new(id.as_ref(), provider_mix_address.as_ref()), + core: CoreConfig::new( + id.as_ref(), + env!("CARGO_PKG_VERSION"), + provider_mix_address.as_ref(), + ), storage_paths: SocksClientPaths::new_default(default_data_directory(id.as_ref())), logging: Default::default(), } diff --git a/clients/webassembly/Cargo.lock b/clients/webassembly/Cargo.lock index 668550a7e3..e7e1bc7482 100644 --- a/clients/webassembly/Cargo.lock +++ b/clients/webassembly/Cargo.lock @@ -62,7 +62,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -617,7 +617,7 @@ dependencies = [ "cosmos-sdk-proto", "ecdsa", "eyre", - "getrandom 0.2.9", + "getrandom 0.2.10", "k256", "prost", "prost-types", @@ -1510,9 +1510,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2318,7 +2318,7 @@ dependencies = [ [[package]] name = "nym-bin-common" -version = "0.5.0" +version = "0.6.0" dependencies = [ "atty", "clap", @@ -2333,7 +2333,7 @@ dependencies = [ [[package]] name = "nym-client-core" -version = "1.1.14" +version = "1.1.15" dependencies = [ "async-trait", "base64 0.21.2", @@ -2378,7 +2378,7 @@ dependencies = [ [[package]] name = "nym-client-wasm" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "async-trait", @@ -2423,7 +2423,7 @@ dependencies = [ "bs58", "digest 0.9.0", "ff 0.11.1", - "getrandom 0.2.9", + "getrandom 0.2.10", "group 0.11.0", "itertools", "nym-dkg", @@ -2567,7 +2567,7 @@ name = "nym-gateway-client" version = "0.1.0" dependencies = [ "futures", - "getrandom 0.2.9", + "getrandom 0.2.10", "log", "nym-bandwidth-controller", "nym-coconut-interface", @@ -2718,7 +2718,7 @@ dependencies = [ "chacha20", "chacha20poly1305", "curve25519-dalek", - "getrandom 0.2.9", + "getrandom 0.2.10", "log", "rand 0.7.3", "rayon", @@ -2779,6 +2779,7 @@ dependencies = [ "nym-pemstore", "nym-sphinx-addressing", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -2805,6 +2806,7 @@ dependencies = [ "nym-crypto", "nym-sphinx-addressing", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -2835,6 +2837,7 @@ dependencies = [ "nym-sphinx-chunking", "nym-sphinx-forwarding", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -2898,7 +2901,7 @@ dependencies = [ "aes-gcm", "argon2", "generic-array 0.14.7", - "getrandom 0.2.9", + "getrandom 0.2.10", "rand 0.8.5", "serde", "serde_json", @@ -2966,6 +2969,7 @@ dependencies = [ "nym-service-provider-directory-common", "nym-vesting-contract", "nym-vesting-contract-common", + "openssl", "prost", "reqwest", "serde", @@ -3056,6 +3060,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "111.26.0+1.1.1u" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.87" @@ -3064,6 +3077,7 @@ checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -3483,7 +3497,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", ] [[package]] @@ -3551,7 +3565,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "redox_syscall 0.2.16", "thiserror", ] @@ -4486,7 +4500,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom 0.2.9", + "getrandom 0.2.10", "http", "hyper", "hyper-proxy", @@ -4886,7 +4900,7 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.10", "wasm-bindgen", ] @@ -5062,7 +5076,7 @@ name = "wasm-utils" version = "0.1.0" dependencies = [ "futures", - "getrandom 0.2.9", + "getrandom 0.2.10", "indexed_db_futures", "js-sys", "nym-store-cipher", diff --git a/clients/webassembly/Cargo.toml b/clients/webassembly/Cargo.toml index 705d23668a..11d1cb131a 100644 --- a/clients/webassembly/Cargo.toml +++ b/clients/webassembly/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nym-client-wasm" authors = ["Dave Hrycyszyn ", "Jedrzej Stuczynski "] -version = "1.1.0" +version = "1.1.1" edition = "2021" keywords = ["nym", "sphinx", "wasm", "webassembly", "privacy", "client"] license = "Apache-2.0" diff --git a/clients/webassembly/internal-dev/worker.js b/clients/webassembly/internal-dev/worker.js index 01e3504e78..45c2762d0a 100644 --- a/clients/webassembly/internal-dev/worker.js +++ b/clients/webassembly/internal-dev/worker.js @@ -116,11 +116,11 @@ async function testWithTester() { // B) first get topology directly from nym-api // const validator = 'https://qwerty-validator-api.qa.nymte.ch/api'; // const topology = await current_network_topology(validator) - // const nodeTester = await new NymNodeTester(topology, preferredGateway); + // const nodeTester = await new NymNodeTester(topology, undefined, preferredGateway); // // C) use nym-api in the constructor (note: it does no filtering for 'good' nodes on other layers) // const validator = 'https://qwerty-validator-api.qa.nymte.ch/api'; - // const nodeTester = await NymNodeTester.new_with_api(validator, preferredGateway) + // const nodeTester = await NymNodeTester.new_with_api(validator, undefined, preferredGateway) // D, E, F) you also don't have to specify the gateway. if you don't, a random one (from your topology) will be used // const topology = dummyTopology() @@ -365,16 +365,16 @@ async function main() { set_panic_hook(); // show reconnection capabilities - await testerReconnection() + // await testerReconnection() // run test on simplified and dedicated tester: - // await testWithTester() + await testWithTester() // hook-up the whole client for testing // await testWithNymClient() // 'Normal' client setup (to send 'normal' messages) - await normalNymClientUsage() + // await normalNymClientUsage() } // Let's get started! diff --git a/clients/webassembly/src/client/config.rs b/clients/webassembly/src/client/config.rs index 86d34bd52b..e531f072d1 100644 --- a/clients/webassembly/src/client/config.rs +++ b/clients/webassembly/src/client/config.rs @@ -29,7 +29,7 @@ impl Config { #[wasm_bindgen(constructor)] pub fn new(id: String, validator_server: String, debug: Option) -> Self { Config { - base: BaseClientConfig::new(id) + base: BaseClientConfig::new(id, env!("CARGO_PKG_VERSION").to_string()) .with_custom_nyxd(vec![validator_server .parse() .expect("provided url was malformed")]) @@ -39,7 +39,7 @@ impl Config { pub(crate) fn new_tester_config>(id: S) -> Self { Config { - base: BaseClientConfig::new(id) + base: BaseClientConfig::new(id.into(), env!("CARGO_PKG_VERSION").to_string()) .with_disabled_credentials(true) .with_disabled_cover_traffic(true) .with_disabled_topology_refresh(true), diff --git a/clients/webassembly/src/tester/mod.rs b/clients/webassembly/src/tester/mod.rs index f7efac1043..1ce59a4024 100644 --- a/clients/webassembly/src/tester/mod.rs +++ b/clients/webassembly/src/tester/mod.rs @@ -73,6 +73,7 @@ pub struct NymNodeTester { #[wasm_bindgen] pub struct NymNodeTesterBuilder { gateway: Option, + id: Option, base_topology: NymTopology, @@ -94,9 +95,11 @@ impl NymNodeTesterBuilder { #[wasm_bindgen(constructor)] pub fn new( base_topology: WasmNymTopology, + id: Option, gateway: Option, ) -> NymNodeTesterBuilder { NymNodeTesterBuilder { + id, gateway, base_topology: base_topology.into(), bandwidth_controller: None, @@ -105,15 +108,20 @@ impl NymNodeTesterBuilder { async fn _new_with_api( api_url: String, + id: Option, gateway: Option, ) -> Result { let topology = current_network_topology_async(api_url).await?; - Ok(NymNodeTesterBuilder::new(topology, gateway)) + Ok(NymNodeTesterBuilder::new(topology, id, gateway)) } - pub fn new_with_api(gateway: Option, api_url: String) -> Promise { + pub fn new_with_api( + api_url: String, + id: Option, + gateway: Option, + ) -> Promise { future_to_promise(async move { - Self::_new_with_api(api_url, gateway) + Self::_new_with_api(api_url, id, gateway) .await .into_promise_result() }) @@ -133,7 +141,13 @@ impl NymNodeTesterBuilder { async fn _setup_client(mut self) -> Result { let task_manager = TaskManager::default(); - let client_store = ClientStorage::new_async(NODE_TESTER_ID, None).await?; + let storage_id = if let Some(client_id) = &self.id { + format!("{NODE_TESTER_ID}-{client_id}") + } else { + NODE_TESTER_ID.to_owned() + }; + + let client_store = ClientStorage::new_async(&storage_id, None).await?; let init_details = self.gateway_info(&client_store).await?; let gateway_endpoint = init_details.gateway_details; @@ -234,24 +248,33 @@ async fn test_mixnode( impl NymNodeTester { #[wasm_bindgen(constructor)] #[allow(clippy::new_ret_no_self)] - pub fn new(topology: WasmNymTopology, gateway: Option) -> Promise { + pub fn new( + topology: WasmNymTopology, + id: Option, + gateway: Option, + ) -> Promise { console_log!("constructing node tester!"); - NymNodeTesterBuilder::new(topology, gateway).setup_client() + NymNodeTesterBuilder::new(topology, id, gateway).setup_client() } async fn _new_with_api( api_url: String, + id: Option, gateway: Option, ) -> Result { - NymNodeTesterBuilder::_new_with_api(api_url, gateway) + NymNodeTesterBuilder::_new_with_api(api_url, id, gateway) .await? ._setup_client() .await } - pub fn new_with_api(api_url: String, gateway: Option) -> Promise { + pub fn new_with_api( + api_url: String, + id: Option, + gateway: Option, + ) -> Promise { future_to_promise(async move { - Self::_new_with_api(api_url, gateway) + Self::_new_with_api(api_url, id, gateway) .await .into_promise_result() }) diff --git a/common/bin-common/Cargo.toml b/common/bin-common/Cargo.toml index b46424d677..5e817b6afd 100644 --- a/common/bin-common/Cargo.toml +++ b/common/bin-common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-bin-common" -version = "0.5.0" +version = "0.6.0" description = "Common code for nym binaries" edition = { workspace = true } authors = { workspace = true } diff --git a/common/client-core/Cargo.toml b/common/client-core/Cargo.toml index 98d7ce6151..b8b1403d86 100644 --- a/common/client-core/Cargo.toml +++ b/common/client-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-client-core" -version = "1.1.14" +version = "1.1.15" authors = ["Dave Hrycyszyn "] edition = "2021" rust-version = "1.66" diff --git a/common/client-core/src/config/mod.rs b/common/client-core/src/config/mod.rs index 36c7aca4eb..d9ac4fd274 100644 --- a/common/client-core/src/config/mod.rs +++ b/common/client-core/src/config/mod.rs @@ -66,9 +66,9 @@ pub struct Config { } impl Config { - pub fn new>(id: S) -> Self { + pub fn new>(id: S, version: S) -> Self { Config { - client: Client::new_default(id), + client: Client::new_default(id, version), debug: Default::default(), } } @@ -243,7 +243,7 @@ pub struct Client { } impl Client { - pub fn new_default>(id: S) -> Self { + pub fn new_default>(id: S, version: S) -> Self { let network = NymNetworkDetails::new_mainnet(); let nyxd_urls = network .endpoints @@ -257,7 +257,7 @@ impl Client { .collect::>(); Client { - version: env!("CARGO_PKG_VERSION").to_string(), + version: version.into(), id: id.into(), disabled_credentials_mode: true, nyxd_urls, diff --git a/common/client-libs/validator-client/Cargo.toml b/common/client-libs/validator-client/Cargo.toml index c19153e906..ac66916c46 100644 --- a/common/client-libs/validator-client/Cargo.toml +++ b/common/client-libs/validator-client/Cargo.toml @@ -29,6 +29,7 @@ log = { workspace = true } url = { version = "2.2", features = ["serde"] } tokio = { version = "1.24.1", features = ["sync", "time"] } futures = "0.3" +openssl = { version = "0.10", features = ["vendored"], optional = true } nym-coconut-interface = { path = "../../coconut-interface" } nym-network-defaults = { path = "../../network-defaults" } @@ -77,13 +78,14 @@ required-features = ["nyxd-client"] nyxd-client = [ "async-trait", "cosmrs", + "cosmwasm-std", "cw3", "cw4", - "prost", "flate2", - "sha2", "itertools", - "cosmwasm-std", + "openssl", + "prost", + "sha2", "signing" ] signing = [ diff --git a/common/commands/Cargo.toml b/common/commands/Cargo.toml index 32a66905ca..d57e1c47ac 100644 --- a/common/commands/Cargo.toml +++ b/common/commands/Cargo.toml @@ -41,3 +41,6 @@ nym-multisig-contract-common = { path = "../cosmwasm-smart-contracts/multisig-co nym-service-provider-directory-common = { path = "../cosmwasm-smart-contracts/service-provider-directory" } nym-name-service-common = { path = "../cosmwasm-smart-contracts/name-service" } nym-sphinx = { path = "../../common/nymsphinx" } + +nym-pemstore = { path = "../../common/pemstore", version = "0.3.0" } +nym-types = { path = "../../common/types" } diff --git a/common/commands/src/validator/mixnet/operators/identity_key/mod.rs b/common/commands/src/validator/mixnet/operators/identity_key/mod.rs new file mode 100644 index 0000000000..793259270e --- /dev/null +++ b/common/commands/src/validator/mixnet/operators/identity_key/mod.rs @@ -0,0 +1,68 @@ +use clap::{Args, Parser, Subcommand}; +use nym_bin_common::output_format::OutputFormat; +use nym_crypto::asymmetric::identity; +use nym_types::helpers::ConsoleSigningOutput; +use nym_validator_client::nyxd::error::NyxdError; +use std::path::PathBuf; + +#[derive(Debug, Args)] +#[clap(args_conflicts_with_subcommands = true, subcommand_required = true)] +pub struct MixnetOperatorsIdentityKey { + #[clap(subcommand)] + pub command: MixnetOperatorsIdentityKeyCommands, +} + +#[derive(Debug, Subcommand)] +pub enum MixnetOperatorsIdentityKeyCommands { + /// Register a name alias for a nym address + Sign(SignArgs), +} + +#[derive(Debug, Parser)] +pub struct SignArgs { + /// Path to private identity key (example: private_identity_key.pem) + #[clap(long)] + private_key: PathBuf, + + /// Base58 encoded message to sign + #[clap(long)] + base58_msg: String, + + #[clap(short, long, default_value_t = OutputFormat::default())] + output: OutputFormat, +} + +pub async fn sign(args: SignArgs) -> Result<(), NyxdError> { + eprintln!(">>> loading: {}", args.private_key.display()); + let private_identity_key: identity::PrivateKey = + nym_pemstore::load_key(args.private_key).expect("failed to load key"); + + print_signed_msg(&private_identity_key, &args.base58_msg, args.output); + Ok(()) +} + +fn print_signed_msg(private_key: &identity::PrivateKey, raw_msg: &str, output: OutputFormat) { + let trimmed = raw_msg.trim(); + eprintln!(">>> attempting to sign: {trimmed}"); + + let Ok(decoded) = bs58::decode(trimmed).into_vec() else { + println!("failed to base58 decode the message, did you copy it correctly?"); + return; + }; + + eprintln!(">>> decoding the message..."); + + // we don't really care about what particular information is embedded inside of it, + // we just want to know if user correctly copied the string, i.e. whether it's a valid bs58 encoded json + if serde_json::from_slice::(&decoded).is_err() { + println!("failed to parse the message after decoding, did you copy it correctly?"); + return; + }; + + // if this is a valid json, it MUST be a valid string + let decoded_string = String::from_utf8(decoded.clone()).unwrap(); + let signature = private_key.sign(&decoded).to_base58_string(); + + let sign_output = ConsoleSigningOutput::new(decoded_string, signature); + println!("{}", output.format(&sign_output)); +} diff --git a/common/commands/src/validator/mixnet/operators/mod.rs b/common/commands/src/validator/mixnet/operators/mod.rs index 008adf8ae2..ce732be9e4 100644 --- a/common/commands/src/validator/mixnet/operators/mod.rs +++ b/common/commands/src/validator/mixnet/operators/mod.rs @@ -4,6 +4,7 @@ use clap::{Args, Subcommand}; pub mod gateway; +pub mod identity_key; pub mod mixnode; pub mod name; pub mod service; @@ -26,4 +27,6 @@ pub enum MixnetOperatorsCommands { ServiceProvider(service::MixnetOperatorsService), /// Manage your registered name Name(name::MixnetOperatorsName), + /// Sign messages using your private identity key + IdentityKey(identity_key::MixnetOperatorsIdentityKey), } diff --git a/common/nymsphinx/acknowledgements/Cargo.toml b/common/nymsphinx/acknowledgements/Cargo.toml index a54f3d6fd0..95b3d8b30c 100644 --- a/common/nymsphinx/acknowledgements/Cargo.toml +++ b/common/nymsphinx/acknowledgements/Cargo.toml @@ -15,11 +15,12 @@ thiserror = { workspace = true } zeroize = { workspace = true } nym-crypto = { path = "../../crypto", features = ["symmetric", "rand"] } +nym-pemstore = { path = "../../pemstore" } nym-sphinx-addressing = { path = "../addressing" } nym-sphinx-params = { path = "../params" } +nym-sphinx-routing = { path = "../routing" } nym-sphinx-types = { path = "../types" } -nym-pemstore = { path = "../../pemstore" } nym-topology = { path = "../../topology" } [features] -serde = ["serde_crate", "generic-array"] \ No newline at end of file +serde = ["serde_crate", "generic-array"] diff --git a/common/nymsphinx/acknowledgements/src/surb_ack.rs b/common/nymsphinx/acknowledgements/src/surb_ack.rs index 6fb5b26c18..e623d4e738 100644 --- a/common/nymsphinx/acknowledgements/src/surb_ack.rs +++ b/common/nymsphinx/acknowledgements/src/surb_ack.rs @@ -9,7 +9,7 @@ use nym_sphinx_addressing::nodes::{ }; use nym_sphinx_params::packet_sizes::PacketSize; use nym_sphinx_params::{PacketType, DEFAULT_NUM_MIX_HOPS}; -use nym_sphinx_types::delays::{self, Delay}; +use nym_sphinx_types::delays::Delay; use nym_sphinx_types::{NymPacket, NymPacketError, MIN_PACKET_SIZE}; use nym_topology::{NymTopology, NymTopologyError}; use rand::{CryptoRng, RngCore}; @@ -51,7 +51,7 @@ impl SurbAck { { let route = topology.random_route_to_gateway(rng, DEFAULT_NUM_MIX_HOPS, recipient.gateway())?; - let delays = delays::generate_from_average_duration(route.len(), average_delay); + let delays = nym_sphinx_routing::generate_hop_delays(average_delay, route.len()); let destination = recipient.as_sphinx_destination(); let surb_ack_payload = prepare_identifier(rng, ack_key, marshaled_fragment_id); diff --git a/common/nymsphinx/anonymous-replies/Cargo.toml b/common/nymsphinx/anonymous-replies/Cargo.toml index 39d16f0b50..49367da152 100644 --- a/common/nymsphinx/anonymous-replies/Cargo.toml +++ b/common/nymsphinx/anonymous-replies/Cargo.toml @@ -16,6 +16,7 @@ thiserror = "1" nym-crypto = { path = "../../crypto", features = ["symmetric", "rand"] } nym-sphinx-addressing = { path = "../addressing" } nym-sphinx-params = { path = "../params" } +nym-sphinx-routing = { path = "../routing" } nym-sphinx-types = { path = "../types" } nym-topology = { path = "../../topology" } diff --git a/common/nymsphinx/anonymous-replies/src/reply_surb.rs b/common/nymsphinx/anonymous-replies/src/reply_surb.rs index 82fc8ea573..877e83023d 100644 --- a/common/nymsphinx/anonymous-replies/src/reply_surb.rs +++ b/common/nymsphinx/anonymous-replies/src/reply_surb.rs @@ -7,7 +7,7 @@ use nym_sphinx_addressing::clients::Recipient; use nym_sphinx_addressing::nodes::{NymNodeRoutingAddress, MAX_NODE_ADDRESS_UNPADDED_LEN}; use nym_sphinx_params::packet_sizes::PacketSize; use nym_sphinx_params::{PacketType, ReplySurbKeyDigestAlgorithm, DEFAULT_NUM_MIX_HOPS}; -use nym_sphinx_types::{delays, NymPacket, SURBMaterial, SphinxError, SURB}; +use nym_sphinx_types::{NymPacket, SURBMaterial, SphinxError, SURB}; use nym_topology::{NymTopology, NymTopologyError}; use rand::{CryptoRng, RngCore}; use serde::de::{Error as SerdeError, Visitor}; @@ -96,7 +96,7 @@ impl ReplySurb { { let route = topology.random_route_to_gateway(rng, DEFAULT_NUM_MIX_HOPS, recipient.gateway())?; - let delays = delays::generate_from_average_duration(route.len(), average_delay); + let delays = nym_sphinx_routing::generate_hop_delays(average_delay, route.len()); let destination = recipient.as_sphinx_destination(); let surb_material = SURBMaterial::new(route, delays, destination); diff --git a/common/nymsphinx/cover/Cargo.toml b/common/nymsphinx/cover/Cargo.toml index f1558d3676..e700327c93 100644 --- a/common/nymsphinx/cover/Cargo.toml +++ b/common/nymsphinx/cover/Cargo.toml @@ -15,7 +15,8 @@ nym-crypto = { path = "../../crypto" } nym-sphinx-acknowledgements = { path = "../acknowledgements" } nym-sphinx-addressing = { path = "../addressing" } nym-sphinx-chunking = { path = "../chunking" } -nym-sphinx-params = { path = "../params" } nym-sphinx-forwarding = { path = "../forwarding" } +nym-sphinx-params = { path = "../params" } +nym-sphinx-routing = { path = "../routing" } nym-sphinx-types = { path = "../types" } nym-topology = { path = "../../topology" } diff --git a/common/nymsphinx/cover/src/lib.rs b/common/nymsphinx/cover/src/lib.rs index bd2714c3ac..05f4cffe33 100644 --- a/common/nymsphinx/cover/src/lib.rs +++ b/common/nymsphinx/cover/src/lib.rs @@ -13,7 +13,7 @@ use nym_sphinx_params::packet_sizes::PacketSize; use nym_sphinx_params::{ PacketEncryptionAlgorithm, PacketHkdfAlgorithm, PacketType, DEFAULT_NUM_MIX_HOPS, }; -use nym_sphinx_types::{delays, NymPacket}; +use nym_sphinx_types::NymPacket; use nym_topology::{NymTopology, NymTopologyError}; use rand::{CryptoRng, RngCore}; use std::convert::TryFrom; @@ -120,7 +120,7 @@ where let route = topology.random_route_to_gateway(rng, DEFAULT_NUM_MIX_HOPS, full_address.gateway())?; - let delays = delays::generate_from_average_duration(route.len(), average_packet_delay); + let delays = nym_sphinx_routing::generate_hop_delays(average_packet_delay, route.len()); let destination = full_address.as_sphinx_destination(); let first_hop_address = diff --git a/common/nymsphinx/routing/src/lib.rs b/common/nymsphinx/routing/src/lib.rs index a7067f252c..e8881b409d 100644 --- a/common/nymsphinx/routing/src/lib.rs +++ b/common/nymsphinx/routing/src/lib.rs @@ -1,8 +1,10 @@ // Copyright 2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use std::time::Duration; + use nym_sphinx_addressing::clients::Recipient; -use nym_sphinx_types::Node; +use nym_sphinx_types::{delays, Delay, Node}; use thiserror::Error; pub trait SphinxRouteMaker { @@ -41,3 +43,11 @@ impl SphinxRouteMaker for Vec { } } } + +pub fn generate_hop_delays(average_packet_delay: Duration, num_hops: usize) -> Vec { + if average_packet_delay.is_zero() { + vec![nym_sphinx_types::Delay::new_from_millis(0); num_hops] + } else { + delays::generate_from_average_duration(num_hops, average_packet_delay) + } +} diff --git a/common/nymsphinx/src/preparer/mod.rs b/common/nymsphinx/src/preparer/mod.rs index e97a9d011f..64b8de3ae4 100644 --- a/common/nymsphinx/src/preparer/mod.rs +++ b/common/nymsphinx/src/preparer/mod.rs @@ -14,7 +14,7 @@ use nym_sphinx_chunking::fragment::{Fragment, FragmentIdentifier}; use nym_sphinx_forwarding::packet::MixPacket; use nym_sphinx_params::packet_sizes::PacketSize; use nym_sphinx_params::{PacketType, ReplySurbKeyDigestAlgorithm, DEFAULT_NUM_MIX_HOPS}; -use nym_sphinx_types::{delays, Delay, NymPacket}; +use nym_sphinx_types::{Delay, NymPacket}; use nym_topology::{NymTopology, NymTopologyError}; use rand::{CryptoRng, Rng}; use std::convert::TryFrom; @@ -233,7 +233,7 @@ pub trait FragmentPreparer { // including set of delays let delays = - delays::generate_from_average_duration(route.len(), self.average_packet_delay()); + nym_sphinx_routing::generate_hop_delays(self.average_packet_delay(), route.len()); // create the actual sphinx packet here. With valid route and correct payload size, // there's absolutely no reason for this call to fail. diff --git a/common/socks5-client-core/src/config/mod.rs b/common/socks5-client-core/src/config/mod.rs index 4dd377a76b..6a34a06d22 100644 --- a/common/socks5-client-core/src/config/mod.rs +++ b/common/socks5-client-core/src/config/mod.rs @@ -27,9 +27,9 @@ pub struct Config { } impl Config { - pub fn new>(id: S, provider_mix_address: S) -> Self { + pub fn new>(id: S, version: S, provider_mix_address: S) -> Self { Config { - base: BaseClientConfig::new(id), + base: BaseClientConfig::new(id, version), socks5: Socks5::new(provider_mix_address), } } diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index b17a2f0b1c..4854974ea9 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -31,7 +31,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -997,9 +997,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "js-sys", @@ -1217,9 +1217,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.142" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "libgit2-sys" @@ -1517,7 +1517,7 @@ dependencies = [ "chacha20", "chacha20poly1305", "curve25519-dalek", - "getrandom 0.2.8", + "getrandom 0.2.10", "log", "rand 0.7.3", "rayon", @@ -1822,7 +1822,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] diff --git a/explorer-api/Cargo.toml b/explorer-api/Cargo.toml index 0085320aa7..38e8645ecc 100644 --- a/explorer-api/Cargo.toml +++ b/explorer-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "explorer-api" -version = "1.1.21" +version = "1.1.22" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/gateway/Cargo.toml b/gateway/Cargo.toml index edf9bee5eb..76f78fc189 100644 --- a/gateway/Cargo.toml +++ b/gateway/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-gateway" -version = "1.1.21" +version = "1.1.22" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/mixnode/Cargo.toml b/mixnode/Cargo.toml index c24c5da0a8..c12e9259b3 100644 --- a/mixnode/Cargo.toml +++ b/mixnode/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-mixnode" -version = "1.1.22" +version = "1.1.23" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/nym-api/Cargo.toml b/nym-api/Cargo.toml index b264e4bafe..604b766814 100644 --- a/nym-api/Cargo.toml +++ b/nym-api/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-api" -version = "1.1.22" +version = "1.1.23" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/nym-connect/desktop/CHANGELOG.md b/nym-connect/desktop/CHANGELOG.md index 4510836e7e..7335dacb94 100644 --- a/nym-connect/desktop/CHANGELOG.md +++ b/nym-connect/desktop/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [v1.1.13] (2023-06-20) + +- NymConnect - add sentry.io reporting ([#3421]) + +[#3421]: https://github.com/nymtech/nym/issues/3421 + ## [v1.1.12] (2023-03-07) - NymConnect - Update display for selected Service Provider ([#3116]) diff --git a/nym-connect/desktop/Cargo.lock b/nym-connect/desktop/Cargo.lock index 193d39cd54..7438451a8f 100644 --- a/nym-connect/desktop/Cargo.lock +++ b/nym-connect/desktop/Cargo.lock @@ -54,7 +54,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -778,7 +778,7 @@ dependencies = [ "cosmos-sdk-proto", "ecdsa", "eyre", - "getrandom 0.2.8", + "getrandom 0.2.10", "k256", "prost", "prost-types", @@ -1962,9 +1962,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "js-sys", @@ -2851,9 +2851,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.140" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "libdbus-sys" @@ -3298,7 +3298,7 @@ dependencies = [ [[package]] name = "nym-bin-common" -version = "0.5.0" +version = "0.6.0" dependencies = [ "atty", "clap", @@ -3313,7 +3313,7 @@ dependencies = [ [[package]] name = "nym-client-core" -version = "1.1.14" +version = "1.1.15" dependencies = [ "async-trait", "base64 0.21.2", @@ -3364,7 +3364,7 @@ dependencies = [ "bs58", "digest 0.9.0", "ff 0.11.1", - "getrandom 0.2.8", + "getrandom 0.2.10", "group 0.11.0", "itertools", "nym-dkg", @@ -3443,6 +3443,7 @@ dependencies = [ "nym-credential-storage", "nym-crypto", "nym-socks5-client-core", + "nym-sphinx", "nym-task", "pretty_env_logger", "rand 0.8.5", @@ -3550,7 +3551,7 @@ name = "nym-gateway-client" version = "0.1.0" dependencies = [ "futures", - "getrandom 0.2.8", + "getrandom 0.2.10", "log", "nym-bandwidth-controller", "nym-coconut-interface", @@ -3690,7 +3691,7 @@ dependencies = [ "chacha20", "chacha20poly1305", "curve25519-dalek", - "getrandom 0.2.8", + "getrandom 0.2.10", "log", "rand 0.7.3", "rayon", @@ -3817,6 +3818,7 @@ dependencies = [ "nym-pemstore", "nym-sphinx-addressing", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -3842,6 +3844,7 @@ dependencies = [ "nym-crypto", "nym-sphinx-addressing", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -3872,6 +3875,7 @@ dependencies = [ "nym-sphinx-chunking", "nym-sphinx-forwarding", "nym-sphinx-params", + "nym-sphinx-routing", "nym-sphinx-types", "nym-topology", "rand 0.7.3", @@ -3988,6 +3992,7 @@ dependencies = [ "nym-service-provider-directory-common", "nym-vesting-contract", "nym-vesting-contract-common", + "openssl", "prost", "reqwest", "serde", @@ -4127,6 +4132,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "111.26.0+1.1.1u" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.82" @@ -4136,6 +4150,7 @@ dependencies = [ "autocfg", "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -4750,7 +4765,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] @@ -4824,7 +4839,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", "redox_syscall", "thiserror", ] @@ -6300,7 +6315,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom 0.2.8", + "getrandom 0.2.10", "http", "hyper", "hyper-proxy", @@ -6822,7 +6837,7 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] @@ -7010,7 +7025,7 @@ name = "wasm-utils" version = "0.1.0" dependencies = [ "futures", - "getrandom 0.2.8", + "getrandom 0.2.10", "js-sys", "tungstenite", "wasm-bindgen", diff --git a/nym-connect/desktop/src-tauri/Cargo.toml b/nym-connect/desktop/src-tauri/Cargo.toml index a27c6ccc55..13324c003c 100644 --- a/nym-connect/desktop/src-tauri/Cargo.toml +++ b/nym-connect/desktop/src-tauri/Cargo.toml @@ -53,6 +53,7 @@ nym-crypto = { path = "../../../common/crypto" } nym-credential-storage = { path = "../../../common/credential-storage" } nym-bin-common = { path = "../../../common/bin-common"} nym-socks5-client-core = { path = "../../../common/socks5-client-core" } +nym-sphinx = { path = "../../../common/nymsphinx" } nym-task = { path = "../../../common/task" } [dev-dependencies] diff --git a/nym-connect/desktop/src-tauri/src/config/mod.rs b/nym-connect/desktop/src-tauri/src/config/mod.rs index 79dc15e5af..2c2e2a9a00 100644 --- a/nym-connect/desktop/src-tauri/src/config/mod.rs +++ b/nym-connect/desktop/src-tauri/src/config/mod.rs @@ -73,7 +73,11 @@ pub fn socks5_config_id_appended_with(gateway_id: &str) -> String { impl Config { pub fn new>(id: S, provider_mix_address: S) -> Self { Config { - core: Socks5CoreConfig::new(id.as_ref(), provider_mix_address.as_ref()), + core: Socks5CoreConfig::new( + id.as_ref(), + env!("CARGO_PKG_VERSION"), + provider_mix_address.as_ref(), + ), storage_paths: NymConnectPaths::new_default(default_data_directory(id.as_ref())), } } @@ -156,7 +160,11 @@ pub async fn init_socks5_config(provider_address: String, chosen_gateway_id: Str config.core.base.client.nym_api_urls = nym_config_common::parse_urls(&raw_validators); } - let gateway_setup = GatewaySetup::new_fresh(Some(chosen_gateway_id), None); + let gateway_setup = if register_gateway { + GatewaySetup::new_fresh(Some(chosen_gateway_id), None) + } else { + GatewaySetup::MustLoad + }; // Setup gateway by either registering a new one, or reusing exiting keys let key_store = OnDiskKeys::new(config.storage_paths.common_paths.keys.clone()); diff --git a/nym-connect/desktop/src-tauri/src/main.rs b/nym-connect/desktop/src-tauri/src/main.rs index aef1f08fae..3ea171f279 100644 --- a/nym-connect/desktop/src-tauri/src/main.rs +++ b/nym-connect/desktop/src-tauri/src/main.rs @@ -25,6 +25,11 @@ mod tasks; mod window; fn main() { + if std::env::var("NYM_CONNECT_ENABLE_MEDIUM").is_ok() { + std::env::set_var("NYM_CONNECT_DISABLE_COVER", "1"); + std::env::set_var("NYM_CONNECT_ENABLE_MIXED_SIZE_PACKETS", "1"); + std::env::set_var("NYM_CONNECT_DISABLE_PER_HOP_DELAYS", "1"); + } setup_env(None); println!("Starting up..."); diff --git a/nym-connect/desktop/src-tauri/src/tasks.rs b/nym-connect/desktop/src-tauri/src/tasks.rs index 9e70500dd0..1645bb5b60 100644 --- a/nym-connect/desktop/src-tauri/src/tasks.rs +++ b/nym-connect/desktop/src-tauri/src/tasks.rs @@ -4,8 +4,10 @@ use nym_client_core::client::base_client::storage::{MixnetClientStorage, OnDiskP use nym_client_core::{config::GatewayEndpointConfig, error::ClientCoreStatusMessage}; use nym_socks5_client_core::NymClient as Socks5NymClient; use nym_socks5_client_core::Socks5ControlMessageSender; +use nym_sphinx::params::PacketSize; use nym_task::manager::TaskStatus; use std::sync::Arc; +use std::time::Duration; use tap::TapFallible; use tokio::sync::RwLock; @@ -39,7 +41,7 @@ pub async fn start_nym_socks5_client( GatewayEndpointConfig, )> { log::info!("Loading config from file: {id}"); - let config = Config::read_from_default_path(id) + let mut config = Config::read_from_default_path(id) .tap_err(|_| log::warn!("Failed to load configuration file"))?; let storage = @@ -53,6 +55,21 @@ pub async fn start_nym_socks5_client( .expect("failed to load gateway details") .into(); + // Disable both the loop cover traffic that runs in the background as well as the Poisson + // process that injects cover traffic into the traffic stream. + if std::env::var("NYM_CONNECT_DISABLE_COVER").is_ok() { + config.core.base.set_no_cover_traffic(); + } + + if std::env::var("NYM_CONNECT_ENABLE_MIXED_SIZE_PACKETS").is_ok() { + config.core.base.debug.traffic.secondary_packet_size = Some(PacketSize::ExtendedPacket16); + } + + if std::env::var("NYM_CONNECT_DISABLE_PER_HOP_DELAY").is_ok() { + config.core.base.debug.traffic.average_packet_delay = Duration::ZERO; + config.core.base.debug.acknowledgements.average_ack_delay = Duration::ZERO; + } + log::info!("Starting socks5 client"); // Channel to send control messages to the socks5 client diff --git a/nym-outfox/Cargo.toml b/nym-outfox/Cargo.toml index 8fcadb2f03..abf7104fc2 100644 --- a/nym-outfox/Cargo.toml +++ b/nym-outfox/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "nym-outfox" version = "0.1.0" -edition = "2018" +description = "Outfox package format" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +repository = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -12,8 +16,7 @@ zeroize = "1.5" chacha20 = "0.9.0" curve25519-dalek = "3.2" chacha20poly1305 = "0.10.1" -# Need this star over here to pull in js into getrandom -getrandom = { version = "*", features = ["js"] } +getrandom = { workspace = true, features = ["js"] } thiserror = "1" sphinx-packet = "0.1.0" rand = "0.7.3" diff --git a/nym-wallet/Cargo.lock b/nym-wallet/Cargo.lock index 90a3ef2230..5ec7afbc8e 100644 --- a/nym-wallet/Cargo.lock +++ b/nym-wallet/Cargo.lock @@ -68,7 +68,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", "once_cell", "version_check", ] @@ -759,7 +759,7 @@ dependencies = [ "cosmos-sdk-proto", "ecdsa", "eyre", - "getrandom 0.2.8", + "getrandom 0.2.10", "k256", "prost", "prost-types", @@ -1831,9 +1831,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "js-sys", @@ -2630,9 +2630,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "libgit2-sys" @@ -3002,7 +3002,7 @@ dependencies = [ [[package]] name = "nym-bin-common" -version = "0.5.0" +version = "0.6.0" dependencies = [ "atty", "clap", @@ -3023,7 +3023,7 @@ dependencies = [ "bs58", "digest 0.9.0", "ff 0.11.1", - "getrandom 0.2.8", + "getrandom 0.2.10", "group 0.11.0", "itertools", "nym-dkg", @@ -3202,7 +3202,7 @@ dependencies = [ "chacha20", "chacha20poly1305", "curve25519-dalek", - "getrandom 0.2.8", + "getrandom 0.2.10", "log", "rand 0.7.3", "rayon", @@ -3247,7 +3247,7 @@ dependencies = [ "aes-gcm", "argon2", "generic-array 0.14.7", - "getrandom 0.2.8", + "getrandom 0.2.10", "rand 0.8.5", "serde", "serde_json", @@ -3311,6 +3311,7 @@ dependencies = [ "nym-service-provider-directory-common", "nym-vesting-contract", "nym-vesting-contract-common", + "openssl", "prost", "reqwest", "serde", @@ -3388,7 +3389,7 @@ dependencies = [ [[package]] name = "nym_wallet" -version = "1.2.4" +version = "1.2.5" dependencies = [ "async-trait", "base64 0.13.1", @@ -3538,6 +3539,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "111.26.0+1.1.1u" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efc62c9f12b22b8f5208c23a7200a442b2e5999f8bdf80233852122b5a4f6f37" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.80" @@ -3547,6 +3557,7 @@ dependencies = [ "autocfg", "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -4141,7 +4152,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] @@ -4218,7 +4229,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", "redox_syscall", "thiserror", ] @@ -5399,7 +5410,7 @@ dependencies = [ "bytes", "flex-error", "futures", - "getrandom 0.2.8", + "getrandom 0.2.10", "http", "hyper", "hyper-proxy", @@ -5857,7 +5868,7 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.10", ] [[package]] diff --git a/nym-wallet/package.json b/nym-wallet/package.json index 155d677f5b..bd97e241a0 100644 --- a/nym-wallet/package.json +++ b/nym-wallet/package.json @@ -1,6 +1,6 @@ { "name": "@nymproject/nym-wallet-app", - "version": "1.2.4", + "version": "1.2.5", "main": "index.js", "license": "MIT", "scripts": { diff --git a/nym-wallet/src-tauri/Cargo.toml b/nym-wallet/src-tauri/Cargo.toml index 3a2cb19a6a..c94455307d 100644 --- a/nym-wallet/src-tauri/Cargo.toml +++ b/nym-wallet/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym_wallet" -version = "1.2.4" +version = "1.2.5" description = "Nym Native Wallet" authors = ["Nym Technologies SA"] license = "" diff --git a/nym-wallet/src-tauri/tauri.conf.json b/nym-wallet/src-tauri/tauri.conf.json index 7c9d2719f3..debfcb3b1f 100644 --- a/nym-wallet/src-tauri/tauri.conf.json +++ b/nym-wallet/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "package": { "productName": "nym-wallet", - "version": "1.2.4" + "version": "1.2.5" }, "build": { "distDir": "../dist", diff --git a/sdk/lib/socks5-listener/src/config/mod.rs b/sdk/lib/socks5-listener/src/config/mod.rs index f2c80303d9..c6a7060954 100644 --- a/sdk/lib/socks5-listener/src/config/mod.rs +++ b/sdk/lib/socks5-listener/src/config/mod.rs @@ -67,7 +67,11 @@ impl Config { S: AsRef, { Config { - core: CoreConfig::new(id.as_ref(), provider_mix_address.as_ref()), + core: CoreConfig::new( + id.as_ref(), + env!("CARGO_PKG_VERSION"), + provider_mix_address.as_ref(), + ), storage_paths: storage_root.map(|storage_root| { MobileSocksClientPaths::new_default(data_directory_from_root( storage_root, diff --git a/sdk/typescript/packages/sdk/package.json b/sdk/typescript/packages/sdk/package.json index f23a7d9c27..7b05d365af 100644 --- a/sdk/typescript/packages/sdk/package.json +++ b/sdk/typescript/packages/sdk/package.json @@ -24,6 +24,7 @@ "prebuild": "yarn build:dependencies", "build": "yarn build:only-this", "build:only-this": "scripts/build-prod.sh", + "prebuild:dev": "yarn build:dependencies", "build:dev": "yarn build:dev:only-this", "build:dev:only-this": "scripts/build.sh" }, diff --git a/service-providers/network-requester/Cargo.toml b/service-providers/network-requester/Cargo.toml index 6e70fdef2f..63730bb8bd 100644 --- a/service-providers/network-requester/Cargo.toml +++ b/service-providers/network-requester/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-network-requester" -version = "1.1.21" +version = "1.1.22" authors.workspace = true edition.workspace = true rust-version = "1.65" diff --git a/service-providers/network-requester/src/config/mod.rs b/service-providers/network-requester/src/config/mod.rs index dc3c8eb23b..ee7b4ce60e 100644 --- a/service-providers/network-requester/src/config/mod.rs +++ b/service-providers/network-requester/src/config/mod.rs @@ -82,7 +82,7 @@ impl NymConfigTemplate for Config { impl Config { pub fn new>(id: S) -> Self { Config { - base: BaseClientConfig::new(id.as_ref()), + base: BaseClientConfig::new(id.as_ref(), env!("CARGO_PKG_VERSION")), network_requester: Default::default(), storage_paths: NetworkRequesterPaths::new_default(default_data_directory(id.as_ref())), network_requester_debug: Default::default(), diff --git a/service-providers/network-statistics/Cargo.toml b/service-providers/network-statistics/Cargo.toml index 555d931bdf..076b7c98c1 100644 --- a/service-providers/network-statistics/Cargo.toml +++ b/service-providers/network-statistics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-network-statistics" -version = "1.1.21" +version = "1.1.22" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/tools/nym-cli/Cargo.toml b/tools/nym-cli/Cargo.toml index a2c7dfc014..dc69da6e25 100644 --- a/tools/nym-cli/Cargo.toml +++ b/tools/nym-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-cli" -version = "1.1.21" +version = "1.1.22" authors.workspace = true edition = "2021" diff --git a/tools/nym-cli/src/validator/mixnet/operators/identity_key/mod.rs b/tools/nym-cli/src/validator/mixnet/operators/identity_key/mod.rs new file mode 100644 index 0000000000..7be1b3a7a7 --- /dev/null +++ b/tools/nym-cli/src/validator/mixnet/operators/identity_key/mod.rs @@ -0,0 +1,15 @@ +use nym_cli_commands::context::ClientArgs; +use nym_network_defaults::NymNetworkDetails; + +pub(crate) async fn execute( + _global_args: ClientArgs, + identity_key: nym_cli_commands::validator::mixnet::operators::identity_key::MixnetOperatorsIdentityKey, + _network_details: &NymNetworkDetails, +) -> anyhow::Result<()> { + let res = match identity_key.command { + nym_cli_commands::validator::mixnet::operators::identity_key::MixnetOperatorsIdentityKeyCommands::Sign(sign_args) => { + nym_cli_commands::validator::mixnet::operators::identity_key::sign(sign_args).await + } + }; + Ok(res?) +} diff --git a/tools/nym-cli/src/validator/mixnet/operators/mod.rs b/tools/nym-cli/src/validator/mixnet/operators/mod.rs index 4111cb4608..feb336524c 100644 --- a/tools/nym-cli/src/validator/mixnet/operators/mod.rs +++ b/tools/nym-cli/src/validator/mixnet/operators/mod.rs @@ -5,6 +5,7 @@ use nym_cli_commands::context::ClientArgs; use nym_network_defaults::NymNetworkDetails; pub(crate) mod gateways; +pub(crate) mod identity_key; pub(crate) mod mixnodes; pub(crate) mod name; pub(crate) mod services; @@ -23,5 +24,6 @@ pub(crate) async fn execute( ) => mixnodes::execute(global_args, mixnode, network_details).await, nym_cli_commands::validator::mixnet::operators::MixnetOperatorsCommands::ServiceProvider(service) => services::execute(global_args, service, network_details).await, nym_cli_commands::validator::mixnet::operators::MixnetOperatorsCommands::Name(name) => name::execute(global_args, name, network_details).await, + nym_cli_commands::validator::mixnet::operators::MixnetOperatorsCommands::IdentityKey(identity_key) => identity_key::execute(global_args, identity_key, network_details).await, } }