Commit Graph

19 Commits (master)

Author SHA1 Message Date
Yawning Angel 393aca86cc internal/x25519ell2: Initial import
Replace agl's Elligator2 implementation with a different one, that fixes
the various distinguishers stemming from bugs in the original
implementation and "The Elligator paper is extremely hard to read".

All releases prior to this commit are trivially distinguishable with
simple math, so upgrading is strongly recommended.  The upgrade is fully
backward-compatible with existing implementations, however the
non-upgraded side will emit traffic that is trivially distinguishable
from random.

Special thanks to Loup Vaillant for his body of work on this primitive,
and for motivating me to fix it.
2 years ago
Yawning Angel a8288437e3 Update my e-mail address (no functional changes) 5 years ago
Yawning Angel bde8b7ff56 transports/meeklite: Use a modified version of utls
Changes:
 * Use a fork of utls with some compatibility improvements.
 * Switch the default ClientHello profile to `HelloFirefox_Auto`.
 * Add the `HelloChrome_71` profile.

The existing `HelloFirefox_Auto` profile that points to
`HelloFirefox_63` also matches the (common) behavior of Firefox 65,
assuming that 3DES ciphersuites are not disabled.
5 years ago
Yawning Angel 06cd8af9e6 Update README.md (No functional changes) 5 years ago
Daniel Martí 08f4d47018 port to a Go module
The biggest win is that we now declare what versions of each dependency
we require to build. This way, building a certain version of obfs4 will
always use the same source code, independent of the master branch of
each dependency.

This is necessary for reproducible builds. On top of that, go.sum
contains checksums of all the transitive dependencies and their modules,
so the build system will also recognise when the source code has been
changed.

Updated the build instructions accordingly. We don't drop support for
earlier Go versions, but those won't get the benefit of reproducible
builds unless we start vendoring the dependencies too.
6 years ago
Yawning Angel aed4b72389 Change the import path for go.net.
The Go developers decided to move the go.net repository to
golang.org/x/net, and also to transition from hg to git.  This wasn't
changed when the go.crypto imports were since the 'proxy' component
doesn't have imports that break, so the old code still works.

While the change here is simple (just update the import location), this
affects packagers as it now expects the updated package.  Sorry for the
inconveneince, I blame the Go people, and myself for not just doing
this along with the go.crypto changes.
9 years ago
Yawning Angel 0066cfc393 Add support for acting as a ScrambleSuit client.
This allows obfs4proxy to be used as a ScrambleSuit client that is wire
compatible with the obfs4proxy implementation, including session ticket
support, and length obfuscation.

The current implementation has the following limitations:
 * IAT obfuscation is not supported (and is disabled in all other
   ScrambleSuit implementations by default).
 * The length distribution and probabilites are different from those
   generated by obfsproxy and obfsclient due to a different DRBG.
 * Server support is missing and is unlikely to be implemented.
9 years ago
Yawning Angel cdeda57241 Change the import path for go.crypto.
The Go developers decided to move the go.crypto repository to
golang.org/x/crypto, and also to transition from hg to git.  The tip of
tree code.google.com copy of the code is broken due to the import paths
pointing at the new repository.

While the change here is simple (just update the import location), this
affects packagers as it now expects the updated package.  Sorry for the
inconveneince, I blame the Go people.
9 years ago
Yawning Angel 6cd81ec42f Change the bridge line format to be more compact.
Instead of "node-id" and "public-key" that are Base16 encoded, use
"cert" which contains the "node-id" and "public-key" in Base64 encoded
form.  This is more compact and cuts the length down by 49 characters.
10 years ago
Yawning Angel 1436720b12 Minor documentation cleanups, no functional changes. 10 years ago
Yawning Angel 79e94103d6 Update the README.md (No functional changes). 10 years ago
Yawning Angel 339c63f0c8 Massive cleanup/code reorg.
* Changed obfs4proxy to be more like obfsproxy in terms of design,
   including being an easy framework for developing new TCP/IP style
   pluggable transports.
 * Added support for also acting as an obfs2/obfs3 client or bridge
   as a transition measure (and because the code itself is trivial).
 * Massively cleaned up the obfs4 and related code to be easier to
   read, and more idiomatic Go-like in style.
 * To ease deployment, obfs4proxy will now autogenerate the node-id,
   curve25519 keypair, and drbg seed if none are specified, and save
   them to a JSON file in the pt_state directory (Fixes Tor bug #12605).
10 years ago
Yawning Angel 6245391c93 Document dependencies, add LICENSE (No functional changes). 10 years ago
Yawning Angel fc5e39a4ef Update README (No functional changes). 10 years ago
Yawning Angel 79a7ad7f2b Changed the taglne to "The obfourscator", per dcf's suggestion. 10 years ago
Yawning Angel 659efbc044 Update README (No functional changes). 10 years ago
Yawning Angel 9bfdd77f72 Add preliminary support for packet length obfuscation.
The same algorithm as ScrambleSuit is used, except:
 * SipHash-2-4 in OFB mode is used to create the distribution.
 * The system CSPRNG is used when sampling the distribution.

This fixes most of #3, all that remains is generating and sending a
persistent distribution on the server side to the client.
10 years ago
Yawning Angel f76f142340 Change documentation/comments to reflect reality (No functional changes). 10 years ago
Yawning Angel ef38b844f9 Initial import. 10 years ago