CipherSuite.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * CipherSuite.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include <WString.h>
14 #include <FlashString/Array.hpp>
15 
16 namespace Ssl
17 {
27 #define SSL_CIPHER_SUITE_MAP(XX) \
28  /* From RFC 5246 */ \
29  XX(NULL_WITH_NULL_NULL, 0x0000) \
30  XX(RSA_WITH_NULL_MD5, 0x0001) \
31  XX(RSA_WITH_NULL_SHA, 0x0002) \
32  XX(RSA_WITH_NULL_SHA256, 0x003B) \
33  XX(RSA_WITH_RC4_128_MD5, 0x0004) \
34  XX(RSA_WITH_RC4_128_SHA, 0x0005) \
35  XX(RSA_WITH_3DES_EDE_CBC_SHA, 0x000A) \
36  XX(RSA_WITH_AES_128_CBC_SHA, 0x002F) \
37  XX(RSA_WITH_AES_256_CBC_SHA, 0x0035) \
38  XX(RSA_WITH_AES_128_CBC_SHA256, 0x003C) \
39  XX(RSA_WITH_AES_256_CBC_SHA256, 0x003D) \
40  XX(DH_DSS_WITH_3DES_EDE_CBC_SHA, 0x000D) \
41  XX(DH_RSA_WITH_3DES_EDE_CBC_SHA, 0x0010) \
42  XX(DHE_DSS_WITH_3DES_EDE_CBC_SHA, 0x0013) \
43  XX(DHE_RSA_WITH_3DES_EDE_CBC_SHA, 0x0016) \
44  XX(DH_DSS_WITH_AES_128_CBC_SHA, 0x0030) \
45  XX(DH_RSA_WITH_AES_128_CBC_SHA, 0x0031) \
46  XX(DHE_DSS_WITH_AES_128_CBC_SHA, 0x0032) \
47  XX(DHE_RSA_WITH_AES_128_CBC_SHA, 0x0033) \
48  XX(DH_DSS_WITH_AES_256_CBC_SHA, 0x0036) \
49  XX(DH_RSA_WITH_AES_256_CBC_SHA, 0x0037) \
50  XX(DHE_DSS_WITH_AES_256_CBC_SHA, 0x0038) \
51  XX(DHE_RSA_WITH_AES_256_CBC_SHA, 0x0039) \
52  XX(DH_DSS_WITH_AES_128_CBC_SHA256, 0x003E) \
53  XX(DH_RSA_WITH_AES_128_CBC_SHA256, 0x003F) \
54  XX(DHE_DSS_WITH_AES_128_CBC_SHA256, 0x0040) \
55  XX(DHE_RSA_WITH_AES_128_CBC_SHA256, 0x0067) \
56  XX(DH_DSS_WITH_AES_256_CBC_SHA256, 0x0068) \
57  XX(DH_RSA_WITH_AES_256_CBC_SHA256, 0x0069) \
58  XX(DHE_DSS_WITH_AES_256_CBC_SHA256, 0x006A) \
59  XX(DHE_RSA_WITH_AES_256_CBC_SHA256, 0x006B) \
60  XX(DH_anon_WITH_RC4_128_MD5, 0x0018) \
61  XX(DH_anon_WITH_3DES_EDE_CBC_SHA, 0x001B) \
62  XX(DH_anon_WITH_AES_128_CBC_SHA, 0x0034) \
63  XX(DH_anon_WITH_AES_256_CBC_SHA, 0x003A) \
64  XX(DH_anon_WITH_AES_128_CBC_SHA256, 0x006C) \
65  XX(DH_anon_WITH_AES_256_CBC_SHA256, 0x006D) \
66  /* From, RFC, 4492, */ \
67  XX(ECDH_ECDSA_WITH_NULL_SHA, 0xC001) \
68  XX(ECDH_ECDSA_WITH_RC4_128_SHA, 0xC002) \
69  XX(ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, 0xC003) \
70  XX(ECDH_ECDSA_WITH_AES_128_CBC_SHA, 0xC004) \
71  XX(ECDH_ECDSA_WITH_AES_256_CBC_SHA, 0xC005) \
72  XX(ECDHE_ECDSA_WITH_NULL_SHA, 0xC006) \
73  XX(ECDHE_ECDSA_WITH_RC4_128_SHA, 0xC007) \
74  XX(ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, 0xC008) \
75  XX(ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 0xC009) \
76  XX(ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 0xC00A) \
77  XX(ECDH_RSA_WITH_NULL_SHA, 0xC00B) \
78  XX(ECDH_RSA_WITH_RC4_128_SHA, 0xC00C) \
79  XX(ECDH_RSA_WITH_3DES_EDE_CBC_SHA, 0xC00D) \
80  XX(ECDH_RSA_WITH_AES_128_CBC_SHA, 0xC00E) \
81  XX(ECDH_RSA_WITH_AES_256_CBC_SHA, 0xC00F) \
82  XX(ECDHE_RSA_WITH_NULL_SHA, 0xC010) \
83  XX(ECDHE_RSA_WITH_RC4_128_SHA, 0xC011) \
84  XX(ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 0xC012) \
85  XX(ECDHE_RSA_WITH_AES_128_CBC_SHA, 0xC013) \
86  XX(ECDHE_RSA_WITH_AES_256_CBC_SHA, 0xC014) \
87  XX(ECDH_anon_WITH_NULL_SHA, 0xC015) \
88  XX(ECDH_anon_WITH_RC4_128_SHA, 0xC016) \
89  XX(ECDH_anon_WITH_3DES_EDE_CBC_SHA, 0xC017) \
90  XX(ECDH_anon_WITH_AES_128_CBC_SHA, 0xC018) \
91  XX(ECDH_anon_WITH_AES_256_CBC_SHA, 0xC019) \
92  /* From, RFC, 5288, */ \
93  XX(RSA_WITH_AES_128_GCM_SHA256, 0x009C) \
94  XX(RSA_WITH_AES_256_GCM_SHA384, 0x009D) \
95  XX(DHE_RSA_WITH_AES_128_GCM_SHA256, 0x009E) \
96  XX(DHE_RSA_WITH_AES_256_GCM_SHA384, 0x009F) \
97  XX(DH_RSA_WITH_AES_128_GCM_SHA256, 0x00A0) \
98  XX(DH_RSA_WITH_AES_256_GCM_SHA384, 0x00A1) \
99  XX(DHE_DSS_WITH_AES_128_GCM_SHA256, 0x00A2) \
100  XX(DHE_DSS_WITH_AES_256_GCM_SHA384, 0x00A3) \
101  XX(DH_DSS_WITH_AES_128_GCM_SHA256, 0x00A4) \
102  XX(DH_DSS_WITH_AES_256_GCM_SHA384, 0x00A5) \
103  XX(DH_anon_WITH_AES_128_GCM_SHA256, 0x00A6) \
104  XX(DH_anon_WITH_AES_256_GCM_SHA384, 0x00A7) \
105  /* From, RFC, 5289, */ \
106  XX(ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 0xC023) \
107  XX(ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, 0xC024) \
108  XX(ECDH_ECDSA_WITH_AES_128_CBC_SHA256, 0xC025) \
109  XX(ECDH_ECDSA_WITH_AES_256_CBC_SHA384, 0xC026) \
110  XX(ECDHE_RSA_WITH_AES_128_CBC_SHA256, 0xC027) \
111  XX(ECDHE_RSA_WITH_AES_256_CBC_SHA384, 0xC028) \
112  XX(ECDH_RSA_WITH_AES_128_CBC_SHA256, 0xC029) \
113  XX(ECDH_RSA_WITH_AES_256_CBC_SHA384, 0xC02A) \
114  XX(ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0xC02B) \
115  XX(ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 0xC02C) \
116  XX(ECDH_ECDSA_WITH_AES_128_GCM_SHA256, 0xC02D) \
117  XX(ECDH_ECDSA_WITH_AES_256_GCM_SHA384, 0xC02E) \
118  XX(ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0xC02F) \
119  XX(ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0xC030) \
120  XX(ECDH_RSA_WITH_AES_128_GCM_SHA256, 0xC031) \
121  XX(ECDH_RSA_WITH_AES_256_GCM_SHA384, 0xC032) \
122  /* From, RFC, 6655, and, 7251, */ \
123  XX(RSA_WITH_AES_128_CCM, 0xC09C) \
124  XX(RSA_WITH_AES_256_CCM, 0xC09D) \
125  XX(RSA_WITH_AES_128_CCM_8, 0xC0A0) \
126  XX(RSA_WITH_AES_256_CCM_8, 0xC0A1) \
127  XX(ECDHE_ECDSA_WITH_AES_128_CCM, 0xC0AC) \
128  XX(ECDHE_ECDSA_WITH_AES_256_CCM, 0xC0AD) \
129  XX(ECDHE_ECDSA_WITH_AES_128_CCM_8, 0xC0AE) \
130  XX(ECDHE_ECDSA_WITH_AES_256_CCM_8, 0xC0AF) \
131  /* From, RFC, 7905, */ \
132  XX(ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCA8) \
133  XX(ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCA9) \
134  XX(DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCAA) \
135  XX(PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAB) \
136  XX(ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAC) \
137  XX(DHE_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAD) \
138  XX(RSA_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAE) \
139  /* From, RFC, 7507, */ \
140  XX(FALLBACK_SCSV, 0x5600)
141 
154 enum class CipherSuite : uint16_t {
155 #define XX(tag, code) tag = code,
157 #undef XX
158 };
159 
166 
172 namespace CipherSuites
173 {
178 #define DECLARE_CIPHER_SUITES(name) DECLARE_FSTR_ARRAY(name, Ssl::CipherSuite)
179 #define DEFINE_CIPHER_SUITES(name, ...) DEFINE_FSTR_ARRAY(name, Ssl::CipherSuite, __VA_ARGS__)
183 
192 } // namespace CipherSuites
195 } // namespace Ssl
#define SSL_CIPHER_SUITE_MAP(XX)
Cipher suites.
Definition: CipherSuite.h:27
Class to access an array of integral values stored in flash.
Definition: Array.hpp:114
The String class.
Definition: WString.h:137
DECLARE_CIPHER_SUITES(basic)
Supported by all adapters.
Definition: Alert.h:16
String toString(Certificate::RDN rdn)
Obtain a string describing the given name component.
CipherSuite
Cipher suite identifier.
Definition: CipherSuite.h:154