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 """ 7 TLS cipher suites. 8 9 A comprehensive list of specified cipher suites can be consulted at: 10 https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml 11 """ 12 13 from __future__ import absolute_import 14 from scapy.layers.tls.crypto.kx_algs import _tls_kx_algs 15 from scapy.layers.tls.crypto.hash import _tls_hash_algs 16 from scapy.layers.tls.crypto.h_mac import _tls_hmac_algs 17 from scapy.layers.tls.crypto.ciphers import _tls_cipher_algs 18 import scapy.modules.six as six 19 20 21 def 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 73 class _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 128 class _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 145 class TLS_NULL_WITH_NULL_NULL(_GenericCipherSuite): 146 val = 0x0000 147 148 class TLS_RSA_WITH_NULL_MD5(_GenericCipherSuite): 149 val = 0x0001 150 151 class TLS_RSA_WITH_NULL_SHA(_GenericCipherSuite): 152 val = 0x0002 153 154 class TLS_RSA_EXPORT_WITH_RC4_40_MD5(_GenericCipherSuite): 155 val = 0x0003 156 157 class TLS_RSA_WITH_RC4_128_MD5(_GenericCipherSuite): 158 val = 0x0004 159 160 class TLS_RSA_WITH_RC4_128_SHA(_GenericCipherSuite): 161 val = 0x0005 162 163 class TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5(_GenericCipherSuite): 164 val = 0x0006 165 166 class TLS_RSA_WITH_IDEA_CBC_SHA(_GenericCipherSuite): 167 val = 0x0007 168 169 class TLS_RSA_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 170 val = 0x0008 171 172 class TLS_RSA_WITH_DES_CBC_SHA(_GenericCipherSuite): 173 val = 0x0009 174 175 class TLS_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 176 val = 0x000A 177 178 class TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 179 val = 0x000B 180 181 class TLS_DH_DSS_WITH_DES_CBC_SHA(_GenericCipherSuite): 182 val = 0x000C 183 184 class TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 185 val = 0x000D 186 187 class TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 188 val = 0x000E 189 190 class TLS_DH_RSA_WITH_DES_CBC_SHA(_GenericCipherSuite): 191 val = 0x000F 192 193 class TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 194 val = 0x0010 195 196 class TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 197 val = 0x0011 198 199 class TLS_DHE_DSS_WITH_DES_CBC_SHA(_GenericCipherSuite): 200 val = 0x0012 201 202 class TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 203 val = 0x0013 204 205 class TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 206 val = 0x0014 207 208 class TLS_DHE_RSA_WITH_DES_CBC_SHA(_GenericCipherSuite): 209 val = 0x0015 210 211 class TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 212 val = 0x0016 213 214 class TLS_DH_anon_EXPORT_WITH_RC4_40_MD5(_GenericCipherSuite): 215 val = 0x0017 216 217 class TLS_DH_anon_WITH_RC4_128_MD5(_GenericCipherSuite): 218 val = 0x0018 219 220 class TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 221 val = 0x0019 222 223 class TLS_DH_anon_WITH_DES_CBC_SHA(_GenericCipherSuite): 224 val = 0x001A 225 226 class TLS_DH_anon_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 227 val = 0x001B 228 229 class TLS_KRB5_WITH_DES_CBC_SHA(_GenericCipherSuite): 230 val = 0x001E 231 232 class TLS_KRB5_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 233 val = 0x001F 234 235 class TLS_KRB5_WITH_RC4_128_SHA(_GenericCipherSuite): 236 val = 0x0020 237 238 class TLS_KRB5_WITH_IDEA_CBC_SHA(_GenericCipherSuite): 239 val = 0x0021 240 241 class TLS_KRB5_WITH_DES_CBC_MD5(_GenericCipherSuite): 242 val = 0x0022 243 244 class TLS_KRB5_WITH_3DES_EDE_CBC_MD5(_GenericCipherSuite): 245 val = 0x0023 246 247 class TLS_KRB5_WITH_RC4_128_MD5(_GenericCipherSuite): 248 val = 0x0024 249 250 class TLS_KRB5_WITH_IDEA_CBC_MD5(_GenericCipherSuite): 251 val = 0x0025 252 253 class TLS_KRB5_EXPORT_WITH_DES40_CBC_SHA(_GenericCipherSuite): 254 val = 0x0026 255 256 class TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA(_GenericCipherSuite): 257 val = 0x0027 258 259 class TLS_KRB5_EXPORT_WITH_RC4_40_SHA(_GenericCipherSuite): 260 val = 0x0028 261 262 class TLS_KRB5_EXPORT_WITH_DES40_CBC_MD5(_GenericCipherSuite): 263 val = 0x0029 264 265 class TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5(_GenericCipherSuite): 266 val = 0x002A 267 268 class TLS_KRB5_EXPORT_WITH_RC4_40_MD5(_GenericCipherSuite): 269 val = 0x002B 270 271 class TLS_PSK_WITH_NULL_SHA(_GenericCipherSuite): 272 val = 0x002C 273 274 class TLS_DHE_PSK_WITH_NULL_SHA(_GenericCipherSuite): 275 val = 0x002D 276 277 class TLS_RSA_PSK_WITH_NULL_SHA(_GenericCipherSuite): 278 val = 0x002E 279 280 class TLS_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 281 val = 0x002F 282 283 class TLS_DH_DSS_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 284 val = 0x0030 285 286 class TLS_DH_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 287 val = 0x0031 288 289 class TLS_DHE_DSS_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 290 val = 0x0032 291 292 class TLS_DHE_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 293 val = 0x0033 294 295 class TLS_DH_anon_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 296 val = 0x0034 297 298 class TLS_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 299 val = 0x0035 300 301 class TLS_DH_DSS_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 302 val = 0x0036 303 304 class TLS_DH_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 305 val = 0x0037 306 307 class TLS_DHE_DSS_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 308 val = 0x0038 309 310 class TLS_DHE_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 311 val = 0x0039 312 313 class TLS_DH_anon_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 314 val = 0x003A 315 316 class TLS_RSA_WITH_NULL_SHA256(_GenericCipherSuite): 317 val = 0x003B 318 319 class TLS_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 320 val = 0x003C 321 322 class TLS_RSA_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 323 val = 0x003D 324 325 class TLS_DH_DSS_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 326 val = 0x003E 327 328 class TLS_DH_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 329 val = 0x003F 330 331 class TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 332 val = 0x0040 333 334 class TLS_RSA_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 335 val = 0x0041 336 337 class TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 338 val = 0x0042 339 340 class TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 341 val = 0x0043 342 343 class TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 344 val = 0x0044 345 346 class TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 347 val = 0x0045 348 349 class TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA(_GenericCipherSuite): 350 val = 0x0046 351 352 class TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 353 val = 0x0067 354 355 class TLS_DH_DSS_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 356 val = 0x0068 357 358 class TLS_DH_RSA_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 359 val = 0x0069 360 361 class TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 362 val = 0x006A 363 364 class TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 365 val = 0x006B 366 367 class TLS_DH_anon_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 368 val = 0x006C 369 370 class TLS_DH_anon_WITH_AES_256_CBC_SHA256(_GenericCipherSuite): 371 val = 0x006D 372 373 class TLS_RSA_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 374 val = 0x0084 375 376 class TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 377 val = 0x0085 378 379 class TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 380 val = 0x0086 381 382 class TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 383 val = 0x0087 384 385 class TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 386 val = 0x0088 387 388 class TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA(_GenericCipherSuite): 389 val = 0x0089 390 391 class TLS_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 392 val = 0x008A 393 394 class TLS_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 395 val = 0x008B 396 397 class TLS_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 398 val = 0x008C 399 400 class TLS_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 401 val = 0x008D 402 403 class TLS_DHE_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 404 val = 0x008E 405 406 class TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 407 val = 0x008F 408 409 class TLS_DHE_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 410 val = 0x0090 411 412 class TLS_DHE_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 413 val = 0x0091 414 415 class TLS_RSA_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 416 val = 0x0092 417 418 class TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 419 val = 0x0093 420 421 class TLS_RSA_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 422 val = 0x0094 423 424 class TLS_RSA_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 425 val = 0x0095 426 427 class TLS_RSA_WITH_SEED_CBC_SHA(_GenericCipherSuite): 428 val = 0x0096 429 430 class TLS_DH_DSS_WITH_SEED_CBC_SHA(_GenericCipherSuite): 431 val = 0x0097 432 433 class TLS_DH_RSA_WITH_SEED_CBC_SHA(_GenericCipherSuite): 434 val = 0x0098 435 436 class TLS_DHE_DSS_WITH_SEED_CBC_SHA(_GenericCipherSuite): 437 val = 0x0099 438 439 class TLS_DHE_RSA_WITH_SEED_CBC_SHA(_GenericCipherSuite): 440 val = 0x009A 441 442 class TLS_DH_anon_WITH_SEED_CBC_SHA(_GenericCipherSuite): 443 val = 0x009B 444 445 class TLS_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 446 val = 0x009C 447 448 class TLS_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 449 val = 0x009D 450 451 class TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 452 val = 0x009E 453 454 class TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 455 val = 0x009F 456 457 class TLS_DH_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 458 val = 0x00A0 459 460 class TLS_DH_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 461 val = 0x00A1 462 463 class TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 464 val = 0x00A2 465 466 class TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 467 val = 0x00A3 468 469 class TLS_DH_DSS_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 470 val = 0x00A4 471 472 class TLS_DH_DSS_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 473 val = 0x00A5 474 475 class TLS_DH_anon_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 476 val = 0x00A6 477 478 class TLS_DH_anon_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 479 val = 0x00A7 480 481 class TLS_PSK_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 482 val = 0x00A8 483 484 class TLS_PSK_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 485 val = 0x00A9 486 487 class TLS_DHE_PSK_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 488 val = 0x00AA 489 490 class TLS_DHE_PSK_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 491 val = 0x00AB 492 493 class TLS_RSA_PSK_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 494 val = 0x00AC 495 496 class TLS_RSA_PSK_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 497 val = 0x00AD 498 499 class TLS_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 500 val = 0x00AE 501 502 class TLS_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 503 val = 0x00AF 504 505 class TLS_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 506 val = 0x00B0 507 508 class TLS_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 509 val = 0x00B1 510 511 class TLS_DHE_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 512 val = 0x00B2 513 514 class TLS_DHE_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 515 val = 0x00B3 516 517 class TLS_DHE_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 518 val = 0x00B4 519 520 class TLS_DHE_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 521 val = 0x00B5 522 523 class TLS_RSA_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 524 val = 0x00B6 525 526 class TLS_RSA_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 527 val = 0x00B7 528 529 class TLS_RSA_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 530 val = 0x00B8 531 532 class TLS_RSA_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 533 val = 0x00B9 534 535 class TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 536 val = 0x00BA 537 538 class TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 539 val = 0x00BB 540 541 class TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 542 val = 0x00BC 543 544 class TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 545 val = 0x00BD 546 547 class TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 548 val = 0x00BE 549 550 class TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 551 val = 0x00BF 552 553 class TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 554 val = 0x00C0 555 556 class TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 557 val = 0x00C1 558 559 class TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 560 val = 0x00C2 561 562 class TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 563 val = 0x00C3 564 565 class TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256(_GenericCipherSuite): 566 val = 0x00C4 567 568 class 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 577 class TLS_ECDH_ECDSA_WITH_NULL_SHA(_GenericCipherSuite): 578 val = 0xC001 579 580 class TLS_ECDH_ECDSA_WITH_RC4_128_SHA(_GenericCipherSuite): 581 val = 0xC002 582 583 class TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 584 val = 0xC003 585 586 class TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 587 val = 0xC004 588 589 class TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 590 val = 0xC005 591 592 class TLS_ECDHE_ECDSA_WITH_NULL_SHA(_GenericCipherSuite): 593 val = 0xC006 594 595 class TLS_ECDHE_ECDSA_WITH_RC4_128_SHA(_GenericCipherSuite): 596 val = 0xC007 597 598 class TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 599 val = 0xC008 600 601 class TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 602 val = 0xC009 603 604 class TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 605 val = 0xC00A 606 607 class TLS_ECDH_RSA_WITH_NULL_SHA(_GenericCipherSuite): 608 val = 0xC00B 609 610 class TLS_ECDH_RSA_WITH_RC4_128_SHA(_GenericCipherSuite): 611 val = 0xC00C 612 613 class TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 614 val = 0xC00D 615 616 class TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 617 val = 0xC00E 618 619 class TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 620 val = 0xC00F 621 622 class TLS_ECDHE_RSA_WITH_NULL_SHA(_GenericCipherSuite): 623 val = 0xC010 624 625 class TLS_ECDHE_RSA_WITH_RC4_128_SHA(_GenericCipherSuite): 626 val = 0xC011 627 628 class TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 629 val = 0xC012 630 631 class TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 632 val = 0xC013 633 634 class TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 635 val = 0xC014 636 637 class TLS_ECDH_anon_WITH_NULL_SHA(_GenericCipherSuite): 638 val = 0xC015 639 640 class TLS_ECDH_anon_WITH_RC4_128_SHA(_GenericCipherSuite): 641 val = 0xC016 642 643 class TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 644 val = 0xC017 645 646 class TLS_ECDH_anon_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 647 val = 0xC018 648 649 class TLS_ECDH_anon_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 650 val = 0xC019 651 652 class TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 653 val = 0xC01A 654 655 class TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 656 val = 0xC01B 657 658 class TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 659 val = 0xC01C 660 661 class TLS_SRP_SHA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 662 val = 0xC01D 663 664 class TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 665 val = 0xC01E 666 667 class TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 668 val = 0xC01F 669 670 class TLS_SRP_SHA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 671 val = 0xC020 672 673 class TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 674 val = 0xC021 675 676 class TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 677 val = 0xC022 678 679 class TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 680 val = 0xC023 681 682 class TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 683 val = 0xC024 684 685 class TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 686 val = 0xC025 687 688 class TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 689 val = 0xC026 690 691 class TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 692 val = 0xC027 693 694 class TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 695 val = 0xC028 696 697 class TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 698 val = 0xC029 699 700 class TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 701 val = 0xC02A 702 703 class TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 704 val = 0xC02B 705 706 class TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 707 val = 0xC02C 708 709 class TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 710 val = 0xC02D 711 712 class TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 713 val = 0xC02E 714 715 class TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 716 val = 0xC02F 717 718 class TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 719 val = 0xC030 720 721 class TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(_GenericCipherSuite): 722 val = 0xC031 723 724 class TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(_GenericCipherSuite): 725 val = 0xC032 726 727 class TLS_ECDHE_PSK_WITH_RC4_128_SHA(_GenericCipherSuite): 728 val = 0xC033 729 730 class TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA(_GenericCipherSuite): 731 val = 0xC034 732 733 class TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA(_GenericCipherSuite): 734 val = 0xC035 735 736 class TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA(_GenericCipherSuite): 737 val = 0xC036 738 739 class TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256(_GenericCipherSuite): 740 val = 0xC037 741 742 class TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384(_GenericCipherSuite): 743 val = 0xC038 744 745 class TLS_ECDHE_PSK_WITH_NULL_SHA(_GenericCipherSuite): 746 val = 0xC039 747 748 class TLS_ECDHE_PSK_WITH_NULL_SHA256(_GenericCipherSuite): 749 val = 0xC03A 750 751 class TLS_ECDHE_PSK_WITH_NULL_SHA384(_GenericCipherSuite): 752 val = 0xC03B 753 754 # suites 0xC03C-C071 use ARIA 755 756 class TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 757 val = 0xC072 758 759 class TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 760 val = 0xC073 761 762 class TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 763 val = 0xC074 764 765 class TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 766 val = 0xC075 767 768 class TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 769 val = 0xC076 770 771 class TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 772 val = 0xC077 773 774 class TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 775 val = 0xC078 776 777 class TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 778 val = 0xC079 779 780 class TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 781 val = 0xC07A 782 783 class TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 784 val = 0xC07B 785 786 class TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 787 val = 0xC07C 788 789 class TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 790 val = 0xC07D 791 792 class TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 793 val = 0xC07E 794 795 class TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 796 val = 0xC07F 797 798 class TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 799 val = 0xC080 800 801 class TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 802 val = 0xC081 803 804 class TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 805 val = 0xC082 806 807 class TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 808 val = 0xC083 809 810 class TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 811 val = 0xC084 812 813 class TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 814 val = 0xC085 815 816 class TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 817 val = 0xC086 818 819 class TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 820 val = 0xC087 821 822 class TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 823 val = 0xC088 824 825 class TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 826 val = 0xC089 827 828 class TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 829 val = 0xC08A 830 831 class TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 832 val = 0xC08B 833 834 class TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 835 val = 0xC08C 836 837 class TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 838 val = 0xC08D 839 840 class TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 841 val = 0xC08E 842 843 class TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 844 val = 0xC08F 845 846 class TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 847 val = 0xC090 848 849 class TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 850 val = 0xC091 851 852 class TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256(_GenericCipherSuite): 853 val = 0xC092 854 855 class TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384(_GenericCipherSuite): 856 val = 0xC093 857 858 class TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 859 val = 0xC094 860 861 class TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 862 val = 0xC095 863 864 class TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 865 val = 0xC096 866 867 class TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 868 val = 0xC097 869 870 class TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 871 val = 0xC098 872 873 class TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 874 val = 0xC099 875 876 class TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256(_GenericCipherSuite): 877 val = 0xC09A 878 879 class TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384(_GenericCipherSuite): 880 val = 0xC09B 881 882 class TLS_RSA_WITH_AES_128_CCM(_GenericCipherSuite): 883 val = 0xC09C 884 885 class TLS_RSA_WITH_AES_256_CCM(_GenericCipherSuite): 886 val = 0xC09D 887 888 class TLS_DHE_RSA_WITH_AES_128_CCM(_GenericCipherSuite): 889 val = 0xC09E 890 891 class TLS_DHE_RSA_WITH_AES_256_CCM(_GenericCipherSuite): 892 val = 0xC09F 893 894 class TLS_RSA_WITH_AES_128_CCM_8(_GenericCipherSuite): 895 val = 0xC0A0 896 897 class TLS_RSA_WITH_AES_256_CCM_8(_GenericCipherSuite): 898 val = 0xC0A1 899 900 class TLS_DHE_RSA_WITH_AES_128_CCM_8(_GenericCipherSuite): 901 val = 0xC0A2 902 903 class TLS_DHE_RSA_WITH_AES_256_CCM_8(_GenericCipherSuite): 904 val = 0xC0A3 905 906 class TLS_PSK_WITH_AES_128_CCM(_GenericCipherSuite): 907 val = 0xC0A4 908 909 class TLS_PSK_WITH_AES_256_CCM(_GenericCipherSuite): 910 val = 0xC0A5 911 912 class TLS_DHE_PSK_WITH_AES_128_CCM(_GenericCipherSuite): 913 val = 0xC0A6 914 915 class TLS_DHE_PSK_WITH_AES_256_CCM(_GenericCipherSuite): 916 val = 0xC0A7 917 918 class TLS_PSK_WITH_AES_128_CCM_8(_GenericCipherSuite): 919 val = 0xC0A8 920 921 class TLS_PSK_WITH_AES_256_CCM_8(_GenericCipherSuite): 922 val = 0xC0A9 923 924 class TLS_DHE_PSK_WITH_AES_128_CCM_8(_GenericCipherSuite): 925 val = 0xC0AA 926 927 class TLS_DHE_PSK_WITH_AES_256_CCM_8(_GenericCipherSuite): 928 val = 0xC0AB 929 930 class TLS_ECDHE_ECDSA_WITH_AES_128_CCM(_GenericCipherSuite): 931 val = 0xC0AC 932 933 class TLS_ECDHE_ECDSA_WITH_AES_256_CCM(_GenericCipherSuite): 934 val = 0xC0AD 935 936 class TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8(_GenericCipherSuite): 937 val = 0xC0AE 938 939 class 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 943 class TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD(_GenericCipherSuite): 944 val = 0xCC13 945 946 class TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256_OLD(_GenericCipherSuite): 947 val = 0xCC14 948 949 class TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256_OLD(_GenericCipherSuite): 950 val = 0xCC15 951 952 class TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 953 val = 0xCCA8 954 955 class TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 956 val = 0xCCA9 957 958 class TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 959 val = 0xCCAA 960 961 class TLS_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 962 val = 0xCCAB 963 964 class TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 965 val = 0xCCAC 966 967 class TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 968 val = 0xCCAD 969 970 class TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 971 val = 0xCCAE 972 973 974 class TLS_AES_128_GCM_SHA256(_GenericCipherSuite): 975 val = 0x1301 976 977 class TLS_AES_256_GCM_SHA384(_GenericCipherSuite): 978 val = 0x1302 979 980 class TLS_CHACHA20_POLY1305_SHA256(_GenericCipherSuite): 981 val = 0x1303 982 983 class TLS_AES_128_CCM_SHA256(_GenericCipherSuite): 984 val = 0x1304 985 986 class TLS_AES_128_CCM_8_SHA256(_GenericCipherSuite): 987 val = 0x1305 988 989 990 class SSL_CK_RC4_128_WITH_MD5(_GenericCipherSuite): 991 val = 0x010080 992 993 class SSL_CK_RC4_128_EXPORT40_WITH_MD5(_GenericCipherSuite): 994 val = 0x020080 995 996 class SSL_CK_RC2_128_CBC_WITH_MD5(_GenericCipherSuite): 997 val = 0x030080 998 999 class SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5(_GenericCipherSuite): 1000 val = 0x040080 1001 1002 class SSL_CK_IDEA_128_CBC_WITH_MD5(_GenericCipherSuite): 1003 val = 0x050080 1004 1005 class SSL_CK_DES_64_CBC_WITH_MD5(_GenericCipherSuite): 1006 val = 0x060040 1007 1008 class 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 1017 def 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