2022-09-09 18:45:10 +08:00
|
|
|
package tls
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"crypto/tls"
|
|
|
|
"net"
|
|
|
|
|
|
|
|
"github.com/sagernet/sing-box/adapter"
|
|
|
|
E "github.com/sagernet/sing/common/exceptions"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
2023-02-18 14:55:47 +08:00
|
|
|
STDConfig = tls.Config
|
|
|
|
STDConn = tls.Conn
|
|
|
|
ConnectionState = tls.ConnectionState
|
2022-09-09 18:45:10 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config interface {
|
2022-11-09 11:43:03 +08:00
|
|
|
ServerName() string
|
|
|
|
SetServerName(serverName string)
|
2022-09-11 10:22:52 +08:00
|
|
|
NextProtos() []string
|
|
|
|
SetNextProtos(nextProto []string)
|
2022-09-09 18:45:10 +08:00
|
|
|
Config() (*STDConfig, error)
|
|
|
|
Client(conn net.Conn) Conn
|
2022-11-09 11:43:03 +08:00
|
|
|
Clone() Config
|
2022-09-09 18:45:10 +08:00
|
|
|
}
|
|
|
|
|
2023-02-20 14:08:13 +08:00
|
|
|
type ConfigWithSessionIDGenerator interface {
|
|
|
|
SetSessionIDGenerator(generator func(clientHello []byte, sessionID []byte) error)
|
|
|
|
}
|
|
|
|
|
2022-09-09 18:45:10 +08:00
|
|
|
type ServerConfig interface {
|
|
|
|
Config
|
|
|
|
adapter.Service
|
|
|
|
Server(conn net.Conn) Conn
|
|
|
|
}
|
|
|
|
|
|
|
|
type Conn interface {
|
|
|
|
net.Conn
|
|
|
|
HandshakeContext(ctx context.Context) error
|
2023-02-18 14:55:47 +08:00
|
|
|
ConnectionState() ConnectionState
|
2022-09-09 18:45:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func ParseTLSVersion(version string) (uint16, error) {
|
|
|
|
switch version {
|
|
|
|
case "1.0":
|
|
|
|
return tls.VersionTLS10, nil
|
|
|
|
case "1.1":
|
|
|
|
return tls.VersionTLS11, nil
|
|
|
|
case "1.2":
|
|
|
|
return tls.VersionTLS12, nil
|
|
|
|
case "1.3":
|
|
|
|
return tls.VersionTLS13, nil
|
|
|
|
default:
|
|
|
|
return 0, E.New("unknown tls version:", version)
|
|
|
|
}
|
|
|
|
}
|