mirror of
https://git.numenor-labs.us/dsfx.git
synced 2025-04-29 16:20:34 +00:00
47 lines
874 B
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
|
||
|
}
|