remove the error return value when receiving TLS extensions

This commit is contained in:
Marten Seemann
2019-02-07 12:43:29 +08:00
parent 89c7f628ca
commit 26afc7a4ca
7 changed files with 18 additions and 25 deletions

View File

@@ -24,7 +24,7 @@ type Sealer interface {
// A tlsExtensionHandler sends and received the QUIC TLS extension. // A tlsExtensionHandler sends and received the QUIC TLS extension.
type tlsExtensionHandler interface { type tlsExtensionHandler interface {
GetExtensions(msgType uint8) []qtls.Extension GetExtensions(msgType uint8) []qtls.Extension
ReceivedExtensions(msgType uint8, exts []qtls.Extension) error ReceivedExtensions(msgType uint8, exts []qtls.Extension)
TransportParameters() <-chan []byte TransportParameters() <-chan []byte
} }

View File

@@ -34,10 +34,10 @@ func (h *extensionHandler) GetExtensions(msgType uint8) []qtls.Extension {
}} }}
} }
func (h *extensionHandler) ReceivedExtensions(msgType uint8, exts []qtls.Extension) error { func (h *extensionHandler) ReceivedExtensions(msgType uint8, exts []qtls.Extension) {
if (h.perspective == protocol.PerspectiveClient && messageType(msgType) != typeEncryptedExtensions) || if (h.perspective == protocol.PerspectiveClient && messageType(msgType) != typeEncryptedExtensions) ||
(h.perspective == protocol.PerspectiveServer && messageType(msgType) != typeClientHello) { (h.perspective == protocol.PerspectiveServer && messageType(msgType) != typeClientHello) {
return nil return
} }
var data []byte var data []byte
@@ -49,7 +49,6 @@ func (h *extensionHandler) ReceivedExtensions(msgType uint8, exts []qtls.Extensi
} }
h.paramsChan <- data h.paramsChan <- data
return nil
} }
func (h *extensionHandler) TransportParameters() <-chan []byte { func (h *extensionHandler) TransportParameters() <-chan []byte {

View File

@@ -52,7 +52,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
It("sends the extension on the channel", func() { It("sends the extension on the channel", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
Expect(handlerServer.ReceivedExtensions(uint8(typeClientHello), chExts)).To(Succeed()) handlerServer.ReceivedExtensions(uint8(typeClientHello), chExts)
}() }()
var data []byte var data []byte
@@ -63,7 +63,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
It("sends nil on the channel if the extension is missing", func() { It("sends nil on the channel if the extension is missing", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
Expect(handlerServer.ReceivedExtensions(uint8(typeClientHello), nil)).To(Succeed()) handlerServer.ReceivedExtensions(uint8(typeClientHello), nil)
}() }()
var data []byte var data []byte
@@ -75,7 +75,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
exts := []qtls.Extension{{Type: 0x1337, Data: []byte("invalid")}} exts := []qtls.Extension{{Type: 0x1337, Data: []byte("invalid")}}
Expect(handlerServer.ReceivedExtensions(uint8(typeClientHello), exts)).To(Succeed()) handlerServer.ReceivedExtensions(uint8(typeClientHello), exts)
}() }()
var data []byte var data []byte
@@ -86,7 +86,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
It("ignores extensions that are not sent with the ClientHello", func() { It("ignores extensions that are not sent with the ClientHello", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
Expect(handlerServer.ReceivedExtensions(uint8(typeFinished), chExts)).To(Succeed()) handlerServer.ReceivedExtensions(uint8(typeFinished), chExts)
}() }()
Consistently(handlerServer.TransportParameters()).ShouldNot(Receive()) Consistently(handlerServer.TransportParameters()).ShouldNot(Receive())
@@ -121,7 +121,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
It("sends the extension on the channel", func() { It("sends the extension on the channel", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
Expect(handlerClient.ReceivedExtensions(uint8(typeEncryptedExtensions), chExts)).To(Succeed()) handlerClient.ReceivedExtensions(uint8(typeEncryptedExtensions), chExts)
}() }()
var data []byte var data []byte
@@ -132,7 +132,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
It("sends nil on the channel if the extension is missing", func() { It("sends nil on the channel if the extension is missing", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
Expect(handlerClient.ReceivedExtensions(uint8(typeEncryptedExtensions), nil)).To(Succeed()) handlerClient.ReceivedExtensions(uint8(typeEncryptedExtensions), nil)
}() }()
var data []byte var data []byte
@@ -144,7 +144,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
exts := []qtls.Extension{{Type: 0x1337, Data: []byte("invalid")}} exts := []qtls.Extension{{Type: 0x1337, Data: []byte("invalid")}}
Expect(handlerClient.ReceivedExtensions(uint8(typeEncryptedExtensions), exts)).To(Succeed()) handlerClient.ReceivedExtensions(uint8(typeEncryptedExtensions), exts)
}() }()
var data []byte var data []byte
@@ -155,7 +155,7 @@ var _ = Describe("TLS Extension Handler, for the server", func() {
It("ignores extensions that are not sent with the EncryptedExtensions", func() { It("ignores extensions that are not sent with the EncryptedExtensions", func() {
go func() { go func() {
defer GinkgoRecover() defer GinkgoRecover()
Expect(handlerClient.ReceivedExtensions(uint8(typeFinished), chExts)).To(Succeed()) handlerClient.ReceivedExtensions(uint8(typeFinished), chExts)
}() }()
Consistently(handlerClient.TransportParameters()).ShouldNot(Receive()) Consistently(handlerClient.TransportParameters()).ShouldNot(Receive())

View File

@@ -862,16 +862,15 @@ func getCertsFromEntries(certEntries []certificateEntry) [][]byte {
return certs return certs
} }
func (hs *clientHandshakeState) processEncryptedExtensions(ee *encryptedExtensionsMsg) error { func (hs *clientHandshakeState) processEncryptedExtensions(ee *encryptedExtensionsMsg) {
c := hs.c c := hs.c
if ee.alpnProtocol != "" { if ee.alpnProtocol != "" {
c.clientProtocol = ee.alpnProtocol c.clientProtocol = ee.alpnProtocol
c.clientProtocolFallback = false c.clientProtocolFallback = false
} }
if hs.c.config.ReceivedExtensions != nil { if hs.c.config.ReceivedExtensions != nil {
return hs.c.config.ReceivedExtensions(typeEncryptedExtensions, ee.additionalExtensions) hs.c.config.ReceivedExtensions(typeEncryptedExtensions, ee.additionalExtensions)
} }
return nil
} }
func verifyPeerHandshakeSignature( func verifyPeerHandshakeSignature(
@@ -1037,9 +1036,7 @@ func (hs *clientHandshakeState) doTLS13Handshake() error {
c.sendAlert(alertUnexpectedMessage) c.sendAlert(alertUnexpectedMessage)
return unexpectedMessageError(encryptedExtensions, msg) return unexpectedMessageError(encryptedExtensions, msg)
} }
if err := hs.processEncryptedExtensions(encryptedExtensions); err != nil { hs.processEncryptedExtensions(encryptedExtensions)
return err
}
hs.keySchedule.write(encryptedExtensions.marshal()) hs.keySchedule.write(encryptedExtensions.marshal())
// PSKs are not supported, so receive Certificate message. // PSKs are not supported, so receive Certificate message.

View File

@@ -631,7 +631,7 @@ type Config struct {
// Currently only implemented for the ClientHello message (sent by the // Currently only implemented for the ClientHello message (sent by the
// client) and for the EncryptedExtensions message (sent by the server). // client) and for the EncryptedExtensions message (sent by the server).
// Only valid for TLS 1.3. // Only valid for TLS 1.3.
ReceivedExtensions func(handshakeMessageType uint8, exts []Extension) error ReceivedExtensions func(handshakeMessageType uint8, exts []Extension)
serverInitOnce sync.Once // guards calling (*Config).serverInit serverInitOnce sync.Once // guards calling (*Config).serverInit

View File

@@ -261,10 +261,7 @@ Curves:
hs.hello.compressionMethod = compressionNone hs.hello.compressionMethod = compressionNone
} else { } else {
if hs.c.config.ReceivedExtensions != nil { if hs.c.config.ReceivedExtensions != nil {
if err := hs.c.config.ReceivedExtensions(typeClientHello, hs.clientHello.additionalExtensions); err != nil { hs.c.config.ReceivedExtensions(typeClientHello, hs.clientHello.additionalExtensions)
c.sendAlert(alertInternalError)
return false, err
}
} }
hs.hello = new(serverHelloMsg) hs.hello = new(serverHelloMsg)
hs.hello13Enc = new(encryptedExtensionsMsg) hs.hello13Enc = new(encryptedExtensionsMsg)

4
vendor/vendor.json vendored
View File

@@ -45,9 +45,9 @@
"revisionTime": "2018-11-11T22:04:28Z" "revisionTime": "2018-11-11T22:04:28Z"
}, },
{ {
"checksumSHA1": "9D0GoLWn+P00plU66qfLxFB1kNg=", "checksumSHA1": "Nj31pb7U27uPwTQ6z0DTgbgF9eg=",
"path": "github.com/marten-seemann/qtls", "path": "github.com/marten-seemann/qtls",
"revision": "646330209b76bfdcdc054a863468f473e9d0a7af", "revision": "591c71538704125b0b189f4cd3c0e61485dd6ef7",
"revisionTime": "2019-01-10T16:28:36Z" "revisionTime": "2019-01-10T16:28:36Z"
}, },
{ {