123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /*
- * 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 KeyExchangeAlgorithm {
- Invalid,
- // Defined in RFC 5246 section 7.4.2 / RFC 4279 section 4
- RSA_PSK,
- // Defined in RFC 5246 section 7.4.3
- DHE_DSS,
- DHE_RSA,
- DH_anon,
- RSA,
- DH_DSS,
- DH_RSA,
- // Defined in RFC 4492 section 2
- ECDHE_RSA,
- ECDH_ECDSA,
- ECDH_RSA,
- ECDHE_ECDSA,
- ECDH_anon,
- };
- // Defined in RFC 5246 section 7.4.1.4.1
- constexpr SignatureAlgorithm signature_for_key_exchange_algorithm(KeyExchangeAlgorithm algorithm)
- {
- switch (algorithm) {
- case KeyExchangeAlgorithm::RSA:
- case KeyExchangeAlgorithm::DHE_RSA:
- case KeyExchangeAlgorithm::DH_RSA:
- case KeyExchangeAlgorithm::RSA_PSK:
- case KeyExchangeAlgorithm::ECDH_RSA:
- case KeyExchangeAlgorithm::ECDHE_RSA:
- return SignatureAlgorithm::RSA;
- case KeyExchangeAlgorithm::DHE_DSS:
- case KeyExchangeAlgorithm::DH_DSS:
- return SignatureAlgorithm::DSA;
- case KeyExchangeAlgorithm::ECDH_ECDSA:
- case KeyExchangeAlgorithm::ECDHE_ECDSA:
- return SignatureAlgorithm::ECDSA;
- case KeyExchangeAlgorithm::DH_anon:
- case KeyExchangeAlgorithm::ECDH_anon:
- default:
- return SignatureAlgorithm::Anonymous;
- }
- }
- 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;
- }
- }
- }
|