OLD | NEW |
(Empty) | |
| 1 diff --git a/third_party/tlslite/tlslite/tlsconnection.py b/third_party/tlslite/
tlslite/tlsconnection.py |
| 2 index 7363a30..e42b362 100644 |
| 3 --- a/third_party/tlslite/tlslite/tlsconnection.py |
| 4 +++ b/third_party/tlslite/tlslite/tlsconnection.py |
| 5 @@ -181,6 +181,8 @@ class TLSConnection(TLSRecordLayer): |
| 6 @type sock: L{socket.socket} |
| 7 """ |
| 8 TLSRecordLayer.__init__(self, sock) |
| 9 + self.clientRandom = b"" |
| 10 + self.serverRandom = b"" |
| 11 |
| 12 #********************************************************* |
| 13 # Client Handshake Functions |
| 14 @@ -606,6 +608,9 @@ class TLSConnection(TLSRecordLayer): |
| 15 else: break |
| 16 masterSecret = result |
| 17 |
| 18 + self.clientRandom = clientHello.random |
| 19 + self.serverRandom = serverHello.random |
| 20 + |
| 21 # Create the session object which is used for resumptions |
| 22 self.session = Session() |
| 23 self.session.create(masterSecret, serverHello.session_id, cipherSuite, |
| 24 @@ -1398,6 +1403,9 @@ class TLSConnection(TLSRecordLayer): |
| 25 else: break |
| 26 masterSecret = result |
| 27 |
| 28 + self.clientRandom = clientHello.random |
| 29 + self.serverRandom = serverHello.random |
| 30 + |
| 31 #Create the session object |
| 32 self.session = Session() |
| 33 if cipherSuite in CipherSuite.certAllSuites: |
| 34 @@ -2013,3 +2025,22 @@ class TLSConnection(TLSRecordLayer): |
| 35 except: |
| 36 self._shutdown(False) |
| 37 raise |
| 38 + |
| 39 + |
| 40 + def exportKeyingMaterial(self, label, context, use_context, length): |
| 41 + """Returns the exported keying material as defined in RFC 5705.""" |
| 42 + |
| 43 + seed = self.clientRandom + self.serverRandom |
| 44 + if use_context: |
| 45 + if len(context) > 65535: |
| 46 + raise ValueError("Context is too long") |
| 47 + seed += bytearray(2) |
| 48 + seed[len(seed) - 2] = len(context) >> 8 |
| 49 + seed[len(seed) - 1] = len(context) & 0xFF |
| 50 + seed += context |
| 51 + if self.version in ((3,1), (3,2)): |
| 52 + return PRF(self.session.masterSecret, label, seed, length) |
| 53 + elif self.version == (3,3): |
| 54 + return PRF_1_2(self.session.masterSecret, label, seed, length) |
| 55 + else: |
| 56 + raise AssertionError() |
OLD | NEW |