Skip to content

Commit

Permalink
Switch to v7 and sign connect requests
Browse files Browse the repository at this point in the history
  • Loading branch information
octol committed Sep 3, 2024
1 parent 8fc888d commit df247ea
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 13 deletions.
26 changes: 20 additions & 6 deletions nym-vpn-core/crates/nym-ip-packet-client/src/connect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@
use std::{sync::Arc, time::Duration};

use nym_ip_packet_requests::{
request::IpPacketRequest,
response::{
DynamicConnectResponse, DynamicConnectResponseReply, IpPacketResponse,
IpPacketResponseData, StaticConnectResponse, StaticConnectResponseReply,
v7::{
request::IpPacketRequest,
response::{
DynamicConnectResponse, DynamicConnectResponseReply, IpPacketResponse,
IpPacketResponseData, StaticConnectResponse, StaticConnectResponseReply,
},
},
IpPair,
};
use nym_sdk::mixnet::{
MixnetClient, MixnetClientSender, MixnetMessageSender, Recipient, TransmissionLane,
ed25519, MixnetClient, MixnetClientSender, MixnetMessageSender, Recipient, TransmissionLane,
};
use tracing::{debug, error};

Expand Down Expand Up @@ -42,6 +44,10 @@ impl SharedMixnetClient {
Ok(())
}

pub async fn sign(&self, data: &[u8]) -> ed25519::Signature {
self.lock().await.as_ref().unwrap().sign(data)
}

pub fn inner(&self) -> Arc<tokio::sync::Mutex<Option<MixnetClient>>> {
self.0.clone()
}
Expand Down Expand Up @@ -135,7 +141,7 @@ impl IprClientConnect {
ip_packet_router_address: Recipient,
ips: Option<IpPair>,
) -> Result<u64> {
let (request, request_id) = if let Some(ips) = ips {
let (mut request, request_id) = if let Some(ips) = ips {
debug!("Sending static connect request with ips: {ips}");
IpPacketRequest::new_static_connect_request(ips, self.nym_address, None, None, None)
} else {
Expand All @@ -144,6 +150,14 @@ impl IprClientConnect {
};
debug!("Sent connect request with version v{}", request.version);

// With the request constructed, we need to sign it
if let Some(Ok(data_to_sign)) = request.data.signable_request() {
let signature = self.mixnet_client.sign(&data_to_sign).await;
request.data.add_signature(signature);
} else {
error!("Failed to add signature to connect the request");
}

self.mixnet_sender
.send(nym_sdk::mixnet::InputMessage::new_regular(
ip_packet_router_address,
Expand Down
2 changes: 1 addition & 1 deletion nym-vpn-core/crates/nym-ip-packet-client/src/error.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use nym_ip_packet_requests::{
use nym_ip_packet_requests::v7::{
response::DynamicConnectFailureReason, response::StaticConnectFailureReason,
};

Expand Down
8 changes: 5 additions & 3 deletions nym-vpn-core/crates/nym-ip-packet-client/src/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,17 @@ use std::cmp::Ordering;
use crate::{error::Result, Error};

pub(crate) fn check_ipr_message_version(message: &ReconstructedMessage) -> Result<()> {
let current_version = 7;

// Assuing it's a IPR message, it will have a version as its first byte
if let Some(version) = message.message.first() {
match version.cmp(&nym_ip_packet_requests::CURRENT_VERSION) {
match version.cmp(&current_version) {
Ordering::Greater => Err(Error::ReceivedResponseWithNewVersion {
expected: nym_ip_packet_requests::CURRENT_VERSION,
expected: current_version,
received: *version,
}),
Ordering::Less => Err(Error::ReceivedResponseWithOldVersion {
expected: nym_ip_packet_requests::CURRENT_VERSION,
expected: current_version,
received: *version,
}),
Ordering::Equal => {
Expand Down
7 changes: 4 additions & 3 deletions nym-vpn-core/crates/nym-ip-packet-client/src/listener.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
use bytes::{Bytes, BytesMut};
use nym_ip_packet_requests::{
codec::MultiIpPacketCodec,
request::{IpPacketRequest, IpPacketRequestData},
response::IpPacketResponseData,
response::{InfoLevel, IpPacketResponse},
v7::{
request::{IpPacketRequest, IpPacketRequestData},
response::{IpPacketResponseData, InfoLevel, IpPacketResponse},
},
};
use nym_sdk::mixnet::{Recipient, ReconstructedMessage};
use tokio_util::codec::Decoder;
Expand Down

0 comments on commit df247ea

Please sign in to comment.