use separate constructors for client and server for the TLS crypto setup

This commit is contained in:
Marten Seemann
2017-10-02 11:11:42 +07:00
parent 474b036474
commit 6f3d3919df
3 changed files with 43 additions and 32 deletions

View File

@@ -35,36 +35,52 @@ var newMintController = func(conn *mint.Conn) crypto.MintController {
return &mintController{conn}
}
// NewCryptoSetupTLS creates a new CryptoSetup instance for a server
func NewCryptoSetupTLS(
hostname string, // only needed for the client
perspective protocol.Perspective,
version protocol.VersionNumber,
// NewCryptoSetupTLSServer creates a new TLS CryptoSetup instance for a server
func NewCryptoSetupTLSServer(
tlsConfig *tls.Config,
transportParams *TransportParameters,
aeadChanged chan<- protocol.EncryptionLevel,
version protocol.VersionNumber,
) (CryptoSetup, ParamsNegotiator, error) {
mintConf, err := tlsToMintConfig(tlsConfig, perspective)
mintConf, err := tlsToMintConfig(tlsConfig, protocol.PerspectiveServer)
if err != nil {
return nil, nil, err
}
params := newParamsNegotiator(protocol.PerspectiveServer, version, transportParams)
return &cryptoSetupTLS{
perspective: protocol.PerspectiveServer,
mintConf: mintConf,
nullAEAD: crypto.NewNullAEAD(protocol.PerspectiveServer, version),
keyDerivation: crypto.DeriveAESKeys,
aeadChanged: aeadChanged,
extensionHandler: newExtensionHandlerServer(params),
}, params, nil
}
// NewCryptoSetupTLSClient creates a new TLS CryptoSetup instance for a client
func NewCryptoSetupTLSClient(
hostname string, // only needed for the client
tlsConfig *tls.Config,
transportParams *TransportParameters,
aeadChanged chan<- protocol.EncryptionLevel,
version protocol.VersionNumber,
) (CryptoSetup, ParamsNegotiator, error) {
mintConf, err := tlsToMintConfig(tlsConfig, protocol.PerspectiveClient)
if err != nil {
return nil, nil, err
}
mintConf.ServerName = hostname
params := newParamsNegotiator(perspective, version, transportParams)
cs := &cryptoSetupTLS{
perspective: perspective,
mintConf: mintConf,
nullAEAD: crypto.NewNullAEAD(perspective, version),
keyDerivation: crypto.DeriveAESKeys,
aeadChanged: aeadChanged,
}
if perspective == protocol.PerspectiveClient {
cs.extensionHandler = newExtensionHandlerClient(params)
} else {
cs.extensionHandler = newExtensionHandlerServer(params)
}
return cs, params, nil
params := newParamsNegotiator(protocol.PerspectiveClient, version, transportParams)
return &cryptoSetupTLS{
perspective: protocol.PerspectiveClient,
mintConf: mintConf,
nullAEAD: crypto.NewNullAEAD(protocol.PerspectiveClient, version),
keyDerivation: crypto.DeriveAESKeys,
aeadChanged: aeadChanged,
extensionHandler: newExtensionHandlerClient(params),
}, params, nil
}
func (h *cryptoSetupTLS) HandleCryptoStream(cryptoStream io.ReadWriter) error {

View File

@@ -40,13 +40,11 @@ var _ = Describe("TLS Crypto Setup", func() {
BeforeEach(func() {
aeadChanged = make(chan protocol.EncryptionLevel, 2)
csInt, _, err := NewCryptoSetupTLS(
"",
protocol.PerspectiveServer,
protocol.VersionTLS,
csInt, _, err := NewCryptoSetupTLSServer(
testdata.GetTLSConfig(),
&TransportParameters{},
aeadChanged,
protocol.VersionTLS,
)
Expect(err).ToNot(HaveOccurred())
cs = csInt.(*cryptoSetupTLS)