Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: third_party/tlslite/tlslite/tlsconnection.py

Issue 1299153002: Revert of Implement extended master secret in tlslite (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/tlslite/tlslite/messages.py ('k') | third_party/tlslite/tlslite/tlsrecordlayer.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Authors: 1 # Authors:
2 # Trevor Perrin 2 # Trevor Perrin
3 # Google - added reqCAs parameter 3 # Google - added reqCAs parameter
4 # Google (adapted by Sam Rushing and Marcelo Fernandez) - NPN support 4 # Google (adapted by Sam Rushing and Marcelo Fernandez) - NPN support
5 # Dimitris Moraitis - Anon ciphersuites 5 # Dimitris Moraitis - Anon ciphersuites
6 # Martin von Loewis - python 3 port 6 # Martin von Loewis - python 3 port
7 # Yngve Pettersen (ported by Paul Sokolovsky) - TLS 1.2 7 # Yngve Pettersen (ported by Paul Sokolovsky) - TLS 1.2
8 # 8 #
9 # See the LICENSE file for legal information regarding use of this file. 9 # See the LICENSE file for legal information regarding use of this file.
10 10
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 yield result 974 yield result
975 975
976 #If client authentication was requested and we have a 976 #If client authentication was requested and we have a
977 #private key, send CertificateVerify 977 #private key, send CertificateVerify
978 if certificateRequest and privateKey: 978 if certificateRequest and privateKey:
979 signatureAlgorithm = None 979 signatureAlgorithm = None
980 if self.version == (3,0): 980 if self.version == (3,0):
981 masterSecret = calcMasterSecret(self.version, 981 masterSecret = calcMasterSecret(self.version,
982 premasterSecret, 982 premasterSecret,
983 clientRandom, 983 clientRandom,
984 serverRandom, 984 serverRandom)
985 b"", False)
986 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"") 985 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"")
987 elif self.version in ((3,1), (3,2)): 986 elif self.version in ((3,1), (3,2)):
988 verifyBytes = self._handshake_md5.digest() + \ 987 verifyBytes = self._handshake_md5.digest() + \
989 self._handshake_sha.digest() 988 self._handshake_sha.digest()
990 elif self.version == (3,3): 989 elif self.version == (3,3):
991 # TODO: Signature algorithm negotiation not supported. 990 # TODO: Signature algorithm negotiation not supported.
992 signatureAlgorithm = (HashAlgorithm.sha1, SignatureAlgorithm.rsa ) 991 signatureAlgorithm = (HashAlgorithm.sha1, SignatureAlgorithm.rsa )
993 verifyBytes = self._handshake_sha.digest() 992 verifyBytes = self._handshake_sha.digest()
994 verifyBytes = RSAKey.addPKCS1SHA1Prefix(verifyBytes) 993 verifyBytes = RSAKey.addPKCS1SHA1Prefix(verifyBytes)
995 if self.fault == Fault.badVerifyMessage: 994 if self.fault == Fault.badVerifyMessage:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 #Calculate premaster secret 1029 #Calculate premaster secret
1031 S = powMod(dh_Ys, dh_Xc, dh_p) 1030 S = powMod(dh_Ys, dh_Xc, dh_p)
1032 premasterSecret = numberToByteArray(S) 1031 premasterSecret = numberToByteArray(S)
1033 1032
1034 yield (premasterSecret, None, None) 1033 yield (premasterSecret, None, None)
1035 1034
1036 def _clientFinished(self, premasterSecret, clientRandom, serverRandom, 1035 def _clientFinished(self, premasterSecret, clientRandom, serverRandom,
1037 cipherSuite, cipherImplementations, nextProto): 1036 cipherSuite, cipherImplementations, nextProto):
1038 1037
1039 masterSecret = calcMasterSecret(self.version, premasterSecret, 1038 masterSecret = calcMasterSecret(self.version, premasterSecret,
1040 clientRandom, serverRandom, b"", False) 1039 clientRandom, serverRandom)
1041 self._calcPendingStates(cipherSuite, masterSecret, 1040 self._calcPendingStates(cipherSuite, masterSecret,
1042 clientRandom, serverRandom, 1041 clientRandom, serverRandom,
1043 cipherImplementations) 1042 cipherImplementations)
1044 1043
1045 #Exchange ChangeCipherSpec and Finished messages 1044 #Exchange ChangeCipherSpec and Finished messages
1046 for result in self._sendFinished(masterSecret, nextProto): 1045 for result in self._sendFinished(masterSecret, nextProto):
1047 yield result 1046 yield result
1048 for result in self._getFinished(masterSecret, nextProto=nextProto): 1047 for result in self._getFinished(masterSecret, nextProto=nextProto):
1049 yield result 1048 yield result
1050 yield masterSecret 1049 yield masterSecret
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 # Prepare a TACK Extension if requested 1319 # Prepare a TACK Extension if requested
1321 if clientHello.tack: 1320 if clientHello.tack:
1322 tackExt = TackExtension.create(tacks, activationFlags) 1321 tackExt = TackExtension.create(tacks, activationFlags)
1323 else: 1322 else:
1324 tackExt = None 1323 tackExt = None
1325 serverHello = ServerHello() 1324 serverHello = ServerHello()
1326 serverHello.create(self.version, getRandomBytes(32), sessionID, \ 1325 serverHello.create(self.version, getRandomBytes(32), sessionID, \
1327 cipherSuite, CertificateType.x509, tackExt, 1326 cipherSuite, CertificateType.x509, tackExt,
1328 nextProtos) 1327 nextProtos)
1329 serverHello.channel_id = clientHello.channel_id 1328 serverHello.channel_id = clientHello.channel_id
1330 serverHello.extended_master_secret = \
1331 clientHello.extended_master_secret and \
1332 settings.enableExtendedMasterSecret
1333 if clientHello.support_signed_cert_timestamps: 1329 if clientHello.support_signed_cert_timestamps:
1334 serverHello.signed_cert_timestamps = signedCertTimestamps 1330 serverHello.signed_cert_timestamps = signedCertTimestamps
1335 if clientHello.status_request: 1331 if clientHello.status_request:
1336 serverHello.status_request = ocspResponse 1332 serverHello.status_request = ocspResponse
1337 1333
1338 # Perform the SRP key exchange 1334 # Perform the SRP key exchange
1339 clientCertChain = None 1335 clientCertChain = None
1340 if cipherSuite in CipherSuite.srpAllSuites: 1336 if cipherSuite in CipherSuite.srpAllSuites:
1341 for result in self._serverSRPKeyExchange(clientHello, serverHello, 1337 for result in self._serverSRPKeyExchange(clientHello, serverHello,
1342 verifierDB, cipherSuite, 1338 verifierDB, cipherSuite,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 else: break 1376 else: break
1381 premasterSecret = result 1377 premasterSecret = result
1382 1378
1383 else: 1379 else:
1384 assert(False) 1380 assert(False)
1385 1381
1386 # Exchange Finished messages 1382 # Exchange Finished messages
1387 for result in self._serverFinished(premasterSecret, 1383 for result in self._serverFinished(premasterSecret,
1388 clientHello.random, serverHello.random, 1384 clientHello.random, serverHello.random,
1389 cipherSuite, settings.cipherImplementations, 1385 cipherSuite, settings.cipherImplementations,
1390 nextProtos, clientHello.channel_id, 1386 nextProtos, clientHello.channel_id):
1391 serverHello.extended_master_secret):
1392 if result in (0,1): yield result 1387 if result in (0,1): yield result
1393 else: break 1388 else: break
1394 masterSecret = result 1389 masterSecret = result
1395 1390
1396 #Create the session object 1391 #Create the session object
1397 self.session = Session() 1392 self.session = Session()
1398 if cipherSuite in CipherSuite.certAllSuites: 1393 if cipherSuite in CipherSuite.certAllSuites:
1399 serverCertChain = certChain 1394 serverCertChain = certChain
1400 else: 1395 else:
1401 serverCertChain = None 1396 serverCertChain = None
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 except KeyError: 1516 except KeyError:
1522 pass 1517 pass
1523 1518
1524 #If a session is found.. 1519 #If a session is found..
1525 if session: 1520 if session:
1526 #Send ServerHello 1521 #Send ServerHello
1527 serverHello = ServerHello() 1522 serverHello = ServerHello()
1528 serverHello.create(self.version, getRandomBytes(32), 1523 serverHello.create(self.version, getRandomBytes(32),
1529 session.sessionID, session.cipherSuite, 1524 session.sessionID, session.cipherSuite,
1530 CertificateType.x509, None, None) 1525 CertificateType.x509, None, None)
1531 serverHello.extended_master_secret = \
1532 clientHello.extended_master_secret and \
1533 settings.enableExtendedMasterSecret
1534 for result in self._sendMsg(serverHello): 1526 for result in self._sendMsg(serverHello):
1535 yield result 1527 yield result
1536 1528
1537 #From here on, the client's messages must have right version 1529 #From here on, the client's messages must have right version
1538 self._versionCheck = True 1530 self._versionCheck = True
1539 1531
1540 #Calculate pending connection states 1532 #Calculate pending connection states
1541 self._calcPendingStates(session.cipherSuite, 1533 self._calcPendingStates(session.cipherSuite,
1542 session.masterSecret, 1534 session.masterSecret,
1543 clientHello.random, 1535 clientHello.random,
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1744 premasterSecret = \ 1736 premasterSecret = \
1745 keyExchange.processClientKeyExchange(clientKeyExchange) 1737 keyExchange.processClientKeyExchange(clientKeyExchange)
1746 except TLSLocalAlert, alert: 1738 except TLSLocalAlert, alert:
1747 for result in self._sendError(alert.description, alert.message): 1739 for result in self._sendError(alert.description, alert.message):
1748 yield result 1740 yield result
1749 1741
1750 #Get and check CertificateVerify, if relevant 1742 #Get and check CertificateVerify, if relevant
1751 if clientCertChain: 1743 if clientCertChain:
1752 if self.version == (3,0): 1744 if self.version == (3,0):
1753 masterSecret = calcMasterSecret(self.version, premasterSecret, 1745 masterSecret = calcMasterSecret(self.version, premasterSecret,
1754 clientHello.random, serverHello.random, 1746 clientHello.random, serverHello.random)
1755 b"", False)
1756 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"") 1747 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"")
1757 elif self.version in ((3,1), (3,2)): 1748 elif self.version in ((3,1), (3,2)):
1758 verifyBytes = self._handshake_md5.digest() + \ 1749 verifyBytes = self._handshake_md5.digest() + \
1759 self._handshake_sha.digest() 1750 self._handshake_sha.digest()
1760 elif self.version == (3,3): 1751 elif self.version == (3,3):
1761 verifyBytes = self._handshake_sha.digest() 1752 verifyBytes = self._handshake_sha.digest()
1762 verifyBytes = RSAKey.addPKCS1SHA1Prefix(verifyBytes) 1753 verifyBytes = RSAKey.addPKCS1SHA1Prefix(verifyBytes)
1763 for result in self._getMsg(ContentType.handshake, 1754 for result in self._getMsg(ContentType.handshake,
1764 HandshakeType.certificate_verify): 1755 HandshakeType.certificate_verify):
1765 if result in (0,1): yield result 1756 if result in (0,1): yield result
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1829 1820
1830 #Calculate premaster secre 1821 #Calculate premaster secre
1831 S = powMod(dh_Yc,dh_Xs,dh_p) 1822 S = powMod(dh_Yc,dh_Xs,dh_p)
1832 premasterSecret = numberToByteArray(S) 1823 premasterSecret = numberToByteArray(S)
1833 1824
1834 yield premasterSecret 1825 yield premasterSecret
1835 1826
1836 1827
1837 def _serverFinished(self, premasterSecret, clientRandom, serverRandom, 1828 def _serverFinished(self, premasterSecret, clientRandom, serverRandom,
1838 cipherSuite, cipherImplementations, nextProtos, 1829 cipherSuite, cipherImplementations, nextProtos,
1839 doingChannelID, useExtendedMasterSecret): 1830 doingChannelID):
1840 masterSecret = calcMasterSecret(self.version, premasterSecret, 1831 masterSecret = calcMasterSecret(self.version, premasterSecret,
1841 clientRandom, serverRandom, 1832 clientRandom, serverRandom)
1842 self._getHandshakeHash(),
1843 useExtendedMasterSecret)
1844 1833
1845 #Calculate pending connection states 1834 #Calculate pending connection states
1846 self._calcPendingStates(cipherSuite, masterSecret, 1835 self._calcPendingStates(cipherSuite, masterSecret,
1847 clientRandom, serverRandom, 1836 clientRandom, serverRandom,
1848 cipherImplementations) 1837 cipherImplementations)
1849 1838
1850 #Exchange ChangeCipherSpec and Finished messages 1839 #Exchange ChangeCipherSpec and Finished messages
1851 for result in self._getFinished(masterSecret, 1840 for result in self._getFinished(masterSecret,
1852 expect_next_protocol=nextProtos is not None, 1841 expect_next_protocol=nextProtos is not None,
1853 expect_channel_id=doingChannelID): 1842 expect_channel_id=doingChannelID):
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
2001 except TLSAlert as alert: 1990 except TLSAlert as alert:
2002 if not self.fault: 1991 if not self.fault:
2003 raise 1992 raise
2004 if alert.description not in Fault.faultAlerts[self.fault]: 1993 if alert.description not in Fault.faultAlerts[self.fault]:
2005 raise TLSFaultError(str(alert)) 1994 raise TLSFaultError(str(alert))
2006 else: 1995 else:
2007 pass 1996 pass
2008 except: 1997 except:
2009 self._shutdown(False) 1998 self._shutdown(False)
2010 raise 1999 raise
OLDNEW
« no previous file with comments | « third_party/tlslite/tlslite/messages.py ('k') | third_party/tlslite/tlslite/tlsrecordlayer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698