summaryrefslogtreecommitdiff
path: root/libgo/go/crypto/tls/handshake_server_tls13.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/crypto/tls/handshake_server_tls13.go')
-rw-r--r--libgo/go/crypto/tls/handshake_server_tls13.go40
1 files changed, 13 insertions, 27 deletions
diff --git a/libgo/go/crypto/tls/handshake_server_tls13.go b/libgo/go/crypto/tls/handshake_server_tls13.go
index c2c288aed43..08251b84def 100644
--- a/libgo/go/crypto/tls/handshake_server_tls13.go
+++ b/libgo/go/crypto/tls/handshake_server_tls13.go
@@ -6,6 +6,7 @@ package tls
import (
"bytes"
+ "context"
"crypto"
"crypto/hmac"
"crypto/rsa"
@@ -23,6 +24,7 @@ const maxClientPSKIdentities = 5
type serverHandshakeStateTLS13 struct {
c *Conn
+ ctx context.Context
clientHello *clientHelloMsg
hello *serverHelloMsg
sentDummyCCS bool
@@ -147,29 +149,12 @@ func (hs *serverHandshakeStateTLS13) processClientHello() error {
hs.hello.sessionId = hs.clientHello.sessionId
hs.hello.compressionMethod = compressionNone
- var preferenceList, supportedList []uint16
- if c.config.PreferServerCipherSuites {
- preferenceList = defaultCipherSuitesTLS13()
- supportedList = hs.clientHello.cipherSuites
-
- // If the client does not seem to have hardware support for AES-GCM,
- // prefer other AEAD ciphers even if we prioritized AES-GCM ciphers
- // by default.
- if !aesgcmPreferred(hs.clientHello.cipherSuites) {
- preferenceList = deprioritizeAES(preferenceList)
- }
- } else {
- preferenceList = hs.clientHello.cipherSuites
- supportedList = defaultCipherSuitesTLS13()
-
- // If we don't have hardware support for AES-GCM, prefer other AEAD
- // ciphers even if the client prioritized AES-GCM.
- if !hasAESGCMHardwareSupport {
- preferenceList = deprioritizeAES(preferenceList)
- }
+ preferenceList := defaultCipherSuitesTLS13
+ if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) {
+ preferenceList = defaultCipherSuitesTLS13NoAES
}
for _, suiteID := range preferenceList {
- hs.suite = mutualCipherSuiteTLS13(supportedList, suiteID)
+ hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID)
if hs.suite != nil {
break
}
@@ -374,7 +359,7 @@ func (hs *serverHandshakeStateTLS13) pickCertificate() error {
return c.sendAlert(alertMissingExtension)
}
- certificate, err := c.config.getCertificate(clientHelloInfo(c, hs.clientHello))
+ certificate, err := c.config.getCertificate(clientHelloInfo(hs.ctx, c, hs.clientHello))
if err != nil {
if err == errNoCertificates {
c.sendAlert(alertUnrecognizedName)
@@ -565,12 +550,13 @@ func (hs *serverHandshakeStateTLS13) sendServerParameters() error {
encryptedExtensions := new(encryptedExtensionsMsg)
- if len(hs.clientHello.alpnProtocols) > 0 {
- if selectedProto := mutualProtocol(hs.clientHello.alpnProtocols, c.config.NextProtos); selectedProto != "" {
- encryptedExtensions.alpnProtocol = selectedProto
- c.clientProtocol = selectedProto
- }
+ selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols)
+ if err != nil {
+ c.sendAlert(alertNoApplicationProtocol)
+ return err
}
+ encryptedExtensions.alpnProtocol = selectedProto
+ c.clientProtocol = selectedProto
hs.transcript.Write(encryptedExtensions.marshal())
if _, err := c.writeRecord(recordTypeHandshake, encryptedExtensions.marshal()); err != nil {