1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:58:11 +00:00
serenity/Userland/Libraries/LibTLS/CipherSuite.h
DexesTTP dd35aa7725 LibTLS: Add IANA Hex codes for all recommended cipher suites
Also sort the existing cipher suites, and remove the unsupported ones.
We don't support any of these recommended ciphers, but at least we now
know which ones we should focus on :^)
2021-05-29 13:29:46 +04:30

135 lines
3.7 KiB
C++

/*
* Copyright (c) 2020, Ali Mohammad Pur <mpfard@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
namespace TLS {
enum class CipherSuite {
Invalid = 0,
// Weak cipher suites, but we support them
// RFC 5246 - Original TLS v1.2 ciphers
RSA_WITH_AES_128_CBC_SHA = 0x002F,
RSA_WITH_AES_256_CBC_SHA = 0x0035,
RSA_WITH_AES_128_CBC_SHA256 = 0x003C,
RSA_WITH_AES_256_CBC_SHA256 = 0x003D,
// RFC 5288 - DH, DHE and RSA for AES-GCM
RSA_WITH_AES_128_GCM_SHA256 = 0x009C,
RSA_WITH_AES_256_GCM_SHA384 = 0x009D,
// All recommended cipher suites (according to https://ciphersuite.info/cs/)
// RFC 5288 - DH, DHE and RSA for AES-GCM
DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2,
DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3,
// RFC 5289 - ECDHE for AES-GCM
ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B,
ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C,
// RFC 5487 - Pre-shared keys
DHE_PSK_WITH_AES_128_GCM_SHA256 = 0x00AA,
DHE_PSK_WITH_AES_256_GCM_SHA384 = 0x00AB,
// RFC 6209 - ARIA suites
DHE_DSS_WITH_ARIA_128_GCM_SHA256 = 0xC056,
DHE_DSS_WITH_ARIA_256_GCM_SHA384 = 0xC057,
ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 = 0xC05C,
ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 = 0xC05D,
DHE_PSK_WITH_ARIA_128_GCM_SHA256 = 0xC06C,
DHE_PSK_WITH_ARIA_256_GCM_SHA384 = 0xC06D,
// RFC 6367 - Camellia Cipher Suites
DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 = 0xC080,
DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 = 0xC081,
ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 = 0xC086,
ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 = 0xC087,
DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 = 0xC090,
DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 = 0xC091,
// RFC 6655 - DHE, PSK and RSA with AES-CCM
DHE_PSK_WITH_AES_128_CCM = 0xC0A6,
DHE_PSK_WITH_AES_256_CCM = 0xC0A7,
// RFC 7251 - ECDHE with AES-CCM
ECDHE_ECDSA_WITH_AES_128_CCM = 0xC0AC,
ECDHE_ECDSA_WITH_AES_256_CCM = 0xC0AD,
ECDHE_ECDSA_WITH_AES_128_CCM_8 = 0xC0AE,
ECDHE_ECDSA_WITH_AES_256_CCM_8 = 0xC0AF,
// RFC 7905 - ChaCha20-Poly1305 Cipher Suites
ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA9,
ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 0xCCAC,
DHE_PSK_WITH_CHACHA20_POLY1305 = 0xCCAD,
// RFC 8442 - ECDHE_PSK with AES-GCM and AES-CCM
ECDHE_PSK_WITH_AES_128_GCM_SHA256 = 0xD001,
ECDHE_PSK_WITH_AES_256_GCM_SHA384 = 0xD002,
ECDHE_PSK_WITH_AES_128_CCM_8_SHA256 = 0xD003,
ECDHE_PSK_WITH_AES_128_CCM_SHA256 = 0xD005,
// RFC 8446 - TLS v1.3
AES_128_GCM_SHA256 = 0x1301,
AES_256_GCM_SHA384 = 0x1302,
CHACHA20_POLY1305_SHA256 = 0x1303,
AES_128_CCM_SHA256 = 0x1304,
AES_128_CCM_8_SHA256 = 0x1305,
};
// Defined in RFC 5246 section 7.4.1.4.1
enum class HashAlgorithm : u8 {
None = 0,
MD5 = 1,
SHA1 = 2,
SHA224 = 3,
SHA256 = 4,
SHA384 = 5,
SHA512 = 6,
};
// Defined in RFC 5246 section 7.4.1.4.1
enum class SignatureAlgorithm : u8 {
Anonymous = 0,
RSA = 1,
DSA = 2,
ECDSA = 3,
};
// Defined in RFC 5246 section 7.4.1.4.1
struct SignatureAndHashAlgorithm {
HashAlgorithm hash;
SignatureAlgorithm signature;
};
enum class CipherAlgorithm {
Invalid,
AES_128_CBC,
AES_128_GCM,
AES_128_CCM,
AES_128_CCM_8,
AES_256_CBC,
AES_256_GCM,
};
constexpr size_t cipher_key_size(CipherAlgorithm algorithm)
{
switch (algorithm) {
case CipherAlgorithm::AES_128_CBC:
case CipherAlgorithm::AES_128_GCM:
case CipherAlgorithm::AES_128_CCM:
case CipherAlgorithm::AES_128_CCM_8:
return 128;
case CipherAlgorithm::AES_256_CBC:
case CipherAlgorithm::AES_256_GCM:
return 256;
case CipherAlgorithm::Invalid:
default:
return 0;
}
}
}