ceremonyclient/go-libp2p/p2p/security/tls/cmd/tlsdiag/client.go
2023-08-20 23:07:43 -05:00

64 lines
1.3 KiB
Go

package tlsdiag
import (
"context"
"flag"
"fmt"
"io"
"net"
"time"
libp2ptls "github.com/libp2p/go-libp2p/p2p/security/tls"
"github.com/libp2p/go-libp2p/core/peer"
)
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(libp2ptls.ID, priv, nil)
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 := io.ReadAll(sconn)
if err != nil {
return err
}
fmt.Printf("Received message from server: %s\n", string(data))
return nil
}