| Index: third_party/tlslite/tlslite/constants.py
|
| diff --git a/third_party/tlslite/tlslite/constants.py b/third_party/tlslite/tlslite/constants.py
|
| index d027ef5f0937edfe31bbcc378aac2942806802d8..52c20ac48af8add5be41778fef7eb53ef463487f 100644
|
| --- a/third_party/tlslite/tlslite/constants.py
|
| +++ b/third_party/tlslite/tlslite/constants.py
|
| @@ -1,16 +1,24 @@
|
| +# Authors:
|
| +# Trevor Perrin
|
| +# Google - defining ClientCertificateType
|
| +# Google (adapted by Sam Rushing) - NPN support
|
| +# Dimitris Moraitis - Anon ciphersuites
|
| +# Dave Baggett (Arcode Corporation) - canonicalCipherName
|
| +#
|
| +# See the LICENSE file for legal information regarding use of this file.
|
| +
|
| """Constants used in various places."""
|
|
|
| class CertificateType:
|
| x509 = 0
|
| openpgp = 1
|
| - cryptoID = 2
|
|
|
| class ClientCertificateType:
|
| rsa_sign = 1
|
| dss_sign = 2
|
| rsa_fixed_dh = 3
|
| dss_fixed_dh = 4
|
| -
|
| +
|
| class HandshakeType:
|
| hello_request = 0
|
| client_hello = 1
|
| @@ -23,6 +31,7 @@ class HandshakeType:
|
| client_key_exchange = 16
|
| finished = 20
|
| certificate_status = 22
|
| + next_protocol = 67
|
| encrypted_extensions = 203
|
|
|
| class ContentType:
|
| @@ -35,10 +44,18 @@ class ContentType:
|
| class CertificateStatusType:
|
| ocsp = 1
|
|
|
| -class ExtensionType:
|
| - status_request = 5 # OCSP stapling
|
| - signed_cert_timestamps = 18 # signed_certificate_timestamp in RFC 6962
|
| +class ExtensionType: # RFC 6066 / 4366
|
| + server_name = 0 # RFC 6066 / 4366
|
| + status_request = 5 # RFC 6066 / 4366
|
| + srp = 12 # RFC 5054
|
| + cert_type = 9 # RFC 6091
|
| + signed_cert_timestamps = 18 # RFC 6962
|
| + tack = 0xF300
|
| + supports_npn = 13172
|
| channel_id = 30031
|
| +
|
| +class NameType:
|
| + host_name = 0
|
|
|
| class AlertLevel:
|
| warning = 1
|
| @@ -48,7 +65,7 @@ class AlertDescription:
|
| """
|
| @cvar bad_record_mac: A TLS record failed to decrypt properly.
|
|
|
| - If this occurs during a shared-key or SRP handshake it most likely
|
| + If this occurs during a SRP handshake it most likely
|
| indicates a bad password. It may also indicate an implementation
|
| error, or some tampering with the data in transit.
|
|
|
| @@ -56,8 +73,6 @@ class AlertDescription:
|
| may also be signalled by the server if the SRP username is unknown to the
|
| server, but it doesn't wish to reveal that fact.
|
|
|
| - This alert will be signalled by the client if the shared-key username is
|
| - bad.
|
|
|
| @cvar handshake_failure: A problem occurred while handshaking.
|
|
|
| @@ -99,74 +114,37 @@ class AlertDescription:
|
| inappropriate_fallback = 86
|
| user_canceled = 90
|
| no_renegotiation = 100
|
| - unknown_srp_username = 120
|
| - missing_srp_username = 121
|
| - untrusted_srp_parameters = 122
|
| + unknown_psk_identity = 115
|
| +
|
|
|
| class CipherSuite:
|
| - TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0x0050
|
| - TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0x0053
|
| - TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0x0056
|
| + # Weird pseudo-ciphersuite from RFC 5746
|
| + # Signals that "secure renegotiation" is supported
|
| + # We actually don't do any renegotiation, but this
|
| + # prevents renegotiation attacks
|
| + TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF
|
| +
|
| + # draft-bmoeller-tls-downgrade-scsv-01
|
| + TLS_FALLBACK_SCSV = 0x5600
|
| +
|
| + TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A
|
| + TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D
|
| + TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020
|
| +
|
| + TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B
|
| + TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E
|
| + TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021
|
|
|
| - TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0x0051
|
| - TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0x0054
|
| - TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0x0057
|
|
|
| TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A
|
| TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F
|
| TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035
|
| TLS_RSA_WITH_RC4_128_SHA = 0x0005
|
| +
|
| + TLS_RSA_WITH_RC4_128_MD5 = 0x0004
|
|
|
| - srpSuites = []
|
| - srpSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
|
| - srpSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
|
| - srpSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
|
| - def getSrpSuites(ciphers):
|
| - suites = []
|
| - for cipher in ciphers:
|
| - if cipher == "aes128":
|
| - suites.append(CipherSuite.TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
|
| - elif cipher == "aes256":
|
| - suites.append(CipherSuite.TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
|
| - elif cipher == "3des":
|
| - suites.append(CipherSuite.TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
|
| - return suites
|
| - getSrpSuites = staticmethod(getSrpSuites)
|
| -
|
| - srpRsaSuites = []
|
| - srpRsaSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
|
| - srpRsaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
|
| - srpRsaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
|
| - def getSrpRsaSuites(ciphers):
|
| - suites = []
|
| - for cipher in ciphers:
|
| - if cipher == "aes128":
|
| - suites.append(CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
|
| - elif cipher == "aes256":
|
| - suites.append(CipherSuite.TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
|
| - elif cipher == "3des":
|
| - suites.append(CipherSuite.TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
|
| - return suites
|
| - getSrpRsaSuites = staticmethod(getSrpRsaSuites)
|
| -
|
| - rsaSuites = []
|
| - rsaSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA)
|
| - rsaSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA)
|
| - rsaSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA)
|
| - rsaSuites.append(TLS_RSA_WITH_RC4_128_SHA)
|
| - def getRsaSuites(ciphers):
|
| - suites = []
|
| - for cipher in ciphers:
|
| - if cipher == "aes128":
|
| - suites.append(CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA)
|
| - elif cipher == "aes256":
|
| - suites.append(CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA)
|
| - elif cipher == "rc4":
|
| - suites.append(CipherSuite.TLS_RSA_WITH_RC4_128_SHA)
|
| - elif cipher == "3des":
|
| - suites.append(CipherSuite.TLS_RSA_WITH_3DES_EDE_CBC_SHA)
|
| - return suites
|
| - getRsaSuites = staticmethod(getRsaSuites)
|
| + TLS_DH_ANON_WITH_AES_128_CBC_SHA = 0x0034
|
| + TLS_DH_ANON_WITH_AES_256_CBC_SHA = 0x003A
|
|
|
| tripleDESSuites = []
|
| tripleDESSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
|
| @@ -177,48 +155,155 @@ class CipherSuite:
|
| aes128Suites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
|
| aes128Suites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
|
| aes128Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA)
|
| + aes128Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA)
|
|
|
| aes256Suites = []
|
| aes256Suites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
|
| aes256Suites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
|
| aes256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA)
|
| + aes256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA)
|
|
|
| rc4Suites = []
|
| rc4Suites.append(TLS_RSA_WITH_RC4_128_SHA)
|
| + rc4Suites.append(TLS_RSA_WITH_RC4_128_MD5)
|
| +
|
| + shaSuites = []
|
| + shaSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
|
| + shaSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
|
| + shaSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
|
| + shaSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
|
| + shaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
|
| + shaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
|
| + shaSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA)
|
| + shaSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA)
|
| + shaSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA)
|
| + shaSuites.append(TLS_RSA_WITH_RC4_128_SHA)
|
| + shaSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA)
|
| + shaSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA)
|
| +
|
| + md5Suites = []
|
| + md5Suites.append(TLS_RSA_WITH_RC4_128_MD5)
|
| +
|
| + @staticmethod
|
| + def _filterSuites(suites, settings):
|
| + macNames = settings.macNames
|
| + cipherNames = settings.cipherNames
|
| + macSuites = []
|
| + if "sha" in macNames:
|
| + macSuites += CipherSuite.shaSuites
|
| + if "md5" in macNames:
|
| + macSuites += CipherSuite.md5Suites
|
| +
|
| + cipherSuites = []
|
| + if "aes128" in cipherNames:
|
| + cipherSuites += CipherSuite.aes128Suites
|
| + if "aes256" in cipherNames:
|
| + cipherSuites += CipherSuite.aes256Suites
|
| + if "3des" in cipherNames:
|
| + cipherSuites += CipherSuite.tripleDESSuites
|
| + if "rc4" in cipherNames:
|
| + cipherSuites += CipherSuite.rc4Suites
|
| +
|
| + return [s for s in suites if s in macSuites and s in cipherSuites]
|
|
|
| -
|
| + srpSuites = []
|
| + srpSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA)
|
| + srpSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA)
|
| + srpSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA)
|
| +
|
| + @staticmethod
|
| + def getSrpSuites(settings):
|
| + return CipherSuite._filterSuites(CipherSuite.srpSuites, settings)
|
| +
|
| + srpCertSuites = []
|
| + srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA)
|
| + srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA)
|
| + srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA)
|
| +
|
| + @staticmethod
|
| + def getSrpCertSuites(settings):
|
| + return CipherSuite._filterSuites(CipherSuite.srpCertSuites, settings)
|
| +
|
| + srpAllSuites = srpCertSuites + srpSuites
|
| +
|
| + @staticmethod
|
| + def getSrpAllSuites(settings):
|
| + return CipherSuite._filterSuites(CipherSuite.srpAllSuites, settings)
|
| +
|
| + certSuites = []
|
| + certSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA)
|
| + certSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA)
|
| + certSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA)
|
| + certSuites.append(TLS_RSA_WITH_RC4_128_SHA)
|
| + certSuites.append(TLS_RSA_WITH_RC4_128_MD5)
|
| + certAllSuites = srpCertSuites + certSuites
|
| +
|
| + @staticmethod
|
| + def getCertSuites(settings):
|
| + return CipherSuite._filterSuites(CipherSuite.certSuites, settings)
|
| +
|
| + anonSuites = []
|
| + anonSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA)
|
| + anonSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA)
|
| +
|
| + @staticmethod
|
| + def getAnonSuites(settings):
|
| + return CipherSuite._filterSuites(CipherSuite.anonSuites, settings)
|
| +
|
| + @staticmethod
|
| + def canonicalCipherName(ciphersuite):
|
| + "Return the canonical name of the cipher whose number is provided."
|
| + if ciphersuite in CipherSuite.aes128Suites:
|
| + return "aes128"
|
| + elif ciphersuite in CipherSuite.aes256Suites:
|
| + return "aes256"
|
| + elif ciphersuite in CipherSuite.rc4Suites:
|
| + return "rc4"
|
| + elif ciphersuite in CipherSuite.tripleDESSuites:
|
| + return "3des"
|
| + else:
|
| + return None
|
| +
|
| + @staticmethod
|
| + def canonicalMacName(ciphersuite):
|
| + "Return the canonical name of the MAC whose number is provided."
|
| + if ciphersuite in CipherSuite.shaSuites:
|
| + return "sha"
|
| + elif ciphersuite in CipherSuite.md5Suites:
|
| + return "md5"
|
| + else:
|
| + return None
|
| +
|
| +
|
| +# The following faults are induced as part of testing. The faultAlerts
|
| +# dictionary describes the allowed alerts that may be triggered by these
|
| +# faults.
|
| class Fault:
|
| badUsername = 101
|
| badPassword = 102
|
| badA = 103
|
| - clientSrpFaults = range(101,104)
|
| + clientSrpFaults = list(range(101,104))
|
|
|
| badVerifyMessage = 601
|
| - clientCertFaults = range(601,602)
|
| + clientCertFaults = list(range(601,602))
|
|
|
| badPremasterPadding = 501
|
| shortPremasterSecret = 502
|
| - clientNoAuthFaults = range(501,503)
|
| -
|
| - badIdentifier = 401
|
| - badSharedKey = 402
|
| - clientSharedKeyFaults = range(401,403)
|
| + clientNoAuthFaults = list(range(501,503))
|
|
|
| badB = 201
|
| - serverFaults = range(201,202)
|
| + serverFaults = list(range(201,202))
|
|
|
| badFinished = 300
|
| badMAC = 301
|
| badPadding = 302
|
| - genericFaults = range(300,303)
|
| + genericFaults = list(range(300,303))
|
|
|
| faultAlerts = {\
|
| - badUsername: (AlertDescription.unknown_srp_username, \
|
| + badUsername: (AlertDescription.unknown_psk_identity, \
|
| AlertDescription.bad_record_mac),\
|
| badPassword: (AlertDescription.bad_record_mac,),\
|
| badA: (AlertDescription.illegal_parameter,),\
|
| - badIdentifier: (AlertDescription.handshake_failure,),\
|
| - badSharedKey: (AlertDescription.bad_record_mac,),\
|
| badPremasterPadding: (AlertDescription.bad_record_mac,),\
|
| shortPremasterSecret: (AlertDescription.bad_record_mac,),\
|
| badVerifyMessage: (AlertDescription.decrypt_error,),\
|
| @@ -231,8 +316,6 @@ class Fault:
|
| badUsername: "bad username",\
|
| badPassword: "bad password",\
|
| badA: "bad A",\
|
| - badIdentifier: "bad identifier",\
|
| - badSharedKey: "bad sharedkey",\
|
| badPremasterPadding: "bad premaster padding",\
|
| shortPremasterSecret: "short premaster secret",\
|
| badVerifyMessage: "bad verify message",\
|
|
|