simplify the crypto setup constructors

This commit is contained in:
Marten Seemann
2018-11-10 16:58:01 +07:00
parent c2aac727b9
commit 8c103be876

View File

@@ -95,12 +95,6 @@ type cryptoSetup struct {
var _ qtls.RecordLayer = &cryptoSetup{} var _ qtls.RecordLayer = &cryptoSetup{}
var _ CryptoSetup = &cryptoSetup{} var _ CryptoSetup = &cryptoSetup{}
type versionInfo struct {
initialVersion protocol.VersionNumber
supportedVersions []protocol.VersionNumber
currentVersion protocol.VersionNumber
}
// NewCryptoSetupClient creates a new crypto setup for the client // NewCryptoSetupClient creates a new crypto setup for the client
func NewCryptoSetupClient( func NewCryptoSetupClient(
initialStream io.Writer, initialStream io.Writer,
@@ -115,18 +109,21 @@ func NewCryptoSetupClient(
logger utils.Logger, logger utils.Logger,
perspective protocol.Perspective, perspective protocol.Perspective,
) (CryptoSetup, <-chan struct{} /* ClientHello written */, error) { ) (CryptoSetup, <-chan struct{} /* ClientHello written */, error) {
extHandler, receivedTransportParams := newExtensionHandlerClient(
params,
initialVersion,
supportedVersions,
currentVersion,
logger,
)
return newCryptoSetup( return newCryptoSetup(
initialStream, initialStream,
handshakeStream, handshakeStream,
connID, connID,
params, extHandler,
receivedTransportParams,
handleParams, handleParams,
tlsConf, tlsConf,
versionInfo{
currentVersion: currentVersion,
initialVersion: initialVersion,
supportedVersions: supportedVersions,
},
logger, logger,
perspective, perspective,
) )
@@ -145,17 +142,20 @@ func NewCryptoSetupServer(
logger utils.Logger, logger utils.Logger,
perspective protocol.Perspective, perspective protocol.Perspective,
) (CryptoSetup, error) { ) (CryptoSetup, error) {
extHandler, receivedTransportParams := newExtensionHandlerServer(
params,
supportedVersions,
currentVersion,
logger,
)
cs, _, err := newCryptoSetup( cs, _, err := newCryptoSetup(
initialStream, initialStream,
handshakeStream, handshakeStream,
connID, connID,
params, extHandler,
receivedTransportParams,
handleParams, handleParams,
tlsConf, tlsConf,
versionInfo{
currentVersion: currentVersion,
supportedVersions: supportedVersions,
},
logger, logger,
perspective, perspective,
) )
@@ -166,10 +166,10 @@ func newCryptoSetup(
initialStream io.Writer, initialStream io.Writer,
handshakeStream io.Writer, handshakeStream io.Writer,
connID protocol.ConnectionID, connID protocol.ConnectionID,
params *TransportParameters, extHandler tlsExtensionHandler,
transportParamChan <-chan TransportParameters,
handleParams func(*TransportParameters), handleParams func(*TransportParameters),
tlsConf *tls.Config, tlsConf *tls.Config,
versionInfo versionInfo,
logger utils.Logger, logger utils.Logger,
perspective protocol.Perspective, perspective protocol.Perspective,
) (CryptoSetup, <-chan struct{} /* ClientHello written */, error) { ) (CryptoSetup, <-chan struct{} /* ClientHello written */, error) {
@@ -178,40 +178,23 @@ func newCryptoSetup(
return nil, nil, err return nil, nil, err
} }
cs := &cryptoSetup{ cs := &cryptoSetup{
initialStream: initialStream, initialStream: initialStream,
initialAEAD: initialAEAD, initialAEAD: initialAEAD,
handshakeStream: handshakeStream, handshakeStream: handshakeStream,
readEncLevel: protocol.EncryptionInitial, readEncLevel: protocol.EncryptionInitial,
writeEncLevel: protocol.EncryptionInitial, writeEncLevel: protocol.EncryptionInitial,
handleParamsCallback: handleParams, handleParamsCallback: handleParams,
logger: logger, receivedTransportParams: transportParamChan,
perspective: perspective, logger: logger,
handshakeDone: make(chan struct{}), perspective: perspective,
handshakeErrChan: make(chan struct{}), handshakeDone: make(chan struct{}),
messageErrChan: make(chan error, 1), handshakeErrChan: make(chan struct{}),
clientHelloWrittenChan: make(chan struct{}), messageErrChan: make(chan error, 1),
messageChan: make(chan []byte, 100), clientHelloWrittenChan: make(chan struct{}),
receivedReadKey: make(chan struct{}), messageChan: make(chan []byte, 100),
receivedWriteKey: make(chan struct{}), receivedReadKey: make(chan struct{}),
closeChan: make(chan struct{}), receivedWriteKey: make(chan struct{}),
} closeChan: make(chan struct{}),
var extHandler tlsExtensionHandler
switch perspective {
case protocol.PerspectiveClient:
extHandler, cs.receivedTransportParams = newExtensionHandlerClient(
params,
versionInfo.initialVersion,
versionInfo.supportedVersions,
versionInfo.currentVersion,
logger,
)
case protocol.PerspectiveServer:
extHandler, cs.receivedTransportParams = newExtensionHandlerServer(
params,
versionInfo.supportedVersions,
versionInfo.currentVersion,
logger,
)
} }
qtlsConf := tlsConfigToQtlsConfig(tlsConf) qtlsConf := tlsConfigToQtlsConfig(tlsConf)
qtlsConf.AlternativeRecordLayer = cs qtlsConf.AlternativeRecordLayer = cs