46 if (strncmp(peer_info, field, strlen(field)) == 0)
52 peer_info = strchr(peer_info,
'\n');
73 var_start += strlen(var);
77 const char *var_end = strchr(var_start,
'\n');
80 var_end = var_start + strlen(var_start);
85 var_value[var_end - var_start] =
'\0';
96 optstr += strlen(field);
99 int r = sscanf(optstr, format, &value);
100 if (r == 1 && value >= 0)
105 return default_value;
140 const char *tmp = strstr(
options,
",link-mtu");
148 if (sscanf(tmp,
",link-mtu %d,", &link_mtu) != 1 || link_mtu < 100 || link_mtu > 9900)
160 buf_printf(&buf,
",link-mtu %d", link_mtu + 1);
162 tmp +=
strlen(
",link-mtu ") + (link_mtu < 1000 ? 3 : 4);
173 {
"ADH-SEED-SHA",
"TLS-DH-anon-WITH-SEED-CBC-SHA" },
174 {
"AES128-GCM-SHA256",
"TLS-RSA-WITH-AES-128-GCM-SHA256" },
175 {
"AES128-SHA256",
"TLS-RSA-WITH-AES-128-CBC-SHA256" },
176 {
"AES128-SHA",
"TLS-RSA-WITH-AES-128-CBC-SHA" },
177 {
"AES256-GCM-SHA384",
"TLS-RSA-WITH-AES-256-GCM-SHA384" },
178 {
"AES256-SHA256",
"TLS-RSA-WITH-AES-256-CBC-SHA256" },
179 {
"AES256-SHA",
"TLS-RSA-WITH-AES-256-CBC-SHA" },
180 {
"ARIA128-GCM-SHA256",
"TLS-RSA-WITH-ARIA-128-GCM-SHA256" },
181 {
"ARIA256-GCM-SHA384",
"TLS-RSA-WITH-ARIA-256-GCM-SHA384" },
182 {
"CAMELLIA128-SHA256",
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256" },
183 {
"CAMELLIA128-SHA",
"TLS-RSA-WITH-CAMELLIA-128-CBC-SHA" },
184 {
"CAMELLIA256-SHA256",
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256" },
185 {
"CAMELLIA256-SHA",
"TLS-RSA-WITH-CAMELLIA-256-CBC-SHA" },
186 {
"DES-CBC3-SHA",
"TLS-RSA-WITH-3DES-EDE-CBC-SHA" },
187 {
"DES-CBC-SHA",
"TLS-RSA-WITH-DES-CBC-SHA" },
188 {
"DH-DSS-SEED-SHA",
"TLS-DH-DSS-WITH-SEED-CBC-SHA" },
189 {
"DHE-DSS-AES128-GCM-SHA256",
"TLS-DHE-DSS-WITH-AES-128-GCM-SHA256" },
190 {
"DHE-DSS-AES128-SHA256",
"TLS-DHE-DSS-WITH-AES-128-CBC-SHA256" },
191 {
"DHE-DSS-AES128-SHA",
"TLS-DHE-DSS-WITH-AES-128-CBC-SHA" },
192 {
"DHE-DSS-AES256-GCM-SHA384",
"TLS-DHE-DSS-WITH-AES-256-GCM-SHA384" },
193 {
"DHE-DSS-AES256-SHA256",
"TLS-DHE-DSS-WITH-AES-256-CBC-SHA256" },
194 {
"DHE-DSS-AES256-SHA",
"TLS-DHE-DSS-WITH-AES-256-CBC-SHA" },
195 {
"DHE-DSS-ARIA128-GCM-SHA256",
"TLS-DHE-DSS-WITH-ARIA-128-GCM-SHA256" },
196 {
"DHE-DSS-ARIA256-GCM-SHA384",
"TLS-DHE-DSS-WITH-ARIA-256-GCM-SHA384" },
197 {
"DHE-DSS-CAMELLIA128-SHA256",
"TLS-DHE-DSS-WITH-CAMELLIA-128-CBC-SHA256" },
198 {
"DHE-DSS-CAMELLIA128-SHA",
"TLS-DHE-DSS-WITH-CAMELLIA-128-CBC-SHA" },
199 {
"DHE-DSS-CAMELLIA256-SHA256",
"TLS-DHE-DSS-WITH-CAMELLIA-256-CBC-SHA256" },
200 {
"DHE-DSS-CAMELLIA256-SHA",
"TLS-DHE-DSS-WITH-CAMELLIA-256-CBC-SHA" },
201 {
"DHE-DSS-SEED-SHA",
"TLS-DHE-DSS-WITH-SEED-CBC-SHA" },
202 {
"DHE-RSA-AES128-GCM-SHA256",
"TLS-DHE-RSA-WITH-AES-128-GCM-SHA256" },
203 {
"DHE-RSA-AES128-SHA256",
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA256" },
204 {
"DHE-RSA-AES128-SHA",
"TLS-DHE-RSA-WITH-AES-128-CBC-SHA" },
205 {
"DHE-RSA-AES256-GCM-SHA384",
"TLS-DHE-RSA-WITH-AES-256-GCM-SHA384" },
206 {
"DHE-RSA-AES256-SHA256",
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" },
207 {
"DHE-RSA-AES256-SHA",
"TLS-DHE-RSA-WITH-AES-256-CBC-SHA" },
208 {
"DHE-RSA-ARIA128-GCM-SHA256",
"TLS-DHE-RSA-WITH-ARIA-128-GCM-SHA256" },
209 {
"DHE-RSA-ARIA256-GCM-SHA384",
"TLS-DHE-RSA-WITH-ARIA-256-GCM-SHA384" },
210 {
"DHE-RSA-CAMELLIA128-SHA256",
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256" },
211 {
"DHE-RSA-CAMELLIA128-SHA",
"TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA" },
212 {
"DHE-RSA-CAMELLIA256-SHA256",
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256" },
213 {
"DHE-RSA-CAMELLIA256-SHA",
"TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA" },
214 {
"DHE-RSA-CHACHA20-POLY1305",
"TLS-DHE-RSA-WITH-CHACHA20-POLY1305-SHA256" },
215 {
"DHE-RSA-SEED-SHA",
"TLS-DHE-RSA-WITH-SEED-CBC-SHA" },
216 {
"DH-RSA-SEED-SHA",
"TLS-DH-RSA-WITH-SEED-CBC-SHA" },
217 {
"ECDH-ECDSA-AES128-GCM-SHA256",
"TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256" },
218 {
"ECDH-ECDSA-AES128-SHA256",
"TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA256" },
219 {
"ECDH-ECDSA-AES128-SHA",
"TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA" },
220 {
"ECDH-ECDSA-AES256-GCM-SHA384",
"TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384" },
221 {
"ECDH-ECDSA-AES256-SHA256",
"TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA256" },
222 {
"ECDH-ECDSA-AES256-SHA384",
"TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA384" },
223 {
"ECDH-ECDSA-AES256-SHA",
"TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA" },
224 {
"ECDH-ECDSA-CAMELLIA128-SHA256",
"TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA256" },
225 {
"ECDH-ECDSA-CAMELLIA128-SHA",
"TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA" },
226 {
"ECDH-ECDSA-CAMELLIA256-SHA256",
"TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA256" },
227 {
"ECDH-ECDSA-CAMELLIA256-SHA",
"TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA" },
228 {
"ECDH-ECDSA-DES-CBC3-SHA",
"TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA" },
229 {
"ECDH-ECDSA-DES-CBC-SHA",
"TLS-ECDH-ECDSA-WITH-DES-CBC-SHA" },
230 {
"ECDH-ECDSA-RC4-SHA",
"TLS-ECDH-ECDSA-WITH-RC4-128-SHA" },
231 {
"ECDHE-ARIA128-GCM-SHA256",
"TLS-ECDHE-RSA-WITH-ARIA-128-GCM-SHA256" },
232 {
"ECDHE-ARIA256-GCM-SHA384",
"TLS-ECDHE-RSA-WITH-ARIA-256-GCM-SHA384" },
233 {
"ECDHE-ECDSA-AES128-GCM-SHA256",
"TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256" },
234 {
"ECDHE-ECDSA-AES128-SHA256",
"TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256" },
235 {
"ECDHE-ECDSA-AES128-SHA384",
"TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA384" },
236 {
"ECDHE-ECDSA-AES128-SHA",
"TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA" },
237 {
"ECDHE-ECDSA-AES256-GCM-SHA384",
"TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384" },
238 {
"ECDHE-ECDSA-AES256-SHA256",
"TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA256" },
239 {
"ECDHE-ECDSA-AES256-SHA384",
"TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384" },
240 {
"ECDHE-ECDSA-AES256-SHA",
"TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA" },
241 {
"ECDHE-ECDSA-ARIA128-GCM-SHA256",
"TLS-ECDHE-ECDSA-WITH-ARIA-128-GCM-SHA256" },
242 {
"ECDHE-ECDSA-ARIA256-GCM-SHA384",
"TLS-ECDHE-ECDSA-WITH-ARIA-256-GCM-SHA384" },
243 {
"ECDHE-ECDSA-CAMELLIA128-SHA256",
"TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256" },
244 {
"ECDHE-ECDSA-CAMELLIA128-SHA",
"TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA" },
245 {
"ECDHE-ECDSA-CAMELLIA256-SHA256",
"TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA256" },
246 {
"ECDHE-ECDSA-CAMELLIA256-SHA",
"TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA" },
247 {
"ECDHE-ECDSA-CHACHA20-POLY1305",
"TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256" },
248 {
"ECDHE-ECDSA-DES-CBC3-SHA",
"TLS-ECDHE-ECDSA-WITH-3DES-EDE-CBC-SHA" },
249 {
"ECDHE-ECDSA-DES-CBC-SHA",
"TLS-ECDHE-ECDSA-WITH-DES-CBC-SHA" },
250 {
"ECDHE-ECDSA-RC4-SHA",
"TLS-ECDHE-ECDSA-WITH-RC4-128-SHA" },
251 {
"ECDHE-RSA-AES128-GCM-SHA256",
"TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256" },
252 {
"ECDHE-RSA-AES128-SHA256",
"TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256" },
253 {
"ECDHE-RSA-AES128-SHA384",
"TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA384" },
254 {
"ECDHE-RSA-AES128-SHA",
"TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA" },
255 {
"ECDHE-RSA-AES256-GCM-SHA384",
"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" },
256 {
"ECDHE-RSA-AES256-SHA256",
"TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA256" },
257 {
"ECDHE-RSA-AES256-SHA384",
"TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384" },
258 {
"ECDHE-RSA-AES256-SHA",
"TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA" },
259 {
"ECDHE-RSA-CAMELLIA128-SHA256",
"TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA256" },
260 {
"ECDHE-RSA-CAMELLIA128-SHA",
"TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA" },
261 {
"ECDHE-RSA-CAMELLIA256-SHA256",
"TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA256" },
262 {
"ECDHE-RSA-CAMELLIA256-SHA",
"TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA" },
263 {
"ECDHE-RSA-CHACHA20-POLY1305",
"TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256" },
264 {
"ECDHE-RSA-DES-CBC3-SHA",
"TLS-ECDHE-RSA-WITH-3DES-EDE-CBC-SHA" },
265 {
"ECDHE-RSA-DES-CBC-SHA",
"TLS-ECDHE-RSA-WITH-DES-CBC-SHA" },
266 {
"ECDHE-RSA-RC4-SHA",
"TLS-ECDHE-RSA-WITH-RC4-128-SHA" },
267 {
"ECDH-RSA-AES128-GCM-SHA256",
"TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256" },
268 {
"ECDH-RSA-AES128-SHA256",
"TLS-ECDH-RSA-WITH-AES-128-CBC-SHA256" },
269 {
"ECDH-RSA-AES128-SHA384",
"TLS-ECDH-RSA-WITH-AES-128-CBC-SHA384" },
270 {
"ECDH-RSA-AES128-SHA",
"TLS-ECDH-RSA-WITH-AES-128-CBC-SHA" },
271 {
"ECDH-RSA-AES256-GCM-SHA384",
"TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384" },
272 {
"ECDH-RSA-AES256-SHA256",
"TLS-ECDH-RSA-WITH-AES-256-CBC-SHA256" },
273 {
"ECDH-RSA-AES256-SHA384",
"TLS-ECDH-RSA-WITH-AES-256-CBC-SHA384" },
274 {
"ECDH-RSA-AES256-SHA",
"TLS-ECDH-RSA-WITH-AES-256-CBC-SHA" },
275 {
"ECDH-RSA-CAMELLIA128-SHA256",
"TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA256" },
276 {
"ECDH-RSA-CAMELLIA128-SHA",
"TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA" },
277 {
"ECDH-RSA-CAMELLIA256-SHA256",
"TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA256" },
278 {
"ECDH-RSA-CAMELLIA256-SHA",
"TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA" },
279 {
"ECDH-RSA-DES-CBC3-SHA",
"TLS-ECDH-RSA-WITH-3DES-EDE-CBC-SHA" },
280 {
"ECDH-RSA-DES-CBC-SHA",
"TLS-ECDH-RSA-WITH-DES-CBC-SHA" },
281 {
"ECDH-RSA-RC4-SHA",
"TLS-ECDH-RSA-WITH-RC4-128-SHA" },
282 {
"EDH-DSS-DES-CBC3-SHA",
"TLS-DHE-DSS-WITH-3DES-EDE-CBC-SHA" },
283 {
"EDH-DSS-DES-CBC-SHA",
"TLS-DHE-DSS-WITH-DES-CBC-SHA" },
284 {
"EDH-RSA-DES-CBC3-SHA",
"TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA" },
285 {
"EDH-RSA-DES-CBC-SHA",
"TLS-DHE-RSA-WITH-DES-CBC-SHA" },
286 {
"EXP-DES-CBC-SHA",
"TLS-RSA-EXPORT-WITH-DES40-CBC-SHA" },
287 {
"EXP-EDH-DSS-DES-CBC-SHA",
"TLS-DH-DSS-EXPORT-WITH-DES40-CBC-SHA" },
288 {
"EXP-EDH-RSA-DES-CBC-SHA",
"TLS-DH-RSA-EXPORT-WITH-DES40-CBC-SHA" },
289 {
"EXP-RC2-CBC-MD5",
"TLS-RSA-EXPORT-WITH-RC2-CBC-40-MD5" },
290 {
"EXP-RC4-MD5",
"TLS-RSA-EXPORT-WITH-RC4-40-MD5" },
291 {
"NULL-MD5",
"TLS-RSA-WITH-NULL-MD5" },
292 {
"NULL-SHA256",
"TLS-RSA-WITH-NULL-SHA256" },
293 {
"NULL-SHA",
"TLS-RSA-WITH-NULL-SHA" },
294 {
"PSK-3DES-EDE-CBC-SHA",
"TLS-PSK-WITH-3DES-EDE-CBC-SHA" },
295 {
"PSK-AES128-CBC-SHA",
"TLS-PSK-WITH-AES-128-CBC-SHA" },
296 {
"PSK-AES256-CBC-SHA",
"TLS-PSK-WITH-AES-256-CBC-SHA" },
297 {
"PSK-RC4-SHA",
"TLS-PSK-WITH-RC4-128-SHA" },
298 {
"RC4-MD5",
"TLS-RSA-WITH-RC4-128-MD5" },
299 {
"RC4-SHA",
"TLS-RSA-WITH-RC4-128-SHA" },
300 {
"SEED-SHA",
"TLS-RSA-WITH-SEED-CBC-SHA" },
301 {
"SRP-DSS-3DES-EDE-CBC-SHA",
"TLS-SRP-SHA-DSS-WITH-3DES-EDE-CBC-SHA" },
302 {
"SRP-DSS-AES-128-CBC-SHA",
"TLS-SRP-SHA-DSS-WITH-AES-128-CBC-SHA" },
303 {
"SRP-DSS-AES-256-CBC-SHA",
"TLS-SRP-SHA-DSS-WITH-AES-256-CBC-SHA" },
304 {
"SRP-RSA-3DES-EDE-CBC-SHA",
"TLS-SRP-SHA-RSA-WITH-3DES-EDE-CBC-SHA" },
305 {
"SRP-RSA-AES-128-CBC-SHA",
"TLS-SRP-SHA-RSA-WITH-AES-128-CBC-SHA" },
306 {
"SRP-RSA-AES-256-CBC-SHA",
"TLS-SRP-SHA-RSA-WITH-AES-256-CBC-SHA" },
307#ifdef ENABLE_CRYPTO_OPENSSL
309 {
"DEFAULT",
"DEFAULT" },
312 {
"!HIGH",
"!HIGH" },
313 {
"MEDIUM",
"MEDIUM" },
314 {
"!MEDIUM",
"!MEDIUM" },
318 {
"!ECDH",
"!ECDH" },
319 {
"ECDSA",
"ECDSA" },
320 {
"!ECDSA",
"!ECDSA" },
328 {
"!kRSA",
"!kRSA" },
bool buf_printf(struct buffer *buf, const char *format,...)
printf-style append to a buffer with overflow check.
struct buffer alloc_buf_gc(size_t size, struct gc_arena *gc)
Allocate a buffer of the given size under garbage collection.
char * string_alloc(const char *str, struct gc_arena *gc)
Duplicate a string, allocating memory under garbage collection.
#define BSTR(buf)
Return the buffer content pointer cast to char *.
static bool buf_write(struct buffer *dest, const void *src, size_t size)
Append data to a buffer.
static const tls_cipher_name_pair tls_cipher_name_translation_table[]
SSL/TLS Cipher suite name translation table.
int get_num_elements(const char *string, char delimiter)
Returns the occurrences of 'delimiter' in a string +1 This is typically used to find out the number e...
char * extract_var_peer_info(const char *peer_info, const char *var, struct gc_arena *gc)
Extracts a variable from peer info, the returned string will be allocated using the supplied gc_arena...
static const char * peer_info_extract_varstr(const char *peer_info, const char *field)
Looks for the string field at the start of peer_info or after any new line and returns a pointer to t...
unsigned int peer_info_extract_int(const char *peer_info, const char *field, const char *format, unsigned int default_value)
Extracts the named integer variable and returns its value or default_value if it cannot be extracted.
const char * options_string_compat_lzo(const char *options, struct gc_arena *gc)
Takes a locally produced OCC string for TLS server mode and modifies as if the option comp-lzo was en...
const tls_cipher_name_pair * tls_get_cipher_name_pair(const char *cipher_name, size_t len)
uint32_t extract_asymmetric_peer_id(const char *peer_info)
Extracts the ID variable and returns its value or MAX_PEER_ID if it cannot be extracted.
unsigned int peer_info_extract_uint(const char *peer_info, const char *field)
Extracts the named integer variable and returns its value or 0 if it cannot be extracted.
Wrapper structure for dynamically allocated memory.
int len
Length in bytes of the actual content within the allocated memory.
Garbage collection arena used to keep track of dynamically allocated memory.
Get a tls_cipher_name_pair containing OpenSSL and IANA names for supplied TLS cipher name.