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