diff options
| author | Yawning Angel <yawning@torproject.org> | 2014-08-18 11:53:22 +0000 | 
|---|---|---|
| committer | Yawning Angel <yawning@torproject.org> | 2014-08-18 11:53:22 +0000 | 
| commit | 22c9dc3f489dd0984e431ede95f963bc1f57222c (patch) | |
| tree | bd8708cbaeff5ae2d35ccf8b36d1c18183c3d45e | |
| parent | 339c63f0c8cd4374f6fa26484498eb6fa91b7bca (diff) | |
Add support for enabling IAT obfuscation and biased WDist.
Golang's command line parser is slightly cumbersome to use with
subcommands, so the arguments are "obfs4-iatObufscation" and
"obfs-distBias" instead of obfsproxy style subcommands.
| -rw-r--r-- | transports/obfs4/obfs4.go | 26 | 
1 files changed, 17 insertions, 9 deletions
diff --git a/transports/obfs4/obfs4.go b/transports/obfs4/obfs4.go index 7af7224..fbfea27 100644 --- a/transports/obfs4/obfs4.go +++ b/transports/obfs4/obfs4.go @@ -32,6 +32,7 @@ package obfs4  import (  	"bytes"  	"crypto/sha256" +	"flag"  	"fmt"  	"math/rand"  	"net" @@ -55,25 +56,27 @@ const (  	privateKeyArg = "private-key"  	seedArg       = "drbg-seed" +	iatCmdArg  = "obfs4-iatObfuscation" +	biasCmdArg = "obfs4-distBias" +  	seedLength             = 32  	headerLength           = framing.FrameOverhead + packetOverhead  	clientHandshakeTimeout = time.Duration(60) * time.Second  	serverHandshakeTimeout = time.Duration(30) * time.Second  	replayTTL              = time.Duration(3) * time.Hour -	// Use a ScrambleSuit style biased probability table. -	biasedDist = false - -	// Use IAT obfuscation. -	iatObfuscation = false - -	// Maximum IAT delay (100 usec increments). -	maxIATDelay = 100 - +	maxIATDelay        = 100  	maxCloseDelayBytes = maxHandshakeLength  	maxCloseDelay      = 60  ) +// iatObfuscation controls if Inter-Arrival Time obfuscation will be enabled. +var iatObfuscation bool + +// biasedDist controls if the probability table will be ScrambleSuit style or +// uniformly distributed. +var biasedDist bool +  type obfs4ClientArgs struct {  	nodeID     *ntor.NodeID  	publicKey  *ntor.PublicKey @@ -573,6 +576,11 @@ func (conn *obfs4Conn) padBurst(burst *bytes.Buffer) (err error) {  	return  } +func init() { +	flag.BoolVar(&iatObfuscation, iatCmdArg, false, "Enable obfs4 IAT obfuscation (expensive)") +	flag.BoolVar(&biasedDist, biasCmdArg, false, "Enable obfs4 using ScrambleSuit style table generation") +} +  var _ base.ClientFactory = (*obfs4ClientFactory)(nil)  var _ base.ServerFactory = (*obfs4ServerFactory)(nil)  var _ base.Transport = (*Transport)(nil)  | 
