diff options
Diffstat (limited to 'listener.go')
-rw-r--r-- | listener.go | 42 |
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 |