package tlsdiag import ( "context" "flag" "fmt" "io/ioutil" "net" "time" "gitlab.dms3.io/p2p/go-p2p-core/peer" libp2ptls "gitlab.dms3.io/p2p/go-p2p-tls" ) func StartClient() error { port := flag.Int("p", 5533, "port") peerIDString := flag.String("id", "", "peer ID") keyType := flag.String("key", "ecdsa", "rsa, ecdsa, ed25519 or secp256k1") flag.Parse() priv, err := generateKey(*keyType) if err != nil { return err } peerID, err := peer.Decode(*peerIDString) if err != nil { return err } id, err := peer.IDFromPrivateKey(priv) if err != nil { return err } fmt.Printf(" Peer ID: %s\n", id.Pretty()) tp, err := libp2ptls.New(priv) if err != nil { return err } remoteAddr := fmt.Sprintf("localhost:%d", *port) fmt.Printf("Dialing %s\n", remoteAddr) conn, err := net.Dial("tcp", remoteAddr) if err != nil { return err } fmt.Printf("Dialed raw connection to %s\n", conn.RemoteAddr()) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() sconn, err := tp.SecureOutbound(ctx, conn, peerID) if err != nil { return err } fmt.Printf("Authenticated server: %s\n", sconn.RemotePeer().Pretty()) data, err := ioutil.ReadAll(sconn) if err != nil { return err } fmt.Printf("Received message from server: %s\n", string(data)) return nil }