From 22c9dc3f489dd0984e431ede95f963bc1f57222c Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Mon, 18 Aug 2014 11:53:22 +0000 Subject: 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. --- transports/obfs4/obfs4.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'transports') 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) -- cgit v1.2.3