[tor-commits] [tor-browser-build/master] Bug 30767: Support custom PT bridges on Android

sysrqb at torproject.org sysrqb at torproject.org
Tue Feb 11 02:40:33 UTC 2020


commit 3ce57ded27baa63dfff074e9a10a62365dc3bc25
Author: Matthew Finkel <sysrqb at torproject.org>
Date:   Fri Feb 7 02:18:21 2020 +0000

    Bug 30767: Support custom PT bridges on Android
---
 ...ustom-obfs4-bridge-does-not-work-on-Tor-B.patch | 146 +++++++++++++++++++++
 projects/tor-onion-proxy-library/build             |   1 +
 projects/tor-onion-proxy-library/config            |   1 +
 3 files changed, 148 insertions(+)

diff --git a/projects/tor-onion-proxy-library/0001-Bug-30767-Custom-obfs4-bridge-does-not-work-on-Tor-B.patch b/projects/tor-onion-proxy-library/0001-Bug-30767-Custom-obfs4-bridge-does-not-work-on-Tor-B.patch
new file mode 100644
index 0000000..2d1bc51
--- /dev/null
+++ b/projects/tor-onion-proxy-library/0001-Bug-30767-Custom-obfs4-bridge-does-not-work-on-Tor-B.patch
@@ -0,0 +1,146 @@
+From 0a482a749fd770827d3d6c71debb112a07e7fae3 Mon Sep 17 00:00:00 2001
+From: sisbell <shane.isbell at gmail.com>
+Date: Thu, 14 Nov 2019 13:43:09 -0800
+Subject: [PATCH] Bug 30767: Custom obfs4 bridge does not work on Tor Browser
+ for Android
+
+TOPL fixes #134
+---
+ .../thali/toronionproxy/TorConfigBuilder.java | 63 ++++++++-----------
+ 1 file changed, 26 insertions(+), 37 deletions(-)
+
+diff --git a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
+index e324d9f..da9a6a2 100644
+--- a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
++++ b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
+@@ -99,25 +99,32 @@ public final class TorConfigBuilder {
+         return this;
+     }
+ 
++    @SettingsConfig
++    public TorConfigBuilder bridgesFromSettings() {
++        try {
++            addBridgesFromResources();
++        } catch (IOException e) {
++            e.printStackTrace();
++        }
++        return this;
++    }
++
+     public TorConfigBuilder configurePluggableTransportsFromSettings(File pluggableTransportClient) throws IOException {
+-        List<String> supportedBridges = settings.getListOfSupportedBridges();
+-        if (pluggableTransportClient == null || !settings.hasBridges() || supportedBridges.size() < 1) {
++        if (pluggableTransportClient == null) {
+             return this;
+         }
+ 
+-        if (!pluggableTransportClient.exists() || !pluggableTransportClient.canExecute()) {
++        if (!pluggableTransportClient.exists()) {
+             throw new IOException("Bridge binary does not exist: " + pluggableTransportClient
+                     .getCanonicalPath());
+         }
+ 
+-        if (supportedBridges.contains("obfs3") || supportedBridges.contains("obfs4")) {
+-            transportPluginObfs(pluggableTransportClient.getCanonicalPath());
+-        }
+-        if (supportedBridges.contains("meek")) {
+-            transportPluginMeek(pluggableTransportClient.getCanonicalPath());
++        if (!pluggableTransportClient.canExecute()) {
++            throw new IOException("Bridge binary is not executable: " + pluggableTransportClient
++                    .getCanonicalPath());
+         }
+-        String type = supportedBridges.contains("meek") ? "meek_lite" : "obfs4";
+-        addBridgesFromResources(type, 2);
++
++        transportPlugin(pluggableTransportClient.getCanonicalPath());
+         return this;
+     }
+ 
+@@ -471,14 +478,8 @@ public final class TorConfigBuilder {
+         return transPort(settings.transPort());
+     }
+ 
+-    public TorConfigBuilder transportPluginMeek(String clientPath) {
+-        buffer.append("ClientTransportPlugin meek_lite exec ").append(clientPath).append('\n');
+-        return this;
+-    }
+-
+-    public TorConfigBuilder transportPluginObfs(String clientPath) {
+-        buffer.append("ClientTransportPlugin obfs3 exec ").append(clientPath).append('\n');
+-        buffer.append("ClientTransportPlugin obfs4 exec ").append(clientPath).append('\n');
++    public TorConfigBuilder transportPlugin(String clientPath) {
++        buffer.append("ClientTransportPlugin meek_lite,obfs3,obfs4 exec ").append(clientPath).append('\n');
+         return this;
+     }
+ 
+@@ -489,7 +490,7 @@ public final class TorConfigBuilder {
+ 
+     @SettingsConfig
+     public TorConfigBuilder useBridgesFromSettings() {
+-        return !settings.hasBridges() ? dontUseBridges() : this;
++        return settings.hasBridges() ? useBridges() : this;
+     }
+ 
+     public TorConfigBuilder virtualAddressNetwork(String address) {
+@@ -518,12 +519,12 @@ public final class TorConfigBuilder {
+      * </code>
+      *
+      */
+-    TorConfigBuilder addBridgesFromResources(String type, int maxBridges) throws IOException {
++    TorConfigBuilder addBridgesFromResources() throws IOException {
+         if(settings.hasBridges()) {
+             InputStream bridgesStream = context.getInstaller().openBridgesStream();
+             int formatType = bridgesStream.read();
+-            if(formatType == 0) {
+-                addBridges(bridgesStream, type, maxBridges);
++            if (formatType == 0) {
++                addBridges(bridgesStream);
+             } else {
+                 addCustomBridges(bridgesStream);
+             }
+@@ -534,23 +535,14 @@ public final class TorConfigBuilder {
+     /**
+      * Add bridges from bridges.txt file.
+      */
+-    private void addBridges(InputStream input, String bridgeType, int maxBridges) {
+-        if (input == null || isNullOrEmpty(bridgeType) || maxBridges < 1) {
++    private void addBridges(InputStream input) {
++        if (input == null) {
+             return;
+         }
+-        boolean hasAddedBridge = false;
+         List<Bridge> bridges = readBridgesFromStream(input);
+-        Collections.shuffle(bridges, new Random(System.nanoTime()));
+-        int bridgeCount = 0;
+         for (Bridge b : bridges) {
+-            if (b.type.equals(bridgeType)) {
+-                bridge(b.type, b.config);
+-                hasAddedBridge = true;
+-                if (++bridgeCount > maxBridges)
+-                    break;
+-            }
++            bridge(b.type, b.config);
+         }
+-        if(hasAddedBridge) useBridges();
+     }
+ 
+     /**
+@@ -560,15 +552,12 @@ public final class TorConfigBuilder {
+         if (input == null) {
+             return;
+         }
+-        boolean hasAddedBridge = false;
+         List<Bridge> bridges = readCustomBridgesFromStream(input);
+         for (Bridge b : bridges) {
+             if (b.type.equals("custom")) {
+                 bridgeCustom(b.config);
+-                hasAddedBridge = true;
+             }
+         }
+-        if(hasAddedBridge) useBridges();
+     }
+ 
+     private static List<Bridge> readBridgesFromStream(InputStream input)  {
+-- 
+2.20.1
+
diff --git a/projects/tor-onion-proxy-library/build b/projects/tor-onion-proxy-library/build
index 0f2d976..9a8b31e 100644
--- a/projects/tor-onion-proxy-library/build
+++ b/projects/tor-onion-proxy-library/build
@@ -21,6 +21,7 @@ cd /var/tmp/build/[% project %]-[% c('version') %]
 # build will pull down the correct android tool versions
 patch -p1 < $rootdir/gradle.patch
 patch -p1 < $rootdir/canceldormant.patch
+patch -p1 < $rootdir/0001-Bug-30767-Custom-obfs4-bridge-does-not-work-on-Tor-B.patch
 
 # Extract obfs4proxy from TorBrowser/Tor/PluggableTransports/obfs4proxy
 tar --strip-components=4 -xf $rootdir/[% c('input_files_by_name/obfs4') %]
diff --git a/projects/tor-onion-proxy-library/config b/projects/tor-onion-proxy-library/config
index ff3432c..d76949d 100644
--- a/projects/tor-onion-proxy-library/config
+++ b/projects/tor-onion-proxy-library/config
@@ -32,3 +32,4 @@ input_files:
     exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
   - filename: gradle.patch
   - filename: canceldormant.patch
+  - filename: 0001-Bug-30767-Custom-obfs4-bridge-does-not-work-on-Tor-B.patch





More information about the tor-commits mailing list