Botan 3.12.0
Crypto and TLS for C&
tls_suite_info.cpp
Go to the documentation of this file.
1/*
2* TLS cipher suite information
3*
4* This file was automatically generated by ./src/scripts/dev_tools/gen_tls_suite_info.py on 2026-04-29
5* using the IANA assignments (tls-parameters.txt sha256 f466647ca9b2d2b357af29d93ecb19e55d0eb99a160a221c125e5cf3a7cfd9bb)
6* All manual changes will be lost. Edit the script instead.
7*
8* Botan is released under the Simplified BSD License (see license.txt)
9*/
10
11#include <botan/tls_ciphersuite.h>
12
13#include <algorithm>
14#include <array>
15
16namespace Botan::TLS {
17
18namespace {
19
20consteval auto available_ciphersuites() {
21 // clang-format off
22 auto codes = std::array {
23#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_DES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
24 uint16_t{0x000A}, // RSA_WITH_3DES_EDE_CBC_SHA
25#endif
26#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_DES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
27 uint16_t{0x0016}, // DHE_RSA_WITH_3DES_EDE_CBC_SHA
28#endif
29#if defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA1)
30 uint16_t{0x002C}, // PSK_WITH_NULL_SHA
31#endif
32#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
33 uint16_t{0x002F}, // RSA_WITH_AES_128_CBC_SHA
34#endif
35#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
36 uint16_t{0x0033}, // DHE_RSA_WITH_AES_128_CBC_SHA
37#endif
38#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
39 uint16_t{0x0035}, // RSA_WITH_AES_256_CBC_SHA
40#endif
41#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
42 uint16_t{0x0039}, // DHE_RSA_WITH_AES_256_CBC_SHA
43#endif
44#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
45 uint16_t{0x003C}, // RSA_WITH_AES_128_CBC_SHA256
46#endif
47#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
48 uint16_t{0x003D}, // RSA_WITH_AES_256_CBC_SHA256
49#endif
50#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
51 uint16_t{0x0067}, // DHE_RSA_WITH_AES_128_CBC_SHA256
52#endif
53#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
54 uint16_t{0x006B}, // DHE_RSA_WITH_AES_256_CBC_SHA256
55#endif
56#if defined(BOTAN_HAS_DES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
57 uint16_t{0x008B}, // PSK_WITH_3DES_EDE_CBC_SHA
58#endif
59#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
60 uint16_t{0x008C}, // PSK_WITH_AES_128_CBC_SHA
61#endif
62#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
63 uint16_t{0x008D}, // PSK_WITH_AES_256_CBC_SHA
64#endif
65#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
66 uint16_t{0x009C}, // RSA_WITH_AES_128_GCM_SHA256
67#endif
68#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
69 uint16_t{0x009D}, // RSA_WITH_AES_256_GCM_SHA384
70#endif
71#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
72 uint16_t{0x009E}, // DHE_RSA_WITH_AES_128_GCM_SHA256
73#endif
74#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
75 uint16_t{0x009F}, // DHE_RSA_WITH_AES_256_GCM_SHA384
76#endif
77#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
78 uint16_t{0x00A8}, // PSK_WITH_AES_128_GCM_SHA256
79#endif
80#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
81 uint16_t{0x00A9}, // PSK_WITH_AES_256_GCM_SHA384
82#endif
83#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
84 uint16_t{0x00AE}, // PSK_WITH_AES_128_CBC_SHA256
85#endif
86#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_64)
87 uint16_t{0x00AF}, // PSK_WITH_AES_256_CBC_SHA384
88#endif
89#if defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA2_32)
90 uint16_t{0x00B0}, // PSK_WITH_NULL_SHA256
91#endif
92#if defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA2_64)
93 uint16_t{0x00B1}, // PSK_WITH_NULL_SHA384
94#endif
95#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
96 uint16_t{0x1301}, // AES_128_GCM_SHA256
97#endif
98#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
99 uint16_t{0x1302}, // AES_256_GCM_SHA384
100#endif
101#if defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305) && defined(BOTAN_HAS_SHA2_32)
102 uint16_t{0x1303}, // CHACHA20_POLY1305_SHA256
103#endif
104#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
105 uint16_t{0x1304}, // AES_128_CCM_SHA256
106#endif
107#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
108 uint16_t{0x1305}, // AES_128_CCM_8_SHA256
109#endif
110#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA1)
111 uint16_t{0xC006}, // ECDHE_ECDSA_WITH_NULL_SHA
112#endif
113#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_DES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
114 uint16_t{0xC008}, // ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
115#endif
116#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
117 uint16_t{0xC009}, // ECDHE_ECDSA_WITH_AES_128_CBC_SHA
118#endif
119#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
120 uint16_t{0xC00A}, // ECDHE_ECDSA_WITH_AES_256_CBC_SHA
121#endif
122#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA1)
123 uint16_t{0xC010}, // ECDHE_RSA_WITH_NULL_SHA
124#endif
125#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_DES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
126 uint16_t{0xC012}, // ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
127#endif
128#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
129 uint16_t{0xC013}, // ECDHE_RSA_WITH_AES_128_CBC_SHA
130#endif
131#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
132 uint16_t{0xC014}, // ECDHE_RSA_WITH_AES_256_CBC_SHA
133#endif
134#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
135 uint16_t{0xC023}, // ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
136#endif
137#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_64)
138 uint16_t{0xC024}, // ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
139#endif
140#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
141 uint16_t{0xC027}, // ECDHE_RSA_WITH_AES_128_CBC_SHA256
142#endif
143#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_64)
144 uint16_t{0xC028}, // ECDHE_RSA_WITH_AES_256_CBC_SHA384
145#endif
146#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
147 uint16_t{0xC02B}, // ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
148#endif
149#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
150 uint16_t{0xC02C}, // ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
151#endif
152#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
153 uint16_t{0xC02F}, // ECDHE_RSA_WITH_AES_128_GCM_SHA256
154#endif
155#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
156 uint16_t{0xC030}, // ECDHE_RSA_WITH_AES_256_GCM_SHA384
157#endif
158#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_DES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
159 uint16_t{0xC034}, // ECDHE_PSK_WITH_3DES_EDE_CBC_SHA
160#endif
161#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
162 uint16_t{0xC035}, // ECDHE_PSK_WITH_AES_128_CBC_SHA
163#endif
164#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA1)
165 uint16_t{0xC036}, // ECDHE_PSK_WITH_AES_256_CBC_SHA
166#endif
167#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_32)
168 uint16_t{0xC037}, // ECDHE_PSK_WITH_AES_128_CBC_SHA256
169#endif
170#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_TLS_CBC) && defined(BOTAN_HAS_SHA2_64)
171 uint16_t{0xC038}, // ECDHE_PSK_WITH_AES_256_CBC_SHA384
172#endif
173#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA1)
174 uint16_t{0xC039}, // ECDHE_PSK_WITH_NULL_SHA
175#endif
176#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA2_32)
177 uint16_t{0xC03A}, // ECDHE_PSK_WITH_NULL_SHA256
178#endif
179#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_TLS_NULL) && defined(BOTAN_HAS_SHA2_64)
180 uint16_t{0xC03B}, // ECDHE_PSK_WITH_NULL_SHA384
181#endif
182#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
183 uint16_t{0xC050}, // RSA_WITH_ARIA_128_GCM_SHA256
184#endif
185#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
186 uint16_t{0xC051}, // RSA_WITH_ARIA_256_GCM_SHA384
187#endif
188#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
189 uint16_t{0xC052}, // DHE_RSA_WITH_ARIA_128_GCM_SHA256
190#endif
191#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
192 uint16_t{0xC053}, // DHE_RSA_WITH_ARIA_256_GCM_SHA384
193#endif
194#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
195 uint16_t{0xC05C}, // ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256
196#endif
197#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
198 uint16_t{0xC05D}, // ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384
199#endif
200#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
201 uint16_t{0xC060}, // ECDHE_RSA_WITH_ARIA_128_GCM_SHA256
202#endif
203#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
204 uint16_t{0xC061}, // ECDHE_RSA_WITH_ARIA_256_GCM_SHA384
205#endif
206#if defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
207 uint16_t{0xC06A}, // PSK_WITH_ARIA_128_GCM_SHA256
208#endif
209#if defined(BOTAN_HAS_ARIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
210 uint16_t{0xC06B}, // PSK_WITH_ARIA_256_GCM_SHA384
211#endif
212#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
213 uint16_t{0xC07A}, // RSA_WITH_CAMELLIA_128_GCM_SHA256
214#endif
215#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
216 uint16_t{0xC07B}, // RSA_WITH_CAMELLIA_256_GCM_SHA384
217#endif
218#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
219 uint16_t{0xC07C}, // DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
220#endif
221#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
222 uint16_t{0xC07D}, // DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
223#endif
224#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
225 uint16_t{0xC086}, // ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
226#endif
227#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
228 uint16_t{0xC087}, // ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
229#endif
230#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
231 uint16_t{0xC08A}, // ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
232#endif
233#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
234 uint16_t{0xC08B}, // ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
235#endif
236#if defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
237 uint16_t{0xC08E}, // PSK_WITH_CAMELLIA_128_GCM_SHA256
238#endif
239#if defined(BOTAN_HAS_CAMELLIA) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
240 uint16_t{0xC08F}, // PSK_WITH_CAMELLIA_256_GCM_SHA384
241#endif
242#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
243 uint16_t{0xC09C}, // RSA_WITH_AES_128_CCM
244#endif
245#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
246 uint16_t{0xC09D}, // RSA_WITH_AES_256_CCM
247#endif
248#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
249 uint16_t{0xC09E}, // DHE_RSA_WITH_AES_128_CCM
250#endif
251#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
252 uint16_t{0xC09F}, // DHE_RSA_WITH_AES_256_CCM
253#endif
254#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
255 uint16_t{0xC0A0}, // RSA_WITH_AES_128_CCM_8
256#endif
257#if defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_PKCSV15_ENCRYPTION_PADDING) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
258 uint16_t{0xC0A1}, // RSA_WITH_AES_256_CCM_8
259#endif
260#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
261 uint16_t{0xC0A2}, // DHE_RSA_WITH_AES_128_CCM_8
262#endif
263#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
264 uint16_t{0xC0A3}, // DHE_RSA_WITH_AES_256_CCM_8
265#endif
266#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
267 uint16_t{0xC0A4}, // PSK_WITH_AES_128_CCM
268#endif
269#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
270 uint16_t{0xC0A5}, // PSK_WITH_AES_256_CCM
271#endif
272#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
273 uint16_t{0xC0A8}, // PSK_WITH_AES_128_CCM_8
274#endif
275#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
276 uint16_t{0xC0A9}, // PSK_WITH_AES_256_CCM_8
277#endif
278#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
279 uint16_t{0xC0AC}, // ECDHE_ECDSA_WITH_AES_128_CCM
280#endif
281#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
282 uint16_t{0xC0AD}, // ECDHE_ECDSA_WITH_AES_256_CCM
283#endif
284#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
285 uint16_t{0xC0AE}, // ECDHE_ECDSA_WITH_AES_128_CCM_8
286#endif
287#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
288 uint16_t{0xC0AF}, // ECDHE_ECDSA_WITH_AES_256_CCM_8
289#endif
290#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305) && defined(BOTAN_HAS_SHA2_32)
291 uint16_t{0xCCA8}, // ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
292#endif
293#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305) && defined(BOTAN_HAS_SHA2_32)
294 uint16_t{0xCCA9}, // ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
295#endif
296#if defined(BOTAN_HAS_DIFFIE_HELLMAN) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305) && defined(BOTAN_HAS_SHA2_32)
297 uint16_t{0xCCAA}, // DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
298#endif
299#if defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305) && defined(BOTAN_HAS_SHA2_32)
300 uint16_t{0xCCAB}, // PSK_WITH_CHACHA20_POLY1305_SHA256
301#endif
302#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AEAD_CHACHA20_POLY1305) && defined(BOTAN_HAS_SHA2_32)
303 uint16_t{0xCCAC}, // ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256
304#endif
305#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_32)
306 uint16_t{0xD001}, // ECDHE_PSK_WITH_AES_128_GCM_SHA256
307#endif
308#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_GCM) && defined(BOTAN_HAS_SHA2_64)
309 uint16_t{0xD002}, // ECDHE_PSK_WITH_AES_256_GCM_SHA384
310#endif
311#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
312 uint16_t{0xD003}, // ECDHE_PSK_WITH_AES_128_CCM_8_SHA256
313#endif
314#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_CCM) && defined(BOTAN_HAS_SHA2_32)
315 uint16_t{0xD005}, // ECDHE_PSK_WITH_AES_128_CCM_SHA256
316#endif
317#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_RSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_OCB) && defined(BOTAN_HAS_SHA2_32)
318 uint16_t{0xFFC3}, // ECDHE_RSA_WITH_AES_256_OCB_SHA256
319#endif
320#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_ECDSA) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_OCB) && defined(BOTAN_HAS_SHA2_32)
321 uint16_t{0xFFC5}, // ECDHE_ECDSA_WITH_AES_256_OCB_SHA256
322#endif
323#if defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_OCB) && defined(BOTAN_HAS_SHA2_32)
324 uint16_t{0xFFC7}, // PSK_WITH_AES_256_OCB_SHA256
325#endif
326#if defined(BOTAN_HAS_ECDH) && defined(BOTAN_HAS_AES) && defined(BOTAN_HAS_AEAD_OCB) && defined(BOTAN_HAS_SHA2_32)
327 uint16_t{0xFFCB}, // ECDHE_PSK_WITH_AES_256_OCB_SHA256
328#endif
329 };
330 // clang-format on
331
332 return codes;
333}
334
335} // namespace
336
337//static
338bool Ciphersuite::is_known_usable(uint16_t code) {
339 static constexpr auto codes = available_ciphersuites();
340 return std::binary_search(codes.begin(), codes.end(), code);
341}
342
343//static
344const std::vector<Ciphersuite>& Ciphersuite::all_known_ciphersuites() {
345 // clang-format off
346
347 // Note that this list of ciphersuites is ordered by id!
348 static const std::vector<Ciphersuite> g_ciphersuite_list = {
349 Ciphersuite(0x000A, "RSA_WITH_3DES_EDE_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
350 Ciphersuite(0x0016, "DHE_RSA_WITH_3DES_EDE_CBC_SHA", Auth_Method::RSA, Kex_Algo::DH, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
351 Ciphersuite(0x002C, "PSK_WITH_NULL_SHA", Auth_Method::IMPLICIT, Kex_Algo::PSK, "NULL", 0, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::NULL_CIPHER),
352 Ciphersuite(0x002F, "RSA_WITH_AES_128_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
353 Ciphersuite(0x0033, "DHE_RSA_WITH_AES_128_CBC_SHA", Auth_Method::RSA, Kex_Algo::DH, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
354 Ciphersuite(0x0035, "RSA_WITH_AES_256_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
355 Ciphersuite(0x0039, "DHE_RSA_WITH_AES_256_CBC_SHA", Auth_Method::RSA, Kex_Algo::DH, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
356 Ciphersuite(0x003C, "RSA_WITH_AES_128_CBC_SHA256", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
357 Ciphersuite(0x003D, "RSA_WITH_AES_256_CBC_SHA256", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-256", 32, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
358 Ciphersuite(0x0067, "DHE_RSA_WITH_AES_128_CBC_SHA256", Auth_Method::RSA, Kex_Algo::DH, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
359 Ciphersuite(0x006B, "DHE_RSA_WITH_AES_256_CBC_SHA256", Auth_Method::RSA, Kex_Algo::DH, "AES-256", 32, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
360 Ciphersuite(0x008B, "PSK_WITH_3DES_EDE_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::PSK, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
361 Ciphersuite(0x008C, "PSK_WITH_AES_128_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
362 Ciphersuite(0x008D, "PSK_WITH_AES_256_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
363 Ciphersuite(0x009C, "RSA_WITH_AES_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
364 Ciphersuite(0x009D, "RSA_WITH_AES_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
365 Ciphersuite(0x009E, "DHE_RSA_WITH_AES_128_GCM_SHA256", Auth_Method::RSA, Kex_Algo::DH, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
366 Ciphersuite(0x009F, "DHE_RSA_WITH_AES_256_GCM_SHA384", Auth_Method::RSA, Kex_Algo::DH, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
367 Ciphersuite(0x00A8, "PSK_WITH_AES_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
368 Ciphersuite(0x00A9, "PSK_WITH_AES_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
369 Ciphersuite(0x00AE, "PSK_WITH_AES_128_CBC_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
370 Ciphersuite(0x00AF, "PSK_WITH_AES_256_CBC_SHA384", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-256", 32, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::CBC_MODE),
371 Ciphersuite(0x00B0, "PSK_WITH_NULL_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "NULL", 0, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::NULL_CIPHER),
372 Ciphersuite(0x00B1, "PSK_WITH_NULL_SHA384", Auth_Method::IMPLICIT, Kex_Algo::PSK, "NULL", 0, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::NULL_CIPHER),
373 Ciphersuite(0x1301, "AES_128_GCM_SHA256", Auth_Method::UNDEFINED, Kex_Algo::UNDEFINED, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
374 Ciphersuite(0x1302, "AES_256_GCM_SHA384", Auth_Method::UNDEFINED, Kex_Algo::UNDEFINED, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
375 Ciphersuite(0x1303, "CHACHA20_POLY1305_SHA256", Auth_Method::UNDEFINED, Kex_Algo::UNDEFINED, "ChaCha20Poly1305", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
376 Ciphersuite(0x1304, "AES_128_CCM_SHA256", Auth_Method::UNDEFINED, Kex_Algo::UNDEFINED, "AES-128/CCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
377 Ciphersuite(0x1305, "AES_128_CCM_8_SHA256", Auth_Method::UNDEFINED, Kex_Algo::UNDEFINED, "AES-128/CCM(8)", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
378 Ciphersuite(0xC006, "ECDHE_ECDSA_WITH_NULL_SHA", Auth_Method::ECDSA, Kex_Algo::ECDH, "NULL", 0, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::NULL_CIPHER),
379 Ciphersuite(0xC008, "ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", Auth_Method::ECDSA, Kex_Algo::ECDH, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
380 Ciphersuite(0xC009, "ECDHE_ECDSA_WITH_AES_128_CBC_SHA", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
381 Ciphersuite(0xC00A, "ECDHE_ECDSA_WITH_AES_256_CBC_SHA", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
382 Ciphersuite(0xC010, "ECDHE_RSA_WITH_NULL_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "NULL", 0, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::NULL_CIPHER),
383 Ciphersuite(0xC012, "ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
384 Ciphersuite(0xC013, "ECDHE_RSA_WITH_AES_128_CBC_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
385 Ciphersuite(0xC014, "ECDHE_RSA_WITH_AES_256_CBC_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
386 Ciphersuite(0xC023, "ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
387 Ciphersuite(0xC024, "ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256", 32, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::CBC_MODE),
388 Ciphersuite(0xC027, "ECDHE_RSA_WITH_AES_128_CBC_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
389 Ciphersuite(0xC028, "ECDHE_RSA_WITH_AES_256_CBC_SHA384", Auth_Method::RSA, Kex_Algo::ECDH, "AES-256", 32, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::CBC_MODE),
390 Ciphersuite(0xC02B, "ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
391 Ciphersuite(0xC02C, "ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
392 Ciphersuite(0xC02F, "ECDHE_RSA_WITH_AES_128_GCM_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
393 Ciphersuite(0xC030, "ECDHE_RSA_WITH_AES_256_GCM_SHA384", Auth_Method::RSA, Kex_Algo::ECDH, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
394 Ciphersuite(0xC034, "ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
395 Ciphersuite(0xC035, "ECDHE_PSK_WITH_AES_128_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
396 Ciphersuite(0xC036, "ECDHE_PSK_WITH_AES_256_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE),
397 Ciphersuite(0xC037, "ECDHE_PSK_WITH_AES_128_CBC_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE),
398 Ciphersuite(0xC038, "ECDHE_PSK_WITH_AES_256_CBC_SHA384", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-256", 32, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::CBC_MODE),
399 Ciphersuite(0xC039, "ECDHE_PSK_WITH_NULL_SHA", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "NULL", 0, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::NULL_CIPHER),
400 Ciphersuite(0xC03A, "ECDHE_PSK_WITH_NULL_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "NULL", 0, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::NULL_CIPHER),
401 Ciphersuite(0xC03B, "ECDHE_PSK_WITH_NULL_SHA384", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "NULL", 0, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::NULL_CIPHER),
402 Ciphersuite(0xC050, "RSA_WITH_ARIA_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "ARIA-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
403 Ciphersuite(0xC051, "RSA_WITH_ARIA_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "ARIA-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
404 Ciphersuite(0xC052, "DHE_RSA_WITH_ARIA_128_GCM_SHA256", Auth_Method::RSA, Kex_Algo::DH, "ARIA-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
405 Ciphersuite(0xC053, "DHE_RSA_WITH_ARIA_256_GCM_SHA384", Auth_Method::RSA, Kex_Algo::DH, "ARIA-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
406 Ciphersuite(0xC05C, "ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "ARIA-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
407 Ciphersuite(0xC05D, "ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", Auth_Method::ECDSA, Kex_Algo::ECDH, "ARIA-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
408 Ciphersuite(0xC060, "ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "ARIA-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
409 Ciphersuite(0xC061, "ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", Auth_Method::RSA, Kex_Algo::ECDH, "ARIA-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
410 Ciphersuite(0xC06A, "PSK_WITH_ARIA_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "ARIA-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
411 Ciphersuite(0xC06B, "PSK_WITH_ARIA_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::PSK, "ARIA-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
412 Ciphersuite(0xC07A, "RSA_WITH_CAMELLIA_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "Camellia-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
413 Ciphersuite(0xC07B, "RSA_WITH_CAMELLIA_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "Camellia-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
414 Ciphersuite(0xC07C, "DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", Auth_Method::RSA, Kex_Algo::DH, "Camellia-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
415 Ciphersuite(0xC07D, "DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", Auth_Method::RSA, Kex_Algo::DH, "Camellia-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
416 Ciphersuite(0xC086, "ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "Camellia-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
417 Ciphersuite(0xC087, "ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", Auth_Method::ECDSA, Kex_Algo::ECDH, "Camellia-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
418 Ciphersuite(0xC08A, "ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "Camellia-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
419 Ciphersuite(0xC08B, "ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", Auth_Method::RSA, Kex_Algo::ECDH, "Camellia-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
420 Ciphersuite(0xC08E, "PSK_WITH_CAMELLIA_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "Camellia-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
421 Ciphersuite(0xC08F, "PSK_WITH_CAMELLIA_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::PSK, "Camellia-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
422 Ciphersuite(0xC09C, "RSA_WITH_AES_128_CCM", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-128/CCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
423 Ciphersuite(0xC09D, "RSA_WITH_AES_256_CCM", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-256/CCM", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
424 Ciphersuite(0xC09E, "DHE_RSA_WITH_AES_128_CCM", Auth_Method::RSA, Kex_Algo::DH, "AES-128/CCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
425 Ciphersuite(0xC09F, "DHE_RSA_WITH_AES_256_CCM", Auth_Method::RSA, Kex_Algo::DH, "AES-256/CCM", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
426 Ciphersuite(0xC0A0, "RSA_WITH_AES_128_CCM_8", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-128/CCM(8)", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
427 Ciphersuite(0xC0A1, "RSA_WITH_AES_256_CCM_8", Auth_Method::IMPLICIT, Kex_Algo::STATIC_RSA, "AES-256/CCM(8)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
428 Ciphersuite(0xC0A2, "DHE_RSA_WITH_AES_128_CCM_8", Auth_Method::RSA, Kex_Algo::DH, "AES-128/CCM(8)", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
429 Ciphersuite(0xC0A3, "DHE_RSA_WITH_AES_256_CCM_8", Auth_Method::RSA, Kex_Algo::DH, "AES-256/CCM(8)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
430 Ciphersuite(0xC0A4, "PSK_WITH_AES_128_CCM", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-128/CCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
431 Ciphersuite(0xC0A5, "PSK_WITH_AES_256_CCM", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-256/CCM", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
432 Ciphersuite(0xC0A8, "PSK_WITH_AES_128_CCM_8", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-128/CCM(8)", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
433 Ciphersuite(0xC0A9, "PSK_WITH_AES_256_CCM_8", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-256/CCM(8)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
434 Ciphersuite(0xC0AC, "ECDHE_ECDSA_WITH_AES_128_CCM", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-128/CCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
435 Ciphersuite(0xC0AD, "ECDHE_ECDSA_WITH_AES_256_CCM", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256/CCM", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
436 Ciphersuite(0xC0AE, "ECDHE_ECDSA_WITH_AES_128_CCM_8", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-128/CCM(8)", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
437 Ciphersuite(0xC0AF, "ECDHE_ECDSA_WITH_AES_256_CCM_8", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256/CCM(8)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
438 Ciphersuite(0xCCA8, "ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "ChaCha20Poly1305", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
439 Ciphersuite(0xCCA9, "ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "ChaCha20Poly1305", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
440 Ciphersuite(0xCCAA, "DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", Auth_Method::RSA, Kex_Algo::DH, "ChaCha20Poly1305", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
441 Ciphersuite(0xCCAB, "PSK_WITH_CHACHA20_POLY1305_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "ChaCha20Poly1305", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
442 Ciphersuite(0xCCAC, "ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "ChaCha20Poly1305", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
443 Ciphersuite(0xD001, "ECDHE_PSK_WITH_AES_128_GCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-128/GCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
444 Ciphersuite(0xD002, "ECDHE_PSK_WITH_AES_256_GCM_SHA384", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-256/GCM", 32, "AEAD", 0, KDF_Algo::SHA_384, Nonce_Format::AEAD_IMPLICIT_4),
445 Ciphersuite(0xD003, "ECDHE_PSK_WITH_AES_128_CCM_8_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-128/CCM(8)", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
446 Ciphersuite(0xD005, "ECDHE_PSK_WITH_AES_128_CCM_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-128/CCM", 16, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_IMPLICIT_4),
447 Ciphersuite(0xFFC3, "ECDHE_RSA_WITH_AES_256_OCB_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "AES-256/OCB(12)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
448 Ciphersuite(0xFFC5, "ECDHE_ECDSA_WITH_AES_256_OCB_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256/OCB(12)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
449 Ciphersuite(0xFFC7, "PSK_WITH_AES_256_OCB_SHA256", Auth_Method::IMPLICIT, Kex_Algo::PSK, "AES-256/OCB(12)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
450 Ciphersuite(0xFFCB, "ECDHE_PSK_WITH_AES_256_OCB_SHA256", Auth_Method::IMPLICIT, Kex_Algo::ECDHE_PSK, "AES-256/OCB(12)", 32, "AEAD", 0, KDF_Algo::SHA_256, Nonce_Format::AEAD_XOR_12),
451 };
452
453 // clang-format on
454
455 return g_ciphersuite_list;
456}
457
458} // namespace Botan::TLS
static const std::vector< Ciphersuite > & all_known_ciphersuites()