A client-side obfsproxy can get transport parameters by using the SOCKS handshake username/password fields.
On the server-side obfsroxy should use the scheme from #8929 (moved) to get the transport parameters. Also, after using them, obfsproxy should send the parameters that must be advertised in the extra-info descriptor using the ARGS option in the SMETHOD line.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items 0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
Linked items 0
Link issues together to show that they're related.
Learn more.
Note to self: A gentleman from SIF13 wrote some code for this issue. You can find his code at branch bug8979 in https://gitweb.torproject.org/user/asn/obfsproxy.git. It might need some more work to be purfect.
Make pyptlib parse the TOR_PT_SERVER_TRANSPORT_PARAMETERS environment variable, and return it to the transport. Also, make pyptlib send the ARGS option in its SMETHOD lines.
Make obfsproxy get the parameters from pyptlib and pass it to the correct transport. obfsproxy currently gets info from pyptlib in managed/server.py using the managed_info variable. That info should somehow reach the transports (preferably in a clean way), so that transports can configure their shared-secrets etc.
Obfsproxy transports should be able to select some of those parameters and send them back to tor (using the SMETHOD line and ARGS) so that they can be sent to BridgeDB. SMETHOD lines are currently sent in managed/server.py using the pyptlibreportSuccess function.
asn and I just discussed this in #tor-dev. In principle, there are two options:
We can just blindly pass all transport parameters to BridgeDB. This would be the easiest solution. If pluggable transports expect "secret" information which BridgeDB should not know (such as directory paths), then the transports could provide a dedicated config file rather than let this information pass through Tor/pyptlib/obfsproxy. Note that right now we don't have a transport which wants secret information.
Instead of blindly forwarding parameters to BridgeDB, we could sanitize them first and remove "secret" parameters. There are two ways how this could be done:
pyptlib could forward the parameters to the pluggable transport which then tells pyptlib which parameters are safe to publish. This would probably require nontrivial changes to pyptlib/obfsproxy.
The "Bridge" line in the torrc could somehow encode which parameters are safe to publish and which are not. This would requiring changing #8929 but could be easier to implement than the first option.
For pyptlib, please check branch bug8979 in https://git.torproject.org/user/asn/pyptlib.git.
For obfsproxy, please check branch bug8979_draft in https://git.torproject.org/user/asn/obfsproxy.git.
A typical bridge torrc configuration would look like this: