blob: 69a1d7b5940e37533e868255eac333d18cdfb250 [file] [log] [blame]
diff --git a/third_party/tlslite/tlslite/constants.py b/third_party/tlslite/tlslite/constants.py
index e9743e4..82e8c07 100644
--- a/third_party/tlslite/tlslite/constants.py
+++ b/third_party/tlslite/tlslite/constants.py
@@ -61,6 +61,7 @@ class ExtensionType: # RFC 6066 / 4366
tack = 0xF300
supports_npn = 13172
channel_id = 30032
+ renegotiation_info = 0xFF01 # RFC 5746
class HashAlgorithm:
none = 0
diff --git a/third_party/tlslite/tlslite/messages.py b/third_party/tlslite/tlslite/messages.py
index 1ce9320..ac7e563 100644
--- a/third_party/tlslite/tlslite/messages.py
+++ b/third_party/tlslite/tlslite/messages.py
@@ -140,6 +140,7 @@ class ClientHello(HandshakeMsg):
self.tb_client_params = []
self.support_signed_cert_timestamps = False
self.status_request = False
+ self.ri = False
def create(self, version, random, session_id, cipher_suites,
certificate_types=None, srpUsername=None,
@@ -244,12 +245,20 @@ class ClientHello(HandshakeMsg):
# request_extensions in the OCSP request.
p.getFixBytes(extLength)
self.status_request = True
+ elif extType == ExtensionType.renegotiation_info:
+ # We don't support renegotiation, so if we receive this
+ # extension, it should contain a single null byte.
+ if extLength != 1 or p.getFixBytes(extLength)[0] != 0:
+ raise SyntaxError()
+ self.ri = True
else:
_ = p.getFixBytes(extLength)
index2 = p.index
if index2 - index1 != extLength:
raise SyntaxError("Bad length for extension_data")
soFar += 4 + extLength
+ if CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV in self.cipher_suites:
+ self.ri = True
p.stopLengthCheck()
return self
@@ -327,6 +336,7 @@ class ServerHello(HandshakeMsg):
self.tb_params = None
self.signed_cert_timestamps = None
self.status_request = False
+ self.send_ri = False
def create(self, version, random, session_id, cipher_suite,
certificate_type, tackExt, alpn_proto_selected,
@@ -432,6 +442,10 @@ class ServerHello(HandshakeMsg):
if self.status_request:
w2.add(ExtensionType.status_request, 2)
w2.add(0, 2)
+ if self.send_ri:
+ w2.add(ExtensionType.renegotiation_info, 2)
+ w2.add(1, 2)
+ w2.add(0, 1)
if len(w2.bytes):
w.add(len(w2.bytes), 2)
w.bytes += w2.bytes
diff --git a/third_party/tlslite/tlslite/tlsconnection.py b/third_party/tlslite/tlslite/tlsconnection.py
index de5d580..8ba1c6e 100644
--- a/third_party/tlslite/tlslite/tlsconnection.py
+++ b/third_party/tlslite/tlslite/tlsconnection.py
@@ -1370,6 +1370,8 @@ class TLSConnection(TLSRecordLayer):
serverHello.signed_cert_timestamps = signedCertTimestamps
if clientHello.status_request:
serverHello.status_request = ocspResponse
+ if clientHello.ri:
+ serverHello.send_ri = True
# Perform the SRP key exchange
clientCertChain = None
@@ -1583,6 +1585,8 @@ class TLSConnection(TLSRecordLayer):
if param in settings.supportedTokenBindingParams:
serverHello.tb_params = param
break
+ if clientHello.ri:
+ serverHello.send_ri = True
for result in self._sendMsg(serverHello):
yield result