cyphernet-labs / rust-internet2

Set of rust crates for software supporting Internet2 (Tor, Noise protocol, lightning network-style messaging)
Apache License 2.0
18 stars 9 forks source link

Connect to hidden service through socks5 proxy #28

Open TheCharlatan opened 2 years ago

TheCharlatan commented 2 years ago

I would like to connect a Brontide or Brontozaur session to a hidden service. This is typically done through a socks5 proxy. Currently I don't see a way to do that with the current state of this crate (though I may be mistaken).

The socks crate allows its user to create a Socks5Stream, which is similar to a TcpStream of the std library. A TcpStream is also what runs the connection currently used for both Brontide and Brontozaur. Once a Socks5Stream is established and connected, it can be consumed and transformed into a TcpStream.

Currently it is possible to re-create the low-level types to establish a BrontozaurSession. However the members of the BrontozaurSession are private to the Session module, so it can't be re-created from scratch with an injected Socks5Stream.

In order to support connecting to a hidden service, I thus see three possibilities. Either make the members of the Session public, or pass in a user-defined existing TcpStream, or create a Socks5Stream in the encrypted connection module if a Onion address is provided. The last option would also require an additional proxy address to be passed in.

@dr-orlovsky I am keen to implement any of these options, do you have an opinion here?

dr-orlovsky commented 2 years ago

Sorry for a late reply, had a number of conference talks in a row.

Thank you for proposing solution to this. I think the best way forward will be adding a new constructor to the BrontozaurSession which will take an Onion address and will do all dirty work internally, finally instantiating the self with TcpStream internally. What do you think?