| Index: third_party/tlslite/tlslite/mathtls.py
|
| diff --git a/third_party/tlslite/tlslite/mathtls.py b/third_party/tlslite/tlslite/mathtls.py
|
| index 60a331ab90f66ebe26bb2171b6dad697884bdc15..ba8cd5fba7b6bc875a39f0491c8a06bb5b166026 100644
|
| --- a/third_party/tlslite/tlslite/mathtls.py
|
| +++ b/third_party/tlslite/tlslite/mathtls.py
|
| @@ -10,6 +10,7 @@
|
| from .utils.compat import *
|
| from .utils.cryptomath import *
|
|
|
| +import hashlib
|
| import hmac
|
|
|
| #1024, 1536, 2048, 3072, 4096, 6144, and 8192 bit groups]
|
| @@ -67,16 +68,31 @@ def PRF_SSL(secret, seed, length):
|
| index += 1
|
| return bytes
|
|
|
| -def calcMasterSecret(version, premasterSecret, clientRandom, serverRandom):
|
| +def calcMasterSecret(version, premasterSecret, clientRandom, serverRandom,
|
| + handshakeMessages, useExtendedMasterSecret):
|
| + label = b"master secret"
|
| + seed = clientRandom + serverRandom
|
| + if useExtendedMasterSecret:
|
| + label = b"extended master secret"
|
| +
|
| if version == (3,0):
|
| - masterSecret = PRF_SSL(premasterSecret,
|
| - clientRandom + serverRandom, 48)
|
| + masterSecret = PRF_SSL(premasterSecret, seed, 48)
|
| elif version in ((3,1), (3,2)):
|
| - masterSecret = PRF(premasterSecret, b"master secret",
|
| - clientRandom + serverRandom, 48)
|
| + if useExtendedMasterSecret:
|
| + seed_md5 = hashlib.md5()
|
| + seed_sha1 = hashlib.sha1()
|
| + for msg in handshakeMessages:
|
| + seed_md5.update(msg)
|
| + seed_sha1.update(msg)
|
| + seed = seed_md5.digest() + seed_sha1.digest()
|
| + masterSecret = PRF(premasterSecret, label, seed, 48)
|
| elif version == (3,3):
|
| - masterSecret = PRF_1_2(premasterSecret, b"master secret",
|
| - clientRandom + serverRandom, 48)
|
| + if useExtendedMasterSecret:
|
| + seed_sha256 = hashlib.sha256()
|
| + for msg in handshakeMessages:
|
| + seed_sha256.update(msg)
|
| + seed = seed_sha256.digest()
|
| + masterSecret = PRF_1_2(premasterSecret, label, seed, 48)
|
| else:
|
| raise AssertionError()
|
| return masterSecret
|
|
|