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

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

Issue 858373002: Update third_party/tlslite to 0.4.8. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Finish fixing client auth Created 5 years, 11 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 # 8 #
8 # 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.
9 10
10 """ 11 """
11 MAIN CLASS FOR TLS LITE (START HERE!). 12 MAIN CLASS FOR TLS LITE (START HERE!).
12 """ 13 """
13 14
14 import socket 15 import socket
15 from .utils.compat import formatExceptionTrace 16 from .utils.compat import formatExceptionTrace
16 from .tlsrecordlayer import TLSRecordLayer 17 from .tlsrecordlayer import TLSRecordLayer
17 from .session import Session 18 from .session import Session
18 from .constants import * 19 from .constants import *
19 from .utils.cryptomath import getRandomBytes 20 from .utils.cryptomath import getRandomBytes
20 from .errors import * 21 from .errors import *
21 from .messages import * 22 from .messages import *
22 from .mathtls import * 23 from .mathtls import *
23 from .handshakesettings import HandshakeSettings 24 from .handshakesettings import HandshakeSettings
24 from .utils.tackwrapper import * 25 from .utils.tackwrapper import *
26 from .utils.rsakey import RSAKey
25 27
26 class KeyExchange(object): 28 class KeyExchange(object):
27 def __init__(self, cipherSuite, clientHello, serverHello, privateKey): 29 def __init__(self, cipherSuite, clientHello, serverHello, privateKey):
28 """ 30 """
29 Initializes the KeyExchange. privateKey is the signing private key. 31 Initializes the KeyExchange. privateKey is the signing private key.
30 """ 32 """
31 self.cipherSuite = cipherSuite 33 self.cipherSuite = cipherSuite
32 self.clientHello = clientHello 34 self.clientHello = clientHello
33 self.serverHello = serverHello 35 self.serverHello = serverHello
34 self.privateKey = privateKey 36 self.privateKey = privateKey
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 97
96 # RFC 3526, Section 8. 98 # RFC 3526, Section 8.
97 strength = 160 99 strength = 160
98 100
99 def makeServerKeyExchange(self): 101 def makeServerKeyExchange(self):
100 # Per RFC 3526, Section 1, the exponent should have double the entropy 102 # Per RFC 3526, Section 1, the exponent should have double the entropy
101 # of the strength of the curve. 103 # of the strength of the curve.
102 self.dh_Xs = bytesToNumber(getRandomBytes(self.strength * 2 / 8)) 104 self.dh_Xs = bytesToNumber(getRandomBytes(self.strength * 2 / 8))
103 dh_Ys = powMod(self.dh_g, self.dh_Xs, self.dh_p) 105 dh_Ys = powMod(self.dh_g, self.dh_Xs, self.dh_p)
104 106
105 serverKeyExchange = ServerKeyExchange(self.cipherSuite) 107 version = self.serverHello.server_version
108 serverKeyExchange = ServerKeyExchange(self.cipherSuite, version)
106 serverKeyExchange.createDH(self.dh_p, self.dh_g, dh_Ys) 109 serverKeyExchange.createDH(self.dh_p, self.dh_g, dh_Ys)
107 serverKeyExchange.signature = self.privateKey.sign( 110 hashBytes = serverKeyExchange.hash(self.clientHello.random,
108 serverKeyExchange.hash(self.clientHello.random, 111 self.serverHello.random)
109 self.serverHello.random)) 112 if version >= (3,3):
113 # TODO: Signature algorithm negotiation not supported.
114 hashBytes = RSAKey.addPKCS1SHA1Prefix(hashBytes)
115 serverKeyExchange.signature = self.privateKey.sign(hashBytes)
110 return serverKeyExchange 116 return serverKeyExchange
111 117
112 def processClientKeyExchange(self, clientKeyExchange): 118 def processClientKeyExchange(self, clientKeyExchange):
113 dh_Yc = clientKeyExchange.dh_Yc 119 dh_Yc = clientKeyExchange.dh_Yc
114 120
115 # First half of RFC 2631, Section 2.1.5. Validate the client's public 121 # First half of RFC 2631, Section 2.1.5. Validate the client's public
116 # key. 122 # key.
117 if not 2 <= dh_Yc <= self.dh_p - 1: 123 if not 2 <= dh_Yc <= self.dh_p - 1:
118 raise TLSLocalAlert(AlertDescription.illegal_parameter, 124 raise TLSLocalAlert(AlertDescription.illegal_parameter,
119 "Invalid dh_Yc value") 125 "Invalid dh_Yc value")
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 595
590 596
591 def _clientSendClientHello(self, settings, session, srpUsername, 597 def _clientSendClientHello(self, settings, session, srpUsername,
592 srpParams, certParams, anonParams, 598 srpParams, certParams, anonParams,
593 serverName, nextProtos, reqTack): 599 serverName, nextProtos, reqTack):
594 #Initialize acceptable ciphersuites 600 #Initialize acceptable ciphersuites
595 cipherSuites = [CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 601 cipherSuites = [CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
596 if srpParams: 602 if srpParams:
597 cipherSuites += CipherSuite.getSrpAllSuites(settings) 603 cipherSuites += CipherSuite.getSrpAllSuites(settings)
598 elif certParams: 604 elif certParams:
599 cipherSuites += CipherSuite.getCertSuites(settings)
600 # TODO: Client DHE_RSA not supported. 605 # TODO: Client DHE_RSA not supported.
601 # cipherSuites += CipherSuite.getDheCertSuites(settings) 606 # cipherSuites += CipherSuite.getDheCertSuites(settings)
607 cipherSuites += CipherSuite.getCertSuites(settings)
602 elif anonParams: 608 elif anonParams:
603 cipherSuites += CipherSuite.getAnonSuites(settings) 609 cipherSuites += CipherSuite.getAnonSuites(settings)
604 else: 610 else:
605 assert(False) 611 assert(False)
606 612
607 #Initialize acceptable certificate types 613 #Initialize acceptable certificate types
608 certificateTypes = settings._getCertificateTypes() 614 certificateTypes = settings._getCertificateTypes()
609 615
610 #Either send ClientHello (with a resumable session)... 616 #Either send ClientHello (with a resumable session)...
611 if session and session.sessionID: 617 if session and session.sessionID:
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 #Send ClientKeyExchange 949 #Send ClientKeyExchange
944 clientKeyExchange = ClientKeyExchange(cipherSuite, 950 clientKeyExchange = ClientKeyExchange(cipherSuite,
945 self.version) 951 self.version)
946 clientKeyExchange.createRSA(encryptedPreMasterSecret) 952 clientKeyExchange.createRSA(encryptedPreMasterSecret)
947 for result in self._sendMsg(clientKeyExchange): 953 for result in self._sendMsg(clientKeyExchange):
948 yield result 954 yield result
949 955
950 #If client authentication was requested and we have a 956 #If client authentication was requested and we have a
951 #private key, send CertificateVerify 957 #private key, send CertificateVerify
952 if certificateRequest and privateKey: 958 if certificateRequest and privateKey:
959 signatureAlgorithm = None
953 if self.version == (3,0): 960 if self.version == (3,0):
954 masterSecret = calcMasterSecret(self.version, 961 masterSecret = calcMasterSecret(self.version,
955 premasterSecret, 962 premasterSecret,
956 clientRandom, 963 clientRandom,
957 serverRandom) 964 serverRandom)
958 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"") 965 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"")
959 elif self.version in ((3,1), (3,2)): 966 elif self.version in ((3,1), (3,2)):
960 verifyBytes = self._handshake_md5.digest() + \ 967 verifyBytes = self._handshake_md5.digest() + \
961 self._handshake_sha.digest() 968 self._handshake_sha.digest()
969 elif self.version == (3,3):
970 # TODO: Signature algorithm negotiation not supported.
971 signatureAlgorithm = (HashAlgorithm.sha1, SignatureAlgorithm.rsa )
972 verifyBytes = self._handshake_sha.digest()
973 verifyBytes = RSAKey.addPKCS1SHA1Prefix(verifyBytes)
962 if self.fault == Fault.badVerifyMessage: 974 if self.fault == Fault.badVerifyMessage:
963 verifyBytes[0] = ((verifyBytes[0]+1) % 256) 975 verifyBytes[0] = ((verifyBytes[0]+1) % 256)
964 signedBytes = privateKey.sign(verifyBytes) 976 signedBytes = privateKey.sign(verifyBytes)
965 certificateVerify = CertificateVerify() 977 certificateVerify = CertificateVerify(self.version)
966 certificateVerify.create(signedBytes) 978 certificateVerify.create(signatureAlgorithm, signedBytes)
967 for result in self._sendMsg(certificateVerify): 979 for result in self._sendMsg(certificateVerify):
968 yield result 980 yield result
969 yield (premasterSecret, serverCertChain, clientCertChain, tackExt) 981 yield (premasterSecret, serverCertChain, clientCertChain, tackExt)
970 982
971 def _clientAnonKeyExchange(self, settings, cipherSuite, clientRandom, 983 def _clientAnonKeyExchange(self, settings, cipherSuite, clientRandom,
972 serverRandom): 984 serverRandom):
973 for result in self._getMsg(ContentType.handshake, 985 for result in self._getMsg(ContentType.handshake,
974 HandshakeType.server_key_exchange, cipherSuite): 986 HandshakeType.server_key_exchange, cipherSuite):
975 if result in (0,1): yield result 987 if result in (0,1): yield result
976 else: break 988 else: break
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 def _serverGetClientHello(self, settings, certChain, verifierDB, 1386 def _serverGetClientHello(self, settings, certChain, verifierDB,
1375 sessionCache, anon, fallbackSCSV): 1387 sessionCache, anon, fallbackSCSV):
1376 #Initialize acceptable cipher suites 1388 #Initialize acceptable cipher suites
1377 cipherSuites = [] 1389 cipherSuites = []
1378 if verifierDB: 1390 if verifierDB:
1379 if certChain: 1391 if certChain:
1380 cipherSuites += \ 1392 cipherSuites += \
1381 CipherSuite.getSrpCertSuites(settings) 1393 CipherSuite.getSrpCertSuites(settings)
1382 cipherSuites += CipherSuite.getSrpSuites(settings) 1394 cipherSuites += CipherSuite.getSrpSuites(settings)
1383 elif certChain: 1395 elif certChain:
1396 cipherSuites += CipherSuite.getDheCertSuites(settings)
1384 cipherSuites += CipherSuite.getCertSuites(settings) 1397 cipherSuites += CipherSuite.getCertSuites(settings)
1385 cipherSuites += CipherSuite.getDheCertSuites(settings)
1386 elif anon: 1398 elif anon:
1387 cipherSuites += CipherSuite.getAnonSuites(settings) 1399 cipherSuites += CipherSuite.getAnonSuites(settings)
1388 else: 1400 else:
1389 assert(False) 1401 assert(False)
1390 1402
1391 #Tentatively set version to most-desirable version, so if an error 1403 #Tentatively set version to most-desirable version, so if an error
1392 #occurs parsing the ClientHello, this is what we'll use for the 1404 #occurs parsing the ClientHello, this is what we'll use for the
1393 #error alert 1405 #error alert
1394 self.version = settings.maxVersion 1406 self.version = settings.maxVersion
1395 1407
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1505 self.session = session 1517 self.session = session
1506 1518
1507 yield None # Handshake done! 1519 yield None # Handshake done!
1508 1520
1509 #Calculate the first cipher suite intersection. 1521 #Calculate the first cipher suite intersection.
1510 #This is the 'privileged' ciphersuite. We'll use it if we're 1522 #This is the 'privileged' ciphersuite. We'll use it if we're
1511 #doing a new negotiation. In fact, 1523 #doing a new negotiation. In fact,
1512 #the only time we won't use it is if we're resuming a 1524 #the only time we won't use it is if we're resuming a
1513 #session, in which case we use the ciphersuite from the session. 1525 #session, in which case we use the ciphersuite from the session.
1514 # 1526 #
1515 #Use the client's preferences for now. 1527 #Given the current ciphersuite ordering, this means we prefer SRP
1516 for cipherSuite in clientHello.cipher_suites: 1528 #over non-SRP.
1517 if cipherSuite in cipherSuites: 1529 for cipherSuite in cipherSuites:
1530 if cipherSuite in clientHello.cipher_suites:
1518 break 1531 break
1519 else: 1532 else:
1520 for result in self._sendError(\ 1533 for result in self._sendError(\
1521 AlertDescription.handshake_failure, 1534 AlertDescription.handshake_failure,
1522 "No mutual ciphersuite"): 1535 "No mutual ciphersuite"):
1523 yield result 1536 yield result
1524 if cipherSuite in CipherSuite.srpAllSuites and \ 1537 if cipherSuite in CipherSuite.srpAllSuites and \
1525 not clientHello.srp_username: 1538 not clientHello.srp_username:
1526 for result in self._sendError(\ 1539 for result in self._sendError(\
1527 AlertDescription.unknown_psk_identity, 1540 AlertDescription.unknown_psk_identity,
(...skipping 26 matching lines...) Expand all
1554 AlertDescription.unknown_psk_identity): 1567 AlertDescription.unknown_psk_identity):
1555 yield result 1568 yield result
1556 (N, g, s, v) = entry 1569 (N, g, s, v) = entry
1557 1570
1558 #Calculate server's ephemeral DH values (b, B) 1571 #Calculate server's ephemeral DH values (b, B)
1559 b = bytesToNumber(getRandomBytes(32)) 1572 b = bytesToNumber(getRandomBytes(32))
1560 k = makeK(N, g) 1573 k = makeK(N, g)
1561 B = (powMod(g, b, N) + (k*v)) % N 1574 B = (powMod(g, b, N) + (k*v)) % N
1562 1575
1563 #Create ServerKeyExchange, signing it if necessary 1576 #Create ServerKeyExchange, signing it if necessary
1564 serverKeyExchange = ServerKeyExchange(cipherSuite) 1577 serverKeyExchange = ServerKeyExchange(cipherSuite, self.version)
1565 serverKeyExchange.createSRP(N, g, s, B) 1578 serverKeyExchange.createSRP(N, g, s, B)
1566 if cipherSuite in CipherSuite.srpCertSuites: 1579 if cipherSuite in CipherSuite.srpCertSuites:
1567 hashBytes = serverKeyExchange.hash(clientHello.random, 1580 hashBytes = serverKeyExchange.hash(clientHello.random,
1568 serverHello.random) 1581 serverHello.random)
1569 serverKeyExchange.signature = privateKey.sign(hashBytes) 1582 serverKeyExchange.signature = privateKey.sign(hashBytes)
1570 1583
1571 #Send ServerHello[, Certificate], ServerKeyExchange, 1584 #Send ServerHello[, Certificate], ServerKeyExchange,
1572 #ServerHelloDone 1585 #ServerHelloDone
1573 msgs = [] 1586 msgs = []
1574 msgs.append(serverHello) 1587 msgs.append(serverHello)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 if serverHello.status_request: 1637 if serverHello.status_request:
1625 msgs.append(CertificateStatus().create(ocspResponse)) 1638 msgs.append(CertificateStatus().create(ocspResponse))
1626 serverKeyExchange = keyExchange.makeServerKeyExchange() 1639 serverKeyExchange = keyExchange.makeServerKeyExchange()
1627 if serverKeyExchange is not None: 1640 if serverKeyExchange is not None:
1628 msgs.append(serverKeyExchange) 1641 msgs.append(serverKeyExchange)
1629 if reqCert: 1642 if reqCert:
1630 reqCAs = reqCAs or [] 1643 reqCAs = reqCAs or []
1631 #Apple's Secure Transport library rejects empty certificate_types, 1644 #Apple's Secure Transport library rejects empty certificate_types,
1632 #so default to rsa_sign. 1645 #so default to rsa_sign.
1633 reqCertTypes = reqCertTypes or [ClientCertificateType.rsa_sign] 1646 reqCertTypes = reqCertTypes or [ClientCertificateType.rsa_sign]
1634 msgs.append(CertificateRequest().create(reqCertTypes, reqCAs)) 1647 #Only SHA-1 + RSA is supported.
1648 sigAlgs = [(HashAlgorithm.sha1, SignatureAlgorithm.rsa)]
1649 msgs.append(CertificateRequest(self.version).create(reqCertTypes,
1650 reqCAs,
1651 sigAlgs))
1635 msgs.append(ServerHelloDone()) 1652 msgs.append(ServerHelloDone())
1636 for result in self._sendMsgs(msgs): 1653 for result in self._sendMsgs(msgs):
1637 yield result 1654 yield result
1638 1655
1639 #From here on, the client's messages must have the right version 1656 #From here on, the client's messages must have the right version
1640 self._versionCheck = True 1657 self._versionCheck = True
1641 1658
1642 #Get [Certificate,] (if was requested) 1659 #Get [Certificate,] (if was requested)
1643 if reqCert: 1660 if reqCert:
1644 if self.version == (3,0): 1661 if self.version == (3,0):
(...skipping 12 matching lines...) Expand all
1657 AlertDescription.no_certificate: 1674 AlertDescription.no_certificate:
1658 self._shutdown(False) 1675 self._shutdown(False)
1659 raise TLSRemoteAlert(alert) 1676 raise TLSRemoteAlert(alert)
1660 elif isinstance(msg, Certificate): 1677 elif isinstance(msg, Certificate):
1661 clientCertificate = msg 1678 clientCertificate = msg
1662 if clientCertificate.certChain and \ 1679 if clientCertificate.certChain and \
1663 clientCertificate.certChain.getNumCerts()!=0: 1680 clientCertificate.certChain.getNumCerts()!=0:
1664 clientCertChain = clientCertificate.certChain 1681 clientCertChain = clientCertificate.certChain
1665 else: 1682 else:
1666 raise AssertionError() 1683 raise AssertionError()
1667 elif self.version in ((3,1), (3,2)): 1684 elif self.version in ((3,1), (3,2), (3,3)):
1668 for result in self._getMsg(ContentType.handshake, 1685 for result in self._getMsg(ContentType.handshake,
1669 HandshakeType.certificate, 1686 HandshakeType.certificate,
1670 CertificateType.x509): 1687 CertificateType.x509):
1671 if result in (0,1): yield result 1688 if result in (0,1): yield result
1672 else: break 1689 else: break
1673 clientCertificate = result 1690 clientCertificate = result
1674 if clientCertificate.certChain and \ 1691 if clientCertificate.certChain and \
1675 clientCertificate.certChain.getNumCerts()!=0: 1692 clientCertificate.certChain.getNumCerts()!=0:
1676 clientCertChain = clientCertificate.certChain 1693 clientCertChain = clientCertificate.certChain
1677 else: 1694 else:
(...skipping 17 matching lines...) Expand all
1695 1712
1696 #Get and check CertificateVerify, if relevant 1713 #Get and check CertificateVerify, if relevant
1697 if clientCertChain: 1714 if clientCertChain:
1698 if self.version == (3,0): 1715 if self.version == (3,0):
1699 masterSecret = calcMasterSecret(self.version, premasterSecret, 1716 masterSecret = calcMasterSecret(self.version, premasterSecret,
1700 clientHello.random, serverHello.random) 1717 clientHello.random, serverHello.random)
1701 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"") 1718 verifyBytes = self._calcSSLHandshakeHash(masterSecret, b"")
1702 elif self.version in ((3,1), (3,2)): 1719 elif self.version in ((3,1), (3,2)):
1703 verifyBytes = self._handshake_md5.digest() + \ 1720 verifyBytes = self._handshake_md5.digest() + \
1704 self._handshake_sha.digest() 1721 self._handshake_sha.digest()
1722 elif self.version == (3,3):
1723 verifyBytes = self._handshake_sha.digest()
1724 verifyBytes = RSAKey.addPKCS1SHA1Prefix(verifyBytes)
1705 for result in self._getMsg(ContentType.handshake, 1725 for result in self._getMsg(ContentType.handshake,
1706 HandshakeType.certificate_verify): 1726 HandshakeType.certificate_verify):
1707 if result in (0,1): yield result 1727 if result in (0,1): yield result
1708 else: break 1728 else: break
1709 certificateVerify = result 1729 certificateVerify = result
1710 publicKey = clientCertChain.getEndEntityPublicKey() 1730 publicKey = clientCertChain.getEndEntityPublicKey()
1711 if len(publicKey) < settings.minKeySize: 1731 if len(publicKey) < settings.minKeySize:
1712 for result in self._sendError(\ 1732 for result in self._sendError(\
1713 AlertDescription.handshake_failure, 1733 AlertDescription.handshake_failure,
1714 "Client's public key too small: %d" % len(publicKey)): 1734 "Client's public key too small: %d" % len(publicKey)):
(...skipping 15 matching lines...) Expand all
1730 1750
1731 def _serverAnonKeyExchange(self, clientHello, serverHello, cipherSuite, 1751 def _serverAnonKeyExchange(self, clientHello, serverHello, cipherSuite,
1732 settings): 1752 settings):
1733 # Calculate DH p, g, Xs, Ys 1753 # Calculate DH p, g, Xs, Ys
1734 dh_p = getRandomSafePrime(32, False) 1754 dh_p = getRandomSafePrime(32, False)
1735 dh_g = getRandomNumber(2, dh_p) 1755 dh_g = getRandomNumber(2, dh_p)
1736 dh_Xs = bytesToNumber(getRandomBytes(32)) 1756 dh_Xs = bytesToNumber(getRandomBytes(32))
1737 dh_Ys = powMod(dh_g, dh_Xs, dh_p) 1757 dh_Ys = powMod(dh_g, dh_Xs, dh_p)
1738 1758
1739 #Create ServerKeyExchange 1759 #Create ServerKeyExchange
1740 serverKeyExchange = ServerKeyExchange(cipherSuite) 1760 serverKeyExchange = ServerKeyExchange(cipherSuite, self.version)
1741 serverKeyExchange.createDH(dh_p, dh_g, dh_Ys) 1761 serverKeyExchange.createDH(dh_p, dh_g, dh_Ys)
1742 1762
1743 #Send ServerHello[, Certificate], ServerKeyExchange, 1763 #Send ServerHello[, Certificate], ServerKeyExchange,
1744 #ServerHelloDone 1764 #ServerHelloDone
1745 msgs = [] 1765 msgs = []
1746 msgs.append(serverHello) 1766 msgs.append(serverHello)
1747 msgs.append(serverKeyExchange) 1767 msgs.append(serverKeyExchange)
1748 msgs.append(ServerHelloDone()) 1768 msgs.append(ServerHelloDone())
1749 for result in self._sendMsgs(msgs): 1769 for result in self._sendMsgs(msgs):
1750 yield result 1770 yield result
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1902 elif self.version in ((3,1), (3,2)): 1922 elif self.version in ((3,1), (3,2)):
1903 if (self._client and send) or (not self._client and not send): 1923 if (self._client and send) or (not self._client and not send):
1904 label = b"client finished" 1924 label = b"client finished"
1905 else: 1925 else:
1906 label = b"server finished" 1926 label = b"server finished"
1907 1927
1908 handshakeHashes = self._handshake_md5.digest() + \ 1928 handshakeHashes = self._handshake_md5.digest() + \
1909 self._handshake_sha.digest() 1929 self._handshake_sha.digest()
1910 verifyData = PRF(masterSecret, label, handshakeHashes, 12) 1930 verifyData = PRF(masterSecret, label, handshakeHashes, 12)
1911 return verifyData 1931 return verifyData
1932 elif self.version == (3,3):
1933 if (self._client and send) or (not self._client and not send):
1934 label = b"client finished"
1935 else:
1936 label = b"server finished"
1937
1938 handshakeHashes = self._handshake_sha256.digest()
1939 verifyData = PRF_1_2(masterSecret, label, handshakeHashes, 12)
1940 return verifyData
1912 else: 1941 else:
1913 raise AssertionError() 1942 raise AssertionError()
1914 1943
1915 1944
1916 def _handshakeWrapperAsync(self, handshaker, checker): 1945 def _handshakeWrapperAsync(self, handshaker, checker):
1917 if not self.fault: 1946 if not self.fault:
1918 try: 1947 try:
1919 for result in handshaker: 1948 for result in handshaker:
1920 yield result 1949 yield result
1921 if checker: 1950 if checker:
(...skipping 10 matching lines...) Expand all
1932 except TLSAlert as alert: 1961 except TLSAlert as alert:
1933 if not self.fault: 1962 if not self.fault:
1934 raise 1963 raise
1935 if alert.description not in Fault.faultAlerts[self.fault]: 1964 if alert.description not in Fault.faultAlerts[self.fault]:
1936 raise TLSFaultError(str(alert)) 1965 raise TLSFaultError(str(alert))
1937 else: 1966 else:
1938 pass 1967 pass
1939 except: 1968 except:
1940 self._shutdown(False) 1969 self._shutdown(False)
1941 raise 1970 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