From 8f5457e698644e9b1fa66a5cc2d408ac9ce7f9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Wed, 26 Feb 2025 09:47:57 +0000 Subject: [PATCH] feature: allow nym-nodes to understand future version of sphinx packets (#5496) (#5518) * use updated sphinx crate * updated outfox usage of keygen in tests * use x25519 in outfox * remove redundant constructor * adjusted key convertion traits --- Cargo.lock | 10 +- Cargo.toml | 2 +- common/crypto/Cargo.toml | 5 +- .../crypto/src/asymmetric/encryption/mod.rs | 118 +---- common/nymsphinx/Cargo.toml | 2 - common/nymsphinx/addressing/Cargo.toml | 2 +- .../anonymous-replies/src/requests.rs | 2 +- common/nymsphinx/framing/src/codec.rs | 23 +- common/nymsphinx/framing/src/processing.rs | 105 +++- common/nymsphinx/params/Cargo.toml | 4 +- common/nymsphinx/types/src/lib.rs | 24 +- common/topology/Cargo.toml | 2 +- common/topology/src/node.rs | 2 +- contracts/Cargo.lock | 487 ++++++------------ nym-node/nym-node-metrics/src/mixnet.rs | 33 +- .../src/prometheus_wrapper.rs | 36 +- .../handler/global_prometheus_updater/mod.rs | 9 + nym-node/src/node/mixnet/handler.rs | 21 +- nym-node/src/node/mixnet/shared/mod.rs | 39 +- nym-node/src/node/mod.rs | 2 +- nym-outfox/Cargo.toml | 2 +- nym-outfox/src/format.rs | 48 +- nym-outfox/src/packet.rs | 19 +- nym-outfox/tests/unittests.rs | 36 +- nym-wallet/Cargo.lock | 212 ++------ .../src/generic_scheme/coconut/types.rs | 12 - 26 files changed, 489 insertions(+), 768 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 292aaa93d7..0bac1e45d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6454,7 +6454,6 @@ dependencies = [ "chacha20", "chacha20poly1305", "criterion", - "curve25519-dalek 4.1.3", "fastrand 2.1.1", "getrandom 0.2.15", "log", @@ -6462,6 +6461,7 @@ dependencies = [ "rayon", "sphinx-packet", "thiserror 2.0.11", + "x25519-dalek", "zeroize", ] @@ -7999,7 +7999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools 0.13.0", "proc-macro2", "quote", "syn 2.0.90", @@ -9426,9 +9426,9 @@ dependencies = [ [[package]] name = "sphinx-packet" -version = "0.1.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabeca95bf5fd0563d6be7ebcb1c6a9fcb135746a0ba9050c47dc68c8607e595" +checksum = "535f2c430778bf59c22249fcc1ed6d384129eb2f0f694706015d636c688f9ac6" dependencies = [ "aes", "arrayref", @@ -9442,11 +9442,11 @@ dependencies = [ "hkdf", "hmac", "lioness", - "log", "rand 0.8.5", "rand_distr", "sha2 0.10.8", "subtle 2.5.0", + "x25519-dalek", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index d6b29494fb..a750d7dbc7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -322,7 +322,7 @@ serde_with = "3.9.0" serde_yaml = "0.9.25" sha2 = "0.10.8" si-scale = "0.2.3" -sphinx-packet = "0.1.1" +sphinx-packet = "0.3.1" sqlx = "0.7.4" strum = "0.26" strum_macros = "0.26" diff --git a/common/crypto/Cargo.toml b/common/crypto/Cargo.toml index e840713541..ee8819585e 100644 --- a/common/crypto/Cargo.toml +++ b/common/crypto/Cargo.toml @@ -37,11 +37,10 @@ nym-pemstore = { path = "../../common/pemstore", version = "0.3.0" } rand_chacha = { workspace = true } [features] -default = ["sphinx"] +default = [] aead = ["dep:aead", "aead/std", "aes-gcm-siv", "generic-array"] serde = ["dep:serde", "serde_bytes", "ed25519-dalek/serde", "x25519-dalek/serde"] asymmetric = ["x25519-dalek", "ed25519-dalek", "zeroize"] hashing = ["blake3", "digest", "hkdf", "hmac", "generic-array", "sha2"] stream_cipher = ["aes", "ctr", "cipher", "generic-array"] -sphinx = ["nym-sphinx-types/sphinx"] -outfox = ["nym-sphinx-types/outfox"] +sphinx = ["nym-sphinx-types/sphinx"] \ No newline at end of file diff --git a/common/crypto/src/asymmetric/encryption/mod.rs b/common/crypto/src/asymmetric/encryption/mod.rs index 7d7b988fc8..6bdeb284d4 100644 --- a/common/crypto/src/asymmetric/encryption/mod.rs +++ b/common/crypto/src/asymmetric/encryption/mod.rs @@ -202,6 +202,18 @@ impl PemStorableKey for PublicKey { } } +impl From for PublicKey { + fn from(public_key: x25519_dalek::PublicKey) -> Self { + PublicKey(public_key) + } +} + +impl From for x25519_dalek::PublicKey { + fn from(public_key: PublicKey) -> Self { + public_key.0 + } +} + #[derive(Zeroize, ZeroizeOnDrop)] pub struct PrivateKey(x25519_dalek::StaticSecret); @@ -308,109 +320,15 @@ impl PemStorableKey for PrivateKey { } } -// compatibility with sphinx keys: -#[cfg(feature = "sphinx")] -impl From for nym_sphinx_types::PublicKey { - fn from(key: PublicKey) -> Self { - nym_sphinx_types::PublicKey::from(key.to_bytes()) +impl From for PrivateKey { + fn from(secret: x25519_dalek::StaticSecret) -> Self { + PrivateKey(secret) } } -#[cfg(feature = "sphinx")] -impl<'a> From<&'a PublicKey> for nym_sphinx_types::PublicKey { - fn from(key: &'a PublicKey) -> Self { - nym_sphinx_types::PublicKey::from((*key).to_bytes()) - } -} - -#[cfg(feature = "sphinx")] -impl From for PublicKey { - fn from(pub_key: nym_sphinx_types::PublicKey) -> Self { - Self(x25519_dalek::PublicKey::from(*pub_key.as_bytes())) - } -} - -#[cfg(feature = "sphinx")] -impl From for nym_sphinx_types::PrivateKey { - fn from(key: PrivateKey) -> Self { - nym_sphinx_types::PrivateKey::from(key.to_bytes()) - } -} - -#[cfg(feature = "sphinx")] -impl<'a> From<&'a PrivateKey> for nym_sphinx_types::PrivateKey { - fn from(key: &'a PrivateKey) -> Self { - nym_sphinx_types::PrivateKey::from(key.to_bytes()) - } -} - -#[cfg(feature = "sphinx")] -impl From for PrivateKey { - fn from(private_key: nym_sphinx_types::PrivateKey) -> Self { - let private_key_bytes = private_key.to_bytes(); - assert_eq!(private_key_bytes.len(), PRIVATE_KEY_SIZE); - Self::from_bytes(&private_key_bytes).unwrap() - } -} - -#[cfg(test)] -mod sphinx_key_conversion { - use super::*; - use rand_chacha::rand_core::SeedableRng; - use rand_chacha::ChaCha20Rng; - - pub(super) fn test_rng() -> ChaCha20Rng { - let dummy_seed = [42u8; 32]; - ChaCha20Rng::from_seed(dummy_seed) - } - - const NUM_ITERATIONS: usize = 100; - - #[test] - fn works_for_forward_conversion() { - let mut rng = test_rng(); - - for _ in 0..NUM_ITERATIONS { - let keys = KeyPair::new(&mut rng); - let private = &keys.private_key; - let public = &keys.public_key; - - let dummy_remote = KeyPair::new(&mut rng); - let dh1 = private.diffie_hellman(&dummy_remote.public_key); - - let public_bytes = public.to_bytes(); - - let sphinx_private: nym_sphinx_types::PrivateKey = private.into(); - let recovered_private = PrivateKey::from(sphinx_private); - - let dh2 = recovered_private.diffie_hellman(&dummy_remote.public_key); - - let sphinx_public: nym_sphinx_types::PublicKey = public.into(); - let recovered_public = PublicKey::from(sphinx_public); - assert_eq!(public_bytes, recovered_public.to_bytes()); - - // even though the byte representation of the private key changed, the resultant DH is the same - // which is what matters - assert_eq!(dh1, dh2); - } - } - - #[test] - fn works_for_backward_conversion() { - for _ in 0..NUM_ITERATIONS { - let (sphinx_private, sphinx_public) = nym_sphinx_types::crypto::keygen(); - - let private_bytes = sphinx_private.to_bytes(); - let public_bytes = sphinx_public.as_bytes(); - - let private: PrivateKey = sphinx_private.into(); - let recovered_sphinx_private: nym_sphinx_types::PrivateKey = private.into(); - - let public: PublicKey = sphinx_public.into(); - let recovered_sphinx_public: nym_sphinx_types::PublicKey = public.into(); - assert_eq!(private_bytes, recovered_sphinx_private.to_bytes()); - assert_eq!(public_bytes, recovered_sphinx_public.as_bytes()); - } +impl AsRef for PrivateKey { + fn as_ref(&self) -> &x25519_dalek::StaticSecret { + &self.0 } } diff --git a/common/nymsphinx/Cargo.toml b/common/nymsphinx/Cargo.toml index 13ad8a8210..a82c9a4272 100644 --- a/common/nymsphinx/Cargo.toml +++ b/common/nymsphinx/Cargo.toml @@ -48,12 +48,10 @@ features = ["sync"] [features] default = ["sphinx"] sphinx = [ - "nym-crypto/sphinx", "nym-sphinx-params/sphinx", "nym-sphinx-types/sphinx", ] outfox = [ - "nym-crypto/outfox", "nym-sphinx-params/outfox", "nym-sphinx-types/outfox", ] diff --git a/common/nymsphinx/addressing/Cargo.toml b/common/nymsphinx/addressing/Cargo.toml index 4131dc751f..03ec4d94af 100644 --- a/common/nymsphinx/addressing/Cargo.toml +++ b/common/nymsphinx/addressing/Cargo.toml @@ -8,7 +8,7 @@ license = { workspace = true } repository = { workspace = true } [dependencies] -nym-crypto = { path = "../../crypto", features = ["asymmetric"] } # all addresses are expressed in terms on their crypto keys +nym-crypto = { path = "../../crypto", features = ["asymmetric", "sphinx"] } # all addresses are expressed in terms on their crypto keys nym-sphinx-types = { path = "../types", features = ["sphinx"] } # we need to be able to refer to some types defined inside sphinx crate serde = { workspace = true } # implementing serialization/deserialization for some types, like `Recipient` thiserror = { workspace = true } diff --git a/common/nymsphinx/anonymous-replies/src/requests.rs b/common/nymsphinx/anonymous-replies/src/requests.rs index 3945753495..7503f141e2 100644 --- a/common/nymsphinx/anonymous-replies/src/requests.rs +++ b/common/nymsphinx/anonymous-replies/src/requests.rs @@ -559,7 +559,7 @@ mod tests { let mut address_bytes = [0; NODE_ADDRESS_LENGTH]; rng.fill_bytes(&mut address_bytes); - let dummy_private = PrivateKey::new_with_rng(rng); + let dummy_private = PrivateKey::random_from_rng(rng); let pub_key = (&dummy_private).into(); Node { address: NodeAddressBytes::from_bytes(address_bytes), diff --git a/common/nymsphinx/framing/src/codec.rs b/common/nymsphinx/framing/src/codec.rs index 2abc29f91e..01d805c9e8 100644 --- a/common/nymsphinx/framing/src/codec.rs +++ b/common/nymsphinx/framing/src/codec.rs @@ -130,28 +130,33 @@ impl Decoder for NymCodec { mod packet_encoding { use super::*; use nym_sphinx_types::{ - crypto, Delay as SphinxDelay, Destination, DestinationAddressBytes, Node, NodeAddressBytes, - DESTINATION_ADDRESS_LENGTH, IDENTIFIER_LENGTH, NODE_ADDRESS_LENGTH, + Delay as SphinxDelay, Destination, DestinationAddressBytes, Node, NodeAddressBytes, + PrivateKey, DESTINATION_ADDRESS_LENGTH, IDENTIFIER_LENGTH, NODE_ADDRESS_LENGTH, }; + fn random_pubkey() -> nym_sphinx_types::PublicKey { + let private_key = PrivateKey::random(); + (&private_key).into() + } + fn make_valid_outfox_packet(size: PacketSize) -> NymPacket { - let (_, node1_pk) = crypto::keygen(); + let node1_pk = random_pubkey(); let node1 = Node::new( NodeAddressBytes::from_bytes([5u8; NODE_ADDRESS_LENGTH]), node1_pk, ); - let (_, node2_pk) = crypto::keygen(); + let node2_pk = random_pubkey(); let node2 = Node::new( NodeAddressBytes::from_bytes([4u8; NODE_ADDRESS_LENGTH]), node2_pk, ); - let (_, node3_pk) = crypto::keygen(); + let node3_pk = random_pubkey(); let node3 = Node::new( NodeAddressBytes::from_bytes([2u8; NODE_ADDRESS_LENGTH]), node3_pk, ); - let (_, node4_pk) = crypto::keygen(); + let node4_pk = random_pubkey(); let node4 = Node::new( NodeAddressBytes::from_bytes([2u8; NODE_ADDRESS_LENGTH]), node4_pk, @@ -170,17 +175,17 @@ mod packet_encoding { } fn make_valid_sphinx_packet(size: PacketSize) -> NymPacket { - let (_, node1_pk) = crypto::keygen(); + let node1_pk = random_pubkey(); let node1 = Node::new( NodeAddressBytes::from_bytes([5u8; NODE_ADDRESS_LENGTH]), node1_pk, ); - let (_, node2_pk) = crypto::keygen(); + let node2_pk = random_pubkey(); let node2 = Node::new( NodeAddressBytes::from_bytes([4u8; NODE_ADDRESS_LENGTH]), node2_pk, ); - let (_, node3_pk) = crypto::keygen(); + let node3_pk = random_pubkey(); let node3 = Node::new( NodeAddressBytes::from_bytes([2u8; NODE_ADDRESS_LENGTH]), node3_pk, diff --git a/common/nymsphinx/framing/src/processing.rs b/common/nymsphinx/framing/src/processing.rs index f9dd02dcfb..d00d4d797c 100644 --- a/common/nymsphinx/framing/src/processing.rs +++ b/common/nymsphinx/framing/src/processing.rs @@ -4,8 +4,10 @@ use nym_sphinx_addressing::nodes::{NymNodeRoutingAddress, NymNodeRoutingAddressE use nym_sphinx_params::{PacketSize, PacketType}; use nym_sphinx_types::{ Delay as SphinxDelay, DestinationAddressBytes, NodeAddressBytes, NymPacket, NymPacketError, - NymProcessedPacket, OutfoxError, PrivateKey, ProcessedPacket, SphinxError, + NymProcessedPacket, OutfoxError, PrivateKey, ProcessedPacketData, SphinxError, + Version as SphinxPacketVersion, }; +use std::fmt::Display; use thiserror::Error; use crate::packet::FramedNymPacket; @@ -13,12 +15,38 @@ use nym_metrics::nanos; use nym_sphinx_forwarding::packet::MixPacket; #[derive(Debug)] -pub enum MixProcessingResult { +pub enum MixProcessingResultData { /// Contains unwrapped data that should first get delayed before being sent to next hop. - ForwardHop(MixPacket, Option), + ForwardHop { + packet: MixPacket, + delay: Option, + }, /// Contains all data extracted out of the final hop packet that could be forwarded to the destination. - FinalHop(ProcessedFinalHop), + FinalHop { final_hop_data: ProcessedFinalHop }, +} + +#[derive(Debug, Copy, Clone)] +pub enum MixPacketVersion { + Outfox, + Sphinx(SphinxPacketVersion), +} + +impl Display for MixPacketVersion { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + match self { + MixPacketVersion::Outfox => "outfox".fmt(f), + MixPacketVersion::Sphinx(sphinx_version) => { + write!(f, "sphinx-{}", sphinx_version.value()) + } + } + } +} + +#[derive(Debug)] +pub struct MixProcessingResult { + pub packet_version: MixPacketVersion, + pub processing_data: MixProcessingResultData, } type ForwardAck = MixPacket; @@ -107,37 +135,63 @@ fn perform_final_processing( ) -> Result { match packet { NymProcessedPacket::Sphinx(packet) => { - match packet { - ProcessedPacket::ForwardHop(packet, address, delay) => { - process_forward_hop(NymPacket::Sphinx(*packet), address, delay, packet_type) - } + let processing_data = match packet.data { + ProcessedPacketData::ForwardHop { + next_hop_packet, + next_hop_address, + delay, + } => process_forward_hop( + NymPacket::Sphinx(next_hop_packet), + next_hop_address, + delay, + packet_type, + ), // right now there's no use for the surb_id included in the header - probably it should get removed from the // sphinx all together? - ProcessedPacket::FinalHop(destination, _, payload) => process_final_hop( + ProcessedPacketData::FinalHop { + destination, + identifier: _, + payload, + } => process_final_hop( destination, payload.recover_plaintext()?, packet_size, packet_type, ), - } + }?; + + Ok(MixProcessingResult { + packet_version: MixPacketVersion::Sphinx(packet.version), + processing_data, + }) } NymProcessedPacket::Outfox(packet) => { let next_address = *packet.next_address(); let packet = packet.into_packet(); if packet.is_final_hop() { - process_final_hop( + let processing_data = process_final_hop( DestinationAddressBytes::from_bytes(next_address), packet.recover_plaintext()?.to_vec(), packet_size, packet_type, - ) + )?; + Ok(MixProcessingResult { + packet_version: MixPacketVersion::Outfox, + processing_data, + }) } else { - let mix_packet = MixPacket::new( + let packet = MixPacket::new( NymNodeRoutingAddress::try_from_bytes(&next_address)?, NymPacket::Outfox(packet), PacketType::Outfox, ); - Ok(MixProcessingResult::ForwardHop(mix_packet, None)) + Ok(MixProcessingResult { + packet_version: MixPacketVersion::Outfox, + processing_data: MixProcessingResultData::ForwardHop { + packet, + delay: None, + }, + }) } } } @@ -148,14 +202,16 @@ fn process_final_hop( payload: Vec, packet_size: PacketSize, packet_type: PacketType, -) -> Result { +) -> Result { let (forward_ack, message) = split_into_ack_and_message(payload, packet_size, packet_type)?; - Ok(MixProcessingResult::FinalHop(ProcessedFinalHop { - destination, - forward_ack, - message, - })) + Ok(MixProcessingResultData::FinalHop { + final_hop_data: ProcessedFinalHop { + destination, + forward_ack, + message, + }, + }) } fn split_into_ack_and_message( @@ -211,11 +267,14 @@ fn process_forward_hop( forward_address: NodeAddressBytes, delay: SphinxDelay, packet_type: PacketType, -) -> Result { +) -> Result { let next_hop_address = NymNodeRoutingAddress::try_from(forward_address)?; - let mix_packet = MixPacket::new(next_hop_address, packet, packet_type); - Ok(MixProcessingResult::ForwardHop(mix_packet, Some(delay))) + let packet = MixPacket::new(next_hop_address, packet, packet_type); + Ok(MixProcessingResultData::ForwardHop { + packet, + delay: Some(delay), + }) } // TODO: what more could we realistically test here? diff --git a/common/nymsphinx/params/Cargo.toml b/common/nymsphinx/params/Cargo.toml index 9c360942b0..8db26e7b1d 100644 --- a/common/nymsphinx/params/Cargo.toml +++ b/common/nymsphinx/params/Cargo.toml @@ -16,5 +16,5 @@ nym-sphinx-types = { path = "../types" } [features] default = ["sphinx"] -sphinx = ["nym-crypto/sphinx", "nym-sphinx-types/outfox"] -outfox = ["nym-crypto/outfox", "nym-sphinx-types/outfox"] +sphinx = ["nym-sphinx-types/outfox"] +outfox = ["nym-sphinx-types/outfox"] diff --git a/common/nymsphinx/types/src/lib.rs b/common/nymsphinx/types/src/lib.rs index 05232c0483..c9441dbc4d 100644 --- a/common/nymsphinx/types/src/lib.rs +++ b/common/nymsphinx/types/src/lib.rs @@ -1,14 +1,22 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use std::{array::TryFromSliceError, fmt}; +use thiserror::Error; + +#[cfg(feature = "outfox")] +use nym_outfox::packet::{OutfoxPacket, OutfoxProcessedPacket}; + +#[cfg(feature = "sphinx")] +use sphinx_packet::{SphinxPacket, SphinxPacketBuilder}; + #[cfg(feature = "outfox")] pub use nym_outfox::{ constants::MIN_PACKET_SIZE, constants::MIX_PARAMS_LEN, constants::OUTFOX_PACKET_OVERHEAD, error::OutfoxError, }; // re-exporting types and constants available in sphinx -#[cfg(feature = "outfox")] -use nym_outfox::packet::{OutfoxPacket, OutfoxProcessedPacket}; + #[cfg(feature = "sphinx")] pub use sphinx_packet::{ constants::{ @@ -21,12 +29,10 @@ pub use sphinx_packet::{ payload::{Payload, PAYLOAD_OVERHEAD_SIZE}, route::{Destination, DestinationAddressBytes, Node, NodeAddressBytes, SURBIdentifier}, surb::{SURBMaterial, SURB}, - Error as SphinxError, ProcessedPacket, + version::Version, + version::UPDATED_LEGACY_VERSION, + Error as SphinxError, ProcessedPacket, ProcessedPacketData, }; -#[cfg(feature = "sphinx")] -use sphinx_packet::{SphinxPacket, SphinxPacketBuilder}; -use std::{array::TryFromSliceError, fmt}; -use thiserror::Error; #[derive(Error, Debug)] pub enum NymPacketError { @@ -85,8 +91,12 @@ impl NymPacket { destination: &Destination, delays: &[Delay], ) -> Result { + // FIXME: + // for now explicitly use the legacy version until sufficient number of nodes + // understand both variants Ok(NymPacket::Sphinx( SphinxPacketBuilder::new() + .with_version(UPDATED_LEGACY_VERSION) .with_payload_size(size) .build_packet(message, route, destination, delays)?, )) diff --git a/common/topology/Cargo.toml b/common/topology/Cargo.toml index be031ed095..ba34832b04 100644 --- a/common/topology/Cargo.toml +++ b/common/topology/Cargo.toml @@ -27,7 +27,7 @@ wasm-bindgen = { workspace = true, optional = true } ## internal nym-config = { path = "../config" } -nym-crypto = { path = "../crypto", features = ["sphinx", "outfox"] } +nym-crypto = { path = "../crypto" } nym-mixnet-contract-common = { path = "../cosmwasm-smart-contracts/mixnet-contract" } nym-sphinx-addressing = { path = "../nymsphinx/addressing" } nym-sphinx-types = { path = "../nymsphinx/types", features = [ diff --git a/common/topology/src/node.rs b/common/topology/src/node.rs index 81ab236f76..47193e6438 100644 --- a/common/topology/src/node.rs +++ b/common/topology/src/node.rs @@ -105,7 +105,7 @@ impl<'a> From<&'a RoutingNode> for SphinxNode { .try_into() .unwrap(); - SphinxNode::new(node_address_bytes, (&node.sphinx_key).into()) + SphinxNode::new(node_address_bytes, node.sphinx_key.into()) } } diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index a5c961c076..7a2e25bfb6 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -2,17 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "ahash" version = "0.7.8" @@ -35,21 +24,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.88" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1496f8fb1fbf272686b8d37f523dab3e4a7443300055e74cdaa449f3114356" - -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "autocfg" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "base16ct" @@ -81,25 +58,13 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -108,7 +73,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -132,12 +97,6 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "byteorder" version = "1.5.0" @@ -146,15 +105,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -179,7 +138,7 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -188,26 +147,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "coconut-test" version = "0.1.0" @@ -233,7 +172,7 @@ dependencies = [ "schemars", "serde", "subtle-encoding", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -244,9 +183,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_panic" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" [[package]] name = "convert_case" @@ -265,9 +204,9 @@ checksum = "c533b66e502ecab30fec23d03eb54ab1d3ce120645a00493459f8510b7a9736f" dependencies = [ "digest 0.10.7", "ed25519-zebra", - "k256 0.13.3", + "k256 0.13.4", "rand_core 0.6.4", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -289,7 +228,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -320,7 +259,7 @@ dependencies = [ "serde", "serde-json-wasm", "sha2 0.10.8", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -335,9 +274,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -348,9 +287,9 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -360,9 +299,9 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -372,29 +311,10 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "curve25519-dalek" version = "3.2.0" @@ -404,24 +324,23 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.4.1", + "subtle", "zeroize", ] [[package]] name = "curve25519-dalek" -version = "4.1.2" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "platforms", "rustc_version", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -448,7 +367,7 @@ dependencies = [ "cw-utils", "schemars", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -467,7 +386,7 @@ dependencies = [ "prost", "schemars", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -493,7 +412,7 @@ dependencies = [ "schemars", "semver", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -508,7 +427,7 @@ dependencies = [ "schemars", "semver", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -538,7 +457,7 @@ dependencies = [ "schemars", "semver", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -553,7 +472,7 @@ dependencies = [ "cw20", "schemars", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -570,7 +489,7 @@ dependencies = [ "cw3", "schemars", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -622,7 +541,7 @@ dependencies = [ "nym-group-contract-common", "schemars", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -665,22 +584,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -692,14 +602,14 @@ dependencies = [ "block-buffer 0.10.4", "const-oid", "crypto-common", - "subtle 2.4.1", + "subtle", ] [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "ecdsa" @@ -743,12 +653,12 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "curve25519-dalek 4.1.2", + "curve25519-dalek 4.1.3", "ed25519", "rand_core 0.6.4", "serde", "sha2 0.10.8", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -769,9 +679,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -784,12 +694,12 @@ dependencies = [ "der 0.6.1", "digest 0.10.7", "ff 0.12.1", - "generic-array 0.14.7", + "generic-array", "group 0.12.1", "pkcs8 0.9.0", "rand_core 0.6.4", "sec1 0.3.0", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -803,20 +713,20 @@ dependencies = [ "crypto-bigint 0.5.5", "digest 0.10.7", "ff 0.13.0", - "generic-array 0.14.7", + "generic-array", "group 0.13.0", "pkcs8 0.10.2", "rand_core 0.6.4", "sec1 0.7.3", - "subtle 2.4.1", + "subtle", "zeroize", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "ff" @@ -825,7 +735,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -835,14 +745,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", ] [[package]] name = "fiat-crypto" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c007b1ae3abe1cb6f85a16305acd418b7ca6343b953633fee2b76d8f108b830f" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "forward_ref" @@ -850,15 +760,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -872,9 +773,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -889,7 +790,7 @@ checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff 0.12.1", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -900,7 +801,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff 0.13.0", "rand_core 0.6.4", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -914,9 +815,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hex" @@ -924,15 +825,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - [[package]] name = "hmac" version = "0.12.1" @@ -960,21 +852,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array 0.14.7", + "hashbrown 0.15.2", ] [[package]] @@ -988,9 +871,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "k256" @@ -1006,9 +889,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa 0.16.9", @@ -1018,17 +901,11 @@ dependencies = [ "signature 2.2.0", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "konst" -version = "0.3.9" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50a0ba6de5f7af397afff922f22c149ff605c766cd3269cf6c1cd5e466dbe3b9" +checksum = "4381b9b00c55f251f2ebe9473aef7c117e96828def1a7cb3bd3f0f903c6894e9" dependencies = [ "const_panic", "konst_kernel", @@ -1038,54 +915,30 @@ dependencies = [ [[package]] name = "konst_kernel" -version = "0.3.9" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0a455a1719220fd6adf756088e1c69a85bf14b6a9e24537a5cc04f503edb2b" +checksum = "e4b1eb7788f3824c629b1116a7a9060d6e898c358ebff59070093d51103dcc3c" dependencies = [ "typewit", ] [[package]] name = "konst_proc_macros" -version = "0.3.0" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e28ab1dc35e09d60c2b8c90d12a9a8d9666c876c10a3739a3196db0103b6043" +checksum = "00af7901ba50898c9e545c24d5c580c96a982298134e8037d8978b6594782c07" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2", - "chacha", - "keystream", -] - -[[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mixnet-vesting-integration-tests" @@ -1109,16 +962,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" -[[package]] -name = "num-traits" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" -dependencies = [ - "autocfg", - "libm", -] - [[package]] name = "num_threads" version = "0.1.7" @@ -1140,7 +983,7 @@ dependencies = [ "nym-coconut-bandwidth-contract-common", "nym-multisig-contract-common", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -1170,7 +1013,7 @@ dependencies = [ "nym-contracts-common", "nym-group-contract-common", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -1240,7 +1083,7 @@ dependencies = [ "semver", "serde", "sylvia", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -1289,7 +1132,7 @@ dependencies = [ "rand_chacha", "semver", "serde", - "thiserror 1.0.64", + "thiserror 1.0.69", "time", ] @@ -1348,7 +1191,6 @@ dependencies = [ name = "nym-sphinx-types" version = "0.2.0" dependencies = [ - "sphinx-packet", "thiserror 2.0.11", ] @@ -1370,7 +1212,7 @@ dependencies = [ "rand_chacha", "serde", "serde_json", - "thiserror 1.0.64", + "thiserror 1.0.69", ] [[package]] @@ -1388,15 +1230,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1435,12 +1271,6 @@ dependencies = [ "spki 0.7.3", ] -[[package]] -name = "platforms" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" - [[package]] name = "powerfmt" version = "0.2.0" @@ -1449,9 +1279,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro-crate" @@ -1521,9 +1354,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1564,16 +1397,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand", -] - [[package]] name = "regex" version = "1.11.1" @@ -1621,29 +1444,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac", - "subtle 2.4.1", + "subtle", ] [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "schemars" @@ -1677,9 +1500,9 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.7", + "generic-array", "pkcs8 0.9.0", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -1691,9 +1514,9 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct 0.2.0", "der 0.7.9", - "generic-array 0.14.7", + "generic-array", "pkcs8 0.10.2", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -1757,9 +1580,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -1788,7 +1611,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.1", + "opaque-debug", ] [[package]] @@ -1822,31 +1645,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "sphinx-packet" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabeca95bf5fd0563d6be7ebcb1c6a9fcb135746a0ba9050c47dc68c8607e595" -dependencies = [ - "aes", - "arrayref", - "blake2", - "bs58 0.5.1", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek 4.1.2", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "log", - "rand", - "rand_distr", - "sha2 0.10.8", - "subtle 2.4.1", -] - [[package]] name = "spki" version = "0.6.0" @@ -1869,15 +1667,9 @@ dependencies = [ [[package]] name = "subtle" -version = "1.0.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subtle-encoding" @@ -1945,11 +1737,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.64" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl 1.0.64", + "thiserror-impl 1.0.69", ] [[package]] @@ -1963,9 +1755,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -2018,9 +1810,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2033,9 +1825,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" @@ -2050,15 +1842,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "typewit" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fb9ae6a3cafaf0a5d14c2302ca525f9ae8e07a0f0e6949de88d882c37a6e24" +checksum = "cb77c29baba9e4d3a6182d51fa75e3215c7fd1dab8f4ea9d107c716878e55fc0" dependencies = [ "typewit_proc_macros", ] @@ -2071,15 +1863,15 @@ checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "vergen" @@ -2098,9 +1890,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" @@ -2123,17 +1915,38 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ - "curve25519-dalek 4.1.2", + "curve25519-dalek 4.1.3", "rand_core 0.6.4", "serde", "zeroize", ] [[package]] -name = "zeroize" -version = "1.7.0" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] diff --git a/nym-node/nym-node-metrics/src/mixnet.rs b/nym-node/nym-node-metrics/src/mixnet.rs index 32d84e509b..ee99510c38 100644 --- a/nym-node/nym-node-metrics/src/mixnet.rs +++ b/nym-node/nym-node-metrics/src/mixnet.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use dashmap::DashMap; +use std::fmt::Display; use std::net::{IpAddr, SocketAddr}; use std::sync::atomic::{AtomicI64, AtomicUsize, Ordering}; use time::OffsetDateTime; @@ -52,7 +53,7 @@ impl MixingStats { self.ingress.senders.entry(source).or_default().malformed += 1; } - pub fn ingress_received_forward_packet(&self, source: IpAddr) { + pub fn ingress_received_forward_packet(&self, source: IpAddr, version: PacketKind) { self.ingress .forward_hop_packets_received .fetch_add(1, Ordering::Relaxed); @@ -62,9 +63,10 @@ impl MixingStats { .or_default() .forward_packets .received += 1; + *self.ingress.received_versions.entry(version).or_default() += 1; } - pub fn ingress_received_final_hop_packet(&self, source: IpAddr) { + pub fn ingress_received_final_hop_packet(&self, source: IpAddr, version: PacketKind) { self.ingress .final_hop_packets_received .fetch_add(1, Ordering::Relaxed); @@ -74,6 +76,7 @@ impl MixingStats { .or_default() .final_hop_packets .received += 1; + *self.ingress.received_versions.entry(version).or_default() += 1; } pub fn ingress_excessive_delay_packet(&self) { @@ -196,8 +199,30 @@ pub struct IngressRecipientStats { pub malformed: usize, } +#[derive(Debug, Default, Copy, Clone, Hash, PartialEq, Eq)] +pub enum PacketKind { + #[default] + Unknown, + Outfox, + Sphinx(u16), +} + +impl Display for PacketKind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + match self { + PacketKind::Unknown => "unknown".fmt(f), + PacketKind::Outfox => "outfox".fmt(f), + PacketKind::Sphinx(sphinx_version) => { + write!(f, "sphinx-{sphinx_version}") + } + } + } +} + #[derive(Default)] pub struct IngressMixingStats { + received_versions: DashMap, + // forward hop packets (i.e. to mixnode) forward_hop_packets_received: AtomicUsize, @@ -248,6 +273,10 @@ impl IngressMixingStats { &self.senders } + pub fn packet_versions(&self) -> &DashMap { + &self.received_versions + } + pub fn remove_stale_sender(&self, sender: IpAddr) { self.senders.remove(&sender); } diff --git a/nym-node/nym-node-metrics/src/prometheus_wrapper.rs b/nym-node/nym-node-metrics/src/prometheus_wrapper.rs index cfee39ee3e..8fdfb5b488 100644 --- a/nym-node/nym-node-metrics/src/prometheus_wrapper.rs +++ b/nym-node/nym-node-metrics/src/prometheus_wrapper.rs @@ -1,6 +1,7 @@ // Copyright 2024 - Nym Technologies SA // SPDX-License-Identifier: GPL-3.0-only +use crate::mixnet::PacketKind; use nym_metrics::{metrics_registry, HistogramTimer, Metric}; use std::sync::LazyLock; use strum::{Display, EnumCount, EnumIter, EnumProperty, IntoEnumIterator}; @@ -28,6 +29,10 @@ const CLIENT_SESSION_DURATION_BUCKETS: &[f64] = &[ pub enum PrometheusMetric { // # MIXNET // ## INGRESS + #[strum(to_string = "mixnet_ingress_packet_version_{kind}")] + #[strum(props(help = "The number of ingress packets received with the particular version"))] + MixnetIngressPacketVersion { kind: PacketKind }, + #[strum(props(help = "The number of ingress forward hop sphinx packets received"))] MixnetIngressForwardPacketsReceived, @@ -178,7 +183,11 @@ impl PrometheusMetric { } fn is_complex(&self) -> bool { - matches!(self, PrometheusMetric::EntryClientSessionsDurations { .. }) + matches!( + self, + PrometheusMetric::EntryClientSessionsDurations { .. } + | PrometheusMetric::MixnetIngressPacketVersion { .. } + ) // match self { // PrometheusMetric::EntryClientSessionsDurations { .. } => true, // _ => false, @@ -190,6 +199,9 @@ impl PrometheusMetric { let help = self.help(); match self { + PrometheusMetric::MixnetIngressPacketVersion { .. } => { + Metric::new_int_gauge(&name, help) + } PrometheusMetric::MixnetIngressForwardPacketsReceived => { Metric::new_int_gauge(&name, help) } @@ -364,7 +376,7 @@ mod tests { // a sanity check for anyone adding new metrics. if this test fails, // make sure any methods on `PrometheusMetric` enum don't need updating // or require custom Display impl - assert_eq!(37, PrometheusMetric::COUNT) + assert_eq!(38, PrometheusMetric::COUNT) } #[test] @@ -385,6 +397,24 @@ mod tests { assert_eq!( "nym_node_entry_client_sessions_durations_vpn", parameterised - ) + ); + + let parameterised = PrometheusMetric::MixnetIngressPacketVersion { + kind: PacketKind::Outfox, + } + .to_string(); + assert_eq!( + "nym_node_mixnet_ingress_packet_version_outfox", + parameterised + ); + + let parameterised = PrometheusMetric::MixnetIngressPacketVersion { + kind: PacketKind::Sphinx(42), + } + .to_string(); + assert_eq!( + "nym_node_mixnet_ingress_packet_version_sphinx-42", + parameterised + ); } } diff --git a/nym-node/src/node/metrics/handler/global_prometheus_updater/mod.rs b/nym-node/src/node/metrics/handler/global_prometheus_updater/mod.rs index 81c61d9db8..16587ead63 100644 --- a/nym-node/src/node/metrics/handler/global_prometheus_updater/mod.rs +++ b/nym-node/src/node/metrics/handler/global_prometheus_updater/mod.rs @@ -43,6 +43,15 @@ impl OnUpdateMetricsHandler for PrometheusGlobalNodeMetricsRegistryUpdater { // # MIXNET // ## INGRESS + for version_entry in self.metrics.mixnet.ingress.packet_versions() { + self.prometheus_wrapper.set( + MixnetIngressPacketVersion { + kind: *version_entry.key(), + }, + *version_entry.value(), + ) + } + self.prometheus_wrapper.set( MixnetIngressForwardPacketsReceived, self.metrics.mixnet.ingress.forward_hop_packets_received() as i64, diff --git a/nym-node/src/node/mixnet/handler.rs b/nym-node/src/node/mixnet/handler.rs index 3c634d7c9c..51be743cd5 100644 --- a/nym-node/src/node/mixnet/handler.rs +++ b/nym-node/src/node/mixnet/handler.rs @@ -8,7 +8,7 @@ use nym_sphinx_forwarding::packet::MixPacket; use nym_sphinx_framing::codec::NymCodec; use nym_sphinx_framing::packet::FramedNymPacket; use nym_sphinx_framing::processing::{ - process_framed_packet, MixProcessingResult, ProcessedFinalHop, + process_framed_packet, MixProcessingResultData, ProcessedFinalHop, }; use nym_sphinx_types::Delay; use std::net::SocketAddr; @@ -44,7 +44,7 @@ impl ConnectionHandler { ConnectionHandler { shared: SharedData { processing_config: shared.processing_config, - sphinx_key: shared.sphinx_key.clone(), + sphinx_keys: shared.sphinx_keys.clone(), mixnet_forwarder: shared.mixnet_forwarder.clone(), final_hop: shared.final_hop.clone(), metrics: shared.metrics.clone(), @@ -135,7 +135,8 @@ impl ConnectionHandler { nanos!("handle_received_nym_packet", { // 1. attempt to unwrap the packet - let unwrapped_packet = process_framed_packet(packet, &self.shared.sphinx_key); + let unwrapped_packet = + process_framed_packet(packet, self.shared.sphinx_keys.private_key().as_ref()); // 2. increment our favourite metrics stats self.shared @@ -144,12 +145,14 @@ impl ConnectionHandler { // 3. forward the packet to the relevant sink (if enabled) match unwrapped_packet { Err(err) => trace!("failed to process received mix packet: {err}"), - Ok(MixProcessingResult::ForwardHop(forward_packet, delay)) => { - self.handle_forward_packet(forward_packet, delay); - } - Ok(MixProcessingResult::FinalHop(final_hop_data)) => { - self.handle_final_hop(final_hop_data).await; - } + Ok(processed_packet) => match processed_packet.processing_data { + MixProcessingResultData::ForwardHop { packet, delay } => { + self.handle_forward_packet(packet, delay); + } + MixProcessingResultData::FinalHop { final_hop_data } => { + self.handle_final_hop(final_hop_data).await; + } + }, } }) } diff --git a/nym-node/src/node/mixnet/shared/mod.rs b/nym-node/src/node/mixnet/shared/mod.rs index 8d9f68f528..0ff26dc0a0 100644 --- a/nym-node/src/node/mixnet/shared/mod.rs +++ b/nym-node/src/node/mixnet/shared/mod.rs @@ -7,9 +7,12 @@ use crate::node::mixnet::SharedFinalHopData; use nym_crypto::asymmetric::x25519; use nym_gateway::node::GatewayStorageError; use nym_mixnet_client::forwarder::{MixForwardingSender, PacketToForward}; +use nym_node_metrics::mixnet::PacketKind; use nym_node_metrics::NymNodeMetrics; use nym_sphinx_forwarding::packet::MixPacket; -use nym_sphinx_framing::processing::{MixProcessingResult, PacketProcessingError}; +use nym_sphinx_framing::processing::{ + MixPacketVersion, MixProcessingResult, MixProcessingResultData, PacketProcessingError, +}; use nym_sphinx_types::DestinationAddressBytes; use nym_task::ShutdownToken; use std::io; @@ -45,8 +48,7 @@ impl ProcessingConfig { // explicitly do NOT derive clone as we want to manually apply relevant suffixes to the task clients pub(crate) struct SharedData { pub(super) processing_config: ProcessingConfig, - // TODO: this type is not `Zeroize` : ( - pub(super) sphinx_key: Arc, + pub(super) sphinx_keys: Arc, // used for FORWARD mix packets and FINAL ack packets pub(super) mixnet_forwarder: MixForwardingSender, @@ -58,10 +60,17 @@ pub(crate) struct SharedData { pub(super) shutdown: ShutdownToken, } +fn convert_to_metrics_version(processed: MixPacketVersion) -> PacketKind { + match processed { + MixPacketVersion::Outfox => PacketKind::Outfox, + MixPacketVersion::Sphinx(sphinx_version) => PacketKind::Sphinx(sphinx_version.value()), + } +} + impl SharedData { pub(crate) fn new( processing_config: ProcessingConfig, - x25519_key: &x25519::PrivateKey, + x25519_keys: Arc, mixnet_forwarder: MixForwardingSender, final_hop: SharedFinalHopData, metrics: NymNodeMetrics, @@ -69,7 +78,7 @@ impl SharedData { ) -> Self { SharedData { processing_config, - sphinx_key: Arc::new(x25519_key.into()), + sphinx_keys: x25519_keys, mixnet_forwarder, final_hop, metrics, @@ -99,10 +108,18 @@ impl SharedData { processing_result: &Result, source: IpAddr, ) { - match processing_result { - Err(_) => self.metrics.mixnet.ingress_malformed_packet(source), - Ok(MixProcessingResult::ForwardHop(_, delay)) => { - self.metrics.mixnet.ingress_received_forward_packet(source); + let Ok(processing_result) = processing_result else { + self.metrics.mixnet.ingress_malformed_packet(source); + return; + }; + + let packet_version = convert_to_metrics_version(processing_result.packet_version); + + match processing_result.processing_data { + MixProcessingResultData::ForwardHop { delay, .. } => { + self.metrics + .mixnet + .ingress_received_forward_packet(source, packet_version); // check if the delay wasn't excessive if let Some(delay) = delay { @@ -111,10 +128,10 @@ impl SharedData { } } } - Ok(MixProcessingResult::FinalHop(_)) => { + MixProcessingResultData::FinalHop { .. } => { self.metrics .mixnet - .ingress_received_final_hop_packet(source); + .ingress_received_final_hop_packet(source, packet_version); } } } diff --git a/nym-node/src/node/mod.rs b/nym-node/src/node/mod.rs index 9b695cc94f..b803d772d0 100644 --- a/nym-node/src/node/mod.rs +++ b/nym-node/src/node/mod.rs @@ -993,7 +993,7 @@ impl NymNode { let shared = mixnet::SharedData::new( processing_config, - self.x25519_sphinx_keys.private_key(), + self.x25519_sphinx_keys.clone(), mix_packet_sender.clone(), final_hop_data, self.metrics.clone(), diff --git a/nym-outfox/Cargo.toml b/nym-outfox/Cargo.toml index 343dd35a51..0c3c3e8763 100644 --- a/nym-outfox/Cargo.toml +++ b/nym-outfox/Cargo.toml @@ -14,7 +14,7 @@ rayon = { workspace = true } blake3 = { workspace = true } zeroize = { workspace = true } chacha20 = { workspace = true, features = ["std"] } -curve25519-dalek = { workspace = true } +x25519-dalek = { workspace = true } chacha20poly1305 = { workspace = true } getrandom = { workspace = true, features = ["js"] } thiserror = { workspace = true } diff --git a/nym-outfox/src/format.rs b/nym-outfox/src/format.rs index 9dc9be9e48..413352d630 100644 --- a/nym-outfox/src/format.rs +++ b/nym-outfox/src/format.rs @@ -54,17 +54,6 @@ //! routing data for the layer, and the remaining Header; separately the master key is used to lion encrypt //! the payload. The process is repeated for each layer (from last to first) to construct the full message. -use chacha20poly1305::AeadInPlace; -use chacha20poly1305::ChaCha20Poly1305; -use chacha20poly1305::KeyInit; - -use chacha20poly1305::Tag; -use curve25519_dalek::constants::ED25519_BASEPOINT_TABLE; -use curve25519_dalek::montgomery::MontgomeryPoint; -use curve25519_dalek::scalar::Scalar; - -use std::ops::Range; - use crate::constants::groupelementbytes; use crate::constants::tagbytes; use crate::constants::DEFAULT_HOPS; @@ -75,6 +64,11 @@ use crate::constants::ROUTING_INFORMATION_LENGTH_BY_STAGE; use crate::constants::TAGBYTES; use crate::error::OutfoxError; use crate::lion::*; +use chacha20poly1305::AeadInPlace; +use chacha20poly1305::ChaCha20Poly1305; +use chacha20poly1305::KeyInit; +use chacha20poly1305::Tag; +use std::ops::Range; /// A structure that holds mix packet construction parameters. These incluse the length /// of the routing information at each hop, the number of hops, and the payload length. @@ -218,13 +212,11 @@ impl MixStageParameters { pub fn encode_mix_layer( &self, buffer: &mut [u8], - user_secret_key: &[u8], - node_pub_key: &[u8], + user_secret_key: &x25519_dalek::StaticSecret, + mix_public_key: x25519_dalek::PublicKey, destination: &[u8; 32], - ) -> Result { + ) -> Result { let routing_data = destination; - let mix_public_key = MontgomeryPoint(node_pub_key.try_into()?); - let user_secret_key = Scalar::from_bytes_mod_order(user_secret_key.try_into()?); if buffer.len() != self.incoming_packet_length() { return Err(OutfoxError::LenMismatch { @@ -240,14 +232,14 @@ impl MixStageParameters { }); } - let user_public_key = (ED25519_BASEPOINT_TABLE * &user_secret_key).to_montgomery(); - let shared_key = user_secret_key * mix_public_key; + let user_public_key = x25519_dalek::PublicKey::from(user_secret_key); + let shared_key = user_secret_key.diffie_hellman(&mix_public_key); // Copy rounting data into buffer buffer[self.routing_data_range()].copy_from_slice(routing_data); // Perform the AEAD - let header_aead_key = ChaCha20Poly1305::new_from_slice(&shared_key.0[..])?; + let header_aead_key = ChaCha20Poly1305::new_from_slice(shared_key.as_bytes())?; let nonce = [0u8; 12]; let tag = header_aead_key @@ -258,10 +250,10 @@ impl MixStageParameters { buffer[self.tag_range()].copy_from_slice(&tag[..]); // Copy own public key into buffer - buffer[self.pub_element_range()].copy_from_slice(&user_public_key.0[..]); + buffer[self.pub_element_range()].copy_from_slice(user_public_key.as_bytes()); // Do a round of LION on the payload - lion_transform_encrypt(&mut buffer[self.payload_range()], &shared_key.0)?; + lion_transform_encrypt(&mut buffer[self.payload_range()], shared_key.as_bytes())?; Ok(shared_key) } @@ -269,12 +261,9 @@ impl MixStageParameters { pub fn decode_mix_layer( &self, buffer: &mut [u8], - mix_secret_key: &[u8], + mix_secret_key: &x25519_dalek::StaticSecret, ) -> Result, OutfoxError> { // Check the length of the incoming buffer is correct. - - let mix_secret_key = Scalar::from_bytes_mod_order(mix_secret_key.try_into()?); - if buffer.len() != self.incoming_packet_length() { return Err(OutfoxError::LenMismatch { expected: buffer.len(), @@ -283,11 +272,12 @@ impl MixStageParameters { } // Derive the shared key for this packet - let user_public_key = MontgomeryPoint(buffer[self.pub_element_range()].try_into()?); - let shared_key = mix_secret_key * user_public_key; + let user_public_key_bytes: [u8; 32] = buffer[self.pub_element_range()].try_into()?; + let user_public_key = x25519_dalek::PublicKey::from(user_public_key_bytes); + let shared_key = mix_secret_key.diffie_hellman(&user_public_key); // Compute the AEAD and check the Tag, if wrong return Err - let header_aead_key = ChaCha20Poly1305::new_from_slice(&shared_key.0[..])?; + let header_aead_key = ChaCha20Poly1305::new_from_slice(shared_key.as_bytes())?; let nonce = [0; 12]; let tag_bytes = buffer[self.tag_range()].to_vec(); @@ -304,7 +294,7 @@ impl MixStageParameters { let routing_data = buffer[self.routing_data_range()].to_vec(); // Do a round of LION on the payload - lion_transform_decrypt(&mut buffer[self.payload_range()], &shared_key.0)?; + lion_transform_decrypt(&mut buffer[self.payload_range()], shared_key.as_bytes())?; Ok(routing_data) } diff --git a/nym-outfox/src/packet.rs b/nym-outfox/src/packet.rs index 720ed6071a..97a1562177 100644 --- a/nym-outfox/src/packet.rs +++ b/nym-outfox/src/packet.rs @@ -1,17 +1,14 @@ -use std::{array::TryFromSliceError, collections::VecDeque, ops::Range}; - use crate::{ constants::{DEFAULT_HOPS, MAGIC_SLICE, MIN_PACKET_SIZE, MIX_PARAMS_LEN}, error::OutfoxError, format::{MixCreationParameters, MixStageParameters}, }; - -use rand::{rngs::OsRng, RngCore}; use sphinx_packet::{ crypto::PrivateKey, packet::builder::DEFAULT_PAYLOAD_SIZE, route::{Destination, Node}, }; +use std::{array::TryFromSliceError, collections::VecDeque, ops::Range}; #[derive(Debug)] pub struct OutfoxPacket { @@ -90,8 +87,7 @@ impl OutfoxPacket { destination: &Destination, packet_size: Option, ) -> Result { - let mut secret_key = [0; 32]; - OsRng.fill_bytes(&mut secret_key); + let secret_key = x25519_dalek::StaticSecret::random(); let packet_size = packet_size.unwrap_or(DEFAULT_PAYLOAD_SIZE); let packet_size = if packet_size < MIN_PACKET_SIZE { MIN_PACKET_SIZE @@ -110,7 +106,7 @@ impl OutfoxPacket { stage_params.encode_mix_layer( &mut buffer[range], &secret_key, - route.last().unwrap().pub_key.as_bytes(), + route.last().unwrap().pub_key, destination.address.as_bytes_ref(), )?; @@ -130,11 +126,11 @@ impl OutfoxPacket { // We know that we'll always get 4 nodes, so we can unwrap here let processing_node = nodes.last().unwrap(); let destination_node = nodes.first().unwrap(); - OsRng.fill_bytes(&mut secret_key); + let secret_key = x25519_dalek::StaticSecret::random(); stage_params.encode_mix_layer( &mut buffer[range], &secret_key, - processing_node.pub_key.as_bytes(), + processing_node.pub_key, destination_node.address.as_bytes_ref(), )?; } @@ -168,7 +164,7 @@ impl OutfoxPacket { pub fn decode_mix_layer( &mut self, layer: usize, - mix_secret_key: &[u8; 32], + mix_secret_key: &x25519_dalek::StaticSecret, ) -> Result, OutfoxError> { let (range, params) = self.stage_params(layer); let routing_data = @@ -198,7 +194,6 @@ impl OutfoxPacket { &mut self, mix_secret_key: &PrivateKey, ) -> Result<[u8; 32], OutfoxError> { - let mix_secret_key = mix_secret_key.to_bytes(); let routing_lenght_by_stage = self .mix_params() .routing_information_length_by_stage @@ -210,7 +205,7 @@ impl OutfoxPacket { break; } } - self.decode_mix_layer(layer, &mix_secret_key)?; + self.decode_mix_layer(layer, mix_secret_key)?; self.update_routing_information(layer)?; let (range, stage_params) = self.mix_params().get_stage_params(layer); let routing_bytes = &self.payload()[range][stage_params.routing_data_range()]; diff --git a/nym-outfox/tests/unittests.rs b/nym-outfox/tests/unittests.rs index 08ffdd8a43..6a9e928d8c 100644 --- a/nym-outfox/tests/unittests.rs +++ b/nym-outfox/tests/unittests.rs @@ -9,11 +9,9 @@ mod tests { repeat_with(|| fastrand::u8(..)).take(n).collect() } - use curve25519_dalek::constants::ED25519_BASEPOINT_TABLE; - use curve25519_dalek::scalar::Scalar; use nym_outfox::packet::OutfoxPacket; use sphinx_packet::constants::NODE_ADDRESS_LENGTH; - use sphinx_packet::crypto::PublicKey; + use sphinx_packet::crypto::{PrivateKey, PublicKey}; use sphinx_packet::route::Destination; use sphinx_packet::route::DestinationAddressBytes; use sphinx_packet::route::Node; @@ -22,6 +20,12 @@ mod tests { use nym_outfox::format::*; use nym_outfox::lion::*; + pub fn keygen() -> (PrivateKey, PublicKey) { + let private_key = PrivateKey::random(); + let public_key = PublicKey::from(&private_key); + (private_key, public_key) + } + #[test] fn test_encode_decode() { let mix_params = MixStageParameters { @@ -30,11 +34,9 @@ mod tests { payload_length_bytes: 1024, // 1kb }; - let user_secret = randombytes(32); - let mix_secret = randombytes(32); - let mix_secret_scalar = - Scalar::from_bytes_mod_order(mix_secret.clone().try_into().unwrap()); - let mix_public_key = (ED25519_BASEPOINT_TABLE * &mix_secret_scalar).to_montgomery(); + let user_secret = x25519_dalek::StaticSecret::random(); + let mix_secret = x25519_dalek::StaticSecret::random(); + let mix_public_key = x25519_dalek::PublicKey::from(&mix_secret); let routing = [0; 32]; let destination = [0; 32]; @@ -52,7 +54,7 @@ mod tests { .encode_mix_layer( &mut new_buffer[..], &user_secret, - node.pub_key.as_bytes(), + node.pub_key, &destination, ) .unwrap(); @@ -93,23 +95,23 @@ mod tests { #[test] fn test_packet_params_short() { - let (node1_pk, node1_pub) = sphinx_packet::crypto::keygen(); + let (node1_pk, node1_pub) = keygen(); let node1 = Node::new( NodeAddressBytes::from_bytes([0u8; NODE_ADDRESS_LENGTH]), node1_pub, ); - let (node2_pk, node2_pub) = sphinx_packet::crypto::keygen(); + let (node2_pk, node2_pub) = keygen(); let node2 = Node::new( NodeAddressBytes::from_bytes([1u8; NODE_ADDRESS_LENGTH]), node2_pub, ); - let (node3_pk, node3_pub) = sphinx_packet::crypto::keygen(); + let (node3_pk, node3_pub) = keygen(); let node3 = Node::new( NodeAddressBytes::from_bytes([2u8; NODE_ADDRESS_LENGTH]), node3_pub, ); - let (gateway_pk, gateway_pub) = sphinx_packet::crypto::keygen(); + let (gateway_pk, gateway_pub) = keygen(); let gateway = Node::new( NodeAddressBytes::from_bytes([3u8; NODE_ADDRESS_LENGTH]), gateway_pub, @@ -149,23 +151,23 @@ mod tests { #[test] fn test_packet_params_long() { - let (node1_pk, node1_pub) = sphinx_packet::crypto::keygen(); + let (node1_pk, node1_pub) = keygen(); let node1 = Node::new( NodeAddressBytes::from_bytes([0u8; NODE_ADDRESS_LENGTH]), node1_pub, ); - let (node2_pk, node2_pub) = sphinx_packet::crypto::keygen(); + let (node2_pk, node2_pub) = keygen(); let node2 = Node::new( NodeAddressBytes::from_bytes([1u8; NODE_ADDRESS_LENGTH]), node2_pub, ); - let (node3_pk, node3_pub) = sphinx_packet::crypto::keygen(); + let (node3_pk, node3_pub) = keygen(); let node3 = Node::new( NodeAddressBytes::from_bytes([2u8; NODE_ADDRESS_LENGTH]), node3_pub, ); - let (gateway_pk, gateway_pub) = sphinx_packet::crypto::keygen(); + let (gateway_pk, gateway_pub) = keygen(); let gateway = Node::new( NodeAddressBytes::from_bytes([3u8; NODE_ADDRESS_LENGTH]), gateway_pub, diff --git a/nym-wallet/Cargo.lock b/nym-wallet/Cargo.lock index e4e7d77ea2..070d93ead9 100644 --- a/nym-wallet/Cargo.lock +++ b/nym-wallet/Cargo.lock @@ -30,7 +30,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -55,7 +55,7 @@ dependencies = [ "cipher", "ctr", "ghash", - "subtle 2.5.0", + "subtle", ] [[package]] @@ -154,17 +154,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2e554a8638bdc1e4eae9984845306cc95f8a9208ba8d49c3859fd958b46774d" dependencies = [ "base64ct", - "blake2 0.10.6", + "blake2", "cpufeatures", "password-hash", ] -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - [[package]] name = "async-compression" version = "0.4.18" @@ -319,7 +313,7 @@ dependencies = [ "ripemd", "secp256k1", "sha2 0.10.8", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -355,18 +349,6 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" -[[package]] -name = "blake2" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" -dependencies = [ - "byte-tools", - "crypto-mac", - "digest 0.8.1", - "opaque-debug 0.2.3", -] - [[package]] name = "blake2" version = "0.10.6" @@ -388,7 +370,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -397,7 +379,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -412,7 +394,7 @@ dependencies = [ "rand_core 0.6.4", "serde", "serdect 0.3.0-pre.0", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -469,12 +451,6 @@ version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - [[package]] name = "bytemuck" version = "1.13.1" @@ -621,16 +597,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chacha" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862" -dependencies = [ - "byteorder", - "keystream", -] - [[package]] name = "cipher" version = "0.4.4" @@ -985,9 +951,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core 0.6.4", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -997,21 +963,11 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array", "rand_core 0.6.4", "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "cssparser" version = "0.27.2" @@ -1067,7 +1023,7 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -1085,7 +1041,7 @@ dependencies = [ "platforms", "rustc_version", "serde", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -1295,22 +1251,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array 0.12.4", -] - [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -1322,7 +1269,7 @@ dependencies = [ "block-buffer 0.10.4", "const-oid", "crypto-common", - "subtle 2.5.0", + "subtle", ] [[package]] @@ -1487,7 +1434,7 @@ dependencies = [ "rand_core 0.6.4", "serde", "sha2 0.10.8", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -1522,13 +1469,13 @@ dependencies = [ "crypto-bigint", "digest 0.10.7", "ff", - "generic-array 0.14.7", + "generic-array", "group", "pkcs8", "rand_core 0.6.4", "sec1", "serdect 0.2.0", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -1641,7 +1588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ "rand_core 0.6.4", - "subtle 2.5.0", + "subtle", ] [[package]] @@ -1921,15 +1868,6 @@ dependencies = [ "windows 0.48.0", ] -[[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1983,7 +1921,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ - "opaque-debug 0.3.0", + "opaque-debug", "polyval", ] @@ -2106,7 +2044,7 @@ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", "rand_core 0.6.4", - "subtle 2.5.0", + "subtle", ] [[package]] @@ -2334,15 +2272,6 @@ dependencies = [ "webpki-roots 0.25.4", ] -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - [[package]] name = "hmac" version = "0.12.1" @@ -2825,7 +2754,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array", ] [[package]] @@ -2982,12 +2911,6 @@ dependencies = [ "signature", ] -[[package]] -name = "keystream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" - [[package]] name = "kuchiki" version = "0.8.1" @@ -3012,12 +2935,6 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" -[[package]] -name = "libm" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" - [[package]] name = "line-wrap" version = "0.1.1" @@ -3039,18 +2956,6 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - [[package]] name = "litemap" version = "0.7.4" @@ -3321,7 +3226,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -3436,7 +3340,7 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.9.9", - "subtle 2.5.0", + "subtle", "thiserror 2.0.11", "zeroize", ] @@ -3657,7 +3561,6 @@ dependencies = [ name = "nym-sphinx-types" version = "0.2.0" dependencies = [ - "sphinx-packet", "thiserror 2.0.11", ] @@ -3667,7 +3570,7 @@ version = "0.1.0" dependencies = [ "aes-gcm", "argon2", - "generic-array 0.14.7", + "generic-array", "getrandom 0.2.10", "rand 0.8.5", "serde", @@ -3933,12 +3836,6 @@ version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - [[package]] name = "opaque-debug" version = "0.3.0" @@ -4076,7 +3973,7 @@ checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", "rand_core 0.6.4", - "subtle 2.5.0", + "subtle", ] [[package]] @@ -4366,7 +4263,7 @@ checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug 0.3.0", + "opaque-debug", "universal-hash", ] @@ -4617,16 +4514,6 @@ dependencies = [ "getrandom 0.2.10", ] -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits", - "rand 0.8.5", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -4830,7 +4717,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ "hmac", - "subtle 2.5.0", + "subtle", ] [[package]] @@ -4939,7 +4826,7 @@ dependencies = [ "ring", "rustls-pki-types", "rustls-webpki 0.102.4", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -5092,10 +4979,10 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array 0.14.7", + "generic-array", "pkcs8", "serdect 0.2.0", - "subtle 2.5.0", + "subtle", "zeroize", ] @@ -5346,7 +5233,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.0", + "opaque-debug", ] [[package]] @@ -5463,31 +5350,6 @@ dependencies = [ "system-deps 5.0.0", ] -[[package]] -name = "sphinx-packet" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabeca95bf5fd0563d6be7ebcb1c6a9fcb135746a0ba9050c47dc68c8607e595" -dependencies = [ - "aes", - "arrayref", - "blake2 0.8.1", - "bs58", - "byteorder", - "chacha", - "ctr", - "curve25519-dalek 4.1.2", - "digest 0.10.7", - "hkdf", - "hmac", - "lioness", - "log", - "rand 0.8.5", - "rand_distr", - "sha2 0.10.8", - "subtle 2.5.0", -] - [[package]] name = "spin" version = "0.9.8" @@ -5595,12 +5457,6 @@ dependencies = [ "syn 2.0.96", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.5.0" @@ -5991,7 +5847,7 @@ dependencies = [ "serde_repr", "sha2 0.10.8", "signature", - "subtle 2.5.0", + "subtle", "subtle-encoding", "tendermint-proto 0.34.0", "time", @@ -6021,7 +5877,7 @@ dependencies = [ "serde_repr", "sha2 0.10.8", "signature", - "subtle 2.5.0", + "subtle", "subtle-encoding", "tendermint-proto 0.40.1", "time", @@ -6094,7 +5950,7 @@ dependencies = [ "serde", "serde_bytes", "serde_json", - "subtle 2.5.0", + "subtle", "subtle-encoding", "tendermint 0.40.1", "tendermint-config", @@ -6558,7 +6414,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", - "subtle 2.5.0", + "subtle", ] [[package]] diff --git a/wasm/zknym-lib/src/generic_scheme/coconut/types.rs b/wasm/zknym-lib/src/generic_scheme/coconut/types.rs index 8370fcc636..875de418cd 100644 --- a/wasm/zknym-lib/src/generic_scheme/coconut/types.rs +++ b/wasm/zknym-lib/src/generic_scheme/coconut/types.rs @@ -156,15 +156,3 @@ pub struct UnblindableShare { pub issuer_key_bs58: String, pub blinded_share_bs58: String, } - -#[wasm_bindgen] -impl UnblindableShare { - #[wasm_bindgen(constructor)] - pub fn new(issuer_index: u64, issuer_key_bs58: String, blinded_share_bs58: String) -> Self { - UnblindableShare { - issuer_index, - issuer_key_bs58, - blinded_share_bs58, - } - } -}