1use phf::{phf_map, phf_ordered_map};
2
3use pkt::tls::{ciphers, content, ext, handshake, version};
4
5use crate::func_def;
6use crate::libapi::{ArgDecl, FuncDef};
7use crate::str::Buf;
8use crate::sym::Symbol;
9use crate::val::{Val, ValDef, ValType};
10
11const VERSION: phf::Map<&'static str, Symbol> = phf_map! {
12 "SSL_1" => Symbol::u16(version::SSL_1),
13 "SSL_2" => Symbol::u16(version::SSL_2),
14 "SSL_3" => Symbol::u16(version::SSL_3),
15 "TLS_1_0" => Symbol::u16(version::TLS_1_0),
16 "TLS_1_1" => Symbol::u16(version::TLS_1_1),
17 "TLS_1_2" => Symbol::u16(version::TLS_1_2),
18 "TLS_1_3" => Symbol::u16(version::TLS_1_3),
19};
20
21const CONTENT: phf::Map<&'static str, Symbol> = phf_map! {
22 "INVALID" => Symbol::u8(content::INVALID),
23 "CHANGE_CIPHER_SPEC" => Symbol::u8(content::CHANGE_CIPHER_SPEC),
24 "ALERT" => Symbol::u8(content::ALERT),
25 "HANDSHAKE" => Symbol::u8(content::HANDSHAKE),
26 "APP_DATA" => Symbol::u8(content::APP_DATA),
27 "HEARTBEAT" => Symbol::u8(content::HEARTBEAT),
28 "TLS12_CID" => Symbol::u8(content::TLS12_CID),
29 "ACK" => Symbol::u8(content::ACK),
30};
31
32const HANDSHAKE: phf::Map<&'static str, Symbol> = phf_map! {
33 "HELLO_REQUEST" => Symbol::u8(handshake::HELLO_REQUEST),
34 "CLIENT_HELLO" => Symbol::u8(handshake::CLIENT_HELLO),
35 "SERVER_HELLO" => Symbol::u8(handshake::SERVER_HELLO),
36 "HELLO_VERIFY_REQUEST" => Symbol::u8(handshake::HELLO_VERIFY_REQUEST),
37 "NEW_SESSION_TICKET" => Symbol::u8(handshake::NEW_SESSION_TICKET),
38 "END_OF_EARLY_DATA" => Symbol::u8(handshake::END_OF_EARLY_DATA),
39 "HELLO_RETRY_REQUEST" => Symbol::u8(handshake::HELLO_RETRY_REQUEST),
40 "ENCRYPTED_EXTENSIONS" => Symbol::u8(handshake::ENCRYPTED_EXTENSIONS),
41 "REQUESTCONNECTIONID" => Symbol::u8(handshake::REQUESTCONNECTIONID),
42 "NEWCONNECTIONID" => Symbol::u8(handshake::NEWCONNECTIONID),
43 "CERTIFICATE" => Symbol::u8(handshake::CERTIFICATE),
44 "SERVER_KEY_EXCHANGE" => Symbol::u8(handshake::SERVER_KEY_EXCHANGE),
45 "CERTIFICATE_REQUEST" => Symbol::u8(handshake::CERTIFICATE_REQUEST),
46 "SERVER_HELLO_DONE" => Symbol::u8(handshake::SERVER_HELLO_DONE),
47 "CERTIFICATE_VERIFY" => Symbol::u8(handshake::CERTIFICATE_VERIFY),
48 "CLIENT_KEY_EXCHANGE" => Symbol::u8(handshake::CLIENT_KEY_EXCHANGE),
49 "FINISHED" => Symbol::u8(handshake::FINISHED),
50 "CERTIFICATE_URL" => Symbol::u8(handshake::CERTIFICATE_URL),
51 "CERTIFICATE_STATUS" => Symbol::u8(handshake::CERTIFICATE_STATUS),
52 "SUPPLEMENTAL_DATA" => Symbol::u8(handshake::SUPPLEMENTAL_DATA),
53 "KEY_UPDATE" => Symbol::u8(handshake::KEY_UPDATE),
54 "COMPRESSED_CERTIFICATE" => Symbol::u8(handshake::COMPRESSED_CERTIFICATE),
55 "EKT_KEY" => Symbol::u8(handshake::EKT_KEY),
56 "MESSAGE_HASH" => Symbol::u8(handshake::MESSAGE_HASH),
57};
58
59const EXT: phf::Map<&'static str, Symbol> = phf_map! {
60 "SERVER_NAME" => Symbol::u16(ext::SERVER_NAME),
61 "MAX_FRAGMENT_LENGTH" => Symbol::u16(ext::MAX_FRAGMENT_LENGTH),
62 "CLIENT_CERTIFICATE_URL" => Symbol::u16(ext::CLIENT_CERTIFICATE_URL),
63 "TRUSTED_CA_KEYS" => Symbol::u16(ext::TRUSTED_CA_KEYS),
64 "TRUNCATED_HMAC" => Symbol::u16(ext::TRUNCATED_HMAC),
65 "STATUS_REQUEST" => Symbol::u16(ext::STATUS_REQUEST),
66 "USER_MAPPING" => Symbol::u16(ext::USER_MAPPING),
67 "CLIENT_AUTHZ" => Symbol::u16(ext::CLIENT_AUTHZ),
68 "SERVER_AUTHZ" => Symbol::u16(ext::SERVER_AUTHZ),
69 "CERT_TYPE" => Symbol::u16(ext::CERT_TYPE),
70 "SUPPORTED_GROUPS" => Symbol::u16(ext::SUPPORTED_GROUPS),
71 "EC_POINT_FORMATS" => Symbol::u16(ext::EC_POINT_FORMATS),
72 "SRP" => Symbol::u16(ext::SRP),
73 "SIGNATURE_ALGORITHMS" => Symbol::u16(ext::SIGNATURE_ALGORITHMS),
74 "USE_SRTP" => Symbol::u16(ext::USE_SRTP),
75 "HEARTBEAT" => Symbol::u16(ext::HEARTBEAT),
76 "APPLICATION_LAYER_PROTOCOL_NEGOTIATION"
77 => Symbol::u16(ext::APPLICATION_LAYER_PROTOCOL_NEGOTIATION),
78 "ALPN"
79 => Symbol::u16(ext::APPLICATION_LAYER_PROTOCOL_NEGOTIATION),
80 "STATUS_REQUEST_V2" => Symbol::u16(ext::STATUS_REQUEST_V2),
81 "SIGNED_CERTIFICATE_TIMESTAMP" => Symbol::u16(ext::SIGNED_CERTIFICATE_TIMESTAMP),
82 "CLIENT_CERTIFICATE_TYPE" => Symbol::u16(ext::CLIENT_CERTIFICATE_TYPE),
83 "SERVER_CERTIFICATE_TYPE" => Symbol::u16(ext::SERVER_CERTIFICATE_TYPE),
84 "PADDING" => Symbol::u16(ext::PADDING),
85 "ENCRYPT_THEN_MAC" => Symbol::u16(ext::ENCRYPT_THEN_MAC),
86 "EXTENDED_MASTER_SECRET" => Symbol::u16(ext::EXTENDED_MASTER_SECRET),
87 "TOKEN_BINDING" => Symbol::u16(ext::TOKEN_BINDING),
88 "CACHED_INFO" => Symbol::u16(ext::CACHED_INFO),
89 "TLS_LTS" => Symbol::u16(ext::TLS_LTS),
90 "COMPRESS_CERTIFICATE" => Symbol::u16(ext::COMPRESS_CERTIFICATE),
91 "RECORD_SIZE_LIMIT" => Symbol::u16(ext::RECORD_SIZE_LIMIT),
92 "PWD_PROTECT" => Symbol::u16(ext::PWD_PROTECT),
93 "PWD_CLEAR" => Symbol::u16(ext::PWD_CLEAR),
94 "PASSWORD_SALT" => Symbol::u16(ext::PASSWORD_SALT),
95 "TICKET_PINNING" => Symbol::u16(ext::TICKET_PINNING),
96 "TLS_CERT_WITH_EXTERN_PSK" => Symbol::u16(ext::TLS_CERT_WITH_EXTERN_PSK),
97 "DELEGATED_CREDENTIALS" => Symbol::u16(ext::DELEGATED_CREDENTIALS),
98 "SESSION_TICKET" => Symbol::u16(ext::SESSION_TICKET),
99 "TLMSP" => Symbol::u16(ext::TLMSP),
100 "TLMSP_PROXYING" => Symbol::u16(ext::TLMSP_PROXYING),
101 "TLMSP_DELEGATE" => Symbol::u16(ext::TLMSP_DELEGATE),
102 "SUPPORTED_EKT_CIPHERS" => Symbol::u16(ext::SUPPORTED_EKT_CIPHERS),
103 "PRE_SHARED_KEY" => Symbol::u16(ext::PRE_SHARED_KEY),
104 "EARLY_DATA" => Symbol::u16(ext::EARLY_DATA),
105 "SUPPORTED_VERSIONS" => Symbol::u16(ext::SUPPORTED_VERSIONS),
106 "COOKIE" => Symbol::u16(ext::COOKIE),
107 "PSK_KEY_EXCHANGE_MODES" => Symbol::u16(ext::PSK_KEY_EXCHANGE_MODES),
108 "CERTIFICATE_AUTHORITIES" => Symbol::u16(ext::CERTIFICATE_AUTHORITIES),
109 "OID_FILTERS" => Symbol::u16(ext::OID_FILTERS),
110 "POST_HANDSHAKE_AUTH" => Symbol::u16(ext::POST_HANDSHAKE_AUTH),
111 "SIGNATURE_ALGORITHMS_CERT" => Symbol::u16(ext::SIGNATURE_ALGORITHMS_CERT),
112 "KEY_SHARE" => Symbol::u16(ext::KEY_SHARE),
113 "TRANSPARENCY_INFO" => Symbol::u16(ext::TRANSPARENCY_INFO),
114 "CONNECTION_ID_DEPRECATED" => Symbol::u16(ext::CONNECTION_ID_DEPRECATED),
115 "CONNECTION_ID" => Symbol::u16(ext::CONNECTION_ID),
116 "EXTERNAL_ID_HASH" => Symbol::u16(ext::EXTERNAL_ID_HASH),
117 "EXTERNAL_SESSION_ID" => Symbol::u16(ext::EXTERNAL_SESSION_ID),
118 "QUIC_TRANSPORT_PARAMETERS" => Symbol::u16(ext::QUIC_TRANSPORT_PARAMETERS),
119 "TICKET_REQUEST" => Symbol::u16(ext::TICKET_REQUEST),
120 "DNSSEC_CHAIN" => Symbol::u16(ext::DNSSEC_CHAIN),
121 "RENEGOTIATION_INFO" => Symbol::u16(ext::RENEGOTIATION_INFO),
122};
123
124const CIPHER: phf::Map<&'static str, Symbol> = phf_map! {
125 "NULL_WITH_NULL_NULL" =>
126 Symbol::u16(ciphers::NULL_WITH_NULL_NULL),
127 "RSA_WITH_NULL_MD5" =>
128 Symbol::u16(ciphers::RSA_WITH_NULL_MD5),
129 "RSA_WITH_NULL_SHA" =>
130 Symbol::u16(ciphers::RSA_WITH_NULL_SHA),
131 "RSA_EXPORT_WITH_RC4_40_MD5" =>
132 Symbol::u16(ciphers::RSA_EXPORT_WITH_RC4_40_MD5),
133 "RSA_WITH_RC4_128_MD5" =>
134 Symbol::u16(ciphers::RSA_WITH_RC4_128_MD5),
135 "RSA_WITH_RC4_128_SHA" =>
136 Symbol::u16(ciphers::RSA_WITH_RC4_128_SHA),
137 "RSA_EXPORT_WITH_RC2_CBC_40_MD5" =>
138 Symbol::u16(ciphers::RSA_EXPORT_WITH_RC2_CBC_40_MD5),
139 "RSA_WITH_IDEA_CBC_SHA" =>
140 Symbol::u16(ciphers::RSA_WITH_IDEA_CBC_SHA),
141 "RSA_EXPORT_WITH_DES40_CBC_SHA" =>
142 Symbol::u16(ciphers::RSA_EXPORT_WITH_DES40_CBC_SHA),
143 "RSA_WITH_DES_CBC_SHA" =>
144 Symbol::u16(ciphers::RSA_WITH_DES_CBC_SHA),
145 "RSA_WITH_3DES_EDE_CBC_SHA" =>
146 Symbol::u16(ciphers::RSA_WITH_3DES_EDE_CBC_SHA),
147 "DH_DSS_EXPORT_WITH_DES40_CBC_SHA" =>
148 Symbol::u16(ciphers::DH_DSS_EXPORT_WITH_DES40_CBC_SHA),
149 "DH_DSS_WITH_DES_CBC_SHA" =>
150 Symbol::u16(ciphers::DH_DSS_WITH_DES_CBC_SHA),
151 "DH_DSS_WITH_3DES_EDE_CBC_SHA" =>
152 Symbol::u16(ciphers::DH_DSS_WITH_3DES_EDE_CBC_SHA),
153 "DH_RSA_EXPORT_WITH_DES40_CBC_SHA" =>
154 Symbol::u16(ciphers::DH_RSA_EXPORT_WITH_DES40_CBC_SHA),
155 "DH_RSA_WITH_DES_CBC_SHA" =>
156 Symbol::u16(ciphers::DH_RSA_WITH_DES_CBC_SHA),
157 "DH_RSA_WITH_3DES_EDE_CBC_SHA" =>
158 Symbol::u16(ciphers::DH_RSA_WITH_3DES_EDE_CBC_SHA),
159 "DHE_DSS_EXPORT_WITH_DES40_CBC_SHA" =>
160 Symbol::u16(ciphers::DHE_DSS_EXPORT_WITH_DES40_CBC_SHA),
161 "DHE_DSS_WITH_DES_CBC_SHA" =>
162 Symbol::u16(ciphers::DHE_DSS_WITH_DES_CBC_SHA),
163 "DHE_DSS_WITH_3DES_EDE_CBC_SHA" =>
164 Symbol::u16(ciphers::DHE_DSS_WITH_3DES_EDE_CBC_SHA),
165 "DHE_RSA_EXPORT_WITH_DES40_CBC_SHA" =>
166 Symbol::u16(ciphers::DHE_RSA_EXPORT_WITH_DES40_CBC_SHA),
167 "DHE_RSA_WITH_DES_CBC_SHA" =>
168 Symbol::u16(ciphers::DHE_RSA_WITH_DES_CBC_SHA),
169 "DHE_RSA_WITH_3DES_EDE_CBC_SHA" =>
170 Symbol::u16(ciphers::DHE_RSA_WITH_3DES_EDE_CBC_SHA),
171 "DH_ANON_EXPORT_WITH_RC4_40_MD5" =>
172 Symbol::u16(ciphers::DH_ANON_EXPORT_WITH_RC4_40_MD5),
173 "DH_ANON_WITH_RC4_128_MD5" =>
174 Symbol::u16(ciphers::DH_ANON_WITH_RC4_128_MD5),
175 "DH_ANON_EXPORT_WITH_DES40_CBC_SHA" =>
176 Symbol::u16(ciphers::DH_ANON_EXPORT_WITH_DES40_CBC_SHA),
177 "DH_ANON_WITH_DES_CBC_SHA" =>
178 Symbol::u16(ciphers::DH_ANON_WITH_DES_CBC_SHA),
179 "DH_ANON_WITH_3DES_EDE_CBC_SHA" =>
180 Symbol::u16(ciphers::DH_ANON_WITH_3DES_EDE_CBC_SHA),
181 "KRB5_WITH_DES_CBC_SHA" =>
182 Symbol::u16(ciphers::KRB5_WITH_DES_CBC_SHA),
183 "KRB5_WITH_3DES_EDE_CBC_SHA" =>
184 Symbol::u16(ciphers::KRB5_WITH_3DES_EDE_CBC_SHA),
185 "KRB5_WITH_RC4_128_SHA" =>
186 Symbol::u16(ciphers::KRB5_WITH_RC4_128_SHA),
187 "KRB5_WITH_IDEA_CBC_SHA" =>
188 Symbol::u16(ciphers::KRB5_WITH_IDEA_CBC_SHA),
189 "KRB5_WITH_DES_CBC_MD5" =>
190 Symbol::u16(ciphers::KRB5_WITH_DES_CBC_MD5),
191 "KRB5_WITH_3DES_EDE_CBC_MD5" =>
192 Symbol::u16(ciphers::KRB5_WITH_3DES_EDE_CBC_MD5),
193 "KRB5_WITH_RC4_128_MD5" =>
194 Symbol::u16(ciphers::KRB5_WITH_RC4_128_MD5),
195 "KRB5_WITH_IDEA_CBC_MD5" =>
196 Symbol::u16(ciphers::KRB5_WITH_IDEA_CBC_MD5),
197 "KRB5_EXPORT_WITH_DES_CBC_40_SHA" =>
198 Symbol::u16(ciphers::KRB5_EXPORT_WITH_DES_CBC_40_SHA),
199 "KRB5_EXPORT_WITH_RC2_CBC_40_SHA" =>
200 Symbol::u16(ciphers::KRB5_EXPORT_WITH_RC2_CBC_40_SHA),
201 "KRB5_EXPORT_WITH_RC4_40_SHA" =>
202 Symbol::u16(ciphers::KRB5_EXPORT_WITH_RC4_40_SHA),
203 "KRB5_EXPORT_WITH_DES_CBC_40_MD5" =>
204 Symbol::u16(ciphers::KRB5_EXPORT_WITH_DES_CBC_40_MD5),
205 "KRB5_EXPORT_WITH_RC2_CBC_40_MD5" =>
206 Symbol::u16(ciphers::KRB5_EXPORT_WITH_RC2_CBC_40_MD5),
207 "KRB5_EXPORT_WITH_RC4_40_MD5" =>
208 Symbol::u16(ciphers::KRB5_EXPORT_WITH_RC4_40_MD5),
209 "PSK_WITH_NULL_SHA" =>
210 Symbol::u16(ciphers::PSK_WITH_NULL_SHA),
211 "DHE_PSK_WITH_NULL_SHA" =>
212 Symbol::u16(ciphers::DHE_PSK_WITH_NULL_SHA),
213 "RSA_PSK_WITH_NULL_SHA" =>
214 Symbol::u16(ciphers::RSA_PSK_WITH_NULL_SHA),
215 "RSA_WITH_AES_128_CBC_SHA" =>
216 Symbol::u16(ciphers::RSA_WITH_AES_128_CBC_SHA),
217 "DH_DSS_WITH_AES_128_CBC_SHA" =>
218 Symbol::u16(ciphers::DH_DSS_WITH_AES_128_CBC_SHA),
219 "DH_RSA_WITH_AES_128_CBC_SHA" =>
220 Symbol::u16(ciphers::DH_RSA_WITH_AES_128_CBC_SHA),
221 "DHE_DSS_WITH_AES_128_CBC_SHA" =>
222 Symbol::u16(ciphers::DHE_DSS_WITH_AES_128_CBC_SHA),
223 "DHE_RSA_WITH_AES_128_CBC_SHA" =>
224 Symbol::u16(ciphers::DHE_RSA_WITH_AES_128_CBC_SHA),
225 "DH_ANON_WITH_AES_128_CBC_SHA" =>
226 Symbol::u16(ciphers::DH_ANON_WITH_AES_128_CBC_SHA),
227 "RSA_WITH_AES_256_CBC_SHA" =>
228 Symbol::u16(ciphers::RSA_WITH_AES_256_CBC_SHA),
229 "DH_DSS_WITH_AES_256_CBC_SHA" =>
230 Symbol::u16(ciphers::DH_DSS_WITH_AES_256_CBC_SHA),
231 "DH_RSA_WITH_AES_256_CBC_SHA" =>
232 Symbol::u16(ciphers::DH_RSA_WITH_AES_256_CBC_SHA),
233 "DHE_DSS_WITH_AES_256_CBC_SHA" =>
234 Symbol::u16(ciphers::DHE_DSS_WITH_AES_256_CBC_SHA),
235 "DHE_RSA_WITH_AES_256_CBC_SHA" =>
236 Symbol::u16(ciphers::DHE_RSA_WITH_AES_256_CBC_SHA),
237 "DH_ANON_WITH_AES_256_CBC_SHA" =>
238 Symbol::u16(ciphers::DH_ANON_WITH_AES_256_CBC_SHA),
239 "RSA_WITH_NULL_SHA256" =>
240 Symbol::u16(ciphers::RSA_WITH_NULL_SHA256),
241 "RSA_WITH_AES_128_CBC_SHA256" =>
242 Symbol::u16(ciphers::RSA_WITH_AES_128_CBC_SHA256),
243 "RSA_WITH_AES_256_CBC_SHA256" =>
244 Symbol::u16(ciphers::RSA_WITH_AES_256_CBC_SHA256),
245 "DH_DSS_WITH_AES_128_CBC_SHA256" =>
246 Symbol::u16(ciphers::DH_DSS_WITH_AES_128_CBC_SHA256),
247 "DH_RSA_WITH_AES_128_CBC_SHA256" =>
248 Symbol::u16(ciphers::DH_RSA_WITH_AES_128_CBC_SHA256),
249 "DHE_DSS_WITH_AES_128_CBC_SHA256" =>
250 Symbol::u16(ciphers::DHE_DSS_WITH_AES_128_CBC_SHA256),
251 "RSA_WITH_CAMELLIA_128_CBC_SHA" =>
252 Symbol::u16(ciphers::RSA_WITH_CAMELLIA_128_CBC_SHA),
253 "DH_DSS_WITH_CAMELLIA_128_CBC_SHA" =>
254 Symbol::u16(ciphers::DH_DSS_WITH_CAMELLIA_128_CBC_SHA),
255 "DH_RSA_WITH_CAMELLIA_128_CBC_SHA" =>
256 Symbol::u16(ciphers::DH_RSA_WITH_CAMELLIA_128_CBC_SHA),
257 "DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" =>
258 Symbol::u16(ciphers::DHE_DSS_WITH_CAMELLIA_128_CBC_SHA),
259 "DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" =>
260 Symbol::u16(ciphers::DHE_RSA_WITH_CAMELLIA_128_CBC_SHA),
261 "DH_ANON_WITH_CAMELLIA_128_CBC_SHA" =>
262 Symbol::u16(ciphers::DH_ANON_WITH_CAMELLIA_128_CBC_SHA),
263 "DHE_RSA_WITH_AES_128_CBC_SHA256" =>
264 Symbol::u16(ciphers::DHE_RSA_WITH_AES_128_CBC_SHA256),
265 "DH_DSS_WITH_AES_256_CBC_SHA256" =>
266 Symbol::u16(ciphers::DH_DSS_WITH_AES_256_CBC_SHA256),
267 "DH_RSA_WITH_AES_256_CBC_SHA256" =>
268 Symbol::u16(ciphers::DH_RSA_WITH_AES_256_CBC_SHA256),
269 "DHE_DSS_WITH_AES_256_CBC_SHA256" =>
270 Symbol::u16(ciphers::DHE_DSS_WITH_AES_256_CBC_SHA256),
271 "DHE_RSA_WITH_AES_256_CBC_SHA256" =>
272 Symbol::u16(ciphers::DHE_RSA_WITH_AES_256_CBC_SHA256),
273 "DH_ANON_WITH_AES_128_CBC_SHA256" =>
274 Symbol::u16(ciphers::DH_ANON_WITH_AES_128_CBC_SHA256),
275 "DH_ANON_WITH_AES_256_CBC_SHA256" =>
276 Symbol::u16(ciphers::DH_ANON_WITH_AES_256_CBC_SHA256),
277 "RSA_WITH_CAMELLIA_256_CBC_SHA" =>
278 Symbol::u16(ciphers::RSA_WITH_CAMELLIA_256_CBC_SHA),
279 "DH_DSS_WITH_CAMELLIA_256_CBC_SHA" =>
280 Symbol::u16(ciphers::DH_DSS_WITH_CAMELLIA_256_CBC_SHA),
281 "DH_RSA_WITH_CAMELLIA_256_CBC_SHA" =>
282 Symbol::u16(ciphers::DH_RSA_WITH_CAMELLIA_256_CBC_SHA),
283 "DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" =>
284 Symbol::u16(ciphers::DHE_DSS_WITH_CAMELLIA_256_CBC_SHA),
285 "DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" =>
286 Symbol::u16(ciphers::DHE_RSA_WITH_CAMELLIA_256_CBC_SHA),
287 "DH_ANON_WITH_CAMELLIA_256_CBC_SHA" =>
288 Symbol::u16(ciphers::DH_ANON_WITH_CAMELLIA_256_CBC_SHA),
289 "PSK_WITH_RC4_128_SHA" =>
290 Symbol::u16(ciphers::PSK_WITH_RC4_128_SHA),
291 "PSK_WITH_3DES_EDE_CBC_SHA" =>
292 Symbol::u16(ciphers::PSK_WITH_3DES_EDE_CBC_SHA),
293 "PSK_WITH_AES_128_CBC_SHA" =>
294 Symbol::u16(ciphers::PSK_WITH_AES_128_CBC_SHA),
295 "PSK_WITH_AES_256_CBC_SHA" =>
296 Symbol::u16(ciphers::PSK_WITH_AES_256_CBC_SHA),
297 "DHE_PSK_WITH_RC4_128_SHA" =>
298 Symbol::u16(ciphers::DHE_PSK_WITH_RC4_128_SHA),
299 "DHE_PSK_WITH_3DES_EDE_CBC_SHA" =>
300 Symbol::u16(ciphers::DHE_PSK_WITH_3DES_EDE_CBC_SHA),
301 "DHE_PSK_WITH_AES_128_CBC_SHA" =>
302 Symbol::u16(ciphers::DHE_PSK_WITH_AES_128_CBC_SHA),
303 "DHE_PSK_WITH_AES_256_CBC_SHA" =>
304 Symbol::u16(ciphers::DHE_PSK_WITH_AES_256_CBC_SHA),
305 "RSA_PSK_WITH_RC4_128_SHA" =>
306 Symbol::u16(ciphers::RSA_PSK_WITH_RC4_128_SHA),
307 "RSA_PSK_WITH_3DES_EDE_CBC_SHA" =>
308 Symbol::u16(ciphers::RSA_PSK_WITH_3DES_EDE_CBC_SHA),
309 "RSA_PSK_WITH_AES_128_CBC_SHA" =>
310 Symbol::u16(ciphers::RSA_PSK_WITH_AES_128_CBC_SHA),
311 "RSA_PSK_WITH_AES_256_CBC_SHA" =>
312 Symbol::u16(ciphers::RSA_PSK_WITH_AES_256_CBC_SHA),
313 "RSA_WITH_SEED_CBC_SHA" =>
314 Symbol::u16(ciphers::RSA_WITH_SEED_CBC_SHA),
315 "DH_DSS_WITH_SEED_CBC_SHA" =>
316 Symbol::u16(ciphers::DH_DSS_WITH_SEED_CBC_SHA),
317 "DH_RSA_WITH_SEED_CBC_SHA" =>
318 Symbol::u16(ciphers::DH_RSA_WITH_SEED_CBC_SHA),
319 "DHE_DSS_WITH_SEED_CBC_SHA" =>
320 Symbol::u16(ciphers::DHE_DSS_WITH_SEED_CBC_SHA),
321 "DHE_RSA_WITH_SEED_CBC_SHA" =>
322 Symbol::u16(ciphers::DHE_RSA_WITH_SEED_CBC_SHA),
323 "DH_ANON_WITH_SEED_CBC_SHA" =>
324 Symbol::u16(ciphers::DH_ANON_WITH_SEED_CBC_SHA),
325 "RSA_WITH_AES_128_GCM_SHA256" =>
326 Symbol::u16(ciphers::RSA_WITH_AES_128_GCM_SHA256),
327 "RSA_WITH_AES_256_GCM_SHA384" =>
328 Symbol::u16(ciphers::RSA_WITH_AES_256_GCM_SHA384),
329 "DHE_RSA_WITH_AES_128_GCM_SHA256" =>
330 Symbol::u16(ciphers::DHE_RSA_WITH_AES_128_GCM_SHA256),
331 "DHE_RSA_WITH_AES_256_GCM_SHA384" =>
332 Symbol::u16(ciphers::DHE_RSA_WITH_AES_256_GCM_SHA384),
333 "DH_RSA_WITH_AES_128_GCM_SHA256" =>
334 Symbol::u16(ciphers::DH_RSA_WITH_AES_128_GCM_SHA256),
335 "DH_RSA_WITH_AES_256_GCM_SHA384" =>
336 Symbol::u16(ciphers::DH_RSA_WITH_AES_256_GCM_SHA384),
337 "DHE_DSS_WITH_AES_128_GCM_SHA256" =>
338 Symbol::u16(ciphers::DHE_DSS_WITH_AES_128_GCM_SHA256),
339 "DHE_DSS_WITH_AES_256_GCM_SHA384" =>
340 Symbol::u16(ciphers::DHE_DSS_WITH_AES_256_GCM_SHA384),
341 "DH_DSS_WITH_AES_128_GCM_SHA256" =>
342 Symbol::u16(ciphers::DH_DSS_WITH_AES_128_GCM_SHA256),
343 "DH_DSS_WITH_AES_256_GCM_SHA384" =>
344 Symbol::u16(ciphers::DH_DSS_WITH_AES_256_GCM_SHA384),
345 "DH_ANON_WITH_AES_128_GCM_SHA256" =>
346 Symbol::u16(ciphers::DH_ANON_WITH_AES_128_GCM_SHA256),
347 "DH_ANON_WITH_AES_256_GCM_SHA384" =>
348 Symbol::u16(ciphers::DH_ANON_WITH_AES_256_GCM_SHA384),
349 "PSK_WITH_AES_128_GCM_SHA256" =>
350 Symbol::u16(ciphers::PSK_WITH_AES_128_GCM_SHA256),
351 "PSK_WITH_AES_256_GCM_SHA384" =>
352 Symbol::u16(ciphers::PSK_WITH_AES_256_GCM_SHA384),
353 "DHE_PSK_WITH_AES_128_GCM_SHA256" =>
354 Symbol::u16(ciphers::DHE_PSK_WITH_AES_128_GCM_SHA256),
355 "DHE_PSK_WITH_AES_256_GCM_SHA384" =>
356 Symbol::u16(ciphers::DHE_PSK_WITH_AES_256_GCM_SHA384),
357 "RSA_PSK_WITH_AES_128_GCM_SHA256" =>
358 Symbol::u16(ciphers::RSA_PSK_WITH_AES_128_GCM_SHA256),
359 "RSA_PSK_WITH_AES_256_GCM_SHA384" =>
360 Symbol::u16(ciphers::RSA_PSK_WITH_AES_256_GCM_SHA384),
361 "PSK_WITH_AES_128_CBC_SHA256" =>
362 Symbol::u16(ciphers::PSK_WITH_AES_128_CBC_SHA256),
363 "PSK_WITH_AES_256_CBC_SHA384" =>
364 Symbol::u16(ciphers::PSK_WITH_AES_256_CBC_SHA384),
365 "PSK_WITH_NULL_SHA256" =>
366 Symbol::u16(ciphers::PSK_WITH_NULL_SHA256),
367 "PSK_WITH_NULL_SHA384" =>
368 Symbol::u16(ciphers::PSK_WITH_NULL_SHA384),
369 "DHE_PSK_WITH_AES_128_CBC_SHA256" =>
370 Symbol::u16(ciphers::DHE_PSK_WITH_AES_128_CBC_SHA256),
371 "DHE_PSK_WITH_AES_256_CBC_SHA384" =>
372 Symbol::u16(ciphers::DHE_PSK_WITH_AES_256_CBC_SHA384),
373 "DHE_PSK_WITH_NULL_SHA256" =>
374 Symbol::u16(ciphers::DHE_PSK_WITH_NULL_SHA256),
375 "DHE_PSK_WITH_NULL_SHA384" =>
376 Symbol::u16(ciphers::DHE_PSK_WITH_NULL_SHA384),
377 "RSA_PSK_WITH_AES_128_CBC_SHA256" =>
378 Symbol::u16(ciphers::RSA_PSK_WITH_AES_128_CBC_SHA256),
379 "RSA_PSK_WITH_AES_256_CBC_SHA384" =>
380 Symbol::u16(ciphers::RSA_PSK_WITH_AES_256_CBC_SHA384),
381 "RSA_PSK_WITH_NULL_SHA256" =>
382 Symbol::u16(ciphers::RSA_PSK_WITH_NULL_SHA256),
383 "RSA_PSK_WITH_NULL_SHA384" =>
384 Symbol::u16(ciphers::RSA_PSK_WITH_NULL_SHA384),
385 "RSA_WITH_CAMELLIA_128_CBC_SHA256" =>
386 Symbol::u16(ciphers::RSA_WITH_CAMELLIA_128_CBC_SHA256),
387 "DH_DSS_WITH_CAMELLIA_128_CBC_SHA256" =>
388 Symbol::u16(ciphers::DH_DSS_WITH_CAMELLIA_128_CBC_SHA256),
389 "DH_RSA_WITH_CAMELLIA_128_CBC_SHA256" =>
390 Symbol::u16(ciphers::DH_RSA_WITH_CAMELLIA_128_CBC_SHA256),
391 "DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" =>
392 Symbol::u16(ciphers::DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256),
393 "DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" =>
394 Symbol::u16(ciphers::DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256),
395 "DH_ANON_WITH_CAMELLIA_128_CBC_SHA256" =>
396 Symbol::u16(ciphers::DH_ANON_WITH_CAMELLIA_128_CBC_SHA256),
397 "RSA_WITH_CAMELLIA_256_CBC_SHA256" =>
398 Symbol::u16(ciphers::RSA_WITH_CAMELLIA_256_CBC_SHA256),
399 "DH_DSS_WITH_CAMELLIA_256_CBC_SHA256" =>
400 Symbol::u16(ciphers::DH_DSS_WITH_CAMELLIA_256_CBC_SHA256),
401 "DH_RSA_WITH_CAMELLIA_256_CBC_SHA256" =>
402 Symbol::u16(ciphers::DH_RSA_WITH_CAMELLIA_256_CBC_SHA256),
403 "DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" =>
404 Symbol::u16(ciphers::DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256),
405 "DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" =>
406 Symbol::u16(ciphers::DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256),
407 "DH_ANON_WITH_CAMELLIA_256_CBC_SHA256" =>
408 Symbol::u16(ciphers::DH_ANON_WITH_CAMELLIA_256_CBC_SHA256),
409 "SM4_GCM_SM3" =>
410 Symbol::u16(ciphers::SM4_GCM_SM3),
411 "SM4_CCM_SM3" =>
412 Symbol::u16(ciphers::SM4_CCM_SM3),
413 "EMPTY_RENEGOTIATION_INFO_SCSV" =>
414 Symbol::u16(ciphers::EMPTY_RENEGOTIATION_INFO_SCSV),
415 "AES_128_GCM_SHA256" =>
416 Symbol::u16(ciphers::AES_128_GCM_SHA256),
417 "AES_256_GCM_SHA384" =>
418 Symbol::u16(ciphers::AES_256_GCM_SHA384),
419 "CHACHA20_POLY1305_SHA256" =>
420 Symbol::u16(ciphers::CHACHA20_POLY1305_SHA256),
421 "AES_128_CCM_SHA256" =>
422 Symbol::u16(ciphers::AES_128_CCM_SHA256),
423 "AES_128_CCM_8_SHA256" =>
424 Symbol::u16(ciphers::AES_128_CCM_8_SHA256),
425 "FALLBACK_SCSV" =>
426 Symbol::u16(ciphers::FALLBACK_SCSV),
427 "ECDH_ECDSA_WITH_NULL_SHA" =>
428 Symbol::u16(ciphers::ECDH_ECDSA_WITH_NULL_SHA),
429 "ECDH_ECDSA_WITH_RC4_128_SHA" =>
430 Symbol::u16(ciphers::ECDH_ECDSA_WITH_RC4_128_SHA),
431 "ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA" =>
432 Symbol::u16(ciphers::ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA),
433 "ECDH_ECDSA_WITH_AES_128_CBC_SHA" =>
434 Symbol::u16(ciphers::ECDH_ECDSA_WITH_AES_128_CBC_SHA),
435 "ECDH_ECDSA_WITH_AES_256_CBC_SHA" =>
436 Symbol::u16(ciphers::ECDH_ECDSA_WITH_AES_256_CBC_SHA),
437 "ECDHE_ECDSA_WITH_NULL_SHA" =>
438 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_NULL_SHA),
439 "ECDHE_ECDSA_WITH_RC4_128_SHA" =>
440 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_RC4_128_SHA),
441 "ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" =>
442 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA),
443 "ECDHE_ECDSA_WITH_AES_128_CBC_SHA" =>
444 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_128_CBC_SHA),
445 "ECDHE_ECDSA_WITH_AES_256_CBC_SHA" =>
446 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_256_CBC_SHA),
447 "ECDH_RSA_WITH_NULL_SHA" =>
448 Symbol::u16(ciphers::ECDH_RSA_WITH_NULL_SHA),
449 "ECDH_RSA_WITH_RC4_128_SHA" =>
450 Symbol::u16(ciphers::ECDH_RSA_WITH_RC4_128_SHA),
451 "ECDH_RSA_WITH_3DES_EDE_CBC_SHA" =>
452 Symbol::u16(ciphers::ECDH_RSA_WITH_3DES_EDE_CBC_SHA),
453 "ECDH_RSA_WITH_AES_128_CBC_SHA" =>
454 Symbol::u16(ciphers::ECDH_RSA_WITH_AES_128_CBC_SHA),
455 "ECDH_RSA_WITH_AES_256_CBC_SHA" =>
456 Symbol::u16(ciphers::ECDH_RSA_WITH_AES_256_CBC_SHA),
457 "ECDHE_RSA_WITH_NULL_SHA" =>
458 Symbol::u16(ciphers::ECDHE_RSA_WITH_NULL_SHA),
459 "ECDHE_RSA_WITH_RC4_128_SHA" =>
460 Symbol::u16(ciphers::ECDHE_RSA_WITH_RC4_128_SHA),
461 "ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" =>
462 Symbol::u16(ciphers::ECDHE_RSA_WITH_3DES_EDE_CBC_SHA),
463 "ECDHE_RSA_WITH_AES_128_CBC_SHA" =>
464 Symbol::u16(ciphers::ECDHE_RSA_WITH_AES_128_CBC_SHA),
465 "ECDHE_RSA_WITH_AES_256_CBC_SHA" =>
466 Symbol::u16(ciphers::ECDHE_RSA_WITH_AES_256_CBC_SHA),
467 "ECDH_ANON_WITH_NULL_SHA" =>
468 Symbol::u16(ciphers::ECDH_ANON_WITH_NULL_SHA),
469 "ECDH_ANON_WITH_RC4_128_SHA" =>
470 Symbol::u16(ciphers::ECDH_ANON_WITH_RC4_128_SHA),
471 "ECDH_ANON_WITH_3DES_EDE_CBC_SHA" =>
472 Symbol::u16(ciphers::ECDH_ANON_WITH_3DES_EDE_CBC_SHA),
473 "ECDH_ANON_WITH_AES_128_CBC_SHA" =>
474 Symbol::u16(ciphers::ECDH_ANON_WITH_AES_128_CBC_SHA),
475 "ECDH_ANON_WITH_AES_256_CBC_SHA" =>
476 Symbol::u16(ciphers::ECDH_ANON_WITH_AES_256_CBC_SHA),
477 "SRP_SHA_WITH_3DES_EDE_CBC_SHA" =>
478 Symbol::u16(ciphers::SRP_SHA_WITH_3DES_EDE_CBC_SHA),
479 "SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" =>
480 Symbol::u16(ciphers::SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA),
481 "SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" =>
482 Symbol::u16(ciphers::SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA),
483 "SRP_SHA_WITH_AES_128_CBC_SHA" =>
484 Symbol::u16(ciphers::SRP_SHA_WITH_AES_128_CBC_SHA),
485 "SRP_SHA_RSA_WITH_AES_128_CBC_SHA" =>
486 Symbol::u16(ciphers::SRP_SHA_RSA_WITH_AES_128_CBC_SHA),
487 "SRP_SHA_DSS_WITH_AES_128_CBC_SHA" =>
488 Symbol::u16(ciphers::SRP_SHA_DSS_WITH_AES_128_CBC_SHA),
489 "SRP_SHA_WITH_AES_256_CBC_SHA" =>
490 Symbol::u16(ciphers::SRP_SHA_WITH_AES_256_CBC_SHA),
491 "SRP_SHA_RSA_WITH_AES_256_CBC_SHA" =>
492 Symbol::u16(ciphers::SRP_SHA_RSA_WITH_AES_256_CBC_SHA),
493 "SRP_SHA_DSS_WITH_AES_256_CBC_SHA" =>
494 Symbol::u16(ciphers::SRP_SHA_DSS_WITH_AES_256_CBC_SHA),
495 "ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" =>
496 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_128_CBC_SHA256),
497 "ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" =>
498 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_256_CBC_SHA384),
499 "ECDH_ECDSA_WITH_AES_128_CBC_SHA256" =>
500 Symbol::u16(ciphers::ECDH_ECDSA_WITH_AES_128_CBC_SHA256),
501 "ECDH_ECDSA_WITH_AES_256_CBC_SHA384" =>
502 Symbol::u16(ciphers::ECDH_ECDSA_WITH_AES_256_CBC_SHA384),
503 "ECDHE_RSA_WITH_AES_128_CBC_SHA256" =>
504 Symbol::u16(ciphers::ECDHE_RSA_WITH_AES_128_CBC_SHA256),
505 "ECDHE_RSA_WITH_AES_256_CBC_SHA384" =>
506 Symbol::u16(ciphers::ECDHE_RSA_WITH_AES_256_CBC_SHA384),
507 "ECDH_RSA_WITH_AES_128_CBC_SHA256" =>
508 Symbol::u16(ciphers::ECDH_RSA_WITH_AES_128_CBC_SHA256),
509 "ECDH_RSA_WITH_AES_256_CBC_SHA384" =>
510 Symbol::u16(ciphers::ECDH_RSA_WITH_AES_256_CBC_SHA384),
511 "ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" =>
512 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_128_GCM_SHA256),
513 "ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" =>
514 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_256_GCM_SHA384),
515 "ECDH_ECDSA_WITH_AES_128_GCM_SHA256" =>
516 Symbol::u16(ciphers::ECDH_ECDSA_WITH_AES_128_GCM_SHA256),
517 "ECDH_ECDSA_WITH_AES_256_GCM_SHA384" =>
518 Symbol::u16(ciphers::ECDH_ECDSA_WITH_AES_256_GCM_SHA384),
519 "ECDHE_RSA_WITH_AES_128_GCM_SHA256" =>
520 Symbol::u16(ciphers::ECDHE_RSA_WITH_AES_128_GCM_SHA256),
521 "ECDHE_RSA_WITH_AES_256_GCM_SHA384" =>
522 Symbol::u16(ciphers::ECDHE_RSA_WITH_AES_256_GCM_SHA384),
523 "ECDH_RSA_WITH_AES_128_GCM_SHA256" =>
524 Symbol::u16(ciphers::ECDH_RSA_WITH_AES_128_GCM_SHA256),
525 "ECDH_RSA_WITH_AES_256_GCM_SHA384" =>
526 Symbol::u16(ciphers::ECDH_RSA_WITH_AES_256_GCM_SHA384),
527 "ECDHE_PSK_WITH_RC4_128_SHA" =>
528 Symbol::u16(ciphers::ECDHE_PSK_WITH_RC4_128_SHA),
529 "ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" =>
530 Symbol::u16(ciphers::ECDHE_PSK_WITH_3DES_EDE_CBC_SHA),
531 "ECDHE_PSK_WITH_AES_128_CBC_SHA" =>
532 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_128_CBC_SHA),
533 "ECDHE_PSK_WITH_AES_256_CBC_SHA" =>
534 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_256_CBC_SHA),
535 "ECDHE_PSK_WITH_AES_128_CBC_SHA256" =>
536 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_128_CBC_SHA256),
537 "ECDHE_PSK_WITH_AES_256_CBC_SHA384" =>
538 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_256_CBC_SHA384),
539 "ECDHE_PSK_WITH_NULL_SHA" =>
540 Symbol::u16(ciphers::ECDHE_PSK_WITH_NULL_SHA),
541 "ECDHE_PSK_WITH_NULL_SHA256" =>
542 Symbol::u16(ciphers::ECDHE_PSK_WITH_NULL_SHA256),
543 "ECDHE_PSK_WITH_NULL_SHA384" =>
544 Symbol::u16(ciphers::ECDHE_PSK_WITH_NULL_SHA384),
545 "RSA_WITH_ARIA_128_CBC_SHA256" =>
546 Symbol::u16(ciphers::RSA_WITH_ARIA_128_CBC_SHA256),
547 "RSA_WITH_ARIA_256_CBC_SHA384" =>
548 Symbol::u16(ciphers::RSA_WITH_ARIA_256_CBC_SHA384),
549 "DH_DSS_WITH_ARIA_128_CBC_SHA256" =>
550 Symbol::u16(ciphers::DH_DSS_WITH_ARIA_128_CBC_SHA256),
551 "DH_DSS_WITH_ARIA_256_CBC_SHA384" =>
552 Symbol::u16(ciphers::DH_DSS_WITH_ARIA_256_CBC_SHA384),
553 "DH_RSA_WITH_ARIA_128_CBC_SHA256" =>
554 Symbol::u16(ciphers::DH_RSA_WITH_ARIA_128_CBC_SHA256),
555 "DH_RSA_WITH_ARIA_256_CBC_SHA384" =>
556 Symbol::u16(ciphers::DH_RSA_WITH_ARIA_256_CBC_SHA384),
557 "DHE_DSS_WITH_ARIA_128_CBC_SHA256" =>
558 Symbol::u16(ciphers::DHE_DSS_WITH_ARIA_128_CBC_SHA256),
559 "DHE_DSS_WITH_ARIA_256_CBC_SHA384" =>
560 Symbol::u16(ciphers::DHE_DSS_WITH_ARIA_256_CBC_SHA384),
561 "DHE_RSA_WITH_ARIA_128_CBC_SHA256" =>
562 Symbol::u16(ciphers::DHE_RSA_WITH_ARIA_128_CBC_SHA256),
563 "DHE_RSA_WITH_ARIA_256_CBC_SHA384" =>
564 Symbol::u16(ciphers::DHE_RSA_WITH_ARIA_256_CBC_SHA384),
565 "DH_ANON_WITH_ARIA_128_CBC_SHA256" =>
566 Symbol::u16(ciphers::DH_ANON_WITH_ARIA_128_CBC_SHA256),
567 "DH_ANON_WITH_ARIA_256_CBC_SHA384" =>
568 Symbol::u16(ciphers::DH_ANON_WITH_ARIA_256_CBC_SHA384),
569 "ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256" =>
570 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256),
571 "ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384" =>
572 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384),
573 "ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256" =>
574 Symbol::u16(ciphers::ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256),
575 "ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384" =>
576 Symbol::u16(ciphers::ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384),
577 "ECDHE_RSA_WITH_ARIA_128_CBC_SHA256" =>
578 Symbol::u16(ciphers::ECDHE_RSA_WITH_ARIA_128_CBC_SHA256),
579 "ECDHE_RSA_WITH_ARIA_256_CBC_SHA384" =>
580 Symbol::u16(ciphers::ECDHE_RSA_WITH_ARIA_256_CBC_SHA384),
581 "ECDH_RSA_WITH_ARIA_128_CBC_SHA256" =>
582 Symbol::u16(ciphers::ECDH_RSA_WITH_ARIA_128_CBC_SHA256),
583 "ECDH_RSA_WITH_ARIA_256_CBC_SHA384" =>
584 Symbol::u16(ciphers::ECDH_RSA_WITH_ARIA_256_CBC_SHA384),
585 "RSA_WITH_ARIA_128_GCM_SHA256" =>
586 Symbol::u16(ciphers::RSA_WITH_ARIA_128_GCM_SHA256),
587 "RSA_WITH_ARIA_256_GCM_SHA384" =>
588 Symbol::u16(ciphers::RSA_WITH_ARIA_256_GCM_SHA384),
589 "DHE_RSA_WITH_ARIA_128_GCM_SHA256" =>
590 Symbol::u16(ciphers::DHE_RSA_WITH_ARIA_128_GCM_SHA256),
591 "DHE_RSA_WITH_ARIA_256_GCM_SHA384" =>
592 Symbol::u16(ciphers::DHE_RSA_WITH_ARIA_256_GCM_SHA384),
593 "DH_RSA_WITH_ARIA_128_GCM_SHA256" =>
594 Symbol::u16(ciphers::DH_RSA_WITH_ARIA_128_GCM_SHA256),
595 "DH_RSA_WITH_ARIA_256_GCM_SHA384" =>
596 Symbol::u16(ciphers::DH_RSA_WITH_ARIA_256_GCM_SHA384),
597 "DHE_DSS_WITH_ARIA_128_GCM_SHA256" =>
598 Symbol::u16(ciphers::DHE_DSS_WITH_ARIA_128_GCM_SHA256),
599 "DHE_DSS_WITH_ARIA_256_GCM_SHA384" =>
600 Symbol::u16(ciphers::DHE_DSS_WITH_ARIA_256_GCM_SHA384),
601 "DH_DSS_WITH_ARIA_128_GCM_SHA256" =>
602 Symbol::u16(ciphers::DH_DSS_WITH_ARIA_128_GCM_SHA256),
603 "DH_DSS_WITH_ARIA_256_GCM_SHA384" =>
604 Symbol::u16(ciphers::DH_DSS_WITH_ARIA_256_GCM_SHA384),
605 "DH_ANON_WITH_ARIA_128_GCM_SHA256" =>
606 Symbol::u16(ciphers::DH_ANON_WITH_ARIA_128_GCM_SHA256),
607 "DH_ANON_WITH_ARIA_256_GCM_SHA384" =>
608 Symbol::u16(ciphers::DH_ANON_WITH_ARIA_256_GCM_SHA384),
609 "ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" =>
610 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256),
611 "ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" =>
612 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384),
613 "ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" =>
614 Symbol::u16(ciphers::ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256),
615 "ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" =>
616 Symbol::u16(ciphers::ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384),
617 "ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" =>
618 Symbol::u16(ciphers::ECDHE_RSA_WITH_ARIA_128_GCM_SHA256),
619 "ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" =>
620 Symbol::u16(ciphers::ECDHE_RSA_WITH_ARIA_256_GCM_SHA384),
621 "ECDH_RSA_WITH_ARIA_128_GCM_SHA256" =>
622 Symbol::u16(ciphers::ECDH_RSA_WITH_ARIA_128_GCM_SHA256),
623 "ECDH_RSA_WITH_ARIA_256_GCM_SHA384" =>
624 Symbol::u16(ciphers::ECDH_RSA_WITH_ARIA_256_GCM_SHA384),
625 "PSK_WITH_ARIA_128_CBC_SHA256" =>
626 Symbol::u16(ciphers::PSK_WITH_ARIA_128_CBC_SHA256),
627 "PSK_WITH_ARIA_256_CBC_SHA384" =>
628 Symbol::u16(ciphers::PSK_WITH_ARIA_256_CBC_SHA384),
629 "DHE_PSK_WITH_ARIA_128_CBC_SHA256" =>
630 Symbol::u16(ciphers::DHE_PSK_WITH_ARIA_128_CBC_SHA256),
631 "DHE_PSK_WITH_ARIA_256_CBC_SHA384" =>
632 Symbol::u16(ciphers::DHE_PSK_WITH_ARIA_256_CBC_SHA384),
633 "RSA_PSK_WITH_ARIA_128_CBC_SHA256" =>
634 Symbol::u16(ciphers::RSA_PSK_WITH_ARIA_128_CBC_SHA256),
635 "RSA_PSK_WITH_ARIA_256_CBC_SHA384" =>
636 Symbol::u16(ciphers::RSA_PSK_WITH_ARIA_256_CBC_SHA384),
637 "PSK_WITH_ARIA_128_GCM_SHA256" =>
638 Symbol::u16(ciphers::PSK_WITH_ARIA_128_GCM_SHA256),
639 "PSK_WITH_ARIA_256_GCM_SHA384" =>
640 Symbol::u16(ciphers::PSK_WITH_ARIA_256_GCM_SHA384),
641 "DHE_PSK_WITH_ARIA_128_GCM_SHA256" =>
642 Symbol::u16(ciphers::DHE_PSK_WITH_ARIA_128_GCM_SHA256),
643 "DHE_PSK_WITH_ARIA_256_GCM_SHA384" =>
644 Symbol::u16(ciphers::DHE_PSK_WITH_ARIA_256_GCM_SHA384),
645 "RSA_PSK_WITH_ARIA_128_GCM_SHA256" =>
646 Symbol::u16(ciphers::RSA_PSK_WITH_ARIA_128_GCM_SHA256),
647 "RSA_PSK_WITH_ARIA_256_GCM_SHA384" =>
648 Symbol::u16(ciphers::RSA_PSK_WITH_ARIA_256_GCM_SHA384),
649 "ECDHE_PSK_WITH_ARIA_128_CBC_SHA256" =>
650 Symbol::u16(ciphers::ECDHE_PSK_WITH_ARIA_128_CBC_SHA256),
651 "ECDHE_PSK_WITH_ARIA_256_CBC_SHA384" =>
652 Symbol::u16(ciphers::ECDHE_PSK_WITH_ARIA_256_CBC_SHA384),
653 "ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" =>
654 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256),
655 "ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" =>
656 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384),
657 "ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" =>
658 Symbol::u16(ciphers::ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256),
659 "ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" =>
660 Symbol::u16(ciphers::ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384),
661 "ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" =>
662 Symbol::u16(ciphers::ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256),
663 "ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" =>
664 Symbol::u16(ciphers::ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384),
665 "ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256" =>
666 Symbol::u16(ciphers::ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256),
667 "ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384" =>
668 Symbol::u16(ciphers::ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384),
669 "RSA_WITH_CAMELLIA_128_GCM_SHA256" =>
670 Symbol::u16(ciphers::RSA_WITH_CAMELLIA_128_GCM_SHA256),
671 "RSA_WITH_CAMELLIA_256_GCM_SHA384" =>
672 Symbol::u16(ciphers::RSA_WITH_CAMELLIA_256_GCM_SHA384),
673 "DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256" =>
674 Symbol::u16(ciphers::DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256),
675 "DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384" =>
676 Symbol::u16(ciphers::DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384),
677 "DH_RSA_WITH_CAMELLIA_128_GCM_SHA256" =>
678 Symbol::u16(ciphers::DH_RSA_WITH_CAMELLIA_128_GCM_SHA256),
679 "DH_RSA_WITH_CAMELLIA_256_GCM_SHA384" =>
680 Symbol::u16(ciphers::DH_RSA_WITH_CAMELLIA_256_GCM_SHA384),
681 "DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256" =>
682 Symbol::u16(ciphers::DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256),
683 "DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384" =>
684 Symbol::u16(ciphers::DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384),
685 "DH_DSS_WITH_CAMELLIA_128_GCM_SHA256" =>
686 Symbol::u16(ciphers::DH_DSS_WITH_CAMELLIA_128_GCM_SHA256),
687 "DH_DSS_WITH_CAMELLIA_256_GCM_SHA384" =>
688 Symbol::u16(ciphers::DH_DSS_WITH_CAMELLIA_256_GCM_SHA384),
689 "DH_ANON_WITH_CAMELLIA_128_GCM_SHA256" =>
690 Symbol::u16(ciphers::DH_ANON_WITH_CAMELLIA_128_GCM_SHA256),
691 "DH_ANON_WITH_CAMELLIA_256_GCM_SHA384" =>
692 Symbol::u16(ciphers::DH_ANON_WITH_CAMELLIA_256_GCM_SHA384),
693 "ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256" =>
694 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256),
695 "ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384" =>
696 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384),
697 "ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256" =>
698 Symbol::u16(ciphers::ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256),
699 "ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384" =>
700 Symbol::u16(ciphers::ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384),
701 "ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256" =>
702 Symbol::u16(ciphers::ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256),
703 "ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384" =>
704 Symbol::u16(ciphers::ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384),
705 "ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256" =>
706 Symbol::u16(ciphers::ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256),
707 "ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384" =>
708 Symbol::u16(ciphers::ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384),
709 "PSK_WITH_CAMELLIA_128_GCM_SHA256" =>
710 Symbol::u16(ciphers::PSK_WITH_CAMELLIA_128_GCM_SHA256),
711 "PSK_WITH_CAMELLIA_256_GCM_SHA384" =>
712 Symbol::u16(ciphers::PSK_WITH_CAMELLIA_256_GCM_SHA384),
713 "DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256" =>
714 Symbol::u16(ciphers::DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256),
715 "DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384" =>
716 Symbol::u16(ciphers::DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384),
717 "RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256" =>
718 Symbol::u16(ciphers::RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256),
719 "RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384" =>
720 Symbol::u16(ciphers::RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384),
721 "PSK_WITH_CAMELLIA_128_CBC_SHA256" =>
722 Symbol::u16(ciphers::PSK_WITH_CAMELLIA_128_CBC_SHA256),
723 "PSK_WITH_CAMELLIA_256_CBC_SHA384" =>
724 Symbol::u16(ciphers::PSK_WITH_CAMELLIA_256_CBC_SHA384),
725 "DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" =>
726 Symbol::u16(ciphers::DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256),
727 "DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" =>
728 Symbol::u16(ciphers::DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384),
729 "RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" =>
730 Symbol::u16(ciphers::RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256),
731 "RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" =>
732 Symbol::u16(ciphers::RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384),
733 "ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" =>
734 Symbol::u16(ciphers::ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256),
735 "ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" =>
736 Symbol::u16(ciphers::ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384),
737 "RSA_WITH_AES_128_CCM" =>
738 Symbol::u16(ciphers::RSA_WITH_AES_128_CCM),
739 "RSA_WITH_AES_256_CCM" =>
740 Symbol::u16(ciphers::RSA_WITH_AES_256_CCM),
741 "DHE_RSA_WITH_AES_128_CCM" =>
742 Symbol::u16(ciphers::DHE_RSA_WITH_AES_128_CCM),
743 "DHE_RSA_WITH_AES_256_CCM" =>
744 Symbol::u16(ciphers::DHE_RSA_WITH_AES_256_CCM),
745 "RSA_WITH_AES_128_CCM_8" =>
746 Symbol::u16(ciphers::RSA_WITH_AES_128_CCM_8),
747 "RSA_WITH_AES_256_CCM_8" =>
748 Symbol::u16(ciphers::RSA_WITH_AES_256_CCM_8),
749 "DHE_RSA_WITH_AES_128_CCM_8" =>
750 Symbol::u16(ciphers::DHE_RSA_WITH_AES_128_CCM_8),
751 "DHE_RSA_WITH_AES_256_CCM_8" =>
752 Symbol::u16(ciphers::DHE_RSA_WITH_AES_256_CCM_8),
753 "PSK_WITH_AES_128_CCM" =>
754 Symbol::u16(ciphers::PSK_WITH_AES_128_CCM),
755 "PSK_WITH_AES_256_CCM" =>
756 Symbol::u16(ciphers::PSK_WITH_AES_256_CCM),
757 "DHE_PSK_WITH_AES_128_CCM" =>
758 Symbol::u16(ciphers::DHE_PSK_WITH_AES_128_CCM),
759 "DHE_PSK_WITH_AES_256_CCM" =>
760 Symbol::u16(ciphers::DHE_PSK_WITH_AES_256_CCM),
761 "PSK_WITH_AES_128_CCM_8" =>
762 Symbol::u16(ciphers::PSK_WITH_AES_128_CCM_8),
763 "PSK_WITH_AES_256_CCM_8" =>
764 Symbol::u16(ciphers::PSK_WITH_AES_256_CCM_8),
765 "PSK_DHE_WITH_AES_128_CCM_8" =>
766 Symbol::u16(ciphers::PSK_DHE_WITH_AES_128_CCM_8),
767 "PSK_DHE_WITH_AES_256_CCM_8" =>
768 Symbol::u16(ciphers::PSK_DHE_WITH_AES_256_CCM_8),
769 "ECDHE_ECDSA_WITH_AES_128_CCM" =>
770 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_128_CCM),
771 "ECDHE_ECDSA_WITH_AES_256_CCM" =>
772 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_256_CCM),
773 "ECDHE_ECDSA_WITH_AES_128_CCM_8" =>
774 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_128_CCM_8),
775 "ECDHE_ECDSA_WITH_AES_256_CCM_8" =>
776 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_AES_256_CCM_8),
777 "ECCPWD_WITH_AES_128_GCM_SHA256" =>
778 Symbol::u16(ciphers::ECCPWD_WITH_AES_128_GCM_SHA256),
779 "ECCPWD_WITH_AES_256_GCM_SHA384" =>
780 Symbol::u16(ciphers::ECCPWD_WITH_AES_256_GCM_SHA384),
781 "ECCPWD_WITH_AES_128_CCM_SHA256" =>
782 Symbol::u16(ciphers::ECCPWD_WITH_AES_128_CCM_SHA256),
783 "ECCPWD_WITH_AES_256_CCM_SHA384" =>
784 Symbol::u16(ciphers::ECCPWD_WITH_AES_256_CCM_SHA384),
785 "SHA256_SHA256" =>
786 Symbol::u16(ciphers::SHA256_SHA256),
787 "SHA384_SHA384" =>
788 Symbol::u16(ciphers::SHA384_SHA384),
789 "GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC" =>
790 Symbol::u16(ciphers::GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC),
791 "GOSTR341112_256_WITH_MAGMA_CTR_OMAC" =>
792 Symbol::u16(ciphers::GOSTR341112_256_WITH_MAGMA_CTR_OMAC),
793 "GOSTR341112_256_WITH_28147_CNT_IMIT" =>
794 Symbol::u16(ciphers::GOSTR341112_256_WITH_28147_CNT_IMIT),
795 "GOSTR341112_256_WITH_KUZNYECHIK_MGM_L" =>
796 Symbol::u16(ciphers::GOSTR341112_256_WITH_KUZNYECHIK_MGM_L),
797 "GOSTR341112_256_WITH_MAGMA_MGM_L" =>
798 Symbol::u16(ciphers::GOSTR341112_256_WITH_MAGMA_MGM_L),
799 "GOSTR341112_256_WITH_KUZNYECHIK_MGM_S" =>
800 Symbol::u16(ciphers::GOSTR341112_256_WITH_KUZNYECHIK_MGM_S),
801 "GOSTR341112_256_WITH_MAGMA_MGM_S" =>
802 Symbol::u16(ciphers::GOSTR341112_256_WITH_MAGMA_MGM_S),
803 "ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" =>
804 Symbol::u16(ciphers::ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256),
805 "ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" =>
806 Symbol::u16(ciphers::ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256),
807 "DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" =>
808 Symbol::u16(ciphers::DHE_RSA_WITH_CHACHA20_POLY1305_SHA256),
809 "PSK_WITH_CHACHA20_POLY1305_SHA256" =>
810 Symbol::u16(ciphers::PSK_WITH_CHACHA20_POLY1305_SHA256),
811 "ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" =>
812 Symbol::u16(ciphers::ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256),
813 "DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" =>
814 Symbol::u16(ciphers::DHE_PSK_WITH_CHACHA20_POLY1305_SHA256),
815 "RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" =>
816 Symbol::u16(ciphers::RSA_PSK_WITH_CHACHA20_POLY1305_SHA256),
817 "ECDHE_PSK_WITH_AES_128_GCM_SHA256" =>
818 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_128_GCM_SHA256),
819 "ECDHE_PSK_WITH_AES_256_GCM_SHA384" =>
820 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_256_GCM_SHA384),
821 "ECDHE_PSK_WITH_AES_128_CCM_8_SHA256" =>
822 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_128_CCM_8_SHA256),
823 "ECDHE_PSK_WITH_AES_128_CCM_SHA256" =>
824 Symbol::u16(ciphers::ECDHE_PSK_WITH_AES_128_CCM_SHA256),
825};
826
827const TLS_MESSAGE: FuncDef = func_def! (
828 "tls::message";
829 ValType::Str;
830
831 =>
832 "version" => ValDef::U16(version::TLS_1_2),
833 "content" => ValDef::U8(content::HANDSHAKE),
834 =>
835 ValType::Str;
836
837 |mut args| {
838 let version: u16= args.next().into();
839 let content: u8 = args.next().into();
840 let bytes: Buf = args.join_extra(b"").into();
841 let mut msg: Vec<u8> = Vec::with_capacity(bytes.len() + 5);
842
843 msg.extend(content.to_be_bytes());
844 msg.extend(version.to_be_bytes());
845 msg.extend((bytes.len() as u16).to_be_bytes());
846
847 msg.extend(bytes.as_ref());
849
850 Ok(Val::str(msg))
851 }
852);
853
854fn len24(len: usize) -> [u8; 3] {
855 let b = (len as u32).to_be_bytes();
856 [b[1], b[2], b[3]]
857}
858
859const TLS_CIPHERS: FuncDef = func_def! (
860 "tls::ciphers";
861 ValType::Str;
862
863 =>
864 =>
865 ValType::U16;
866
867 |mut args| {
868 let extra: Vec<u16> = args.collect_extra_args();
869 let list_len = extra.len() * 2;
870
871 let mut msg: Vec<u8> = Vec::with_capacity(2 + list_len);
872
873
874 msg.extend((list_len as u16).to_be_bytes());
875 for id in extra {
876 msg.extend(id.to_be_bytes());
877 }
878
879 Ok(Val::str(msg))
880 }
881);
882
883const TLS_CLIENT_HELLO: FuncDef = func_def! (
884 "tls::client_hello";
885 ValType::Str;
886
887 =>
888 "version" => ValDef::U16(version::TLS_1_2),
889 "sessionid" => ValDef::Str(b"\x00"),
890 "ciphers" => ValDef::Str(b"\x00\x02\x00\x00"), "compression" => ValDef::Str(b"\x01\x00"), =>
893 ValType::Str;
894
895 |mut args| {
896 let version: u16 = args.next().into();
897 let sessionid: Buf = args.next().into();
898 let ciphers: Buf = args.next().into();
899 let compression: Buf = args.next().into();
900 let extensions: Buf = args.join_extra(b"").into();
901
902 let hlen = 34
903 + sessionid.len()
904 + ciphers.len()
905 + compression.len()
906 + if extensions.len() > 0 { 2 } else { 0 }
907 + extensions.len();
908
909 let mut msg: Vec<u8> = Vec::with_capacity(4 + hlen);
910
911 msg.push(handshake::CLIENT_HELLO);
913 msg.extend(len24(hlen));
914
915 msg.extend(version.to_be_bytes());
917 msg.extend(b"_client__random__client__random_");
918
919 msg.extend(sessionid.as_ref());
920 msg.extend(ciphers.as_ref());
921 msg.extend(compression.as_ref());
922
923 if extensions.len() > 0 {
924 msg.extend((extensions.len() as u16).to_be_bytes());
925 msg.extend(extensions.as_ref());
926 }
927
928 Ok(Val::str(msg))
929 }
930);
931
932const TLS_SERVER_HELLO: FuncDef = func_def! (
933 "tls::server_hello";
934 ValType::Str;
935
936 =>
937 "version" => ValDef::U16(version::TLS_1_2),
938 "sessionid" => ValDef::Str(b"\x00"),
939 "cipher" => ValDef::U16(ciphers::NULL_WITH_NULL_NULL),
940 "compression" => ValDef::U8(0),
941 =>
942 ValType::Str;
943
944 |mut args| {
945 let version: u16 = args.next().into();
946 let sessionid: Buf = args.next().into();
947 let cipher: u16 = args.next().into();
948 let compression: u8 = args.next().into();
949 let extensions: Buf = args.join_extra(b"").into();
950
951 let hlen = 34
952 + sessionid.len()
953 + 2
954 + 1
955 + if extensions.len() > 0 { 2 } else { 0 }
956 + extensions.len();
957
958 let mut msg: Vec<u8> = Vec::with_capacity(4 + hlen);
959
960 msg.push(handshake::SERVER_HELLO);
962 msg.extend(len24(hlen));
963
964 msg.extend(version.to_be_bytes());
966 msg.extend(b"_server__random__server__random_");
967
968 msg.extend(sessionid.as_ref());
969
970 msg.extend(cipher.to_be_bytes());
971 msg.push(compression);
972
973 if extensions.len() > 0 {
974 msg.extend((extensions.len() as u16).to_be_bytes());
975 msg.extend(extensions.as_ref());
976 }
977
978 Ok(Val::str(msg))
979 }
980);
981
982const TLS_SNI: FuncDef = func_def! (
983 "tls::sni";
984 ValType::Str;
985
986 =>
987 =>
988 ValType::Str;
989
990 |mut args| {
991 let names: Vec<Buf> = args.collect_extra_args();
992 let names_len: usize = names.iter().map(|x| -> Buf { x.into() }).map(|x| x.len()).sum();
993 let name_list_len = 3 * names.len() + names_len;
994 let tot_len = 2 + name_list_len;
995
996 let mut msg: Vec<u8> = Vec::with_capacity(tot_len + 4);
997
998 msg.extend(ext::SERVER_NAME.to_be_bytes());
999 msg.extend((tot_len as u16).to_be_bytes());
1000
1001 msg.extend((name_list_len as u16).to_be_bytes());
1002 for name in names {
1003 msg.push(0);
1004 msg.extend((name.len() as u16).to_be_bytes());
1005 msg.extend(name.as_ref());
1006 }
1007
1008 Ok(Val::str(msg))
1009 }
1010);
1011
1012const TLS_CERTIFICATES: FuncDef = func_def! (
1013 "tls::certificates";
1014 ValType::Str;
1015
1016 =>
1017 =>
1018 ValType::Str;
1019
1020 |mut args| {
1021 let certs: Vec<Buf> = args.collect_extra_args();
1022 let certs_len: usize = certs.iter().map(|x| -> Buf { x.into() }).map(|x| x.len()).sum();
1023 let cert_list_len = 3 * certs.len() + certs_len;
1024 let tot_len = 3 + cert_list_len;
1025
1026 let mut msg: Vec<u8> = Vec::with_capacity(tot_len + 4);
1027
1028 msg.push(handshake::CERTIFICATE);
1029 msg.extend(len24(tot_len));
1030
1031 msg.extend(len24(cert_list_len));
1032 for cert in certs {
1033 msg.extend(len24(cert.len()));
1034 msg.extend(cert.as_ref());
1035 }
1036
1037 Ok(Val::str(msg))
1038 }
1039);
1040
1041pub const TLS: phf::Map<&'static str, Symbol> = phf_map! {
1042 "version" => Symbol::Module(&VERSION),
1043 "content" => Symbol::Module(&CONTENT),
1044 "handshake" => Symbol::Module(&HANDSHAKE),
1045 "ext" => Symbol::Module(&EXT),
1046 "cipher" => Symbol::Module(&CIPHER),
1047
1048 "message" => Symbol::Func(&TLS_MESSAGE),
1049 "client_hello" => Symbol::Func(&TLS_CLIENT_HELLO),
1050 "server_hello" => Symbol::Func(&TLS_SERVER_HELLO),
1051 "ciphers" => Symbol::Func(&TLS_CIPHERS),
1052 "certificates" => Symbol::Func(&TLS_CERTIFICATES),
1053 "sni" => Symbol::Func(&TLS_SNI),
1054};