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 54 6118 """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)64 """SSL2 Handshake Protocol message types.""" 65 66 error = 0 67 client_hello = 1 68 client_master_key = 2 69 client_finished = 3 70 server_hello = 4 71 server_verify = 5 72 server_finished = 6 73 request_certificate = 7 74 client_certificate = 87578 """SSL2 Handshake protocol error message descriptions""" 79 80 no_cipher = 0x0001 81 no_certificate = 0x0002 82 bad_certificate = 0x0004 83 unsupported_certificate_type = 0x00068487 """Message types in TLS Handshake protocol""" 88 89 hello_request = 0 90 client_hello = 1 91 server_hello = 2 92 certificate = 11 93 server_key_exchange = 12 94 certificate_request = 13 95 server_hello_done = 14 96 certificate_verify = 15 97 client_key_exchange = 16 98 finished = 20 99 certificate_status = 22 100 next_protocol = 67101104 """TLS record layer content types of payloads""" 105 106 change_cipher_spec = 20 107 alert = 21 108 handshake = 22 109 application_data = 23 110 all = (20, 21, 22, 23) 111 112 @classmethod119114 """Convert numeric type to name representation""" 115 if blacklist is None: 116 blacklist = [] 117 blacklist.append('all') 118 return super(ContentType, cls).toRepr(value, blacklist)122 """TLS Extension Type registry values""" 123 124 server_name = 0 # RFC 6066 / 4366 125 status_request = 5 # RFC 6066 / 4366 126 cert_type = 9 # RFC 6091 127 supported_groups = 10 # RFC 4492, RFC-ietf-tls-negotiated-ff-dhe-10 128 ec_point_formats = 11 # RFC 4492 129 srp = 12 # RFC 5054 130 signature_algorithms = 13 # RFC 5246 131 alpn = 16 # RFC 7301 132 client_hello_padding = 21 # RFC 7685 133 encrypt_then_mac = 22 # RFC 7366 134 extended_master_secret = 23 # RFC 7627 135 supports_npn = 13172 136 tack = 0xF300 137 renegotiation_info = 0xff01 # RFC 5746138141 """Hash algorithm IDs used in TLSv1.2""" 142 143 none = 0 144 md5 = 1 145 sha1 = 2 146 sha224 = 3 147 sha256 = 4 148 sha384 = 5 149 sha512 = 6150152 """Signing algorithms used in TLSv1.2""" 153 154 anonymous = 0 155 rsa = 1 156 dsa = 2 157 ecdsa = 3158160 """Name of groups supported for (EC)DH key exchange""" 161 162 # RFC4492 163 sect163k1 = 1 164 sect163r1 = 2 165 sect163r2 = 3 166 sect193r1 = 4 167 sect193r2 = 5 168 sect233k1 = 6 169 sect233r1 = 7 170 sect239k1 = 8 171 sect283k1 = 9 172 sect283r1 = 10 173 sect409k1 = 11 174 sect409r1 = 12 175 sect571k1 = 13 176 sect571r1 = 14 177 secp160k1 = 15 178 secp160r1 = 16 179 secp160r2 = 17 180 secp192k1 = 18 181 secp192r1 = 19 182 secp224k1 = 20 183 secp224r1 = 21 184 secp256k1 = 22 185 secp256r1 = 23 186 secp384r1 = 24 187 secp521r1 = 25 188 allEC = list(range(1, 26)) 189 190 # RFC7027 191 brainpoolP256r1 = 26 192 brainpoolP384r1 = 27 193 brainpoolP512r1 = 28 194 allEC.extend(list(range(26, 29))) 195 196 # RFC-ietf-tls-negotiated-ff-dhe-10 197 ffdhe2048 = 256 198 ffdhe3072 = 257 199 ffdhe4096 = 258 200 ffdhe6144 = 259 201 ffdhe8192 = 260 202 allFF = list(range(256, 261)) 203 204 all = allEC + allFF 205 206 @classmethod213216 """Names and ID's of supported EC point formats.""" 217 218 uncompressed = 0 219 ansiX962_compressed_prime = 1 220 ansiX962_compressed_char2 = 2 221 222 all = [uncompressed, 223 ansiX962_compressed_prime, 224 ansiX962_compressed_char2] 225 226 @classmethod233228 """Convert numeric type to name representation.""" 229 if blacklist is None: 230 blacklist = [] 231 blacklist.append('all') 232 return super(ECPointFormat, cls).toRepr(value, blacklist)236 """Types of ECC curves supported in TLS from RFC4492""" 237 238 explicit_prime = 1 239 explicit_char2 = 2 240 named_curve = 3241 247 253 260263 """ 264 @cvar bad_record_mac: A TLS record failed to decrypt properly. 265 266 If this occurs during a SRP handshake it most likely 267 indicates a bad password. It may also indicate an implementation 268 error, or some tampering with the data in transit. 269 270 This alert will be signalled by the server if the SRP password is bad. It 271 may also be signalled by the server if the SRP username is unknown to the 272 server, but it doesn't wish to reveal that fact. 273 274 275 @cvar handshake_failure: A problem occurred while handshaking. 276 277 This typically indicates a lack of common ciphersuites between client and 278 server, or some other disagreement (about SRP parameters or key sizes, 279 for example). 280 281 @cvar protocol_version: The other party's SSL/TLS version was unacceptable. 282 283 This indicates that the client and server couldn't agree on which version 284 of SSL or TLS to use. 285 286 @cvar user_canceled: The handshake is being cancelled for some reason. 287 288 """ 289 290 close_notify = 0 291 unexpected_message = 10 292 bad_record_mac = 20 293 decryption_failed = 21 294 record_overflow = 22 295 decompression_failure = 30 296 handshake_failure = 40 297 no_certificate = 41 #SSLv3 298 bad_certificate = 42 299 unsupported_certificate = 43 300 certificate_revoked = 44 301 certificate_expired = 45 302 certificate_unknown = 46 303 illegal_parameter = 47 304 unknown_ca = 48 305 access_denied = 49 306 decode_error = 50 307 decrypt_error = 51 308 export_restriction = 60 309 protocol_version = 70 310 insufficient_security = 71 311 internal_error = 80 312 inappropriate_fallback = 86 313 user_canceled = 90 314 no_renegotiation = 100 315 unsupported_extension = 110 # RFC 5246 316 certificate_unobtainable = 111 # RFC 6066 317 unrecognized_name = 112 # RFC 6066 318 bad_certificate_status_response = 113 # RFC 6066 319 bad_certificate_hash_value = 114 # RFC 6066 320 unknown_psk_identity = 115 321 no_application_protocol = 120 # RFC 7301322325 326 """ 327 Numeric values of ciphersuites and ciphersuite types 328 329 @cvar tripleDESSuites: ciphersuties which use 3DES symmetric cipher in CBC 330 mode 331 @cvar aes128Suites: ciphersuites which use AES symmetric cipher in CBC mode 332 with 128 bit key 333 @cvar aes256Suites: ciphersuites which use AES symmetric cipher in CBC mode 334 with 128 bit key 335 @cvar rc4Suites: ciphersuites which use RC4 symmetric cipher with 128 bit 336 key 337 @cvar shaSuites: ciphersuites which use SHA-1 HMAC integrity mechanism 338 and protocol default Pseudo Random Function 339 @cvar sha256Suites: ciphersuites which use SHA-256 HMAC integrity mechanism 340 and SHA-256 Pseudo Random Function 341 @cvar md5Suites: ciphersuites which use MD-5 HMAC integrity mechanism and 342 protocol default Pseudo Random Function 343 @cvar srpSuites: ciphersuites which use Secure Remote Password (SRP) key 344 exchange protocol 345 @cvar srpCertSuites: ciphersuites which use Secure Remote Password (SRP) 346 key exchange protocol with RSA server authentication 347 @cvar srpAllSuites: all SRP ciphersuites, pure SRP and with RSA based 348 server authentication 349 @cvar certSuites: ciphersuites which use RSA key exchange with RSA server 350 authentication 351 @cvar certAllSuites: ciphersuites which use RSA server authentication 352 @cvar anonSuites: ciphersuites which use anonymous Finite Field 353 Diffie-Hellman key exchange 354 @cvar ietfNames: dictionary with string names of the ciphersuites 355 """ 356 357 ietfNames = {} 358 359 # the ciphesuite names come from IETF, we want to keep them 360 #pylint: disable = invalid-name 361 362 # SSLv2 from draft-hickman-netscape-ssl-00.txt 363 SSL_CK_RC4_128_WITH_MD5 = 0x010080 364 ietfNames[0x010080] = 'SSL_CK_RC4_128_WITH_MD5' 365 SSL_CK_RC4_128_EXPORT40_WITH_MD5 = 0x020080 366 ietfNames[0x020080] = 'SSL_CK_RC4_128_EXPORT40_WITH_MD5' 367 SSL_CK_RC2_128_CBC_WITH_MD5 = 0x030080 368 ietfNames[0x030080] = 'SSL_CK_RC2_128_CBC_WITH_MD5' 369 SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 = 0x040080 370 ietfNames[0x040080] = 'SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5' 371 SSL_CK_IDEA_128_CBC_WITH_MD5 = 0x050080 372 ietfNames[0x050080] = 'SSL_CK_IDEA_128_CBC_WITH_MD5' 373 SSL_CK_DES_64_CBC_WITH_MD5 = 0x060040 374 ietfNames[0x060040] = 'SSL_CK_DES_64_CBC_WITH_MD5' 375 SSL_CK_DES_192_EDE3_CBC_WITH_MD5 = 0x0700C0 376 ietfNames[0x0700C0] = 'SSL_CK_DES_192_EDE3_CBC_WITH_MD5' 377 378 # SSL2 ciphersuites which use RC4 symmetric cipher 379 ssl2rc4 = [] 380 ssl2rc4.append(SSL_CK_RC4_128_WITH_MD5) 381 ssl2rc4.append(SSL_CK_RC4_128_EXPORT40_WITH_MD5) 382 383 # SSL2 ciphersuites which use RC2 symmetric cipher 384 ssl2rc2 = [] 385 ssl2rc2.append(SSL_CK_RC2_128_CBC_WITH_MD5) 386 ssl2rc2.append(SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5) 387 388 # SSL2 ciphersuites which use IDEA symmetric cipher 389 ssl2idea = [SSL_CK_IDEA_128_CBC_WITH_MD5] 390 391 # SSL2 ciphersuites which use (single) DES symmetric cipher 392 ssl2des = [SSL_CK_DES_64_CBC_WITH_MD5] 393 394 # SSL2 ciphersuites which use 3DES symmetric cipher 395 ssl2_3des = [SSL_CK_DES_192_EDE3_CBC_WITH_MD5] 396 397 # SSL2 ciphersuites which encrypt only part (40 bits) of the key 398 ssl2export = [] 399 ssl2export.append(SSL_CK_RC4_128_EXPORT40_WITH_MD5) 400 ssl2export.append(SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5) 401 402 # SSL2 ciphersuties which use 128 bit key 403 ssl2_128Key = [] 404 ssl2_128Key.append(SSL_CK_RC4_128_WITH_MD5) 405 ssl2_128Key.append(SSL_CK_RC4_128_EXPORT40_WITH_MD5) 406 ssl2_128Key.append(SSL_CK_RC2_128_CBC_WITH_MD5) 407 ssl2_128Key.append(SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5) 408 ssl2_128Key.append(SSL_CK_IDEA_128_CBC_WITH_MD5) 409 410 # SSL2 ciphersuites which use 64 bit key 411 ssl2_64Key = [SSL_CK_DES_64_CBC_WITH_MD5] 412 413 # SSL2 ciphersuites which use 192 bit key 414 ssl2_192Key = [SSL_CK_DES_192_EDE3_CBC_WITH_MD5] 415 416 # Weird pseudo-ciphersuite from RFC 5746 417 # Signals that "secure renegotiation" is supported 418 # We actually don't do any renegotiation, but this 419 # prevents renegotiation attacks 420 TLS_EMPTY_RENEGOTIATION_INFO_SCSV = 0x00FF 421 ietfNames[0x00FF] = 'TLS_EMPTY_RENEGOTIATION_INFO_SCSV' 422 423 # RFC 7507 - Fallback Signaling Cipher Suite Value for Preventing Protocol 424 # Downgrade Attacks 425 TLS_FALLBACK_SCSV = 0x5600 426 ietfNames[0x5600] = 'TLS_FALLBACK_SCSV' 427 428 # RFC 5054 - Secure Remote Password (SRP) Protocol for TLS Authentication 429 TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA = 0xC01A 430 ietfNames[0xC01A] = 'TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA' 431 TLS_SRP_SHA_WITH_AES_128_CBC_SHA = 0xC01D 432 ietfNames[0xC01D] = 'TLS_SRP_SHA_WITH_AES_128_CBC_SHA' 433 TLS_SRP_SHA_WITH_AES_256_CBC_SHA = 0xC020 434 ietfNames[0xC020] = 'TLS_SRP_SHA_WITH_AES_256_CBC_SHA' 435 436 # RFC 5054 - Secure Remote Password (SRP) Protocol for TLS Authentication 437 TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA = 0xC01B 438 ietfNames[0xC01B] = 'TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA' 439 TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA = 0xC01E 440 ietfNames[0xC01E] = 'TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA' 441 TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA = 0xC021 442 ietfNames[0xC021] = 'TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA' 443 444 # RFC 5246 - TLS v1.2 Protocol 445 TLS_RSA_WITH_NULL_MD5 = 0x0001 446 ietfNames[0x0001] = 'TLS_RSA_WITH_NULL_MD5' 447 TLS_RSA_WITH_NULL_SHA = 0x0002 448 ietfNames[0x0002] = 'TLS_RSA_WITH_NULL_SHA' 449 TLS_RSA_WITH_NULL_SHA256 = 0x003B 450 ietfNames[0x003B] = 'TLS_RSA_WITH_NULL_SHA256' 451 452 # RFC 5246 - TLS v1.2 Protocol 453 TLS_RSA_WITH_3DES_EDE_CBC_SHA = 0x000A 454 ietfNames[0x000A] = 'TLS_RSA_WITH_3DES_EDE_CBC_SHA' 455 TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F 456 ietfNames[0x002F] = 'TLS_RSA_WITH_AES_128_CBC_SHA' 457 TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 458 ietfNames[0x0035] = 'TLS_RSA_WITH_AES_256_CBC_SHA' 459 TLS_RSA_WITH_RC4_128_SHA = 0x0005 460 ietfNames[0x0005] = 'TLS_RSA_WITH_RC4_128_SHA' 461 462 # RFC 5246 - TLS v1.2 Protocol 463 TLS_RSA_WITH_RC4_128_MD5 = 0x0004 464 ietfNames[0x0004] = 'TLS_RSA_WITH_RC4_128_MD5' 465 466 # RFC 5246 - TLS v1.2 Protocol 467 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 0x0016 468 ietfNames[0x0016] = 'TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA' 469 TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 470 ietfNames[0x0033] = 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA' 471 TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 472 ietfNames[0x0039] = 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA' 473 474 # RFC 5246 - TLS v1.2 Protocol 475 TLS_DH_ANON_WITH_RC4_128_MD5 = 0x0018 476 ietfNames[0x0018] = 'TLS_DH_ANON_WITH_RC4_128_MD5' 477 TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA = 0x001B 478 ietfNames[0x001B] = 'TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA' 479 TLS_DH_ANON_WITH_AES_128_CBC_SHA = 0x0034 480 ietfNames[0x0034] = 'TLS_DH_ANON_WITH_AES_128_CBC_SHA' 481 TLS_DH_ANON_WITH_AES_256_CBC_SHA = 0x003A 482 ietfNames[0x003A] = 'TLS_DH_ANON_WITH_AES_256_CBC_SHA' 483 TLS_DH_ANON_WITH_AES_128_CBC_SHA256 = 0x006C 484 ietfNames[0x006C] = 'TLS_DH_ANON_WITH_AES_128_CBC_SHA256' 485 TLS_DH_ANON_WITH_AES_256_CBC_SHA256 = 0x006D 486 ietfNames[0x006D] = 'TLS_DH_ANON_WITH_AES_256_CBC_SHA256' 487 TLS_DH_ANON_WITH_AES_128_GCM_SHA256 = 0x00A6 488 ietfNames[0x00A6] = 'TLS_DH_ANON_WITH_AES_128_GCM_SHA256' 489 TLS_DH_ANON_WITH_AES_256_GCM_SHA384 = 0x00A7 490 ietfNames[0x00A7] = 'TLS_DH_ANON_WITH_AES_256_GCM_SHA384' 491 492 # RFC 5246 - TLS v1.2 Protocol 493 TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C 494 ietfNames[0x003C] = 'TLS_RSA_WITH_AES_128_CBC_SHA256' 495 TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D 496 ietfNames[0x003D] = 'TLS_RSA_WITH_AES_256_CBC_SHA256' 497 498 # RFC 5246 - TLS v1.2 499 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 500 ietfNames[0x0067] = 'TLS_DHE_RSA_WITH_AES_128_CBC_SHA256' 501 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B 502 ietfNames[0x006B] = 'TLS_DHE_RSA_WITH_AES_256_CBC_SHA256' 503 504 # RFC 5288 - AES-GCM ciphers for TLSv1.2 505 TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C 506 ietfNames[0x009C] = 'TLS_RSA_WITH_AES_128_GCM_SHA256' 507 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E 508 ietfNames[0x009E] = 'TLS_DHE_RSA_WITH_AES_128_GCM_SHA256' 509 TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D 510 ietfNames[0x009D] = 'TLS_RSA_WITH_AES_256_GCM_SHA384' 511 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F 512 ietfNames[0x009F] = 'TLS_DHE_RSA_WITH_AES_256_GCM_SHA384' 513 514 # RFC 4492 - ECC Cipher Suites for TLS 515 TLS_ECDHE_RSA_WITH_NULL_SHA = 0xC010 516 ietfNames[0xC010] = 'TLS_ECDHE_RSA_WITH_NULL_SHA' 517 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 518 ietfNames[0xC013] = 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA' 519 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 520 ietfNames[0xC014] = 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA' 521 TLS_ECDH_ANON_WITH_NULL_SHA = 0xC015 522 ietfNames[0xC015] = 'TLS_ECDH_ANON_WITH_NULL_SHA' 523 TLS_ECDH_ANON_WITH_RC4_128_SHA = 0xC016 524 ietfNames[0xC016] = 'TLS_ECDH_ANON_WITH_RC4_128_SHA' 525 TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA = 0xC017 526 ietfNames[0xC017] = 'TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA' 527 TLS_ECDH_ANON_WITH_AES_128_CBC_SHA = 0xC018 528 ietfNames[0xC018] = 'TLS_ECDH_ANON_WITH_AES_128_CBC_SHA' 529 TLS_ECDH_ANON_WITH_AES_256_CBC_SHA = 0xC019 530 ietfNames[0xC019] = 'TLS_ECDH_ANON_WITH_AES_256_CBC_SHA' 531 532 # draft-ietf-tls-chacha20-poly1305-00 533 # ChaCha20/Poly1305 based Cipher Suites for TLS1.2 534 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_draft_00 = 0xcca1 535 ietfNames[0xcca1] = 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_draft_00' 536 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_draft_00 = 0xcca3 537 ietfNames[0xcca3] = 'TLS_DHE_RSA_WITH_CHACHA20_POLY1305_draft_00' 538 539 # RFC 7905 - ChaCha20-Poly1305 Cipher Suites for TLS 540 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xcca8 541 ietfNames[0xcca8] = 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256' 542 TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 0xccaa 543 ietfNames[0xccaa] = 'TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256' 544 545 # RFC 5289 - ECC Ciphers with SHA-256/SHA284 HMAC and AES-GCM 546 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 547 ietfNames[0xC027] = 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256' 548 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 549 ietfNames[0xC028] = 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384' 550 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F 551 ietfNames[0xC02F] = 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256' 552 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 553 ietfNames[0xC030] = 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384' 554 555 #pylint: enable = invalid-name 556 # 557 # Define cipher suite families below 558 # 559 560 # 3DES CBC ciphers 561 tripleDESSuites = [] 562 tripleDESSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA) 563 tripleDESSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA) 564 tripleDESSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA) 565 tripleDESSuites.append(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) 566 tripleDESSuites.append(TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA) 567 tripleDESSuites.append(TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA) 568 569 # AES-128 CBC ciphers 570 aes128Suites = [] 571 aes128Suites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA) 572 aes128Suites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA) 573 aes128Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA) 574 aes128Suites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA) 575 aes128Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA) 576 aes128Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA256) 577 aes128Suites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256) 578 aes128Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA256) 579 aes128Suites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) 580 aes128Suites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 581 aes128Suites.append(TLS_ECDH_ANON_WITH_AES_128_CBC_SHA) 582 583 # AES-256 CBC ciphers 584 aes256Suites = [] 585 aes256Suites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA) 586 aes256Suites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA) 587 aes256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA) 588 aes256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA) 589 aes256Suites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 590 aes256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA256) 591 aes256Suites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256) 592 aes256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA256) 593 aes256Suites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) 594 aes256Suites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) 595 aes256Suites.append(TLS_ECDH_ANON_WITH_AES_256_CBC_SHA) 596 597 # AES-128 GCM ciphers 598 aes128GcmSuites = [] 599 aes128GcmSuites.append(TLS_RSA_WITH_AES_128_GCM_SHA256) 600 aes128GcmSuites.append(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) 601 aes128GcmSuites.append(TLS_DH_ANON_WITH_AES_128_GCM_SHA256) 602 aes128GcmSuites.append(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) 603 604 # AES-256-GCM ciphers (implicit SHA384, see sha384PrfSuites) 605 aes256GcmSuites = [] 606 aes256GcmSuites.append(TLS_RSA_WITH_AES_256_GCM_SHA384) 607 aes256GcmSuites.append(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) 608 aes256GcmSuites.append(TLS_DH_ANON_WITH_AES_256_GCM_SHA384) 609 aes256GcmSuites.append(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) 610 611 # CHACHA20 cipher, 00'th IETF draft (implicit POLY1305 authenticator) 612 chacha20draft00Suites = [] 613 chacha20draft00Suites.append(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_draft_00) 614 chacha20draft00Suites.append(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_draft_00) 615 616 # CHACHA20 cipher (implicit POLY1305 authenticator, SHA256 PRF) 617 chacha20Suites = [] 618 chacha20Suites.append(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256) 619 chacha20Suites.append(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256) 620 621 # RC4 128 stream cipher 622 rc4Suites = [] 623 rc4Suites.append(TLS_DH_ANON_WITH_RC4_128_MD5) 624 rc4Suites.append(TLS_RSA_WITH_RC4_128_SHA) 625 rc4Suites.append(TLS_RSA_WITH_RC4_128_MD5) 626 rc4Suites.append(TLS_ECDH_ANON_WITH_RC4_128_SHA) 627 628 # no encryption 629 nullSuites = [] 630 nullSuites.append(TLS_RSA_WITH_NULL_MD5) 631 nullSuites.append(TLS_RSA_WITH_NULL_SHA) 632 nullSuites.append(TLS_RSA_WITH_NULL_SHA256) 633 nullSuites.append(TLS_ECDHE_RSA_WITH_NULL_SHA) 634 nullSuites.append(TLS_ECDH_ANON_WITH_NULL_SHA) 635 636 # SHA-1 HMAC, protocol default PRF 637 shaSuites = [] 638 shaSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA) 639 shaSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA) 640 shaSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA) 641 shaSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA) 642 shaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA) 643 shaSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA) 644 shaSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA) 645 shaSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA) 646 shaSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA) 647 shaSuites.append(TLS_RSA_WITH_RC4_128_SHA) 648 shaSuites.append(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) 649 shaSuites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA) 650 shaSuites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 651 shaSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA) 652 shaSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA) 653 shaSuites.append(TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA) 654 shaSuites.append(TLS_RSA_WITH_NULL_SHA) 655 shaSuites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) 656 shaSuites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) 657 shaSuites.append(TLS_ECDHE_RSA_WITH_NULL_SHA) 658 shaSuites.append(TLS_ECDH_ANON_WITH_AES_256_CBC_SHA) 659 shaSuites.append(TLS_ECDH_ANON_WITH_AES_128_CBC_SHA) 660 shaSuites.append(TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA) 661 shaSuites.append(TLS_ECDH_ANON_WITH_RC4_128_SHA) 662 shaSuites.append(TLS_ECDH_ANON_WITH_NULL_SHA) 663 664 # SHA-256 HMAC, SHA-256 PRF 665 sha256Suites = [] 666 sha256Suites.append(TLS_RSA_WITH_AES_128_CBC_SHA256) 667 sha256Suites.append(TLS_RSA_WITH_AES_256_CBC_SHA256) 668 sha256Suites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256) 669 sha256Suites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256) 670 sha256Suites.append(TLS_RSA_WITH_NULL_SHA256) 671 sha256Suites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA256) 672 sha256Suites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA256) 673 sha256Suites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 674 675 # SHA-384 HMAC, SHA-384 PRF 676 sha384Suites = [] 677 sha384Suites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) 678 679 # stream cipher construction 680 streamSuites = [] 681 streamSuites.extend(rc4Suites) 682 streamSuites.extend(nullSuites) 683 684 # AEAD integrity, any PRF 685 aeadSuites = [] 686 aeadSuites.extend(aes128GcmSuites) 687 aeadSuites.extend(aes256GcmSuites) 688 aeadSuites.extend(chacha20Suites) 689 aeadSuites.extend(chacha20draft00Suites) 690 691 # TLS1.2 with SHA384 PRF 692 sha384PrfSuites = [] 693 sha384PrfSuites.extend(sha384Suites) 694 sha384PrfSuites.extend(aes256GcmSuites) 695 696 # MD-5 HMAC, protocol default PRF 697 md5Suites = [] 698 md5Suites.append(TLS_DH_ANON_WITH_RC4_128_MD5) 699 md5Suites.append(TLS_RSA_WITH_RC4_128_MD5) 700 md5Suites.append(TLS_RSA_WITH_NULL_MD5) 701 702 # SSL3, TLS1.0, TLS1.1 and TLS1.2 compatible ciphers 703 ssl3Suites = [] 704 ssl3Suites.extend(shaSuites) 705 ssl3Suites.extend(md5Suites) 706 707 # TLS1.2 specific ciphersuites 708 tls12Suites = [] 709 tls12Suites.extend(sha256Suites) 710 tls12Suites.extend(sha384Suites) 711 tls12Suites.extend(aeadSuites) 712 713 @staticmethod937715 """Return a copy of suites without ciphers incompatible with version""" 716 includeSuites = set([]) 717 if (3, 0) <= minVersion <= (3, 3): 718 includeSuites.update(CipherSuite.ssl3Suites) 719 if maxVersion == (3, 3): 720 includeSuites.update(CipherSuite.tls12Suites) 721 return [s for s in suites if s in includeSuites]722 723 @staticmethod725 if version is None: 726 version = settings.maxVersion 727 macNames = settings.macNames 728 cipherNames = settings.cipherNames 729 keyExchangeNames = settings.keyExchangeNames 730 macSuites = [] 731 if "sha" in macNames: 732 macSuites += CipherSuite.shaSuites 733 if "sha256" in macNames and version >= (3, 3): 734 macSuites += CipherSuite.sha256Suites 735 if "sha384" in macNames and version >= (3, 3): 736 macSuites += CipherSuite.sha384Suites 737 if "md5" in macNames: 738 macSuites += CipherSuite.md5Suites 739 if "aead" in macNames and version >= (3, 3): 740 macSuites += CipherSuite.aeadSuites 741 742 cipherSuites = [] 743 if "chacha20-poly1305" in cipherNames and version >= (3, 3): 744 cipherSuites += CipherSuite.chacha20Suites 745 if "chacha20-poly1305_draft00" in cipherNames and version >= (3, 3): 746 cipherSuites += CipherSuite.chacha20draft00Suites 747 if "aes128gcm" in cipherNames and version >= (3, 3): 748 cipherSuites += CipherSuite.aes128GcmSuites 749 if "aes256gcm" in cipherNames and version >= (3, 3): 750 cipherSuites += CipherSuite.aes256GcmSuites 751 if "aes128" in cipherNames: 752 cipherSuites += CipherSuite.aes128Suites 753 if "aes256" in cipherNames: 754 cipherSuites += CipherSuite.aes256Suites 755 if "3des" in cipherNames: 756 cipherSuites += CipherSuite.tripleDESSuites 757 if "rc4" in cipherNames: 758 cipherSuites += CipherSuite.rc4Suites 759 if "null" in cipherNames: 760 cipherSuites += CipherSuite.nullSuites 761 762 keyExchangeSuites = [] 763 if "rsa" in keyExchangeNames: 764 keyExchangeSuites += CipherSuite.certSuites 765 if "dhe_rsa" in keyExchangeNames: 766 keyExchangeSuites += CipherSuite.dheCertSuites 767 if "ecdhe_rsa" in keyExchangeNames: 768 keyExchangeSuites += CipherSuite.ecdheCertSuites 769 if "srp_sha" in keyExchangeNames: 770 keyExchangeSuites += CipherSuite.srpSuites 771 if "srp_sha_rsa" in keyExchangeNames: 772 keyExchangeSuites += CipherSuite.srpCertSuites 773 if "dh_anon" in keyExchangeNames: 774 keyExchangeSuites += CipherSuite.anonSuites 775 if "ecdh_anon" in keyExchangeNames: 776 keyExchangeSuites += CipherSuite.ecdhAnonSuites 777 778 return [s for s in suites if s in macSuites and 779 s in cipherSuites and s in keyExchangeSuites]780 781 # SRP key exchange 782 srpSuites = [] 783 srpSuites.append(TLS_SRP_SHA_WITH_AES_256_CBC_SHA) 784 srpSuites.append(TLS_SRP_SHA_WITH_AES_128_CBC_SHA) 785 srpSuites.append(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA) 786 787 @classmethod789 """Return SRP cipher suites matching settings""" 790 return cls._filterSuites(CipherSuite.srpSuites, settings, version)791 792 # SRP key exchange, RSA authentication 793 srpCertSuites = [] 794 srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA) 795 srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA) 796 srpCertSuites.append(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA) 797 798 @classmethod800 """Return SRP cipher suites that use server certificates""" 801 return cls._filterSuites(CipherSuite.srpCertSuites, settings, version)802 803 srpAllSuites = srpSuites + srpCertSuites 804 805 @classmethod807 """Return all SRP cipher suites matching settings""" 808 return cls._filterSuites(CipherSuite.srpAllSuites, settings, version)809 810 # RSA key exchange, RSA authentication 811 certSuites = [] 812 certSuites.append(TLS_RSA_WITH_AES_256_GCM_SHA384) 813 certSuites.append(TLS_RSA_WITH_AES_128_GCM_SHA256) 814 certSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA256) 815 certSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA256) 816 certSuites.append(TLS_RSA_WITH_AES_256_CBC_SHA) 817 certSuites.append(TLS_RSA_WITH_AES_128_CBC_SHA) 818 certSuites.append(TLS_RSA_WITH_3DES_EDE_CBC_SHA) 819 certSuites.append(TLS_RSA_WITH_RC4_128_SHA) 820 certSuites.append(TLS_RSA_WITH_RC4_128_MD5) 821 certSuites.append(TLS_RSA_WITH_NULL_MD5) 822 certSuites.append(TLS_RSA_WITH_NULL_SHA) 823 certSuites.append(TLS_RSA_WITH_NULL_SHA256) 824 825 @classmethod827 """Return ciphers with RSA authentication matching settings""" 828 return cls._filterSuites(CipherSuite.certSuites, settings, version)829 830 # FFDHE key exchange, RSA authentication 831 dheCertSuites = [] 832 dheCertSuites.append(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256) 833 dheCertSuites.append(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_draft_00) 834 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) 835 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) 836 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256) 837 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256) 838 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 839 dheCertSuites.append(TLS_DHE_RSA_WITH_AES_128_CBC_SHA) 840 dheCertSuites.append(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA) 841 842 @classmethod844 """Provide authenticated DHE ciphersuites matching settings""" 845 return cls._filterSuites(CipherSuite.dheCertSuites, settings, version)846 847 # ECDHE key exchange, RSA authentication 848 ecdheCertSuites = [] 849 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256) 850 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_draft_00) 851 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) 852 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) 853 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) 854 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) 855 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) 856 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) 857 ecdheCertSuites.append(TLS_ECDHE_RSA_WITH_NULL_SHA) 858 859 @classmethod861 """Provide authenticated ECDHE ciphersuites matching settings""" 862 return cls._filterSuites(CipherSuite.ecdheCertSuites, settings, version)863 864 # RSA authentication 865 certAllSuites = srpCertSuites + certSuites + dheCertSuites + ecdheCertSuites 866 867 # anon FFDHE key exchange 868 anonSuites = [] 869 anonSuites.append(TLS_DH_ANON_WITH_AES_256_GCM_SHA384) 870 anonSuites.append(TLS_DH_ANON_WITH_AES_128_GCM_SHA256) 871 anonSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA256) 872 anonSuites.append(TLS_DH_ANON_WITH_AES_256_CBC_SHA) 873 anonSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA256) 874 anonSuites.append(TLS_DH_ANON_WITH_AES_128_CBC_SHA) 875 anonSuites.append(TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA) 876 anonSuites.append(TLS_DH_ANON_WITH_RC4_128_MD5) 877 878 @classmethod880 """Provide anonymous DH ciphersuites matching settings""" 881 return cls._filterSuites(CipherSuite.anonSuites, settings, version)882 883 dhAllSuites = dheCertSuites + anonSuites 884 885 # anon ECDHE key exchange 886 ecdhAnonSuites = [] 887 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_AES_256_CBC_SHA) 888 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_AES_128_CBC_SHA) 889 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_3DES_EDE_CBC_SHA) 890 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_RC4_128_SHA) 891 ecdhAnonSuites.append(TLS_ECDH_ANON_WITH_NULL_SHA) 892 893 @classmethod895 """Provide anonymous ECDH ciphersuites matching settings""" 896 return cls._filterSuites(CipherSuite.ecdhAnonSuites, settings, version)897 898 ecdhAllSuites = ecdheCertSuites + ecdhAnonSuites 899 900 @staticmethod902 """Return the canonical name of the cipher whose number is provided.""" 903 if ciphersuite in CipherSuite.aes128GcmSuites: 904 return "aes128gcm" 905 elif ciphersuite in CipherSuite.aes256GcmSuites: 906 return "aes256gcm" 907 elif ciphersuite in CipherSuite.aes128Suites: 908 return "aes128" 909 elif ciphersuite in CipherSuite.aes256Suites: 910 return "aes256" 911 elif ciphersuite in CipherSuite.rc4Suites: 912 return "rc4" 913 elif ciphersuite in CipherSuite.tripleDESSuites: 914 return "3des" 915 elif ciphersuite in CipherSuite.nullSuites: 916 return "null" 917 elif ciphersuite in CipherSuite.chacha20draft00Suites: 918 return "chacha20-poly1305_draft00" 919 elif ciphersuite in CipherSuite.chacha20Suites: 920 return "chacha20-poly1305" 921 else: 922 return None923 924 @staticmethod926 """Return the canonical name of the MAC whose number is provided.""" 927 if ciphersuite in CipherSuite.sha384Suites: 928 return "sha384" 929 elif ciphersuite in CipherSuite.sha256Suites: 930 return "sha256" 931 elif ciphersuite in CipherSuite.shaSuites: 932 return "sha" 933 elif ciphersuite in CipherSuite.md5Suites: 934 return "md5" 935 else: 936 return None938 939 # The following faults are induced as part of testing. The faultAlerts 940 # dictionary describes the allowed alerts that may be triggered by these 941 # faults. 942 -class Fault:943 badUsername = 101 944 badPassword = 102 945 badA = 103 946 clientSrpFaults = list(range(101,104)) 947 948 badVerifyMessage = 601 949 clientCertFaults = list(range(601,602)) 950 951 badPremasterPadding = 501 952 shortPremasterSecret = 502 953 clientNoAuthFaults = list(range(501,503)) 954 955 badB = 201 956 serverFaults = list(range(201,202)) 957 958 badFinished = 300 959 badMAC = 301 960 badPadding = 302 961 genericFaults = list(range(300,303)) 962 963 faultAlerts = {\ 964 badUsername: (AlertDescription.unknown_psk_identity, \ 965 AlertDescription.bad_record_mac),\ 966 badPassword: (AlertDescription.bad_record_mac,),\ 967 badA: (AlertDescription.illegal_parameter,),\ 968 badPremasterPadding: (AlertDescription.bad_record_mac,),\ 969 shortPremasterSecret: (AlertDescription.bad_record_mac,),\ 970 badVerifyMessage: (AlertDescription.decrypt_error,),\ 971 badFinished: (AlertDescription.decrypt_error,),\ 972 badMAC: (AlertDescription.bad_record_mac,),\ 973 badPadding: (AlertDescription.bad_record_mac,) 974 } 975 976 faultNames = {\ 977 badUsername: "bad username",\ 978 badPassword: "bad password",\ 979 badA: "bad A",\ 980 badPremasterPadding: "bad premaster padding",\ 981 shortPremasterSecret: "short premaster secret",\ 982 badVerifyMessage: "bad verify message",\ 983 badFinished: "bad finished message",\ 984 badMAC: "bad MAC",\ 985 badPadding: "bad padding" 986 }987
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 | http://epydoc.sourceforge.net |