1## This file is part of Scapy 2## Copyright (C) 2007, 2008, 2009 Arnaud Ebalard 3## 2015, 2016, 2017 Maxence Tury 4## This program is published under a GPLv2 license 5 6""" 7TLS cipher suites. 8 9A comprehensive list of specified cipher suites can be consulted at: 10https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml 11""" 12 13from __future__ import absolute_import 14from scapy.layers.tls.crypto.kx_algs import _tls_kx_algs 15from scapy.layers.tls.crypto.hash import _tls_hash_algs 16from scapy.layers.tls.crypto.h_mac import _tls_hmac_algs 17from scapy.layers.tls.crypto.ciphers import _tls_cipher_algs 18import scapy.modules.six as six 19 20 21def get_algs_from_ciphersuite_name(ciphersuite_name): 22 """ 23 Return the 3-tuple made of the Key Exchange Algorithm class, the Cipher 24 class and the HMAC class, through the parsing of the ciphersuite name. 25 """ 26 tls1_3 = False 27 if ciphersuite_name.startswith("TLS"): 28 s = ciphersuite_name[4:] 29 30 if s.endswith("CCM") or s.endswith("CCM_8"): 31 kx_name, s = s.split("_WITH_") 32 kx_alg = _tls_kx_algs.get(kx_name) 33 hash_alg = _tls_hash_algs.get("SHA256") 34 cipher_alg = _tls_cipher_algs.get(s) 35 hmac_alg = None 36 37 else: 38 if "WITH" in s: 39 kx_name, s = s.split("_WITH_") 40 kx_alg = _tls_kx_algs.get(kx_name) 41 else: 42 tls1_3 = True 43 kx_alg = _tls_kx_algs.get("TLS13") 44 45 hash_name = s.split('_')[-1] 46 hash_alg = _tls_hash_algs.get(hash_name) 47 48 cipher_name = s[:-(len(hash_name) + 1)] 49 if tls1_3: 50 cipher_name += "_TLS13" 51 cipher_alg = _tls_cipher_algs.get(cipher_name) 52 53 hmac_alg = None 54 if cipher_alg is not None and cipher_alg.type != "aead": 55 hmac_name = "HMAC-%s" % hash_name 56 hmac_alg = _tls_hmac_algs.get(hmac_name) 57 58 elif ciphersuite_name.startswith("SSL"): 59 s = ciphersuite_name[7:] 60 kx_alg = _tls_kx_algs.get("SSLv2") 61 cipher_name, hash_name = s.split("_WITH_") 62 cipher_alg = _tls_cipher_algs.get(cipher_name.rstrip("_EXPORT40")) 63 kx_alg.export = cipher_name.endswith("_EXPORT40") 64 hmac_alg = _tls_hmac_algs.get("HMAC-NULL") 65 hash_alg = _tls_hash_algs.get(hash_name) 66 67 return kx_alg, cipher_alg, hmac_alg, hash_alg, tls1_3 68 69 70_tls_cipher_suites = {} 71_tls_cipher_suites_cls = {} 72 73class _GenericCipherSuiteMetaclass(type): 74 """ 75 Cipher suite classes are automatically registered through this metaclass. 76 Their name attribute equates their respective class name. 77 78 We also pre-compute every expected length of the key block to be generated, 79 which may vary according to the current tls_version. The default is set to 80 the TLS 1.2 length, and the value should be set at class instantiation. 81 82 Regarding the AEAD cipher suites, note that the 'hmac_alg' attribute will 83 be set to None. Yet, we always need a 'hash_alg' for the PRF. 84 """ 85 def __new__(cls, cs_name, bases, dct): 86 cs_val = dct.get("val") 87 88 if cs_name != "_GenericCipherSuite": 89 kx, c, hm, h, tls1_3 = get_algs_from_ciphersuite_name(cs_name) 90 91 if c is None or h is None or (kx is None and not tls1_3): 92 dct["usable"] = False 93 else: 94 dct["usable"] = True 95 dct["name"] = cs_name 96 dct["kx_alg"] = kx 97 dct["cipher_alg"] = c 98 dct["hmac_alg"] = hm 99 dct["hash_alg"] = h 100 101 if not tls1_3: 102 kb_len = 2*c.key_len 103 104 if c.type == "stream" or c.type == "block": 105 kb_len += 2*hm.key_len 106 107 kb_len_v1_0 = kb_len 108 if c.type == "block": 109 kb_len_v1_0 += 2*c.block_size 110 # no explicit IVs added for TLS 1.1+ 111 elif c.type == "aead": 112 kb_len_v1_0 += 2*c.fixed_iv_len 113 kb_len += 2*c.fixed_iv_len 114 115 dct["_key_block_len_v1_0"] = kb_len_v1_0 116 dct["key_block_len"] = kb_len 117 118 _tls_cipher_suites[cs_val] = cs_name 119 the_class = super(_GenericCipherSuiteMetaclass, cls).__new__(cls, 120 cs_name, 121 bases, 122 dct) 123 if cs_name != "_GenericCipherSuite": 124 _tls_cipher_suites_cls[cs_val] = the_class 125 return the_class 126 127 128class _GenericCipherSuite(six.with_metaclass(_GenericCipherSuiteMetaclass, object)): 129 def __init__(self, tls_version=0x0303): 130 """ 131 Most of the attributes are fixed and have already been set by the 132 metaclass, but we still have to provide tls_version differentiation. 133 134 For now, the key_block_len remains the only application if this. 135 Indeed for TLS 1.1+, when using a block cipher, there are no implicit 136 IVs derived from the master secret. Note that an overlong key_block_len 137 would not affect the secret generation (the trailing bytes would 138 simply be discarded), but we still provide this for completeness. 139 """ 140 super(_GenericCipherSuite, self).__init__() 141 if tls_version <= 0x301: 142 self.key_block_len = self._key_block_len_v1_0 143 144 145class TLS_NULL_WITH_NULL_NULL(_GenericCipherSuite): 146 val = 0x0000 147 148class TLS_RSA_WITH_NULL_MD5(_GenericCipherSuite): 149 val = 0x0001 150 151class TLS_RSA_WITH_NULL_SHA(_GenericCipherSuite): 152 val = 0x0002 153 154class TLS_RSA_EXPORT_WITH_RC4_40_MD5(_GenericCipherSuite): 155 val = 0x0003 156 157class TLS_RSA_WITH_RC4_128_MD5(_GenericCipherSuite): 158 val = 0x0004 159 160class TLS_RSA_WITH_RC4_128_SHA(_GenericCipherSuite): 161 val = 0x0005 162 163class TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5(_GenericCipherSuite): 164 val = 0x0006 165 166class TLS_RSA_WITH_IDEA_CBC_SHA(_GenericCipherSuite): 167 val = 0x0007 168 169class TLS_RSA_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 170 val = 0x0008 171 172class TLS_RSA_WITH_DES_CBC_SHA(_GenericCipherSuite): 173 val = 0x0009 174 175class TLS_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 176 val = 0x000A 177 178class TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 179 val = 0x000B 180 181class TLS_DH_DSS_WITH_DES_CBC_SHA(_GenericCipherSuite): 182 val = 0x000C 183 184class TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 185 val = 0x000D 186 187class TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 188 val = 0x000E 189 190class TLS_DH_RSA_WITH_DES_CBC_SHA(_GenericCipherSuite): 191 val = 0x000F 192 193class TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 194 val = 0x0010 195 196class TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 197 val = 0x0011 198 199class TLS_DHE_DSS_WITH_DES_CBC_SHA(_GenericCipherSuite): 200 val = 0x0012 201 202class TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 203 val = 0x0013 204 205class TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 206 val = 0x0014 207 208class TLS_DHE_RSA_WITH_DES_CBC_SHA(_GenericCipherSuite): 209 val = 0x0015 210 211class TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 212 val = 0x0016 213 214class TLS_DH_anon_EXPORT_WITH_RC4_40_MD5(_GenericCipherSuite): 215 val = 0x0017 216 217class TLS_DH_anon_WITH_RC4_128_MD5(_GenericCipherSuite): 218 val = 0x0018 219 220class TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 221 val = 0x0019 222 223class TLS_DH_anon_WITH_DES_CBC_SHA(_GenericCipherSuite): 224 val = 0x001A 225 226class TLS_DH_anon_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 227 val = 0x001B 228 229class TLS_KRB5_WITH_DES_CBC_SHA(_GenericCipherSuite): 230 val = 0x001E 231 232class TLS_KRB5_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 233 val = 0x001F 234 235class TLS_KRB5_WITH_RC4_128_SHA(_GenericCipherSuite): 236 val = 0x0020 237 238class TLS_KRB5_WITH_IDEA_CBC_SHA(_GenericCipherSuite): 239 val = 0x0021 240 241class TLS_KRB5_WITH_DES_CBC_MD5(_GenericCipherSuite): 242 val = 0x0022 243 244class TLS_KRB5_WITH_3DES_EDE_CBC_MD5(_GenericCipherSuite): 245 val = 0x0023 246 247class TLS_KRB5_WITH_RC4_128_MD5(_GenericCipherSuite): 248 val = 0x0024 249 250class TLS_KRB5_WITH_IDEA_CBC_MD5(_GenericCipherSuite): 251 val = 0x0025 252 253class TLS_KRB5_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 254 val = 0x0026 255 256class TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA(_GenericCipherSuite): 257 val = 0x0027 258 259class TLS_KRB5_EXPORT_WITH_RC4_40_SHA(_GenericCipherSuite): 260 val = 0x0028 261 262class TLS_KRB5_EXPORT_WITH_DES40_CBC_MD5(_GenericCipherSuite): 263 val = 0x0029 264 265class TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5(_GenericCipherSuite): 266 val = 0x002A 267 268class TLS_KRB5_EXPORT_WITH_RC4_40_MD5(_GenericCipherSuite): 269 val = 0x002B 270 271class TLS_PSK_WITH_NULL_SHA(_GenericCipherSuite): 272 val = 0x002C 273 274class TLS_DHE_PSK_WITH_NULL_SHA(_GenericCipherSuite): 275 val = 0x002D 276 277class TLS_RSA_PSK_WITH_NULL_SHA(_GenericCipherSuite): 278 val = 0x002E 279 280class TLS_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 281 val = 0x002F 282 283class TLS_DH_DSS_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 284 val = 0x0030 285 286class TLS_DH_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 287 val = 0x0031 288 289class TLS_DHE_DSS_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 290 val = 0x0032 291 292class TLS_DHE_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 293 val = 0x0033 294 295class TLS_DH_anon_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 296 val = 0x0034 297 298class TLS_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 299 val = 0x0035 300 301class TLS_DH_DSS_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 302 val = 0x0036 303 304class TLS_DH_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 305 val = 0x0037 306 307class TLS_DHE_DSS_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 308 val = 0x0038 309 310class TLS_DHE_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 311 val = 0x0039 312 313class TLS_DH_anon_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 314 val = 0x003A 315 316class TLS_RSA_WITH_NULL_SHA256(_GenericCipherSuite): 317 val = 0x003B 318 319class TLS_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 320 val = 0x003C 321 322class TLS_RSA_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 323 val = 0x003D 324 325class TLS_DH_DSS_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 326 val = 0x003E 327 328class TLS_DH_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 329 val = 0x003F 330 331class TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 332 val = 0x0040 333 334class TLS_RSA_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 335 val = 0x0041 336 337class TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 338 val = 0x0042 339 340class TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 341 val = 0x0043 342 343class TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 344 val = 0x0044 345 346class TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 347 val = 0x0045 348 349class TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 350 val = 0x0046 351 352class TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 353 val = 0x0067 354 355class TLS_DH_DSS_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 356 val = 0x0068 357 358class TLS_DH_RSA_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 359 val = 0x0069 360 361class TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 362 val = 0x006A 363 364class TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 365 val = 0x006B 366 367class TLS_DH_anon_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 368 val = 0x006C 369 370class TLS_DH_anon_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 371 val = 0x006D 372 373class TLS_RSA_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 374 val = 0x0084 375 376class TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 377 val = 0x0085 378 379class TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 380 val = 0x0086 381 382class TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 383 val = 0x0087 384 385class TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 386 val = 0x0088 387 388class TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 389 val = 0x0089 390 391class TLS_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 392 val = 0x008A 393 394class TLS_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 395 val = 0x008B 396 397class TLS_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 398 val = 0x008C 399 400class TLS_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 401 val = 0x008D 402 403class TLS_DHE_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 404 val = 0x008E 405 406class TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 407 val = 0x008F 408 409class TLS_DHE_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 410 val = 0x0090 411 412class TLS_DHE_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 413 val = 0x0091 414 415class TLS_RSA_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 416 val = 0x0092 417 418class TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 419 val = 0x0093 420 421class TLS_RSA_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 422 val = 0x0094 423 424class TLS_RSA_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 425 val = 0x0095 426 427class TLS_RSA_WITH_SEED_CBC_SHA(_GenericCipherSuite): 428 val = 0x0096 429 430class TLS_DH_DSS_WITH_SEED_CBC_SHA(_GenericCipherSuite): 431 val = 0x0097 432 433class TLS_DH_RSA_WITH_SEED_CBC_SHA(_GenericCipherSuite): 434 val = 0x0098 435 436class TLS_DHE_DSS_WITH_SEED_CBC_SHA(_GenericCipherSuite): 437 val = 0x0099 438 439class TLS_DHE_RSA_WITH_SEED_CBC_SHA(_GenericCipherSuite): 440 val = 0x009A 441 442class TLS_DH_anon_WITH_SEED_CBC_SHA(_GenericCipherSuite): 443 val = 0x009B 444 445class TLS_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 446 val = 0x009C 447 448class TLS_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 449 val = 0x009D 450 451class TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 452 val = 0x009E 453 454class TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 455 val = 0x009F 456 457class TLS_DH_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 458 val = 0x00A0 459 460class TLS_DH_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 461 val = 0x00A1 462 463class TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 464 val = 0x00A2 465 466class TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 467 val = 0x00A3 468 469class TLS_DH_DSS_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 470 val = 0x00A4 471 472class TLS_DH_DSS_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 473 val = 0x00A5 474 475class TLS_DH_anon_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 476 val = 0x00A6 477 478class TLS_DH_anon_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 479 val = 0x00A7 480 481class TLS_PSK_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 482 val = 0x00A8 483 484class TLS_PSK_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 485 val = 0x00A9 486 487class TLS_DHE_PSK_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 488 val = 0x00AA 489 490class TLS_DHE_PSK_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 491 val = 0x00AB 492 493class TLS_RSA_PSK_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 494 val = 0x00AC 495 496class TLS_RSA_PSK_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 497 val = 0x00AD 498 499class TLS_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 500 val = 0x00AE 501 502class TLS_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 503 val = 0x00AF 504 505class TLS_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 506 val = 0x00B0 507 508class TLS_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 509 val = 0x00B1 510 511class TLS_DHE_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 512 val = 0x00B2 513 514class TLS_DHE_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 515 val = 0x00B3 516 517class TLS_DHE_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 518 val = 0x00B4 519 520class TLS_DHE_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 521 val = 0x00B5 522 523class TLS_RSA_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 524 val = 0x00B6 525 526class TLS_RSA_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 527 val = 0x00B7 528 529class TLS_RSA_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 530 val = 0x00B8 531 532class TLS_RSA_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 533 val = 0x00B9 534 535class TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 536 val = 0x00BA 537 538class TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 539 val = 0x00BB 540 541class TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 542 val = 0x00BC 543 544class TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 545 val = 0x00BD 546 547class TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 548 val = 0x00BE 549 550class TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 551 val = 0x00BF 552 553class TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 554 val = 0x00C0 555 556class TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 557 val = 0x00C1 558 559class TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 560 val = 0x00C2 561 562class TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 563 val = 0x00C3 564 565class TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 566 val = 0x00C4 567 568class TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 569 val = 0x00C5 570 571#class TLS_EMPTY_RENEGOTIATION_INFO_CSV(_GenericCipherSuite): 572# val = 0x00FF 573 574#class TLS_FALLBACK_SCSV(_GenericCipherSuite): 575# val = 0x5600 576 577class TLS_ECDH_ECDSA_WITH_NULL_SHA(_GenericCipherSuite): 578 val = 0xC001 579 580class TLS_ECDH_ECDSA_WITH_RC4_128_SHA(_GenericCipherSuite): 581 val = 0xC002 582 583class TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 584 val = 0xC003 585 586class TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 587 val = 0xC004 588 589class TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 590 val = 0xC005 591 592class TLS_ECDHE_ECDSA_WITH_NULL_SHA(_GenericCipherSuite): 593 val = 0xC006 594 595class TLS_ECDHE_ECDSA_WITH_RC4_128_SHA(_GenericCipherSuite): 596 val = 0xC007 597 598class TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 599 val = 0xC008 600 601class TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 602 val = 0xC009 603 604class TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 605 val = 0xC00A 606 607class TLS_ECDH_RSA_WITH_NULL_SHA(_GenericCipherSuite): 608 val = 0xC00B 609 610class TLS_ECDH_RSA_WITH_RC4_128_SHA(_GenericCipherSuite): 611 val = 0xC00C 612 613class TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 614 val = 0xC00D 615 616class TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 617 val = 0xC00E 618 619class TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 620 val = 0xC00F 621 622class TLS_ECDHE_RSA_WITH_NULL_SHA(_GenericCipherSuite): 623 val = 0xC010 624 625class TLS_ECDHE_RSA_WITH_RC4_128_SHA(_GenericCipherSuite): 626 val = 0xC011 627 628class TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 629 val = 0xC012 630 631class TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 632 val = 0xC013 633 634class TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 635 val = 0xC014 636 637class TLS_ECDH_anon_WITH_NULL_SHA(_GenericCipherSuite): 638 val = 0xC015 639 640class TLS_ECDH_anon_WITH_RC4_128_SHA(_GenericCipherSuite): 641 val = 0xC016 642 643class TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 644 val = 0xC017 645 646class TLS_ECDH_anon_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 647 val = 0xC018 648 649class TLS_ECDH_anon_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 650 val = 0xC019 651 652class TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 653 val = 0xC01A 654 655class TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 656 val = 0xC01B 657 658class TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 659 val = 0xC01C 660 661class TLS_SRP_SHA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 662 val = 0xC01D 663 664class TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 665 val = 0xC01E 666 667class TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 668 val = 0xC01F 669 670class TLS_SRP_SHA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 671 val = 0xC020 672 673class TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 674 val = 0xC021 675 676class TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 677 val = 0xC022 678 679class TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 680 val = 0xC023 681 682class TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 683 val = 0xC024 684 685class TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 686 val = 0xC025 687 688class TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 689 val = 0xC026 690 691class TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 692 val = 0xC027 693 694class TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 695 val = 0xC028 696 697class TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 698 val = 0xC029 699 700class TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 701 val = 0xC02A 702 703class TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 704 val = 0xC02B 705 706class TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 707 val = 0xC02C 708 709class TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 710 val = 0xC02D 711 712class TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 713 val = 0xC02E 714 715class TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 716 val = 0xC02F 717 718class TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 719 val = 0xC030 720 721class TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 722 val = 0xC031 723 724class TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 725 val = 0xC032 726 727class TLS_ECDHE_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 728 val = 0xC033 729 730class TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 731 val = 0xC034 732 733class TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 734 val = 0xC035 735 736class TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 737 val = 0xC036 738 739class TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 740 val = 0xC037 741 742class TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 743 val = 0xC038 744 745class TLS_ECDHE_PSK_WITH_NULL_SHA(_GenericCipherSuite): 746 val = 0xC039 747 748class TLS_ECDHE_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 749 val = 0xC03A 750 751class TLS_ECDHE_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 752 val = 0xC03B 753 754# suites 0xC03C-C071 use ARIA 755 756class TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 757 val = 0xC072 758 759class TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 760 val = 0xC073 761 762class TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 763 val = 0xC074 764 765class TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 766 val = 0xC075 767 768class TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 769 val = 0xC076 770 771class TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 772 val = 0xC077 773 774class TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 775 val = 0xC078 776 777class TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 778 val = 0xC079 779 780class TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 781 val = 0xC07A 782 783class TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 784 val = 0xC07B 785 786class TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 787 val = 0xC07C 788 789class TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 790 val = 0xC07D 791 792class TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 793 val = 0xC07E 794 795class TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 796 val = 0xC07F 797 798class TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 799 val = 0xC080 800 801class TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 802 val = 0xC081 803 804class TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 805 val = 0xC082 806 807class TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 808 val = 0xC083 809 810class TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 811 val = 0xC084 812 813class TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 814 val = 0xC085 815 816class TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 817 val = 0xC086 818 819class TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 820 val = 0xC087 821 822class TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 823 val = 0xC088 824 825class TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 826 val = 0xC089 827 828class TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 829 val = 0xC08A 830 831class TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 832 val = 0xC08B 833 834class TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 835 val = 0xC08C 836 837class TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 838 val = 0xC08D 839 840class TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 841 val = 0xC08E 842 843class TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 844 val = 0xC08F 845 846class TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 847 val = 0xC090 848 849class TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 850 val = 0xC091 851 852class TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 853 val = 0xC092 854 855class TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 856 val = 0xC093 857 858class TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 859 val = 0xC094 860 861class TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 862 val = 0xC095 863 864class TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 865 val = 0xC096 866 867class TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 868 val = 0xC097 869 870class TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 871 val = 0xC098 872 873class TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 874 val = 0xC099 875 876class TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 877 val = 0xC09A 878 879class TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 880 val = 0xC09B 881 882class TLS_RSA_WITH_AES_128_CCM(_GenericCipherSuite): 883 val = 0xC09C 884 885class TLS_RSA_WITH_AES_256_CCM(_GenericCipherSuite): 886 val = 0xC09D 887 888class TLS_DHE_RSA_WITH_AES_128_CCM(_GenericCipherSuite): 889 val = 0xC09E 890 891class TLS_DHE_RSA_WITH_AES_256_CCM(_GenericCipherSuite): 892 val = 0xC09F 893 894class TLS_RSA_WITH_AES_128_CCM_8(_GenericCipherSuite): 895 val = 0xC0A0 896 897class TLS_RSA_WITH_AES_256_CCM_8(_GenericCipherSuite): 898 val = 0xC0A1 899 900class TLS_DHE_RSA_WITH_AES_128_CCM_8(_GenericCipherSuite): 901 val = 0xC0A2 902 903class TLS_DHE_RSA_WITH_AES_256_CCM_8(_GenericCipherSuite): 904 val = 0xC0A3 905 906class TLS_PSK_WITH_AES_128_CCM(_GenericCipherSuite): 907 val = 0xC0A4 908 909class TLS_PSK_WITH_AES_256_CCM(_GenericCipherSuite): 910 val = 0xC0A5 911 912class TLS_DHE_PSK_WITH_AES_128_CCM(_GenericCipherSuite): 913 val = 0xC0A6 914 915class TLS_DHE_PSK_WITH_AES_256_CCM(_GenericCipherSuite): 916 val = 0xC0A7 917 918class TLS_PSK_WITH_AES_128_CCM_8(_GenericCipherSuite): 919 val = 0xC0A8 920 921class TLS_PSK_WITH_AES_256_CCM_8(_GenericCipherSuite): 922 val = 0xC0A9 923 924class TLS_DHE_PSK_WITH_AES_128_CCM_8(_GenericCipherSuite): 925 val = 0xC0AA 926 927class TLS_DHE_PSK_WITH_AES_256_CCM_8(_GenericCipherSuite): 928 val = 0xC0AB 929 930class TLS_ECDHE_ECDSA_WITH_AES_128_CCM(_GenericCipherSuite): 931 val = 0xC0AC 932 933class TLS_ECDHE_ECDSA_WITH_AES_256_CCM(_GenericCipherSuite): 934 val = 0xC0AD 935 936class TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8(_GenericCipherSuite): 937 val = 0xC0AE 938 939class TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8(_GenericCipherSuite): 940 val = 0xC0AF 941 942# the next 3 suites are from draft-agl-tls-chacha20poly1305-04 943class TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD(_GenericCipherSuite): 944 val = 0xCC13 945 946class TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256_OLD(_GenericCipherSuite): 947 val = 0xCC14 948 949class TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD(_GenericCipherSuite): 950 val = 0xCC15 951 952class TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 953 val = 0xCCA8 954 955class TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 956 val = 0xCCA9 957 958class TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 959 val = 0xCCAA 960 961class TLS_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 962 val = 0xCCAB 963 964class TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 965 val = 0xCCAC 966 967class TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 968 val = 0xCCAD 969 970class TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 971 val = 0xCCAE 972 973 974class TLS_AES_128_GCM_SHA256(_GenericCipherSuite): 975 val = 0x1301 976 977class TLS_AES_256_GCM_SHA384(_GenericCipherSuite): 978 val = 0x1302 979 980class TLS_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 981 val = 0x1303 982 983class TLS_AES_128_CCM_SHA256(_GenericCipherSuite): 984 val = 0x1304 985 986class TLS_AES_128_CCM_8_SHA256(_GenericCipherSuite): 987 val = 0x1305 988 989 990class SSL_CK_RC4_128_WITH_MD5(_GenericCipherSuite): 991 val = 0x010080 992 993class SSL_CK_RC4_128_EXPORT40_WITH_MD5(_GenericCipherSuite): 994 val = 0x020080 995 996class SSL_CK_RC2_128_CBC_WITH_MD5(_GenericCipherSuite): 997 val = 0x030080 998 999class SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5(_GenericCipherSuite): 1000 val = 0x040080 1001 1002class SSL_CK_IDEA_128_CBC_WITH_MD5(_GenericCipherSuite): 1003 val = 0x050080 1004 1005class SSL_CK_DES_64_CBC_WITH_MD5(_GenericCipherSuite): 1006 val = 0x060040 1007 1008class SSL_CK_DES_192_EDE3_CBC_WITH_MD5(_GenericCipherSuite): 1009 val = 0x0700C0 1010 1011 1012_tls_cipher_suites[0x00ff] = "TLS_EMPTY_RENEGOTIATION_INFO_SCSV" 1013_tls_cipher_suites[0x5600] = "TLS_FALLBACK_SCSV" 1014 1015 1016 1017def get_usable_ciphersuites(l, kx): 1018 """ 1019 From a list of proposed ciphersuites, this function returns a list of 1020 usable cipher suites, i.e. for which key exchange, cipher and hash 1021 algorithms are known to be implemented and usable in current version of the 1022 TLS extension. The order of the cipher suites in the list returned by the 1023 function matches the one of the proposal. 1024 """ 1025 res = [] 1026 for c in l: 1027 if c in _tls_cipher_suites_cls: 1028 ciph = _tls_cipher_suites_cls[c] 1029 if ciph.usable: 1030 #XXX select among RSA and ECDSA cipher suites 1031 # according to the key(s) the server was given 1032 if ciph.kx_alg.anonymous or kx in ciph.kx_alg.name: 1033 res.append(c) 1034 return res 1035 1036