dsfx/shared/dnet/dnet.go

47 lines
874 B
Go

package dnet
import (
"context"
"crypto/ecdsa"
"net"
"koti.casa/numenor-labs/dsfx/shared/dlog"
)
// Dial ...
func Dial(
ctx context.Context,
laddr *net.TCPAddr,
raddr *net.TCPAddr,
clientPrivateKey *ecdsa.PrivateKey,
serverPublicKey *ecdsa.PublicKey,
) (*Conn, error) {
conn, err := net.DialTCP("tcp", laddr, raddr)
if err != nil {
return nil, err
}
sessionKey, err := Handshake(ctx, conn, clientPrivateKey, serverPublicKey)
if err != nil {
return nil, err
}
return NewConn(conn, sessionKey, &clientPrivateKey.PublicKey, serverPublicKey), nil
}
// Listen ...
func Listen(
ctx context.Context,
laddr *net.TCPAddr,
identity *ecdsa.PrivateKey,
) (net.Listener, error) {
tcpListener, err := net.ListenTCP("tcp", laddr)
if err != nil {
return nil, err
}
logger := dlog.FromContext(ctx)
return &Listener{logger, tcpListener, identity}, nil
}