summaryrefslogtreecommitdiff
path: root/obfs4.go
diff options
context:
space:
mode:
Diffstat (limited to 'obfs4.go')
-rw-r--r--obfs4.go12
1 files changed, 10 insertions, 2 deletions
diff --git a/obfs4.go b/obfs4.go
index ec33fb4..247583b 100644
--- a/obfs4.go
+++ b/obfs4.go
@@ -34,6 +34,7 @@ package obfs4
import (
"bytes"
"crypto/sha256"
+ "encoding/base64"
"fmt"
"io"
"math/rand"
@@ -47,6 +48,8 @@ import (
)
const (
+ // SeedLength is the length of the obfs4 polymorphism seed.
+ SeedLength = 32
headerLength = framing.FrameOverhead + packetOverhead
connectionTimeout = time.Duration(30) * time.Second
@@ -299,7 +302,7 @@ func (c *Obfs4Conn) serverHandshake(nodeID *ntor.NodeID, keypair *ntor.Keypair)
c.state = stateEstablished
// Send the PRNG seed as the first packet.
- err = c.producePacket(&frameBuf, packetTypePrngSeed, c.listener.seed.Bytes()[:], 0)
+ err = c.producePacket(&frameBuf, packetTypePrngSeed, c.listener.rawSeed, 0)
if err != nil {
return
}
@@ -611,6 +614,7 @@ type Obfs4Listener struct {
keyPair *ntor.Keypair
nodeID *ntor.NodeID
+ rawSeed []byte
seed *drbg.Seed
iatSeed *drbg.Seed
iatObfuscation bool
@@ -716,7 +720,11 @@ func ListenObfs4(network, laddr, nodeID, privateKey, seed string, iatObfuscation
if err != nil {
return nil, err
}
- l.seed, err = drbg.SeedFromBase64(seed)
+ l.rawSeed, err = base64.StdEncoding.DecodeString(seed)
+ if err != nil {
+ return nil, err
+ }
+ l.seed, err = drbg.SeedFromBytes(l.rawSeed)
if err != nil {
return nil, err
}