summaryrefslogtreecommitdiff
path: root/listener.go
diff options
context:
space:
mode:
authoratanarjuat <atanarjuat@example.com>2022-05-21 00:43:41 +0200
committeratanarjuat <atanarjuat@example.com>2022-05-21 05:04:06 +0200
commita809112a20b31b9a4adca31ae564d943a41e9023 (patch)
tree8cc8b641a25867a8c556a073f44c25e1ff36433d /listener.go
parentcefa2c334751efbf1d4b479fb827c21c5b801a71 (diff)
functional transparent proxy
Diffstat (limited to 'listener.go')
-rw-r--r--listener.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/listener.go b/listener.go
index 593032f..82db98c 100644
--- a/listener.go
+++ b/listener.go
@@ -5,6 +5,8 @@ import (
"context"
"crypto/rand"
"encoding/hex"
+ "fmt"
+ "log"
"net"
pt "git.torproject.org/pluggable-transports/goptlib.git"
@@ -21,10 +23,47 @@ type ListenConfig struct {
NodeID *ntor.NodeID
PrivateKey *ntor.PrivateKey
+ PublicKey string
Seed [ntor.KeySeedLength]byte
StateDir string
}
+// perhaps this is redundant, but using the same json format than ss for debug.
+// kali: feel free to remove this if/when we make sure unwrapping the cert is enough for us.
+func NewListenConfig(nodeIDStr, privKeyStr, pubKeyStr, seedStr, stateDir string) (*ListenConfig, error) {
+ var err error
+ var seed [ntor.KeySeedLength]byte
+ var nodeID *ntor.NodeID
+ private := new(ntor.PrivateKey)
+
+ if nodeID, err = ntor.NodeIDFromHex(nodeIDStr); err != nil {
+ return nil, err
+ }
+
+ raw, err := hex.DecodeString(privKeyStr)
+ if err != nil {
+ return nil, err
+ }
+ log.Println("DEBUG len private ley:", len(raw))
+ // TODO raise invalid error if len not right
+ copy(private[:], raw)
+
+ s, err := hex.DecodeString(seedStr)
+ if err != nil {
+ return nil, err
+ }
+ copy(seed[:], s)
+
+ lc := &ListenConfig{
+ NodeID: nodeID,
+ PrivateKey: private,
+ PublicKey: pubKeyStr,
+ Seed: seed,
+ StateDir: stateDir,
+ }
+ return lc, nil
+}
+
// NewListenConfigCert creates a listener config by unpacking the node ID from
// its certificate.
// The private key must still be specified.
@@ -54,7 +93,10 @@ func (lc *ListenConfig) Wrap(ctx context.Context, ln net.Listener) (*Listener, e
} else {
seed = lc.Seed
}
+
args.Add("drbg-seed", hex.EncodeToString(seed[:]))
+ args.Add("public-key", lc.PublicKey)
+ fmt.Println("pubkey:", lc.PublicKey)
sf, err := (&obfs4.Transport{}).ServerFactory(lc.StateDir, &args)
if err != nil {
return nil, err