Home | Trees | Indices | Help |
---|
|
1 # Authors: 2 # Trevor Perrin 3 # Google - defining ClientCertificateType 4 # Google (adapted by Sam Rushing) - NPN support 5 # Dimitris Moraitis - Anon ciphersuites 6 # Dave Baggett (Arcode Corporation) - canonicalCipherName 7 # Yngve Pettersen (ported by Paul Sokolovsky) - TLS 1.2 8 # 9 # See the LICENSE file for legal information regarding use of this file. 10 11 """Constants used in various places."""14 """Base class for different enums of TLS IDs""" 15 16 @classmethod49 53 5918 """Call vars recursively on base classes""" 19 fields = dict() 20 for basecls in klass.__bases__: 21 fields.update(cls._recursiveVars(basecls)) 22 fields.update(dict(vars(klass))) 23 return fields24 25 @classmethod27 """ 28 Convert numeric type to string representation 29 30 name if found, None otherwise 31 """ 32 fields = cls._recursiveVars(cls) 33 if blacklist is None: 34 blacklist = [] 35 return next((key for key, val in fields.items() \ 36 if key not in ('__weakref__', '__dict__', '__doc__', 37 '__module__') and \ 38 key not in blacklist and \ 39 val == value), None)40 41 @classmethod43 """Convert numeric type to human-readable string if possible""" 44 ret = cls.toRepr(value, blacklist) 45 if ret is not None: 46 return ret 47 else: 48 return '{0}'.format(value)61 """Message types in TLS Handshake protocol""" 62 63 hello_request = 0 64 client_hello = 1 65 server_hello = 2 66 certificate = 11 67 server_key_exchange = 12 68 certificate_request = 13 69 server_hello_done = 14 70 certificate_verify = 15 71 client_key_exchange = 16 72 finished = 20 73 next_protocol = 677476 """TLS record layer content types of payloads""" 77 78 change_cipher_spec = 20 79 alert = 21 80 handshake = 22 81 application_data = 23 82 all = (20, 21, 22, 23) 83 84 @classmethod91 93 server_name = 0 # RFC 6066 / 4366 94 cert_type = 9 # RFC 6091 95 supported_groups = 10 # RFC 4492, RFC-ietf-tls-negotiated-ff-dhe-10 96 ec_point_formats = 11 # RFC 4492 97 srp = 12 # RFC 5054 98 signature_algorithms = 13 # RFC 5246 99 client_hello_padding = 21 # RFC 7685 100 encrypt_then_mac = 22 # RFC 7366 101 extended_master_secret = 23 # RFC 7627 102 tack = 0xF300 103 supports_npn = 13172 104 renegotiation_info = 0xff01 10586 """Convert numeric type to name representation""" 87 if blacklist is None: 88 blacklist = [] 89 blacklist.append('all') 90 return super(ContentType, cls).toRepr(value, blacklist)107 """Hash algorithm IDs used in TLSv1.2""" 108 109 none = 0 110 md5 = 1 111 sha1 = 2 112 sha224 = 3 113 sha256 = 4 114 sha384 = 5 115 sha512 = 6116118 """Signing algorithms used in TLSv1.2""" 119 120 anonymous = 0 121 rsa = 1 122 dsa = 2 123 ecdsa = 3124126 """Name of groups supported for (EC)DH key exchange""" 127 128 # RFC4492 129 sect163k1 = 1 130 sect163r1 = 2 131 sect163r2 = 3 132 sect193r1 = 4 133 sect193r2 = 5 134 sect233k1 = 6 135 sect233r1 = 7 136 sect239k1 = 8 137 sect283k1 = 9 138 sect283r1 = 10 139 sect409k1 = 11 140 sect409r1 = 12 141 sect571k1 = 13 142 sect571r1 = 14 143 secp160k1 = 15 144 secp160r1 = 16 145 secp160r2 = 17 146 secp192k1 = 18 147 secp192r1 = 19 148 secp224k1 = 20 149 secp224r1 = 21 150 secp256k1 = 22 151 secp256r1 = 23 152 secp384r1 = 24 153 secp521r1 = 25 154 allEC = list(range(1, 26)) 155 156 # RFC7027 157 brainpoolP256r1 = 26 158 brainpoolP384r1 = 27 159 brainpoolP512r1 = 28 160 allEC.extend(list(range(26, 29))) 161 162 # RFC-ietf-tls-negotiated-ff-dhe-10 163 ffdhe2048 = 256 164 ffdhe3072 = 257 165 ffdhe4096 = 258 166 ffdhe6144 = 259 167 ffdhe8192 = 260 168 allFF = list(range(256, 261)) 169 170 all = allEC + allFF 171 172 @classmethod179181 182 """Names and ID's of supported EC point formats""" 183 184 uncompressed = 0 185 ansiX962_compressed_prime = 1 186 ansiX962_compressed_char2 = 2 187 188 all = [uncompressed, 189 ansiX962_compressed_prime, 190 ansiX962_compressed_char2]191193 """Types of ECC curves supported in TLS from RFC4492""" 194 195 explicit_prime = 1 196 explicit_char2 = 2 197 named_curve = 3198200 host_name = 0201 207209 """ 210 @cvar bad_record_mac: A TLS record failed to decrypt properly. 211 212 If this occurs during a SRP handshake it most likely 213 indicates a bad password. It may also indicate an implementation 214 error, or some tampering with the data in transit. 215 216 This alert will be signalled by the server if the SRP password is bad. It 217 may also be signalled by the server if the SRP username is unknown to the 218 server, but it doesn't wish to reveal that fact. 219 220 221 @cvar handshake_failure: A problem occurred while handshaking. 222 223 This typically indicates a lack of common ciphersuites between client and 224 server, or some other disagreement (about SRP parameters or key sizes, 225 for example). 226 227 @cvar protocol_version: The other party's SSL/TLS version was unacceptable. 228 229 This indicates that the client and server couldn't agree on which version 230 of SSL or TLS to use. 231 232 @cvar user_canceled: The handshake is being cancelled for some reason. 233 234 """ 235 236 close_notify = 0 237 unexpected_message = 10 238 bad_record_mac = 20 239 decryption_failed = 21 240 record_overflow = 22 241 decompression_failure = 30 242 handshake_failure = 40 243 no_certificate = 41 #SSLv3 244 bad_certificate = 42 245 unsupported_certificate = 43 246 certificate_revoked = 44 247 certificate_expired = 45 248 certificate_unknown = 46 249 illegal_parameter = 47 250 unknown_ca = 48 251 access_denied = 49 252 decode_error = 50 253 decrypt_error = 51 254 export_restriction = 60 255 protocol_version = 70 256 insufficient_security = 71 257 internal_error = 80 258 inappropriate_fallback = 86 259 user_canceled = 90 260 no_renegotiation = 100 261 unknown_psk_identity = 115262265 266 """ 267 Numeric values of ciphersuites and ciphersuite types 268 269 @cvar tripleDESSuites: ciphersuties which use 3DES symmetric cipher in CBC 270 mode 271 @cvar aes128Suites: ciphersuites which use AES symmetric cipher in CBC mode 272 with 128 bit key 273 @cvar aes256Suites: ciphersuites which use AES symmetric cipher in CBC mode 274 with 128 bit key 275 @cvar rc4Suites: ciphersuites which use RC4 symmetric cipher with 128 bit 276 key 277 @cvar shaSuites: ciphersuites which use SHA-1 HMAC integrity mechanism 278 and protocol default Pseudo Random Function 279 @cvar sha256Suites: ciphersuites which use SHA-256 HMAC integrity mechanism 280 and SHA-256 Pseudo Random Function 281 @cvar md5Suites: ciphersuites which use MD-5 HMAC integrity mechanism and 282 protocol default Pseudo Random Function 283 @cvar srpSuites: ciphersuites which use Secure Remote Password (SRP) key 284 exchange protocol 285 @cvar srpCertSuites: ciphersuites which use Secure Remote Password (SRP) 286 key exchange protocol with RSA server authentication 287 @cvar srpAllSuites: all SRP ciphersuites, pure SRP and with RSA based 288 server authentication 289 @cvar certSuites: ciphersuites which use RSA key exchange with RSA server 290 authentication 291 @cvar certAllSuites: ciphersuites which use RSA server authentication 292 @cvar anonSuites: ciphersuites which use anonymous Finite Field 293 Diffie-Hellman key exchange 294 @cvar ietfNames: dictionary with string names of the ciphersuites 295 """ 296 297 ietfNames = {} 298 299 # the ciphesuite names come from IETF, we want to keep them 300 #pylint: disable = invalid-name 301 302 # Weird pseudo-ciphersuite from RFC 5746 303 # Signals that "secure renegotiation" is supported 304 # We actually don't do any renegotiation, but this 305 # prevents renegotiation attacks 306 TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF 307 ietfNames[0x00FF] = 'TLS_EMPTY_RENEGOTIATION_INFO_SCSV' 308 309 # RFC 7507 - Fallback Signaling Cipher Suite Value for Preventing Protocol 310 # Downgrade Attacks 311 TLS_FALLBACK_SCSV = 0x5600 312 ietfNames[0x5600] = 'TLS_FALLBACK_SCSV' 313 314 # RFC 5054 - Secure Remote Password (SRP) Protocol for TLS Authentication 315 TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A 316 ietfNames[0xC01A] = 'TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA' 317 TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D 318 ietfNames[0xC01D] = 'TLS_SRP_SHA_WITH_AES_128_CBC_SHA' 319 TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020 320 ietfNames[0xC020] = 'TLS_SRP_SHA_WITH_AES_256_CBC_SHA' 321 322 # RFC 5054 - Secure Remote Password (SRP) Protocol for TLS Authentication 323 TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B 324 ietfNames[0xC01B] = 'TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA' 325 TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E 326 ietfNames[0xC01E] = 'TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA' 327 TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021 328 ietfNames[0xC021] = 'TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA' 329 330 # RFC 5246 - TLS v1.2 Protocol 331 TLS_RSA_WITH_NULL_MD5 = 0x0001 332 ietfNames[0x0001] = 'TLS_RSA_WITH_NULL_MD5' 333 TLS_RSA_WITH_NULL_SHA = 0x0002 334 ietfNames[0x0002] = 'TLS_RSA_WITH_NULL_SHA' 335 TLS_RSA_WITH_NULL_SHA256 = 0x003B 336 ietfNames[0x003B] = 'TLS_RSA_WITH_NULL_SHA256' 337 338 # RFC 5246 - TLS v1.2 Protocol 339 TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A 340 ietfNames[0x000A] = 'TLS_RSA_WITH_3DES_EDE_CBC_SHA' 341 TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F 342 ietfNames[0x002F] = 'TLS_RSA_WITH_AES_128_CBC_SHA' 343 TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 344 ietfNames[0x0035] = 'TLS_RSA_WITH_AES_256_CBC_SHA' 345 TLS_RSA_WITH_RC4_128_SHA = 0x0005 346 ietfNames[0x0005] = 'TLS_RSA_WITH_RC4_128_SHA' 347 348 # RFC 5246 - TLS v1.2 Protocol 349 TLS_RSA_WITH_RC4_128_MD5 = 0x0004 350 ietfNames[0x0004] = 'TLS_RSA_WITH_RC4_128_MD5' 351 352 # RFC 5246 - TLS v1.2 Protocol 353 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016 354 ietfNames[0x0016] = 'TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA' 355 TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 356 ietfNames[0x0033] = 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA' 357 TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 358 ietfNames[0x0039] = 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA' 359 360 # RFC 5246 - TLS v1.2 Protocol 361 TLS_DH_ANON_WITH_RC4_128_MD5 = 0x0018 362 ietfNames[0x0018] = 'TLS_DH_ANON_WITH_RC4_128_MD5' 363 TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA = 0x001B 364 ietfNames[0x001B] = 'TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA' 365 TLS_DH_ANON_WITH_AES_128_CBC_SHA = 0x0034 366 ietfNames[0x0034] = 'TLS_DH_ANON_WITH_AES_128_CBC_SHA' 367 TLS_DH_ANON_WITH_AES_256_CBC_SHA = 0x003A 368 ietfNames[0x003A] = 'TLS_DH_ANON_WITH_AES_256_CBC_SHA' 369 TLS_DH_ANON_WITH_AES_128_CBC_SHA256 = 0x006C 370 ietfNames[0x006C] = 'TLS_DH_ANON_WITH_AES_128_CBC_SHA256' 371 TLS_DH_ANON_WITH_AES_256_CBC_SHA256 = 0x006D 372 ietfNames[0x006D] = 'TLS_DH_ANON_WITH_AES_256_CBC_SHA256' 373 TLS_DH_ANON_WITH_AES_128_GCM_SHA256 = 0x00A6 374 ietfNames[0x00A6] = 'TLS_DH_ANON_WITH_AES_128_GCM_SHA256' 375 TLS_DH_ANON_WITH_AES_256_GCM_SHA384 = 0x00A7 376 ietfNames[0x00A7] = 'TLS_DH_ANON_WITH_AES_256_GCM_SHA384' 377 378 # RFC 5246 - TLS v1.2 Protocol 379 TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C 380 ietfNames[0x003C] = 'TLS_RSA_WITH_AES_128_CBC_SHA256' 381 TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D 382 ietfNames[0x003D] = 'TLS_RSA_WITH_AES_256_CBC_SHA256' 383 384 # RFC 5246 - TLS v1.2 385 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 386 ietfNames[0x0067] = 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA256' 387 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B 388 ietfNames[0x006B] = 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA256' 389 390 # RFC 5288 - AES-GCM ciphers for TLSv1.2 391 TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C 392 ietfNames[0x009C] = 'TLS_RSA_WITH_AES_128_GCM_SHA256' 393 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E 394 ietfNames[0x009E] = 'TLS_DHE_RSA_WITH_AES_128_GCM_SHA256' 395 TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D 396 ietfNames[0x009D] = 'TLS_RSA_WITH_AES_256_GCM_SHA384' 397 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F 398 ietfNames[0x009F] = 'TLS_DHE_RSA_WITH_AES_256_GCM_SHA384' 399 400 # RFC 4492 - ECC Cipher Suites for TLS 401 TLS_ECDHE_RSA_WITH_NULL_SHA = 0xC010 402 ietfNames[0xC010] = 'TLS_ECDHE_RSA_WITH_NULL_SHA' 403 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 404 ietfNames[0xC013] = 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA' 405 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 406 ietfNames[0xC014] = 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA' 407 TLS_ECDH_ANON_WITH_NULL_SHA = 0xC015 408 ietfNames[0xC015] = 'TLS_ECDH_ANON_WITH_NULL_SHA' 409 TLS_ECDH_ANON_WITH_RC4_128_SHA = 0xC016 410 ietfNames[0xC016] = 'TLS_ECDH_ANON_WITH_RC4_128_SHA' 411 TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA = 0xC017 412 ietfNames[0xC017] = 'TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA' 413 TLS_ECDH_ANON_WITH_AES_128_CBC_SHA = 0xC018 414 ietfNames[0xC018] = 'TLS_ECDH_ANON_WITH_AES_128_CBC_SHA' 415 TLS_ECDH_ANON_WITH_AES_256_CBC_SHA = 0xC019 416 ietfNames[0xC019] = 'TLS_ECDH_ANON_WITH_AES_256_CBC_SHA' 417 418 # draft-ietf-tls-chacha20-poly1305-00 419 # ChaCha20/Poly1305 based Cipher Suites for TLS1.2 420 TLS_DHE_RSA_WITH_CHACHA20_POLY1305 = 0xcca3 421 ietfNames[0xcca3] = 'TLS_DHE_RSA_WITH_CHACHA20_POLY1305' 422 423 424 # RFC 5289 - ECC Ciphers with SHA-256/SHA284 HMAC and AES-GCM 425 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 426 ietfNames[0xC027] = 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256' 427 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 428 ietfNames[0xC028] = 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384' 429 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F 430 ietfNames[0xC02F] = 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256' 431 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 432 ietfNames[0xC030] = 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384' 433 434 #pylint: enable = invalid-name 435 # 436 # Define cipher suite families below 437 # 438 439 # 3DES CBC ciphers 440 tripleDESSuites = [] 441 tripleDESSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA) 442 tripleDESSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA) 443 tripleDESSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA) 444 tripleDESSuites.append(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) 445 tripleDESSuites.append(TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA) 446 tripleDESSuites.append(TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA) 447 448 # AES-128 CBC ciphers 449 aes128Suites = [] 450 aes128Suites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA) 451 aes128Suites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA) 452 aes128Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA) 453 aes128Suites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA) 454 aes128Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA) 455 aes128Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA256) 456 aes128Suites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256) 457 aes128Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA256) 458 aes128Suites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) 459 aes128Suites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 460 aes128Suites.append(TLS_ECDH_ANON_WITH_AES_128_CBC_SHA) 461 462 # AES-256 CBC ciphers 463 aes256Suites = [] 464 aes256Suites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA) 465 aes256Suites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA) 466 aes256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA) 467 aes256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA) 468 aes256Suites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 469 aes256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA256) 470 aes256Suites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256) 471 aes256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA256) 472 aes256Suites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) 473 aes256Suites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) 474 aes256Suites.append(TLS_ECDH_ANON_WITH_AES_256_CBC_SHA) 475 476 # AES-128 GCM ciphers 477 aes128GcmSuites = [] 478 aes128GcmSuites.append(TLS_RSA_WITH_AES_128_GCM_SHA256) 479 aes128GcmSuites.append(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) 480 aes128GcmSuites.append(TLS_DH_ANON_WITH_AES_128_GCM_SHA256) 481 aes128GcmSuites.append(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) 482 483 # AES-256-GCM ciphers (implicit SHA384, see sha384PrfSuites) 484 aes256GcmSuites = [] 485 aes256GcmSuites.append(TLS_RSA_WITH_AES_256_GCM_SHA384) 486 aes256GcmSuites.append(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) 487 aes256GcmSuites.append(TLS_DH_ANON_WITH_AES_256_GCM_SHA384) 488 aes256GcmSuites.append(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) 489 490 # CHACHA20 cipher (implicit POLY1305 authenticator) 491 chacha20Suites = [] 492 chacha20Suites.append(TLS_DHE_RSA_WITH_CHACHA20_POLY1305) 493 494 # RC4 128 stream cipher 495 rc4Suites = [] 496 rc4Suites.append(TLS_DH_ANON_WITH_RC4_128_MD5) 497 rc4Suites.append(TLS_RSA_WITH_RC4_128_SHA) 498 rc4Suites.append(TLS_RSA_WITH_RC4_128_MD5) 499 rc4Suites.append(TLS_ECDH_ANON_WITH_RC4_128_SHA) 500 501 # no encryption 502 nullSuites = [] 503 nullSuites.append(TLS_RSA_WITH_NULL_MD5) 504 nullSuites.append(TLS_RSA_WITH_NULL_SHA) 505 nullSuites.append(TLS_RSA_WITH_NULL_SHA256) 506 nullSuites.append(TLS_ECDHE_RSA_WITH_NULL_SHA) 507 nullSuites.append(TLS_ECDH_ANON_WITH_NULL_SHA) 508 509 # SHA-1 HMAC, protocol default PRF 510 shaSuites = [] 511 shaSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA) 512 shaSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA) 513 shaSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA) 514 shaSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA) 515 shaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA) 516 shaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA) 517 shaSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA) 518 shaSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA) 519 shaSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA) 520 shaSuites.append(TLS_RSA_WITH_RC4_128_SHA) 521 shaSuites.append(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) 522 shaSuites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA) 523 shaSuites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 524 shaSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA) 525 shaSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA) 526 shaSuites.append(TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA) 527 shaSuites.append(TLS_RSA_WITH_NULL_SHA) 528 shaSuites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) 529 shaSuites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) 530 shaSuites.append(TLS_ECDHE_RSA_WITH_NULL_SHA) 531 shaSuites.append(TLS_ECDH_ANON_WITH_AES_256_CBC_SHA) 532 shaSuites.append(TLS_ECDH_ANON_WITH_AES_128_CBC_SHA) 533 shaSuites.append(TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA) 534 shaSuites.append(TLS_ECDH_ANON_WITH_RC4_128_SHA) 535 shaSuites.append(TLS_ECDH_ANON_WITH_NULL_SHA) 536 537 # SHA-256 HMAC, SHA-256 PRF 538 sha256Suites = [] 539 sha256Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA256) 540 sha256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA256) 541 sha256Suites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256) 542 sha256Suites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256) 543 sha256Suites.append(TLS_RSA_WITH_NULL_SHA256) 544 sha256Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA256) 545 sha256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA256) 546 sha256Suites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 547 548 # SHA-384 HMAC, SHA-384 PRF 549 sha384Suites = [] 550 sha384Suites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) 551 552 # stream cipher construction 553 streamSuites = [] 554 streamSuites.extend(rc4Suites) 555 streamSuites.extend(nullSuites) 556 557 # AEAD integrity, any PRF 558 aeadSuites = [] 559 aeadSuites.extend(aes128GcmSuites) 560 aeadSuites.extend(aes256GcmSuites) 561 aeadSuites.extend(chacha20Suites) 562 563 # TLS1.2 with SHA384 PRF 564 sha384PrfSuites = [] 565 sha384PrfSuites.extend(sha384Suites) 566 sha384PrfSuites.extend(aes256GcmSuites) 567 568 # MD-5 HMAC, protocol default PRF 569 md5Suites = [] 570 md5Suites.append(TLS_DH_ANON_WITH_RC4_128_MD5) 571 md5Suites.append(TLS_RSA_WITH_RC4_128_MD5) 572 md5Suites.append(TLS_RSA_WITH_NULL_MD5) 573 574 # SSL3, TLS1.0, TLS1.1 and TLS1.2 compatible ciphers 575 ssl3Suites = [] 576 ssl3Suites.extend(shaSuites) 577 ssl3Suites.extend(md5Suites) 578 579 # TLS1.2 specific ciphersuites 580 tls12Suites = [] 581 tls12Suites.extend(sha256Suites) 582 tls12Suites.extend(sha384Suites) 583 tls12Suites.extend(aeadSuites) 584 585 @staticmethod802587 """Return a copy of suites without ciphers incompatible with version""" 588 includeSuites = set([]) 589 if (3, 0) <= minVersion <= (3, 3): 590 includeSuites.update(CipherSuite.ssl3Suites) 591 if maxVersion == (3, 3): 592 includeSuites.update(CipherSuite.tls12Suites) 593 return [s for s in suites if s in includeSuites]594 595 @staticmethod597 if version is None: 598 version = settings.maxVersion 599 macNames = settings.macNames 600 cipherNames = settings.cipherNames 601 keyExchangeNames = settings.keyExchangeNames 602 macSuites = [] 603 if "sha" in macNames: 604 macSuites += CipherSuite.shaSuites 605 if "sha256" in macNames and version >= (3, 3): 606 macSuites += CipherSuite.sha256Suites 607 if "sha384" in macNames and version >= (3, 3): 608 macSuites += CipherSuite.sha384Suites 609 if "md5" in macNames: 610 macSuites += CipherSuite.md5Suites 611 if "aead" in macNames and version >= (3, 3): 612 macSuites += CipherSuite.aeadSuites 613 614 cipherSuites = [] 615 if "chacha20-poly1305" in cipherNames and version >= (3, 3): 616 cipherSuites += CipherSuite.chacha20Suites 617 if "aes128gcm" in cipherNames and version >= (3, 3): 618 cipherSuites += CipherSuite.aes128GcmSuites 619 if "aes256gcm" in cipherNames and version >= (3, 3): 620 cipherSuites += CipherSuite.aes256GcmSuites 621 if "aes128" in cipherNames: 622 cipherSuites += CipherSuite.aes128Suites 623 if "aes256" in cipherNames: 624 cipherSuites += CipherSuite.aes256Suites 625 if "3des" in cipherNames: 626 cipherSuites += CipherSuite.tripleDESSuites 627 if "rc4" in cipherNames: 628 cipherSuites += CipherSuite.rc4Suites 629 if "null" in cipherNames: 630 cipherSuites += CipherSuite.nullSuites 631 632 keyExchangeSuites = [] 633 if "rsa" in keyExchangeNames: 634 keyExchangeSuites += CipherSuite.certSuites 635 if "dhe_rsa" in keyExchangeNames: 636 keyExchangeSuites += CipherSuite.dheCertSuites 637 if "ecdhe_rsa" in keyExchangeNames: 638 keyExchangeSuites += CipherSuite.ecdheCertSuites 639 if "srp_sha" in keyExchangeNames: 640 keyExchangeSuites += CipherSuite.srpSuites 641 if "srp_sha_rsa" in keyExchangeNames: 642 keyExchangeSuites += CipherSuite.srpCertSuites 643 if "dh_anon" in keyExchangeNames: 644 keyExchangeSuites += CipherSuite.anonSuites 645 if "ecdh_anon" in keyExchangeNames: 646 keyExchangeSuites += CipherSuite.ecdhAnonSuites 647 648 return [s for s in suites if s in macSuites and 649 s in cipherSuites and s in keyExchangeSuites]650 651 # SRP key exchange 652 srpSuites = [] 653 srpSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA) 654 srpSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA) 655 srpSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA) 656 657 @classmethod659 """Return SRP cipher suites matching settings""" 660 return cls._filterSuites(CipherSuite.srpSuites, settings, version)661 662 # SRP key exchange, RSA authentication 663 srpCertSuites = [] 664 srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA) 665 srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA) 666 srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA) 667 668 @classmethod670 """Return SRP cipher suites that use server certificates""" 671 return cls._filterSuites(CipherSuite.srpCertSuites, settings, version)672 673 srpAllSuites = srpSuites + srpCertSuites 674 675 @classmethod677 """Return all SRP cipher suites matching settings""" 678 return cls._filterSuites(CipherSuite.srpAllSuites, settings, version)679 680 # RSA key exchange, RSA authentication 681 certSuites = [] 682 certSuites.append(TLS_RSA_WITH_AES_256_GCM_SHA384) 683 certSuites.append(TLS_RSA_WITH_AES_128_GCM_SHA256) 684 certSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA256) 685 certSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA256) 686 certSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA) 687 certSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA) 688 certSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA) 689 certSuites.append(TLS_RSA_WITH_RC4_128_SHA) 690 certSuites.append(TLS_RSA_WITH_RC4_128_MD5) 691 certSuites.append(TLS_RSA_WITH_NULL_MD5) 692 certSuites.append(TLS_RSA_WITH_NULL_SHA) 693 certSuites.append(TLS_RSA_WITH_NULL_SHA256) 694 695 @classmethod697 """Return ciphers with RSA authentication matching settings""" 698 return cls._filterSuites(CipherSuite.certSuites, settings, version)699 700 # FFDHE key exchange, RSA authentication 701 dheCertSuites = [] 702 dheCertSuites.append(TLS_DHE_RSA_WITH_CHACHA20_POLY1305) 703 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) 704 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) 705 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256) 706 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256) 707 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 708 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA) 709 dheCertSuites.append(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) 710 711 @classmethod713 """Provide authenticated DHE ciphersuites matching settings""" 714 return cls._filterSuites(CipherSuite.dheCertSuites, settings, version)715 716 # ECDHE key exchange, RSA authentication 717 ecdheCertSuites = [] 718 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) 719 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) 720 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) 721 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 722 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) 723 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) 724 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_NULL_SHA) 725 726 @classmethod728 """Provide authenticated ECDHE ciphersuites matching settings""" 729 return cls._filterSuites(CipherSuite.ecdheCertSuites, settings, version)730 731 # RSA authentication 732 certAllSuites = srpCertSuites + certSuites + dheCertSuites + ecdheCertSuites 733 734 # anon FFDHE key exchange 735 anonSuites = [] 736 anonSuites.append(TLS_DH_ANON_WITH_AES_256_GCM_SHA384) 737 anonSuites.append(TLS_DH_ANON_WITH_AES_128_GCM_SHA256) 738 anonSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA256) 739 anonSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA) 740 anonSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA256) 741 anonSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA) 742 anonSuites.append(TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA) 743 anonSuites.append(TLS_DH_ANON_WITH_RC4_128_MD5) 744 745 @classmethod747 """Provide anonymous DH ciphersuites matching settings""" 748 return cls._filterSuites(CipherSuite.anonSuites, settings, version)749 750 dhAllSuites = dheCertSuites + anonSuites 751 752 # anon ECDHE key exchange 753 ecdhAnonSuites = [] 754 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_AES_256_CBC_SHA) 755 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_AES_128_CBC_SHA) 756 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA) 757 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_RC4_128_SHA) 758 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_NULL_SHA) 759 760 @classmethod762 """Provide anonymous ECDH ciphersuites matching settings""" 763 return cls._filterSuites(CipherSuite.ecdhAnonSuites, settings, version)764 765 ecdhAllSuites = ecdheCertSuites + ecdhAnonSuites 766 767 @staticmethod769 """Return the canonical name of the cipher whose number is provided.""" 770 if ciphersuite in CipherSuite.aes128GcmSuites: 771 return "aes128gcm" 772 elif ciphersuite in CipherSuite.aes256GcmSuites: 773 return "aes256gcm" 774 elif ciphersuite in CipherSuite.aes128Suites: 775 return "aes128" 776 elif ciphersuite in CipherSuite.aes256Suites: 777 return "aes256" 778 elif ciphersuite in CipherSuite.rc4Suites: 779 return "rc4" 780 elif ciphersuite in CipherSuite.tripleDESSuites: 781 return "3des" 782 elif ciphersuite in CipherSuite.nullSuites: 783 return "null" 784 elif ciphersuite in CipherSuite.chacha20Suites: 785 return "chacha20-poly1305" 786 else: 787 return None788 789 @staticmethod791 """Return the canonical name of the MAC whose number is provided.""" 792 if ciphersuite in CipherSuite.sha384Suites: 793 return "sha384" 794 elif ciphersuite in CipherSuite.sha256Suites: 795 return "sha256" 796 elif ciphersuite in CipherSuite.shaSuites: 797 return "sha" 798 elif ciphersuite in CipherSuite.md5Suites: 799 return "md5" 800 else: 801 return None803 804 # The following faults are induced as part of testing. The faultAlerts 805 # dictionary describes the allowed alerts that may be triggered by these 806 # faults. 807 -class Fault:808 badUsername = 101 809 badPassword = 102 810 badA = 103 811 clientSrpFaults = list(range(101,104)) 812 813 badVerifyMessage = 601 814 clientCertFaults = list(range(601,602)) 815 816 badPremasterPadding = 501 817 shortPremasterSecret = 502 818 clientNoAuthFaults = list(range(501,503)) 819 820 badB = 201 821 serverFaults = list(range(201,202)) 822 823 badFinished = 300 824 badMAC = 301 825 badPadding = 302 826 genericFaults = list(range(300,303)) 827 828 faultAlerts = {\ 829 badUsername: (AlertDescription.unknown_psk_identity, \ 830 AlertDescription.bad_record_mac),\ 831 badPassword: (AlertDescription.bad_record_mac,),\ 832 badA: (AlertDescription.illegal_parameter,),\ 833 badPremasterPadding: (AlertDescription.bad_record_mac,),\ 834 shortPremasterSecret: (AlertDescription.bad_record_mac,),\ 835 badVerifyMessage: (AlertDescription.decrypt_error,),\ 836 badFinished: (AlertDescription.decrypt_error,),\ 837 badMAC: (AlertDescription.bad_record_mac,),\ 838 badPadding: (AlertDescription.bad_record_mac,) 839 } 840 841 faultNames = {\ 842 badUsername: "bad username",\ 843 badPassword: "bad password",\ 844 badA: "bad A",\ 845 badPremasterPadding: "bad premaster padding",\ 846 shortPremasterSecret: "short premaster secret",\ 847 badVerifyMessage: "bad verify message",\ 848 badFinished: "bad finished message",\ 849 badMAC: "bad MAC",\ 850 badPadding: "bad padding" 851 }852
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Thu Jan 14 19:33:33 2016 | http://epydoc.sourceforge.net |