resynth/stdlib/
tls.rs

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        /* extensions I guess? */
848        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"), // null cipher
891    "compression" => ValDef::Str(b"\x01\x00"), // null compression
892    =>
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        /* 4 bytes handshake header */
912        msg.push(handshake::CLIENT_HELLO);
913        msg.extend(len24(hlen));
914
915        /* 34 bytes version + random */
916        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        /* 4 bytes handshake header */
961        msg.push(handshake::SERVER_HELLO);
962        msg.extend(len24(hlen));
963
964        /* 34 bytes version + random */
965        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};