diff options
Diffstat (limited to 'obfs4.go')
-rw-r--r-- | obfs4.go | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -467,12 +467,15 @@ func Dial(network, address, nodeID, publicKey string) (net.Conn, error) { return nil, err } - // Connect to the peer. - c := new(Obfs4Conn) - c.lenProbDist, err = newWDist(nil, 0, framing.MaximumSegmentLength) + // Generate the initial length obfuscation distribution. + seed, err := newRandomDrbgSeed() if err != nil { return nil, err } + + // Connect to the peer. + c := new(Obfs4Conn) + c.lenProbDist = newWDist(seed, 0, framing.MaximumSegmentLength) c.conn, err = net.Dial(network, address) if err != nil { return nil, err @@ -495,6 +498,7 @@ type Obfs4Listener struct { keyPair *ntor.Keypair nodeID *ntor.NodeID + seed *drbgSeed } func (l *Obfs4Listener) Accept() (net.Conn, error) { @@ -509,7 +513,7 @@ func (l *Obfs4Listener) Accept() (net.Conn, error) { cObfs.conn = c cObfs.isServer = true cObfs.listener = l - cObfs.lenProbDist, err = newWDist(nil, 0, framing.MaximumSegmentLength) + cObfs.lenProbDist = newWDist(l.seed, 0, framing.MaximumSegmentLength) if err != nil { c.Close() return nil, err @@ -548,6 +552,13 @@ func Listen(network, laddr, nodeID, privateKey string) (net.Listener, error) { return nil, err } + // Generate the initial length obfuscation distribution. + // XXX: Load this from args. + l.seed, err = newRandomDrbgSeed() + if err != nil { + return nil, err + } + // Start up the listener. l.listener, err = net.Listen(network, laddr) if err != nil { |