Skip to content

Commit 6327365

Browse files
New tor-interface interface
1 parent d852868 commit 6327365

File tree

3 files changed

+13
-31
lines changed

3 files changed

+13
-31
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ tokio = "1.41.1"
1515
futures = "0.3"
1616

1717
arti-client = { version = "^0.25", default-features = false, features = ["tokio", "rustls", "onion-service-client", "static-sqlite"] }
18-
tor-interface = { git = "https://github.com/nabijaczleweli/gosling", rev = "65da8990e33c674ed8abeb10b454b4a39463d81d", optional = true }
18+
tor-interface = { git = "https://github.com/nabijaczleweli/gosling", rev = "14f9d181f66a5df2e7b1e28b412497aedfc52d21", optional = true }
1919
libp2p = { version = "^0.53", default-features = false, features = ["tokio", "tcp", "tls"] }
2020

2121
tor-rtcompat = { version = "^0.25", features = ["tokio", "rustls"] }

examples/ping-onion-tor-interface.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ use libp2p::{
5454
};
5555
use std::error::Error;
5656
use std::sync::{Arc, Mutex};
57+
use tor_interface::tor_crypto::Ed25519PrivateKey;
5758

5859
/// Create a transport
5960
/// Returns a tuple of the transport and the onion address we can instruct it to listen on
@@ -72,7 +73,7 @@ async fn onion_transport(
7273
let mut transport = libp2p_community_tor::TorInterfaceTransport::from_provider(
7374
libp2p_community_tor::AddressConversion::IpAndDns, Arc::new(Mutex::new(provider)), None)?;
7475

75-
let onion_listen_address = transport.add_customised_onion_service(None, 999, None, ([127, 0, 0, 1], 0u16).into()).unwrap().0;
76+
let onion_listen_address = transport.add_onion_service(&Ed25519PrivateKey::generate(), 999, None, None).unwrap();
7677

7778
let auth_upgrade = noise::Config::new(&keypair)?;
7879
let multiplex_upgrade = yamux::Config::default();

src/tor/mod.rs

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ use tokio::net::TcpListener;
3636

3737
use std::pin::Pin;
3838
use std::sync::{Arc, Mutex, MutexGuard};
39-
use std::borrow::Cow;
4039
use std::net::SocketAddr;
4140
use std::task::{Context, Poll};
4241
use thiserror::Error;
@@ -134,9 +133,17 @@ impl<T: TorProvider> TorInterfaceTransport<T> {
134133
private_key: &Ed25519PrivateKey,
135134
virt_port: u16,
136135
authorised_clients: Option<&[X25519PublicKey]>,
136+
socket_addr: Option<SocketAddr>,
137137
) -> anyhow::Result<Multiaddr> {
138-
let ol = self.listener_or_bootstrap(|p| p.listener(private_key, virt_port, authorised_clients))?;
139-
self.add_onion_service_impl(private_key, virt_port, ol)
138+
let ol = self.listener_or_bootstrap(|p| p.listener(private_key, virt_port, authorised_clients, socket_addr))?;
139+
ol.set_nonblocking(true)?;
140+
141+
self.services.push((ol, None));
142+
143+
let svid = V3OnionServiceId::from_private_key(&private_key);
144+
let multiaddr = svid.to_multiaddr(virt_port);
145+
146+
Ok(multiaddr)
140147
}
141148

142149
fn listener_or_bootstrap<R, F: FnMut(&mut T) -> Result<R, tor_provider::Error>>(&mut self, mut f: F) -> Result<R, tor_provider::Error> {
@@ -151,32 +158,6 @@ impl<T: TorProvider> TorInterfaceTransport<T> {
151158
}
152159
}
153160
}
154-
155-
fn add_onion_service_impl(&mut self, private_key: &Ed25519PrivateKey, virt_port: u16, ol: OnionListener) -> anyhow::Result<Multiaddr> {
156-
ol.set_nonblocking(true)?;
157-
158-
self.services.push((ol, None));
159-
160-
let svid = V3OnionServiceId::from_private_key(&private_key);
161-
let multiaddr = svid.to_multiaddr(virt_port);
162-
163-
Ok(multiaddr)
164-
}
165-
}
166-
167-
impl TorInterfaceTransport<tor_interface::legacy_tor_client::LegacyTorClient> {
168-
/// The generic [`add_onion_service()`] implementation uses the default configuration (known key, listening on `127.0.0.1:0`)
169-
pub fn add_customised_onion_service<'pk>(
170-
&mut self,
171-
private_key: Option<&'pk Ed25519PrivateKey>,
172-
virt_port: u16,
173-
authorised_clients: Option<&[X25519PublicKey]>,
174-
socket_addr: SocketAddr,
175-
) -> anyhow::Result<(Multiaddr, Cow<'pk, Ed25519PrivateKey>)> {
176-
let (genpk, ol) = self.listener_or_bootstrap(|p| p.customised_listener(private_key, virt_port, authorised_clients, socket_addr))?;
177-
let private_key = private_key.map(Cow::Borrowed).or(genpk.map(Cow::Owned)).unwrap_or_else(|| unreachable!());
178-
self.add_onion_service_impl(&private_key, virt_port, ol).map(|ma| (ma, private_key))
179-
}
180161
}
181162

182163
trait HsIdExt {

0 commit comments

Comments
 (0)