| Index: third_party/tlslite/patches/exported_keying_material.patch
|
| diff --git a/third_party/tlslite/patches/exported_keying_material.patch b/third_party/tlslite/patches/exported_keying_material.patch
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9d4ed9c60014b1f0b5182a99b60574a43a000046
|
| --- /dev/null
|
| +++ b/third_party/tlslite/patches/exported_keying_material.patch
|
| @@ -0,0 +1,56 @@
|
| +diff --git a/third_party/tlslite/tlslite/tlsconnection.py b/third_party/tlslite/tlslite/tlsconnection.py
|
| +index 7363a30..e42b362 100644
|
| +--- a/third_party/tlslite/tlslite/tlsconnection.py
|
| ++++ b/third_party/tlslite/tlslite/tlsconnection.py
|
| +@@ -181,6 +181,8 @@ class TLSConnection(TLSRecordLayer):
|
| + @type sock: L{socket.socket}
|
| + """
|
| + TLSRecordLayer.__init__(self, sock)
|
| ++ self.clientRandom = b""
|
| ++ self.serverRandom = b""
|
| +
|
| + #*********************************************************
|
| + # Client Handshake Functions
|
| +@@ -606,6 +608,9 @@ class TLSConnection(TLSRecordLayer):
|
| + else: break
|
| + masterSecret = result
|
| +
|
| ++ self.clientRandom = clientHello.random
|
| ++ self.serverRandom = serverHello.random
|
| ++
|
| + # Create the session object which is used for resumptions
|
| + self.session = Session()
|
| + self.session.create(masterSecret, serverHello.session_id, cipherSuite,
|
| +@@ -1398,6 +1403,9 @@ class TLSConnection(TLSRecordLayer):
|
| + else: break
|
| + masterSecret = result
|
| +
|
| ++ self.clientRandom = clientHello.random
|
| ++ self.serverRandom = serverHello.random
|
| ++
|
| + #Create the session object
|
| + self.session = Session()
|
| + if cipherSuite in CipherSuite.certAllSuites:
|
| +@@ -2013,3 +2025,22 @@ class TLSConnection(TLSRecordLayer):
|
| + except:
|
| + self._shutdown(False)
|
| + raise
|
| ++
|
| ++
|
| ++ def exportKeyingMaterial(self, label, context, use_context, length):
|
| ++ """Returns the exported keying material as defined in RFC 5705."""
|
| ++
|
| ++ seed = self.clientRandom + self.serverRandom
|
| ++ if use_context:
|
| ++ if len(context) > 65535:
|
| ++ raise ValueError("Context is too long")
|
| ++ seed += bytearray(2)
|
| ++ seed[len(seed) - 2] = len(context) >> 8
|
| ++ seed[len(seed) - 1] = len(context) & 0xFF
|
| ++ seed += context
|
| ++ if self.version in ((3,1), (3,2)):
|
| ++ return PRF(self.session.masterSecret, label, seed, length)
|
| ++ elif self.version == (3,3):
|
| ++ return PRF_1_2(self.session.masterSecret, label, seed, length)
|
| ++ else:
|
| ++ raise AssertionError()
|
|
|