[tor-bugs] #25483 [Obfuscation/Snowflake]: Windows reproducible build of snowflake

Tor Bug Tracker & Wiki blackhole at torproject.org
Fri Mar 30 07:51:15 UTC 2018


#25483: Windows reproducible build of snowflake
-----------------------------------+------------------------------
 Reporter:  arlolra                |          Owner:  (none)
     Type:  project                |         Status:  needs_review
 Priority:  Medium                 |      Milestone:
Component:  Obfuscation/Snowflake  |        Version:
 Severity:  Normal                 |     Resolution:
 Keywords:                         |  Actual Points:
Parent ID:  #19001                 |         Points:
 Reviewer:                         |        Sponsor:
-----------------------------------+------------------------------
Changes (by dcf):

 * status:  new => needs_review


Comment:

 I've made progress with cross-compiling webrtc for windows-x86_64. It's in
 two branches. The first branch just upgrades webrtc to branch-heads/64,
 which has the cross-compiling support. The second branch builds off the
 first and adds a build script for windows.

 The build is currently using the prebuilt clang cross-compiler that Google
 puts among the dependencies of webrtc. Eventually we will have to make it
 use our own compiler instead, as we already do on mac and linux. Reliance
 on the prebuilt compiler is the reason why the build currently only works
 for windows-x86_64, not windows-i686: there's no 32-bit prebuilt compiler
 available.

  https://github.com/uumaro/tor-browser-build/commits/webrtc-64 (currently
 [https://github.com/uumaro/tor-browser-
 build/commits/c8048d746ca176808225a428b8820996d65139f8 c8048d746c])::
    This branch updates the build scripts to use a webrtc based on branch-
 heads/64. It depends on having a go-webrtc that also supports the branch-
 heads/64 API. That code hasn't been merged into go-webrtc yet, but there
 is [https://github.com/keroserene/go-webrtc/pull/79 a pull request] for
 it. To test the code before the go-webrtc changes have been merged, do
 this in the tor-browser-build directory before `make`:
    {{{
    cd git_clones/go-webrtc/
    git fetch https://github.com/uumaro/go-webrtc/ branch-heads-64
    cd ..
    }}}
    This branch can be merged independently of the windows code, once the
 go-webrtc pull request goes through.
  https://github.com/uumaro/tor-browser-build/commits/webrtc-win (currently
 [https://github.com/uumaro/tor-browser-
 build/commits/08613622f61c2ece16db1115b14df481c80838a0 08613622f6])::
    This branch lets the webrtc build work for windows-i686. To test it,
 first `get fetch` an updated go-webrtc as described above. If have done a
 build in this directory previously, run
    {{{
    rm gclient/webrtc/.gclient
    }}}
    The .gclient will be regenerated with the addition of `target_os =
 ['win']`, which will cause `gclient sync` to pull the prebuilt clang
 cross-compiler. If you have not yet done a build in this directory, then
 you will need to do
    {{{
    make submodule-update
    }}}
    Then run
    {{{
    rbm/rbm build webrtc --target testbuild --target torbrowser-windows-
 x86_64
    }}}
    If you want to test that other targets still work, do
    {{{
    make testbuild
    }}}

 The output of the build is a file, out/webrtc/webrtc-
 88f5d9180eae78a6162cccd78850ff416eb82483-windows-x86_64-ba8356.tar.gz. You
 can compare it against mine:
   https://people.torproject.org/~dcf/pt-bundle/snowflake/webrtc-
 88f5d9180eae78a6162cccd78850ff416eb82483-windows-x86_64-ba8356.tar.gz

 A few comments on the second branch:
  * [https://github.com/uumaro/tor-browser-
 build/commit/7a26f7ae9bde88101f8922c1b340c579a5fd55e6 I compiled my own
 Windows SDK] using the instructions in comment:13 and stashed it in my
 people.torproject.org space. I have [https://github.com/uumaro/tor-
 browser-build/blob/08613622f61c2ece16db1115b14df481c80838a0/TODO.WEBRTC a
 todo] to check if we really need this separate SDK, or if the header files
 in mingw-w64 are enough.
  * The upstream cross-compiling instructions say to put the Windows SDK in
 a case-insensitive [http://www.brain-dump.org/projects/ciopfs/ ciopfs]
 mount, so that, for example, code can `#include <winsock2.h>` when the
 file is actually called WinSock2.h. I tried that initially, but I couldn't
 get ciopfs to work inside the container. boklm gave me a hint that I
 haven't tried yet. In the meantime, though, I [https://github.com/uumaro
 /tor-browser-build/commit/d0f6fcbe6cfec380b8cd3612de52e3a5b6dff8e0
 disabled ciopfs] and worked around case sensitivity with a lot of
 symlinks. I left it in the branch history for now.

 I haven't yet tried actually doing anything with the generated libwebrtc-
 windows-amd64-magic.lib.

 I'm not asking for any of this code to be merged right now. But I would
 appreciate some review of the code (this is my first time writing for
 rbm), and a check to see if the commands above work for you.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/25483#comment:14>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list