mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.boringcrypto] all: merge master into dev.boringcrypto
Change-Id: Ia068dac1677bfc44c41e35d1f46e6499911cfae0
This commit is contained in:
commit
e8b3500d5c
15 changed files with 1577 additions and 120 deletions
|
|
@ -43,13 +43,25 @@ func makeClientHello(config *Config) (*clientHelloMsg, error) {
|
|||
nextProtosLength += 1 + l
|
||||
}
|
||||
}
|
||||
|
||||
if nextProtosLength > 0xffff {
|
||||
return nil, errors.New("tls: NextProtos values too large")
|
||||
}
|
||||
|
||||
supportedVersions := config.supportedVersions(true)
|
||||
if len(supportedVersions) == 0 {
|
||||
return nil, errors.New("tls: no supported versions satisfy MinVersion and MaxVersion")
|
||||
}
|
||||
|
||||
clientHelloVersion := supportedVersions[0]
|
||||
// The version at the beginning of the ClientHello was capped at TLS 1.2
|
||||
// for compatibility reasons. The supported_versions extension is used
|
||||
// to negotiate versions now. See RFC 8446, Section 4.2.1.
|
||||
if clientHelloVersion > VersionTLS12 {
|
||||
clientHelloVersion = VersionTLS12
|
||||
}
|
||||
|
||||
hello := &clientHelloMsg{
|
||||
vers: config.maxVersion(),
|
||||
vers: clientHelloVersion,
|
||||
compressionMethods: []uint8{compressionNone},
|
||||
random: make([]byte, 32),
|
||||
ocspStapling: true,
|
||||
|
|
@ -60,6 +72,7 @@ func makeClientHello(config *Config) (*clientHelloMsg, error) {
|
|||
nextProtoNeg: len(config.NextProtos) > 0,
|
||||
secureRenegotiationSupported: true,
|
||||
alpnProtocols: config.NextProtos,
|
||||
supportedVersions: supportedVersions,
|
||||
}
|
||||
possibleCipherSuites := config.cipherSuites()
|
||||
hello.cipherSuites = make([]uint16, 0, len(possibleCipherSuites))
|
||||
|
|
@ -143,8 +156,14 @@ func (c *Conn) clientHandshake() error {
|
|||
}
|
||||
}
|
||||
|
||||
versOk := candidateSession.vers >= c.config.minVersion() &&
|
||||
candidateSession.vers <= c.config.maxVersion()
|
||||
versOk := false
|
||||
for _, v := range c.config.supportedVersions(true) {
|
||||
if v == candidateSession.vers {
|
||||
versOk = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if versOk && cipherSuiteOk {
|
||||
session = candidateSession
|
||||
}
|
||||
|
|
@ -276,11 +295,15 @@ func (hs *clientHandshakeState) handshake() error {
|
|||
}
|
||||
|
||||
func (hs *clientHandshakeState) pickTLSVersion() error {
|
||||
vers, ok := hs.c.config.mutualVersion(hs.serverHello.vers)
|
||||
if !ok || vers < VersionTLS10 {
|
||||
// TLS 1.0 is the minimum version supported as a client.
|
||||
peerVersion := hs.serverHello.vers
|
||||
if hs.serverHello.supportedVersion != 0 {
|
||||
peerVersion = hs.serverHello.supportedVersion
|
||||
}
|
||||
|
||||
vers, ok := hs.c.config.mutualVersion(true, []uint16{peerVersion})
|
||||
if !ok {
|
||||
hs.c.sendAlert(alertProtocolVersion)
|
||||
return fmt.Errorf("tls: server selected unsupported protocol version %x", hs.serverHello.vers)
|
||||
return fmt.Errorf("tls: server selected unsupported protocol version %x", peerVersion)
|
||||
}
|
||||
|
||||
hs.c.vers = vers
|
||||
|
|
@ -398,9 +421,7 @@ func (hs *clientHandshakeState) doFullHandshake() error {
|
|||
}
|
||||
hs.finishedHash.Write(cs.marshal())
|
||||
|
||||
if cs.statusType == statusTypeOCSP {
|
||||
c.ocspResponse = cs.response
|
||||
}
|
||||
c.ocspResponse = cs.response
|
||||
|
||||
msg, err = c.readHandshake()
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue