xref: /freebsd/contrib/bearssl/inc/bearssl_ssl.h (revision 81ad6265)
1 /*
2  * Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sublicense, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
25 #ifndef BR_BEARSSL_SSL_H__
26 #define BR_BEARSSL_SSL_H__
27 
28 #include <stddef.h>
29 #include <stdint.h>
30 
31 #include "bearssl_block.h"
32 #include "bearssl_hash.h"
33 #include "bearssl_hmac.h"
34 #include "bearssl_prf.h"
35 #include "bearssl_rand.h"
36 #include "bearssl_x509.h"
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 /** \file bearssl_ssl.h
43  *
44  * # SSL
45  *
46  * For an overview of the SSL/TLS API, see [the BearSSL Web
47  * site](https://www.bearssl.org/api1.html).
48  *
49  * The `BR_TLS_*` constants correspond to the standard cipher suites and
50  * their values in the [IANA
51  * registry](http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4).
52  *
53  * The `BR_ALERT_*` constants are for standard TLS alert messages. When
54  * a fatal alert message is sent of received, then the SSL engine context
55  * status is set to the sum of that alert value (an integer in the 0..255
56  * range) and a fixed offset (`BR_ERR_SEND_FATAL_ALERT` for a sent alert,
57  * `BR_ERR_RECV_FATAL_ALERT` for a received alert).
58  */
59 
60 /** \brief Optimal input buffer size. */
61 #define BR_SSL_BUFSIZE_INPUT    (16384 + 325)
62 
63 /** \brief Optimal output buffer size. */
64 #define BR_SSL_BUFSIZE_OUTPUT   (16384 + 85)
65 
66 /** \brief Optimal buffer size for monodirectional engine
67     (shared input/output buffer). */
68 #define BR_SSL_BUFSIZE_MONO     BR_SSL_BUFSIZE_INPUT
69 
70 /** \brief Optimal buffer size for bidirectional engine
71     (single buffer split into two separate input/output buffers). */
72 #define BR_SSL_BUFSIZE_BIDI     (BR_SSL_BUFSIZE_INPUT + BR_SSL_BUFSIZE_OUTPUT)
73 
74 /*
75  * Constants for known SSL/TLS protocol versions (SSL 3.0, TLS 1.0, TLS 1.1
76  * and TLS 1.2). Note that though there is a constant for SSL 3.0, that
77  * protocol version is not actually supported.
78  */
79 
80 /** \brief Protocol version: SSL 3.0 (unsupported). */
81 #define BR_SSL30   0x0300
82 /** \brief Protocol version: TLS 1.0. */
83 #define BR_TLS10   0x0301
84 /** \brief Protocol version: TLS 1.1. */
85 #define BR_TLS11   0x0302
86 /** \brief Protocol version: TLS 1.2. */
87 #define BR_TLS12   0x0303
88 
89 /*
90  * Error constants. They are used to report the reason why a context has
91  * been marked as failed.
92  *
93  * Implementation note: SSL-level error codes should be in the 1..31
94  * range. The 32..63 range is for certificate decoding and validation
95  * errors. Received fatal alerts imply an error code in the 256..511 range.
96  */
97 
98 /** \brief SSL status: no error so far (0). */
99 #define BR_ERR_OK                      0
100 
101 /** \brief SSL status: caller-provided parameter is incorrect. */
102 #define BR_ERR_BAD_PARAM               1
103 
104 /** \brief SSL status: operation requested by the caller cannot be applied
105     with the current context state (e.g. reading data while outgoing data
106     is waiting to be sent). */
107 #define BR_ERR_BAD_STATE               2
108 
109 /** \brief SSL status: incoming protocol or record version is unsupported. */
110 #define BR_ERR_UNSUPPORTED_VERSION     3
111 
112 /** \brief SSL status: incoming record version does not match the expected
113     version. */
114 #define BR_ERR_BAD_VERSION             4
115 
116 /** \brief SSL status: incoming record length is invalid. */
117 #define BR_ERR_BAD_LENGTH              5
118 
119 /** \brief SSL status: incoming record is too large to be processed, or
120     buffer is too small for the handshake message to send. */
121 #define BR_ERR_TOO_LARGE               6
122 
123 /** \brief SSL status: decryption found an invalid padding, or the record
124     MAC is not correct. */
125 #define BR_ERR_BAD_MAC                 7
126 
127 /** \brief SSL status: no initial entropy was provided, and none can be
128     obtained from the OS. */
129 #define BR_ERR_NO_RANDOM               8
130 
131 /** \brief SSL status: incoming record type is unknown. */
132 #define BR_ERR_UNKNOWN_TYPE            9
133 
134 /** \brief SSL status: incoming record or message has wrong type with
135     regards to the current engine state. */
136 #define BR_ERR_UNEXPECTED             10
137 
138 /** \brief SSL status: ChangeCipherSpec message from the peer has invalid
139     contents. */
140 #define BR_ERR_BAD_CCS                12
141 
142 /** \brief SSL status: alert message from the peer has invalid contents
143     (odd length). */
144 #define BR_ERR_BAD_ALERT              13
145 
146 /** \brief SSL status: incoming handshake message decoding failed. */
147 #define BR_ERR_BAD_HANDSHAKE          14
148 
149 /** \brief SSL status: ServerHello contains a session ID which is larger
150     than 32 bytes. */
151 #define BR_ERR_OVERSIZED_ID           15
152 
153 /** \brief SSL status: server wants to use a cipher suite that we did
154     not claim to support. This is also reported if we tried to advertise
155     a cipher suite that we do not support. */
156 #define BR_ERR_BAD_CIPHER_SUITE       16
157 
158 /** \brief SSL status: server wants to use a compression that we did not
159     claim to support. */
160 #define BR_ERR_BAD_COMPRESSION        17
161 
162 /** \brief SSL status: server's max fragment length does not match
163     client's. */
164 #define BR_ERR_BAD_FRAGLEN            18
165 
166 /** \brief SSL status: secure renegotiation failed. */
167 #define BR_ERR_BAD_SECRENEG           19
168 
169 /** \brief SSL status: server sent an extension type that we did not
170     announce, or used the same extension type several times in a single
171     ServerHello. */
172 #define BR_ERR_EXTRA_EXTENSION        20
173 
174 /** \brief SSL status: invalid Server Name Indication contents (when
175     used by the server, this extension shall be empty). */
176 #define BR_ERR_BAD_SNI                21
177 
178 /** \brief SSL status: invalid ServerHelloDone from the server (length
179     is not 0). */
180 #define BR_ERR_BAD_HELLO_DONE         22
181 
182 /** \brief SSL status: internal limit exceeded (e.g. server's public key
183     is too large). */
184 #define BR_ERR_LIMIT_EXCEEDED         23
185 
186 /** \brief SSL status: Finished message from peer does not match the
187     expected value. */
188 #define BR_ERR_BAD_FINISHED           24
189 
190 /** \brief SSL status: session resumption attempt with distinct version
191     or cipher suite. */
192 #define BR_ERR_RESUME_MISMATCH        25
193 
194 /** \brief SSL status: unsupported or invalid algorithm (ECDHE curve,
195     signature algorithm, hash function). */
196 #define BR_ERR_INVALID_ALGORITHM      26
197 
198 /** \brief SSL status: invalid signature (on ServerKeyExchange from
199     server, or in CertificateVerify from client). */
200 #define BR_ERR_BAD_SIGNATURE          27
201 
202 /** \brief SSL status: peer's public key does not have the proper type
203     or is not allowed for requested operation. */
204 #define BR_ERR_WRONG_KEY_USAGE        28
205 
206 /** \brief SSL status: client did not send a certificate upon request,
207     or the client certificate could not be validated. */
208 #define BR_ERR_NO_CLIENT_AUTH         29
209 
210 /** \brief SSL status: I/O error or premature close on underlying
211     transport stream. This error code is set only by the simplified
212     I/O API ("br_sslio_*"). */
213 #define BR_ERR_IO                     31
214 
215 /** \brief SSL status: base value for a received fatal alert.
216 
217     When a fatal alert is received from the peer, the alert value
218     is added to this constant. */
219 #define BR_ERR_RECV_FATAL_ALERT      256
220 
221 /** \brief SSL status: base value for a sent fatal alert.
222 
223     When a fatal alert is sent to the peer, the alert value is added
224     to this constant. */
225 #define BR_ERR_SEND_FATAL_ALERT      512
226 
227 /* ===================================================================== */
228 
229 /**
230  * \brief Decryption engine for SSL.
231  *
232  * When processing incoming records, the SSL engine will use a decryption
233  * engine that uses a specific context structure, and has a set of
234  * methods (a vtable) that follows this template.
235  *
236  * The decryption engine is responsible for applying decryption, verifying
237  * MAC, and keeping track of the record sequence number.
238  */
239 typedef struct br_sslrec_in_class_ br_sslrec_in_class;
240 struct br_sslrec_in_class_ {
241 	/**
242 	 * \brief Context size (in bytes).
243 	 */
244 	size_t context_size;
245 
246 	/**
247 	 * \brief Test validity of the incoming record length.
248 	 *
249 	 * This function returns 1 if the announced length for an
250 	 * incoming record is valid, 0 otherwise,
251 	 *
252 	 * \param ctx          decryption engine context.
253 	 * \param record_len   incoming record length.
254 	 * \return  1 of a valid length, 0 otherwise.
255 	 */
256 	int (*check_length)(const br_sslrec_in_class *const *ctx,
257 		size_t record_len);
258 
259 	/**
260 	 * \brief Decrypt the incoming record.
261 	 *
262 	 * This function may assume that the record length is valid
263 	 * (it has been previously tested with `check_length()`).
264 	 * Decryption is done in place; `*len` is updated with the
265 	 * cleartext length, and the address of the first plaintext
266 	 * byte is returned. If the record is correct but empty, then
267 	 * `*len` is set to 0 and a non-`NULL` pointer is returned.
268 	 *
269 	 * On decryption/MAC error, `NULL` is returned.
270 	 *
271 	 * \param ctx           decryption engine context.
272 	 * \param record_type   record type (23 for application data, etc).
273 	 * \param version       record version.
274 	 * \param payload       address of encrypted payload.
275 	 * \param len           pointer to payload length (updated).
276 	 * \return  pointer to plaintext, or `NULL` on error.
277 	 */
278 	unsigned char *(*decrypt)(const br_sslrec_in_class **ctx,
279 		int record_type, unsigned version,
280 		void *payload, size_t *len);
281 };
282 
283 /**
284  * \brief Encryption engine for SSL.
285  *
286  * When building outgoing records, the SSL engine will use an encryption
287  * engine that uses a specific context structure, and has a set of
288  * methods (a vtable) that follows this template.
289  *
290  * The encryption engine is responsible for applying encryption and MAC,
291  * and keeping track of the record sequence number.
292  */
293 typedef struct br_sslrec_out_class_ br_sslrec_out_class;
294 struct br_sslrec_out_class_ {
295 	/**
296 	 * \brief Context size (in bytes).
297 	 */
298 	size_t context_size;
299 
300 	/**
301 	 * \brief Compute maximum plaintext sizes and offsets.
302 	 *
303 	 * When this function is called, the `*start` and `*end`
304 	 * values contain offsets designating the free area in the
305 	 * outgoing buffer for plaintext data; that free area is
306 	 * preceded by a 5-byte space which will receive the record
307 	 * header.
308 	 *
309 	 * The `max_plaintext()` function is responsible for adjusting
310 	 * both `*start` and `*end` to make room for any record-specific
311 	 * header, MAC, padding, and possible split.
312 	 *
313 	 * \param ctx     encryption engine context.
314 	 * \param start   pointer to start of plaintext offset (updated).
315 	 * \param end     pointer to start of plaintext offset (updated).
316 	 */
317 	void (*max_plaintext)(const br_sslrec_out_class *const *ctx,
318 		size_t *start, size_t *end);
319 
320 	/**
321 	 * \brief Perform record encryption.
322 	 *
323 	 * This function encrypts the record. The plaintext address and
324 	 * length are provided. Returned value is the start of the
325 	 * encrypted record (or sequence of records, if a split was
326 	 * performed), _including_ the 5-byte header, and `*len` is
327 	 * adjusted to the total size of the record(s), there again
328 	 * including the header(s).
329 	 *
330 	 * \param ctx           decryption engine context.
331 	 * \param record_type   record type (23 for application data, etc).
332 	 * \param version       record version.
333 	 * \param plaintext     address of plaintext.
334 	 * \param len           pointer to plaintext length (updated).
335 	 * \return  pointer to start of built record.
336 	 */
337 	unsigned char *(*encrypt)(const br_sslrec_out_class **ctx,
338 		int record_type, unsigned version,
339 		void *plaintext, size_t *len);
340 };
341 
342 /**
343  * \brief Context for a no-encryption engine.
344  *
345  * The no-encryption engine processes outgoing records during the initial
346  * handshake, before encryption is applied.
347  */
348 typedef struct {
349 	/** \brief No-encryption engine vtable. */
350 	const br_sslrec_out_class *vtable;
351 } br_sslrec_out_clear_context;
352 
353 /** \brief Static, constant vtable for the no-encryption engine. */
354 extern const br_sslrec_out_class br_sslrec_out_clear_vtable;
355 
356 /* ===================================================================== */
357 
358 /**
359  * \brief Record decryption engine class, for CBC mode.
360  *
361  * This class type extends the decryption engine class with an
362  * initialisation method that receives the parameters needed
363  * for CBC processing: block cipher implementation, block cipher key,
364  * HMAC parameters (hash function, key, MAC length), and IV. If the
365  * IV is `NULL`, then a per-record IV will be used (TLS 1.1+).
366  */
367 typedef struct br_sslrec_in_cbc_class_ br_sslrec_in_cbc_class;
368 struct br_sslrec_in_cbc_class_ {
369 	/**
370 	 * \brief Superclass, as first vtable field.
371 	 */
372 	br_sslrec_in_class inner;
373 
374 	/**
375 	 * \brief Engine initialisation method.
376 	 *
377 	 * This method sets the vtable field in the context.
378 	 *
379 	 * \param ctx           context to initialise.
380 	 * \param bc_impl       block cipher implementation (CBC decryption).
381 	 * \param bc_key        block cipher key.
382 	 * \param bc_key_len    block cipher key length (in bytes).
383 	 * \param dig_impl      hash function for HMAC.
384 	 * \param mac_key       HMAC key.
385 	 * \param mac_key_len   HMAC key length (in bytes).
386 	 * \param mac_out_len   HMAC output length (in bytes).
387 	 * \param iv            initial IV (or `NULL`).
388 	 */
389 	void (*init)(const br_sslrec_in_cbc_class **ctx,
390 		const br_block_cbcdec_class *bc_impl,
391 		const void *bc_key, size_t bc_key_len,
392 		const br_hash_class *dig_impl,
393 		const void *mac_key, size_t mac_key_len, size_t mac_out_len,
394 		const void *iv);
395 };
396 
397 /**
398  * \brief Record encryption engine class, for CBC mode.
399  *
400  * This class type extends the encryption engine class with an
401  * initialisation method that receives the parameters needed
402  * for CBC processing: block cipher implementation, block cipher key,
403  * HMAC parameters (hash function, key, MAC length), and IV. If the
404  * IV is `NULL`, then a per-record IV will be used (TLS 1.1+).
405  */
406 typedef struct br_sslrec_out_cbc_class_ br_sslrec_out_cbc_class;
407 struct br_sslrec_out_cbc_class_ {
408 	/**
409 	 * \brief Superclass, as first vtable field.
410 	 */
411 	br_sslrec_out_class inner;
412 
413 	/**
414 	 * \brief Engine initialisation method.
415 	 *
416 	 * This method sets the vtable field in the context.
417 	 *
418 	 * \param ctx           context to initialise.
419 	 * \param bc_impl       block cipher implementation (CBC encryption).
420 	 * \param bc_key        block cipher key.
421 	 * \param bc_key_len    block cipher key length (in bytes).
422 	 * \param dig_impl      hash function for HMAC.
423 	 * \param mac_key       HMAC key.
424 	 * \param mac_key_len   HMAC key length (in bytes).
425 	 * \param mac_out_len   HMAC output length (in bytes).
426 	 * \param iv            initial IV (or `NULL`).
427 	 */
428 	void (*init)(const br_sslrec_out_cbc_class **ctx,
429 		const br_block_cbcenc_class *bc_impl,
430 		const void *bc_key, size_t bc_key_len,
431 		const br_hash_class *dig_impl,
432 		const void *mac_key, size_t mac_key_len, size_t mac_out_len,
433 		const void *iv);
434 };
435 
436 /**
437  * \brief Context structure for decrypting incoming records with
438  * CBC + HMAC.
439  *
440  * The first field points to the vtable. The other fields are opaque
441  * and shall not be accessed directly.
442  */
443 typedef struct {
444 	/** \brief Pointer to vtable. */
445 	const br_sslrec_in_cbc_class *vtable;
446 #ifndef BR_DOXYGEN_IGNORE
447 	uint64_t seq;
448 	union {
449 		const br_block_cbcdec_class *vtable;
450 		br_aes_gen_cbcdec_keys aes;
451 		br_des_gen_cbcdec_keys des;
452 	} bc;
453 	br_hmac_key_context mac;
454 	size_t mac_len;
455 	unsigned char iv[16];
456 	int explicit_IV;
457 #endif
458 } br_sslrec_in_cbc_context;
459 
460 /**
461  * \brief Static, constant vtable for record decryption with CBC.
462  */
463 extern const br_sslrec_in_cbc_class br_sslrec_in_cbc_vtable;
464 
465 /**
466  * \brief Context structure for encrypting outgoing records with
467  * CBC + HMAC.
468  *
469  * The first field points to the vtable. The other fields are opaque
470  * and shall not be accessed directly.
471  */
472 typedef struct {
473 	/** \brief Pointer to vtable. */
474 	const br_sslrec_out_cbc_class *vtable;
475 #ifndef BR_DOXYGEN_IGNORE
476 	uint64_t seq;
477 	union {
478 		const br_block_cbcenc_class *vtable;
479 		br_aes_gen_cbcenc_keys aes;
480 		br_des_gen_cbcenc_keys des;
481 	} bc;
482 	br_hmac_key_context mac;
483 	size_t mac_len;
484 	unsigned char iv[16];
485 	int explicit_IV;
486 #endif
487 } br_sslrec_out_cbc_context;
488 
489 /**
490  * \brief Static, constant vtable for record encryption with CBC.
491  */
492 extern const br_sslrec_out_cbc_class br_sslrec_out_cbc_vtable;
493 
494 /* ===================================================================== */
495 
496 /**
497  * \brief Record decryption engine class, for GCM mode.
498  *
499  * This class type extends the decryption engine class with an
500  * initialisation method that receives the parameters needed
501  * for GCM processing: block cipher implementation, block cipher key,
502  * GHASH implementation, and 4-byte IV.
503  */
504 typedef struct br_sslrec_in_gcm_class_ br_sslrec_in_gcm_class;
505 struct br_sslrec_in_gcm_class_ {
506 	/**
507 	 * \brief Superclass, as first vtable field.
508 	 */
509 	br_sslrec_in_class inner;
510 
511 	/**
512 	 * \brief Engine initialisation method.
513 	 *
514 	 * This method sets the vtable field in the context.
515 	 *
516 	 * \param ctx           context to initialise.
517 	 * \param bc_impl       block cipher implementation (CTR).
518 	 * \param key           block cipher key.
519 	 * \param key_len       block cipher key length (in bytes).
520 	 * \param gh_impl       GHASH implementation.
521 	 * \param iv            static IV (4 bytes).
522 	 */
523 	void (*init)(const br_sslrec_in_gcm_class **ctx,
524 		const br_block_ctr_class *bc_impl,
525 		const void *key, size_t key_len,
526 		br_ghash gh_impl,
527 		const void *iv);
528 };
529 
530 /**
531  * \brief Record encryption engine class, for GCM mode.
532  *
533  * This class type extends the encryption engine class with an
534  * initialisation method that receives the parameters needed
535  * for GCM processing: block cipher implementation, block cipher key,
536  * GHASH implementation, and 4-byte IV.
537  */
538 typedef struct br_sslrec_out_gcm_class_ br_sslrec_out_gcm_class;
539 struct br_sslrec_out_gcm_class_ {
540 	/**
541 	 * \brief Superclass, as first vtable field.
542 	 */
543 	br_sslrec_out_class inner;
544 
545 	/**
546 	 * \brief Engine initialisation method.
547 	 *
548 	 * This method sets the vtable field in the context.
549 	 *
550 	 * \param ctx           context to initialise.
551 	 * \param bc_impl       block cipher implementation (CTR).
552 	 * \param key           block cipher key.
553 	 * \param key_len       block cipher key length (in bytes).
554 	 * \param gh_impl       GHASH implementation.
555 	 * \param iv            static IV (4 bytes).
556 	 */
557 	void (*init)(const br_sslrec_out_gcm_class **ctx,
558 		const br_block_ctr_class *bc_impl,
559 		const void *key, size_t key_len,
560 		br_ghash gh_impl,
561 		const void *iv);
562 };
563 
564 /**
565  * \brief Context structure for processing records with GCM.
566  *
567  * The same context structure is used for encrypting and decrypting.
568  *
569  * The first field points to the vtable. The other fields are opaque
570  * and shall not be accessed directly.
571  */
572 typedef struct {
573 	/** \brief Pointer to vtable. */
574 	union {
575 		const void *gen;
576 		const br_sslrec_in_gcm_class *in;
577 		const br_sslrec_out_gcm_class *out;
578 	} vtable;
579 #ifndef BR_DOXYGEN_IGNORE
580 	uint64_t seq;
581 	union {
582 		const br_block_ctr_class *vtable;
583 		br_aes_gen_ctr_keys aes;
584 	} bc;
585 	br_ghash gh;
586 	unsigned char iv[4];
587 	unsigned char h[16];
588 #endif
589 } br_sslrec_gcm_context;
590 
591 /**
592  * \brief Static, constant vtable for record decryption with GCM.
593  */
594 extern const br_sslrec_in_gcm_class br_sslrec_in_gcm_vtable;
595 
596 /**
597  * \brief Static, constant vtable for record encryption with GCM.
598  */
599 extern const br_sslrec_out_gcm_class br_sslrec_out_gcm_vtable;
600 
601 /* ===================================================================== */
602 
603 /**
604  * \brief Record decryption engine class, for ChaCha20+Poly1305.
605  *
606  * This class type extends the decryption engine class with an
607  * initialisation method that receives the parameters needed
608  * for ChaCha20+Poly1305 processing: ChaCha20 implementation,
609  * Poly1305 implementation, key, and 12-byte IV.
610  */
611 typedef struct br_sslrec_in_chapol_class_ br_sslrec_in_chapol_class;
612 struct br_sslrec_in_chapol_class_ {
613 	/**
614 	 * \brief Superclass, as first vtable field.
615 	 */
616 	br_sslrec_in_class inner;
617 
618 	/**
619 	 * \brief Engine initialisation method.
620 	 *
621 	 * This method sets the vtable field in the context.
622 	 *
623 	 * \param ctx           context to initialise.
624 	 * \param ichacha       ChaCha20 implementation.
625 	 * \param ipoly         Poly1305 implementation.
626 	 * \param key           secret key (32 bytes).
627 	 * \param iv            static IV (12 bytes).
628 	 */
629 	void (*init)(const br_sslrec_in_chapol_class **ctx,
630 		br_chacha20_run ichacha,
631 		br_poly1305_run ipoly,
632 		const void *key, const void *iv);
633 };
634 
635 /**
636  * \brief Record encryption engine class, for ChaCha20+Poly1305.
637  *
638  * This class type extends the encryption engine class with an
639  * initialisation method that receives the parameters needed
640  * for ChaCha20+Poly1305 processing: ChaCha20 implementation,
641  * Poly1305 implementation, key, and 12-byte IV.
642  */
643 typedef struct br_sslrec_out_chapol_class_ br_sslrec_out_chapol_class;
644 struct br_sslrec_out_chapol_class_ {
645 	/**
646 	 * \brief Superclass, as first vtable field.
647 	 */
648 	br_sslrec_out_class inner;
649 
650 	/**
651 	 * \brief Engine initialisation method.
652 	 *
653 	 * This method sets the vtable field in the context.
654 	 *
655 	 * \param ctx           context to initialise.
656 	 * \param ichacha       ChaCha20 implementation.
657 	 * \param ipoly         Poly1305 implementation.
658 	 * \param key           secret key (32 bytes).
659 	 * \param iv            static IV (12 bytes).
660 	 */
661 	void (*init)(const br_sslrec_out_chapol_class **ctx,
662 		br_chacha20_run ichacha,
663 		br_poly1305_run ipoly,
664 		const void *key, const void *iv);
665 };
666 
667 /**
668  * \brief Context structure for processing records with ChaCha20+Poly1305.
669  *
670  * The same context structure is used for encrypting and decrypting.
671  *
672  * The first field points to the vtable. The other fields are opaque
673  * and shall not be accessed directly.
674  */
675 typedef struct {
676 	/** \brief Pointer to vtable. */
677 	union {
678 		const void *gen;
679 		const br_sslrec_in_chapol_class *in;
680 		const br_sslrec_out_chapol_class *out;
681 	} vtable;
682 #ifndef BR_DOXYGEN_IGNORE
683 	uint64_t seq;
684 	unsigned char key[32];
685 	unsigned char iv[12];
686 	br_chacha20_run ichacha;
687 	br_poly1305_run ipoly;
688 #endif
689 } br_sslrec_chapol_context;
690 
691 /**
692  * \brief Static, constant vtable for record decryption with ChaCha20+Poly1305.
693  */
694 extern const br_sslrec_in_chapol_class br_sslrec_in_chapol_vtable;
695 
696 /**
697  * \brief Static, constant vtable for record encryption with ChaCha20+Poly1305.
698  */
699 extern const br_sslrec_out_chapol_class br_sslrec_out_chapol_vtable;
700 
701 /* ===================================================================== */
702 
703 /**
704  * \brief Record decryption engine class, for CCM mode.
705  *
706  * This class type extends the decryption engine class with an
707  * initialisation method that receives the parameters needed
708  * for CCM processing: block cipher implementation, block cipher key,
709  * and 4-byte IV.
710  */
711 typedef struct br_sslrec_in_ccm_class_ br_sslrec_in_ccm_class;
712 struct br_sslrec_in_ccm_class_ {
713 	/**
714 	 * \brief Superclass, as first vtable field.
715 	 */
716 	br_sslrec_in_class inner;
717 
718 	/**
719 	 * \brief Engine initialisation method.
720 	 *
721 	 * This method sets the vtable field in the context.
722 	 *
723 	 * \param ctx           context to initialise.
724 	 * \param bc_impl       block cipher implementation (CTR+CBC).
725 	 * \param key           block cipher key.
726 	 * \param key_len       block cipher key length (in bytes).
727 	 * \param iv            static IV (4 bytes).
728 	 * \param tag_len       tag length (in bytes)
729 	 */
730 	void (*init)(const br_sslrec_in_ccm_class **ctx,
731 		const br_block_ctrcbc_class *bc_impl,
732 		const void *key, size_t key_len,
733 		const void *iv, size_t tag_len);
734 };
735 
736 /**
737  * \brief Record encryption engine class, for CCM mode.
738  *
739  * This class type extends the encryption engine class with an
740  * initialisation method that receives the parameters needed
741  * for CCM processing: block cipher implementation, block cipher key,
742  * and 4-byte IV.
743  */
744 typedef struct br_sslrec_out_ccm_class_ br_sslrec_out_ccm_class;
745 struct br_sslrec_out_ccm_class_ {
746 	/**
747 	 * \brief Superclass, as first vtable field.
748 	 */
749 	br_sslrec_out_class inner;
750 
751 	/**
752 	 * \brief Engine initialisation method.
753 	 *
754 	 * This method sets the vtable field in the context.
755 	 *
756 	 * \param ctx           context to initialise.
757 	 * \param bc_impl       block cipher implementation (CTR+CBC).
758 	 * \param key           block cipher key.
759 	 * \param key_len       block cipher key length (in bytes).
760 	 * \param iv            static IV (4 bytes).
761 	 * \param tag_len       tag length (in bytes)
762 	 */
763 	void (*init)(const br_sslrec_out_ccm_class **ctx,
764 		const br_block_ctrcbc_class *bc_impl,
765 		const void *key, size_t key_len,
766 		const void *iv, size_t tag_len);
767 };
768 
769 /**
770  * \brief Context structure for processing records with CCM.
771  *
772  * The same context structure is used for encrypting and decrypting.
773  *
774  * The first field points to the vtable. The other fields are opaque
775  * and shall not be accessed directly.
776  */
777 typedef struct {
778 	/** \brief Pointer to vtable. */
779 	union {
780 		const void *gen;
781 		const br_sslrec_in_ccm_class *in;
782 		const br_sslrec_out_ccm_class *out;
783 	} vtable;
784 #ifndef BR_DOXYGEN_IGNORE
785 	uint64_t seq;
786 	union {
787 		const br_block_ctrcbc_class *vtable;
788 		br_aes_gen_ctrcbc_keys aes;
789 	} bc;
790 	unsigned char iv[4];
791 	size_t tag_len;
792 #endif
793 } br_sslrec_ccm_context;
794 
795 /**
796  * \brief Static, constant vtable for record decryption with CCM.
797  */
798 extern const br_sslrec_in_ccm_class br_sslrec_in_ccm_vtable;
799 
800 /**
801  * \brief Static, constant vtable for record encryption with CCM.
802  */
803 extern const br_sslrec_out_ccm_class br_sslrec_out_ccm_vtable;
804 
805 /* ===================================================================== */
806 
807 /**
808  * \brief Type for session parameters, to be saved for session resumption.
809  */
810 typedef struct {
811 	/** \brief Session ID buffer. */
812 	unsigned char session_id[32];
813 	/** \brief Session ID length (in bytes, at most 32). */
814 	unsigned char session_id_len;
815 	/** \brief Protocol version. */
816 	uint16_t version;
817 	/** \brief Cipher suite. */
818 	uint16_t cipher_suite;
819 	/** \brief Master secret. */
820 	unsigned char master_secret[48];
821 } br_ssl_session_parameters;
822 
823 #ifndef BR_DOXYGEN_IGNORE
824 /*
825  * Maximum number of cipher suites supported by a client or server.
826  */
827 #define BR_MAX_CIPHER_SUITES   48
828 #endif
829 
830 /**
831  * \brief Context structure for SSL engine.
832  *
833  * This strucuture is common to the client and server; both the client
834  * context (`br_ssl_client_context`) and the server context
835  * (`br_ssl_server_context`) include a `br_ssl_engine_context` as their
836  * first field.
837  *
838  * The engine context manages records, including alerts, closures, and
839  * transitions to new encryption/MAC algorithms. Processing of handshake
840  * records is delegated to externally provided code. This structure
841  * should not be used directly.
842  *
843  * Structure contents are opaque and shall not be accessed directly.
844  */
845 typedef struct {
846 #ifndef BR_DOXYGEN_IGNORE
847 	/*
848 	 * The error code. When non-zero, then the state is "failed" and
849 	 * no I/O may occur until reset.
850 	 */
851 	int err;
852 
853 	/*
854 	 * Configured I/O buffers. They are either disjoint, or identical.
855 	 */
856 	unsigned char *ibuf, *obuf;
857 	size_t ibuf_len, obuf_len;
858 
859 	/*
860 	 * Maximum fragment length applies to outgoing records; incoming
861 	 * records can be processed as long as they fit in the input
862 	 * buffer. It is guaranteed that incoming records at least as big
863 	 * as max_frag_len can be processed.
864 	 */
865 	uint16_t max_frag_len;
866 	unsigned char log_max_frag_len;
867 	unsigned char peer_log_max_frag_len;
868 
869 	/*
870 	 * Buffering management registers.
871 	 */
872 	size_t ixa, ixb, ixc;
873 	size_t oxa, oxb, oxc;
874 	unsigned char iomode;
875 	unsigned char incrypt;
876 
877 	/*
878 	 * Shutdown flag: when set to non-zero, incoming record bytes
879 	 * will not be accepted anymore. This is used after a close_notify
880 	 * has been received: afterwards, the engine no longer claims that
881 	 * it could receive bytes from the transport medium.
882 	 */
883 	unsigned char shutdown_recv;
884 
885 	/*
886 	 * 'record_type_in' is set to the incoming record type when the
887 	 * record header has been received.
888 	 * 'record_type_out' is used to make the next outgoing record
889 	 * header when it is ready to go.
890 	 */
891 	unsigned char record_type_in, record_type_out;
892 
893 	/*
894 	 * When a record is received, its version is extracted:
895 	 * -- if 'version_in' is 0, then it is set to the received version;
896 	 * -- otherwise, if the received version is not identical to
897 	 *    the 'version_in' contents, then a failure is reported.
898 	 *
899 	 * This implements the SSL requirement that all records shall
900 	 * use the negotiated protocol version, once decided (in the
901 	 * ServerHello). It is up to the handshake handler to adjust this
902 	 * field when necessary.
903 	 */
904 	uint16_t version_in;
905 
906 	/*
907 	 * 'version_out' is used when the next outgoing record is ready
908 	 * to go.
909 	 */
910 	uint16_t version_out;
911 
912 	/*
913 	 * Record handler contexts.
914 	 */
915 	union {
916 		const br_sslrec_in_class *vtable;
917 		br_sslrec_in_cbc_context cbc;
918 		br_sslrec_gcm_context gcm;
919 		br_sslrec_chapol_context chapol;
920 		br_sslrec_ccm_context ccm;
921 	} in;
922 	union {
923 		const br_sslrec_out_class *vtable;
924 		br_sslrec_out_clear_context clear;
925 		br_sslrec_out_cbc_context cbc;
926 		br_sslrec_gcm_context gcm;
927 		br_sslrec_chapol_context chapol;
928 		br_sslrec_ccm_context ccm;
929 	} out;
930 
931 	/*
932 	 * The "application data" flag. Value:
933 	 *   0   handshake is in process, no application data acceptable
934 	 *   1   application data can be sent and received
935 	 *   2   closing, no application data can be sent, but some
936 	 *       can still be received (and discarded)
937 	 */
938 	unsigned char application_data;
939 
940 	/*
941 	 * Context RNG.
942 	 *
943 	 *   rng_init_done is initially 0. It is set to 1 when the
944 	 *   basic structure of the RNG is set, and 2 when some
945 	 *   entropy has been pushed in. The value 2 marks the RNG
946 	 *   as "properly seeded".
947 	 *
948 	 *   rng_os_rand_done is initially 0. It is set to 1 when
949 	 *   some seeding from the OS or hardware has been attempted.
950 	 */
951 	br_hmac_drbg_context rng;
952 	int rng_init_done;
953 	int rng_os_rand_done;
954 
955 	/*
956 	 * Supported minimum and maximum versions, and cipher suites.
957 	 */
958 	uint16_t version_min;
959 	uint16_t version_max;
960 	uint16_t suites_buf[BR_MAX_CIPHER_SUITES];
961 	unsigned char suites_num;
962 
963 	/*
964 	 * For clients, the server name to send as a SNI extension. For
965 	 * servers, the name received in the SNI extension (if any).
966 	 */
967 	char server_name[256];
968 
969 	/*
970 	 * "Security parameters". These are filled by the handshake
971 	 * handler, and used when switching encryption state.
972 	 */
973 	unsigned char client_random[32];
974 	unsigned char server_random[32];
975 	br_ssl_session_parameters session;
976 
977 	/*
978 	 * ECDHE elements: curve and point from the peer. The server also
979 	 * uses that buffer for the point to send to the client.
980 	 */
981 	unsigned char ecdhe_curve;
982 	unsigned char ecdhe_point[133];
983 	unsigned char ecdhe_point_len;
984 
985 	/*
986 	 * Secure renegotiation (RFC 5746): 'reneg' can be:
987 	 *   0   first handshake (server support is not known)
988 	 *   1   peer does not support secure renegotiation
989 	 *   2   peer supports secure renegotiation
990 	 *
991 	 * The saved_finished buffer contains the client and the
992 	 * server "Finished" values from the last handshake, in
993 	 * that order (12 bytes each).
994 	 */
995 	unsigned char reneg;
996 	unsigned char saved_finished[24];
997 
998 	/*
999 	 * Behavioural flags.
1000 	 */
1001 	uint32_t flags;
1002 
1003 	/*
1004 	 * Context variables for the handshake processor. The 'pad' must
1005 	 * be large enough to accommodate an RSA-encrypted pre-master
1006 	 * secret, or an RSA signature; since we want to support up to
1007 	 * RSA-4096, this means at least 512 bytes. (Other pad usages
1008 	 * require its length to be at least 256.)
1009 	 */
1010 	struct {
1011 		uint32_t *dp;
1012 		uint32_t *rp;
1013 		const unsigned char *ip;
1014 	} cpu;
1015 	uint32_t dp_stack[32];
1016 	uint32_t rp_stack[32];
1017 	unsigned char pad[512];
1018 	unsigned char *hbuf_in, *hbuf_out, *saved_hbuf_out;
1019 	size_t hlen_in, hlen_out;
1020 	void (*hsrun)(void *ctx);
1021 
1022 	/*
1023 	 * The 'action' value communicates OOB information between the
1024 	 * engine and the handshake processor.
1025 	 *
1026 	 * From the engine:
1027 	 *   0  invocation triggered by I/O
1028 	 *   1  invocation triggered by explicit close
1029 	 *   2  invocation triggered by explicit renegotiation
1030 	 */
1031 	unsigned char action;
1032 
1033 	/*
1034 	 * State for alert messages. Value is either 0, or the value of
1035 	 * the alert level byte (level is either 1 for warning, or 2 for
1036 	 * fatal; we convert all other values to 'fatal').
1037 	 */
1038 	unsigned char alert;
1039 
1040 	/*
1041 	 * Closure flags. This flag is set when a close_notify has been
1042 	 * received from the peer.
1043 	 */
1044 	unsigned char close_received;
1045 
1046 	/*
1047 	 * Multi-hasher for the handshake messages. The handshake handler
1048 	 * is responsible for resetting it when appropriate.
1049 	 */
1050 	br_multihash_context mhash;
1051 
1052 	/*
1053 	 * Pointer to the X.509 engine. The engine is supposed to be
1054 	 * already initialized. It is used to validate the peer's
1055 	 * certificate.
1056 	 */
1057 	const br_x509_class **x509ctx;
1058 
1059 	/*
1060 	 * Certificate chain to send. This is used by both client and
1061 	 * server, when they send their respective Certificate messages.
1062 	 * If chain_len is 0, then chain may be NULL.
1063 	 */
1064 	const br_x509_certificate *chain;
1065 	size_t chain_len;
1066 	const unsigned char *cert_cur;
1067 	size_t cert_len;
1068 
1069 	/*
1070 	 * List of supported protocol names (ALPN extension). If unset,
1071 	 * (number of names is 0), then:
1072 	 *  - the client sends no ALPN extension;
1073 	 *  - the server ignores any incoming ALPN extension.
1074 	 *
1075 	 * Otherwise:
1076 	 *  - the client sends an ALPN extension with all the names;
1077 	 *  - the server selects the first protocol in its list that
1078 	 *    the client also supports, or fails (fatal alert 120)
1079 	 *    if the client sends an ALPN extension and there is no
1080 	 *    match.
1081 	 *
1082 	 * The 'selected_protocol' field contains 1+n if the matching
1083 	 * name has index n in the list (the value is 0 if no match was
1084 	 * performed, e.g. the peer did not send an ALPN extension).
1085 	 */
1086 	const char **protocol_names;
1087 	uint16_t protocol_names_num;
1088 	uint16_t selected_protocol;
1089 
1090 	/*
1091 	 * Pointers to implementations; left to NULL for unsupported
1092 	 * functions. For the raw hash functions, implementations are
1093 	 * referenced from the multihasher (mhash field).
1094 	 */
1095 	br_tls_prf_impl prf10;
1096 	br_tls_prf_impl prf_sha256;
1097 	br_tls_prf_impl prf_sha384;
1098 	const br_block_cbcenc_class *iaes_cbcenc;
1099 	const br_block_cbcdec_class *iaes_cbcdec;
1100 	const br_block_ctr_class *iaes_ctr;
1101 	const br_block_ctrcbc_class *iaes_ctrcbc;
1102 	const br_block_cbcenc_class *ides_cbcenc;
1103 	const br_block_cbcdec_class *ides_cbcdec;
1104 	br_ghash ighash;
1105 	br_chacha20_run ichacha;
1106 	br_poly1305_run ipoly;
1107 	const br_sslrec_in_cbc_class *icbc_in;
1108 	const br_sslrec_out_cbc_class *icbc_out;
1109 	const br_sslrec_in_gcm_class *igcm_in;
1110 	const br_sslrec_out_gcm_class *igcm_out;
1111 	const br_sslrec_in_chapol_class *ichapol_in;
1112 	const br_sslrec_out_chapol_class *ichapol_out;
1113 	const br_sslrec_in_ccm_class *iccm_in;
1114 	const br_sslrec_out_ccm_class *iccm_out;
1115 	const br_ec_impl *iec;
1116 	br_rsa_pkcs1_vrfy irsavrfy;
1117 	br_ecdsa_vrfy iecdsa;
1118 #endif
1119 } br_ssl_engine_context;
1120 
1121 /**
1122  * \brief Get currently defined engine behavioural flags.
1123  *
1124  * \param cc   SSL engine context.
1125  * \return  the flags.
1126  */
1127 static inline uint32_t
1128 br_ssl_engine_get_flags(br_ssl_engine_context *cc)
1129 {
1130 	return cc->flags;
1131 }
1132 
1133 /**
1134  * \brief Set all engine behavioural flags.
1135  *
1136  * \param cc      SSL engine context.
1137  * \param flags   new value for all flags.
1138  */
1139 static inline void
1140 br_ssl_engine_set_all_flags(br_ssl_engine_context *cc, uint32_t flags)
1141 {
1142 	cc->flags = flags;
1143 }
1144 
1145 /**
1146  * \brief Set some engine behavioural flags.
1147  *
1148  * The flags set in the `flags` parameter are set in the context; other
1149  * flags are untouched.
1150  *
1151  * \param cc      SSL engine context.
1152  * \param flags   additional set flags.
1153  */
1154 static inline void
1155 br_ssl_engine_add_flags(br_ssl_engine_context *cc, uint32_t flags)
1156 {
1157 	cc->flags |= flags;
1158 }
1159 
1160 /**
1161  * \brief Clear some engine behavioural flags.
1162  *
1163  * The flags set in the `flags` parameter are cleared from the context; other
1164  * flags are untouched.
1165  *
1166  * \param cc      SSL engine context.
1167  * \param flags   flags to remove.
1168  */
1169 static inline void
1170 br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags)
1171 {
1172 	cc->flags &= ~flags;
1173 }
1174 
1175 /**
1176  * \brief Behavioural flag: enforce server preferences.
1177  *
1178  * If this flag is set, then the server will enforce its own cipher suite
1179  * preference order; otherwise, it follows the client preferences.
1180  */
1181 #define BR_OPT_ENFORCE_SERVER_PREFERENCES      ((uint32_t)1 << 0)
1182 
1183 /**
1184  * \brief Behavioural flag: disable renegotiation.
1185  *
1186  * If this flag is set, then renegotiations are rejected unconditionally:
1187  * they won't be honoured if asked for programmatically, and requests from
1188  * the peer are rejected.
1189  */
1190 #define BR_OPT_NO_RENEGOTIATION                ((uint32_t)1 << 1)
1191 
1192 /**
1193  * \brief Behavioural flag: tolerate lack of client authentication.
1194  *
1195  * If this flag is set in a server and the server requests a client
1196  * certificate, but the authentication fails (the client does not send
1197  * a certificate, or the client's certificate chain cannot be validated),
1198  * then the connection keeps on. Without this flag, a failed client
1199  * authentication terminates the connection.
1200  *
1201  * Notes:
1202  *
1203  *   - If the client's certificate can be validated and its public key is
1204  *     supported, then a wrong signature value terminates the connection
1205  *     regardless of that flag.
1206  *
1207  *   - If using full-static ECDH, then a failure to validate the client's
1208  *     certificate prevents the handshake from succeeding.
1209  */
1210 #define BR_OPT_TOLERATE_NO_CLIENT_AUTH         ((uint32_t)1 << 2)
1211 
1212 /**
1213  * \brief Behavioural flag: fail on application protocol mismatch.
1214  *
1215  * The ALPN extension ([RFC 7301](https://tools.ietf.org/html/rfc7301))
1216  * allows the client to send a list of application protocol names, and
1217  * the server to select one. A mismatch is one of the following occurrences:
1218  *
1219  *   - On the client: the client sends a list of names, the server
1220  *     responds with a protocol name which is _not_ part of the list of
1221  *     names sent by the client.
1222  *
1223  *   - On the server: the client sends a list of names, and the server
1224  *     is also configured with a list of names, but there is no common
1225  *     protocol name between the two lists.
1226  *
1227  * Normal behaviour in case of mismatch is to report no matching name
1228  * (`br_ssl_engine_get_selected_protocol()` returns `NULL`) and carry on.
1229  * If the flag is set, then a mismatch implies a protocol failure (if
1230  * the mismatch is detected by the server, it will send a fatal alert).
1231  *
1232  * Note: even with this flag, `br_ssl_engine_get_selected_protocol()`
1233  * may still return `NULL` if the client or the server does not send an
1234  * ALPN extension at all.
1235  */
1236 #define BR_OPT_FAIL_ON_ALPN_MISMATCH           ((uint32_t)1 << 3)
1237 
1238 /**
1239  * \brief Set the minimum and maximum supported protocol versions.
1240  *
1241  * The two provided versions MUST be supported by the implementation
1242  * (i.e. TLS 1.0, 1.1 and 1.2), and `version_max` MUST NOT be lower
1243  * than `version_min`.
1244  *
1245  * \param cc            SSL engine context.
1246  * \param version_min   minimum supported TLS version.
1247  * \param version_max   maximum supported TLS version.
1248  */
1249 static inline void
1250 br_ssl_engine_set_versions(br_ssl_engine_context *cc,
1251 	unsigned version_min, unsigned version_max)
1252 {
1253 	cc->version_min = (uint16_t)version_min;
1254 	cc->version_max = (uint16_t)version_max;
1255 }
1256 
1257 /**
1258  * \brief Set the list of cipher suites advertised by this context.
1259  *
1260  * The provided array is copied into the context. It is the caller
1261  * responsibility to ensure that all provided suites will be supported
1262  * by the context. The engine context has enough room to receive _all_
1263  * suites supported by the implementation. The provided array MUST NOT
1264  * contain duplicates.
1265  *
1266  * If the engine is for a client, the "signaling" pseudo-cipher suite
1267  * `TLS_FALLBACK_SCSV` can be added at the end of the list, if the
1268  * calling application is performing a voluntary downgrade (voluntary
1269  * downgrades are not recommended, but if such a downgrade is done, then
1270  * adding the fallback pseudo-suite is a good idea).
1271  *
1272  * \param cc           SSL engine context.
1273  * \param suites       cipher suites.
1274  * \param suites_num   number of cipher suites.
1275  */
1276 void br_ssl_engine_set_suites(br_ssl_engine_context *cc,
1277 	const uint16_t *suites, size_t suites_num);
1278 
1279 /**
1280  * \brief Set the X.509 engine.
1281  *
1282  * The caller shall ensure that the X.509 engine is properly initialised.
1283  *
1284  * \param cc        SSL engine context.
1285  * \param x509ctx   X.509 certificate validation context.
1286  */
1287 static inline void
1288 br_ssl_engine_set_x509(br_ssl_engine_context *cc, const br_x509_class **x509ctx)
1289 {
1290 	cc->x509ctx = x509ctx;
1291 }
1292 
1293 /**
1294  * \brief Set the supported protocol names.
1295  *
1296  * Protocol names are part of the ALPN extension ([RFC
1297  * 7301](https://tools.ietf.org/html/rfc7301)). Each protocol name is a
1298  * character string, containing no more than 255 characters (256 with the
1299  * terminating zero). When names are set, then:
1300  *
1301  *   - The client will send an ALPN extension, containing the names. If
1302  *     the server responds with an ALPN extension, the client will verify
1303  *     that the response contains one of its name, and report that name
1304  *     through `br_ssl_engine_get_selected_protocol()`.
1305  *
1306  *   - The server will parse incoming ALPN extension (from clients), and
1307  *     try to find a common protocol; if none is found, the connection
1308  *     is aborted with a fatal alert. On match, a response ALPN extension
1309  *     is sent, and name is reported through
1310  *     `br_ssl_engine_get_selected_protocol()`.
1311  *
1312  * The provided array is linked in, and must remain valid while the
1313  * connection is live.
1314  *
1315  * Names MUST NOT be empty. Names MUST NOT be longer than 255 characters
1316  * (excluding the terminating 0).
1317  *
1318  * \param ctx     SSL engine context.
1319  * \param names   list of protocol names (zero-terminated).
1320  * \param num     number of protocol names (MUST be 1 or more).
1321  */
1322 static inline void
1323 br_ssl_engine_set_protocol_names(br_ssl_engine_context *ctx,
1324 	const char **names, size_t num)
1325 {
1326 	ctx->protocol_names = names;
1327 	ctx->protocol_names_num = (uint16_t)num;
1328 }
1329 
1330 /**
1331  * \brief Get the selected protocol.
1332  *
1333  * If this context was initialised with a non-empty list of protocol
1334  * names, and both client and server sent ALPN extensions during the
1335  * handshake, and a common name was found, then that name is returned.
1336  * Otherwise, `NULL` is returned.
1337  *
1338  * The returned pointer is one of the pointers provided to the context
1339  * with `br_ssl_engine_set_protocol_names()`.
1340  *
1341  * \return  the selected protocol, or `NULL`.
1342  */
1343 static inline const char *
1344 br_ssl_engine_get_selected_protocol(br_ssl_engine_context *ctx)
1345 {
1346 	unsigned k;
1347 
1348 	k = ctx->selected_protocol;
1349 	return (k == 0 || k == 0xFFFF) ? NULL : ctx->protocol_names[k - 1];
1350 }
1351 
1352 /**
1353  * \brief Set a hash function implementation (by ID).
1354  *
1355  * Hash functions set with this call will be used for SSL/TLS specific
1356  * usages, not X.509 certificate validation. Only "standard" hash functions
1357  * may be set (MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512). If `impl`
1358  * is `NULL`, then the hash function support is removed, not added.
1359  *
1360  * \param ctx    SSL engine context.
1361  * \param id     hash function identifier.
1362  * \param impl   hash function implementation (or `NULL`).
1363  */
1364 static inline void
1365 br_ssl_engine_set_hash(br_ssl_engine_context *ctx,
1366 	int id, const br_hash_class *impl)
1367 {
1368 	br_multihash_setimpl(&ctx->mhash, id, impl);
1369 }
1370 
1371 /**
1372  * \brief Get a hash function implementation (by ID).
1373  *
1374  * This function retrieves a hash function implementation which was
1375  * set with `br_ssl_engine_set_hash()`.
1376  *
1377  * \param ctx   SSL engine context.
1378  * \param id    hash function identifier.
1379  * \return  the hash function implementation (or `NULL`).
1380  */
1381 static inline const br_hash_class *
1382 br_ssl_engine_get_hash(br_ssl_engine_context *ctx, int id)
1383 {
1384 	return br_multihash_getimpl(&ctx->mhash, id);
1385 }
1386 
1387 /**
1388  * \brief Set the PRF implementation (for TLS 1.0 and 1.1).
1389  *
1390  * This function sets (or removes, if `impl` is `NULL`) the implementation
1391  * for the PRF used in TLS 1.0 and 1.1.
1392  *
1393  * \param cc     SSL engine context.
1394  * \param impl   PRF implementation (or `NULL`).
1395  */
1396 static inline void
1397 br_ssl_engine_set_prf10(br_ssl_engine_context *cc, br_tls_prf_impl impl)
1398 {
1399 	cc->prf10 = impl;
1400 }
1401 
1402 /**
1403  * \brief Set the PRF implementation with SHA-256 (for TLS 1.2).
1404  *
1405  * This function sets (or removes, if `impl` is `NULL`) the implementation
1406  * for the SHA-256 variant of the PRF used in TLS 1.2.
1407  *
1408  * \param cc     SSL engine context.
1409  * \param impl   PRF implementation (or `NULL`).
1410  */
1411 static inline void
1412 br_ssl_engine_set_prf_sha256(br_ssl_engine_context *cc, br_tls_prf_impl impl)
1413 {
1414 	cc->prf_sha256 = impl;
1415 }
1416 
1417 /**
1418  * \brief Set the PRF implementation with SHA-384 (for TLS 1.2).
1419  *
1420  * This function sets (or removes, if `impl` is `NULL`) the implementation
1421  * for the SHA-384 variant of the PRF used in TLS 1.2.
1422  *
1423  * \param cc     SSL engine context.
1424  * \param impl   PRF implementation (or `NULL`).
1425  */
1426 static inline void
1427 br_ssl_engine_set_prf_sha384(br_ssl_engine_context *cc, br_tls_prf_impl impl)
1428 {
1429 	cc->prf_sha384 = impl;
1430 }
1431 
1432 /**
1433  * \brief Set the AES/CBC implementations.
1434  *
1435  * \param cc         SSL engine context.
1436  * \param impl_enc   AES/CBC encryption implementation (or `NULL`).
1437  * \param impl_dec   AES/CBC decryption implementation (or `NULL`).
1438  */
1439 static inline void
1440 br_ssl_engine_set_aes_cbc(br_ssl_engine_context *cc,
1441 	const br_block_cbcenc_class *impl_enc,
1442 	const br_block_cbcdec_class *impl_dec)
1443 {
1444 	cc->iaes_cbcenc = impl_enc;
1445 	cc->iaes_cbcdec = impl_dec;
1446 }
1447 
1448 /**
1449  * \brief Set the "default" AES/CBC implementations.
1450  *
1451  * This function configures in the engine the AES implementations that
1452  * should provide best runtime performance on the local system, while
1453  * still being safe (in particular, constant-time). It also sets the
1454  * handlers for CBC records.
1455  *
1456  * \param cc   SSL engine context.
1457  */
1458 void br_ssl_engine_set_default_aes_cbc(br_ssl_engine_context *cc);
1459 
1460 /**
1461  * \brief Set the AES/CTR implementation.
1462  *
1463  * \param cc     SSL engine context.
1464  * \param impl   AES/CTR encryption/decryption implementation (or `NULL`).
1465  */
1466 static inline void
1467 br_ssl_engine_set_aes_ctr(br_ssl_engine_context *cc,
1468 	const br_block_ctr_class *impl)
1469 {
1470 	cc->iaes_ctr = impl;
1471 }
1472 
1473 /**
1474  * \brief Set the "default" implementations for AES/GCM (AES/CTR + GHASH).
1475  *
1476  * This function configures in the engine the AES/CTR and GHASH
1477  * implementation that should provide best runtime performance on the local
1478  * system, while still being safe (in particular, constant-time). It also
1479  * sets the handlers for GCM records.
1480  *
1481  * \param cc   SSL engine context.
1482  */
1483 void br_ssl_engine_set_default_aes_gcm(br_ssl_engine_context *cc);
1484 
1485 /**
1486  * \brief Set the DES/CBC implementations.
1487  *
1488  * \param cc         SSL engine context.
1489  * \param impl_enc   DES/CBC encryption implementation (or `NULL`).
1490  * \param impl_dec   DES/CBC decryption implementation (or `NULL`).
1491  */
1492 static inline void
1493 br_ssl_engine_set_des_cbc(br_ssl_engine_context *cc,
1494 	const br_block_cbcenc_class *impl_enc,
1495 	const br_block_cbcdec_class *impl_dec)
1496 {
1497 	cc->ides_cbcenc = impl_enc;
1498 	cc->ides_cbcdec = impl_dec;
1499 }
1500 
1501 /**
1502  * \brief Set the "default" DES/CBC implementations.
1503  *
1504  * This function configures in the engine the DES implementations that
1505  * should provide best runtime performance on the local system, while
1506  * still being safe (in particular, constant-time). It also sets the
1507  * handlers for CBC records.
1508  *
1509  * \param cc   SSL engine context.
1510  */
1511 void br_ssl_engine_set_default_des_cbc(br_ssl_engine_context *cc);
1512 
1513 /**
1514  * \brief Set the GHASH implementation (used in GCM mode).
1515  *
1516  * \param cc     SSL engine context.
1517  * \param impl   GHASH implementation (or `NULL`).
1518  */
1519 static inline void
1520 br_ssl_engine_set_ghash(br_ssl_engine_context *cc, br_ghash impl)
1521 {
1522 	cc->ighash = impl;
1523 }
1524 
1525 /**
1526  * \brief Set the ChaCha20 implementation.
1527  *
1528  * \param cc        SSL engine context.
1529  * \param ichacha   ChaCha20 implementation (or `NULL`).
1530  */
1531 static inline void
1532 br_ssl_engine_set_chacha20(br_ssl_engine_context *cc,
1533 	br_chacha20_run ichacha)
1534 {
1535 	cc->ichacha = ichacha;
1536 }
1537 
1538 /**
1539  * \brief Set the Poly1305 implementation.
1540  *
1541  * \param cc      SSL engine context.
1542  * \param ipoly   Poly1305 implementation (or `NULL`).
1543  */
1544 static inline void
1545 br_ssl_engine_set_poly1305(br_ssl_engine_context *cc,
1546 	br_poly1305_run ipoly)
1547 {
1548 	cc->ipoly = ipoly;
1549 }
1550 
1551 /**
1552  * \brief Set the "default" ChaCha20 and Poly1305 implementations.
1553  *
1554  * This function configures in the engine the ChaCha20 and Poly1305
1555  * implementations that should provide best runtime performance on the
1556  * local system, while still being safe (in particular, constant-time).
1557  * It also sets the handlers for ChaCha20+Poly1305 records.
1558  *
1559  * \param cc   SSL engine context.
1560  */
1561 void br_ssl_engine_set_default_chapol(br_ssl_engine_context *cc);
1562 
1563 /**
1564  * \brief Set the AES/CTR+CBC implementation.
1565  *
1566  * \param cc     SSL engine context.
1567  * \param impl   AES/CTR+CBC encryption/decryption implementation (or `NULL`).
1568  */
1569 static inline void
1570 br_ssl_engine_set_aes_ctrcbc(br_ssl_engine_context *cc,
1571 	const br_block_ctrcbc_class *impl)
1572 {
1573 	cc->iaes_ctrcbc = impl;
1574 }
1575 
1576 /**
1577  * \brief Set the "default" implementations for AES/CCM.
1578  *
1579  * This function configures in the engine the AES/CTR+CBC
1580  * implementation that should provide best runtime performance on the local
1581  * system, while still being safe (in particular, constant-time). It also
1582  * sets the handlers for CCM records.
1583  *
1584  * \param cc   SSL engine context.
1585  */
1586 void br_ssl_engine_set_default_aes_ccm(br_ssl_engine_context *cc);
1587 
1588 /**
1589  * \brief Set the record encryption and decryption engines for CBC + HMAC.
1590  *
1591  * \param cc         SSL engine context.
1592  * \param impl_in    record CBC decryption implementation (or `NULL`).
1593  * \param impl_out   record CBC encryption implementation (or `NULL`).
1594  */
1595 static inline void
1596 br_ssl_engine_set_cbc(br_ssl_engine_context *cc,
1597 	const br_sslrec_in_cbc_class *impl_in,
1598 	const br_sslrec_out_cbc_class *impl_out)
1599 {
1600 	cc->icbc_in = impl_in;
1601 	cc->icbc_out = impl_out;
1602 }
1603 
1604 /**
1605  * \brief Set the record encryption and decryption engines for GCM.
1606  *
1607  * \param cc         SSL engine context.
1608  * \param impl_in    record GCM decryption implementation (or `NULL`).
1609  * \param impl_out   record GCM encryption implementation (or `NULL`).
1610  */
1611 static inline void
1612 br_ssl_engine_set_gcm(br_ssl_engine_context *cc,
1613 	const br_sslrec_in_gcm_class *impl_in,
1614 	const br_sslrec_out_gcm_class *impl_out)
1615 {
1616 	cc->igcm_in = impl_in;
1617 	cc->igcm_out = impl_out;
1618 }
1619 
1620 /**
1621  * \brief Set the record encryption and decryption engines for CCM.
1622  *
1623  * \param cc         SSL engine context.
1624  * \param impl_in    record CCM decryption implementation (or `NULL`).
1625  * \param impl_out   record CCM encryption implementation (or `NULL`).
1626  */
1627 static inline void
1628 br_ssl_engine_set_ccm(br_ssl_engine_context *cc,
1629 	const br_sslrec_in_ccm_class *impl_in,
1630 	const br_sslrec_out_ccm_class *impl_out)
1631 {
1632 	cc->iccm_in = impl_in;
1633 	cc->iccm_out = impl_out;
1634 }
1635 
1636 /**
1637  * \brief Set the record encryption and decryption engines for
1638  * ChaCha20+Poly1305.
1639  *
1640  * \param cc         SSL engine context.
1641  * \param impl_in    record ChaCha20 decryption implementation (or `NULL`).
1642  * \param impl_out   record ChaCha20 encryption implementation (or `NULL`).
1643  */
1644 static inline void
1645 br_ssl_engine_set_chapol(br_ssl_engine_context *cc,
1646 	const br_sslrec_in_chapol_class *impl_in,
1647 	const br_sslrec_out_chapol_class *impl_out)
1648 {
1649 	cc->ichapol_in = impl_in;
1650 	cc->ichapol_out = impl_out;
1651 }
1652 
1653 /**
1654  * \brief Set the EC implementation.
1655  *
1656  * The elliptic curve implementation will be used for ECDH and ECDHE
1657  * cipher suites, and for ECDSA support.
1658  *
1659  * \param cc    SSL engine context.
1660  * \param iec   EC implementation (or `NULL`).
1661  */
1662 static inline void
1663 br_ssl_engine_set_ec(br_ssl_engine_context *cc, const br_ec_impl *iec)
1664 {
1665 	cc->iec = iec;
1666 }
1667 
1668 /**
1669  * \brief Set the "default" EC implementation.
1670  *
1671  * This function sets the elliptic curve implementation for ECDH and
1672  * ECDHE cipher suites, and for ECDSA support. It selects the fastest
1673  * implementation on the current system.
1674  *
1675  * \param cc   SSL engine context.
1676  */
1677 void br_ssl_engine_set_default_ec(br_ssl_engine_context *cc);
1678 
1679 /**
1680  * \brief Get the EC implementation configured in the provided engine.
1681  *
1682  * \param cc   SSL engine context.
1683  * \return  the EC implementation.
1684  */
1685 static inline const br_ec_impl *
1686 br_ssl_engine_get_ec(br_ssl_engine_context *cc)
1687 {
1688 	return cc->iec;
1689 }
1690 
1691 /**
1692  * \brief Set the RSA signature verification implementation.
1693  *
1694  * On the client, this is used to verify the server's signature on its
1695  * ServerKeyExchange message (for ECDHE_RSA cipher suites). On the server,
1696  * this is used to verify the client's CertificateVerify message (if a
1697  * client certificate is requested, and that certificate contains a RSA key).
1698  *
1699  * \param cc         SSL engine context.
1700  * \param irsavrfy   RSA signature verification implementation.
1701  */
1702 static inline void
1703 br_ssl_engine_set_rsavrfy(br_ssl_engine_context *cc, br_rsa_pkcs1_vrfy irsavrfy)
1704 {
1705 	cc->irsavrfy = irsavrfy;
1706 }
1707 
1708 /**
1709  * \brief Set the "default" RSA implementation (signature verification).
1710  *
1711  * This function sets the RSA implementation (signature verification)
1712  * to the fastest implementation available on the current platform.
1713  *
1714  * \param cc   SSL engine context.
1715  */
1716 void br_ssl_engine_set_default_rsavrfy(br_ssl_engine_context *cc);
1717 
1718 /**
1719  * \brief Get the RSA implementation (signature verification) configured
1720  * in the provided engine.
1721  *
1722  * \param cc   SSL engine context.
1723  * \return  the RSA signature verification implementation.
1724  */
1725 static inline br_rsa_pkcs1_vrfy
1726 br_ssl_engine_get_rsavrfy(br_ssl_engine_context *cc)
1727 {
1728 	return cc->irsavrfy;
1729 }
1730 
1731 /*
1732  * \brief Set the ECDSA implementation (signature verification).
1733  *
1734  * On the client, this is used to verify the server's signature on its
1735  * ServerKeyExchange message (for ECDHE_ECDSA cipher suites). On the server,
1736  * this is used to verify the client's CertificateVerify message (if a
1737  * client certificate is requested, that certificate contains an EC key,
1738  * and full-static ECDH is not used).
1739  *
1740  * The ECDSA implementation will use the EC core implementation configured
1741  * in the engine context.
1742  *
1743  * \param cc       client context.
1744  * \param iecdsa   ECDSA verification implementation.
1745  */
1746 static inline void
1747 br_ssl_engine_set_ecdsa(br_ssl_engine_context *cc, br_ecdsa_vrfy iecdsa)
1748 {
1749 	cc->iecdsa = iecdsa;
1750 }
1751 
1752 /**
1753  * \brief Set the "default" ECDSA implementation (signature verification).
1754  *
1755  * This function sets the ECDSA implementation (signature verification)
1756  * to the fastest implementation available on the current platform. This
1757  * call also sets the elliptic curve implementation itself, there again
1758  * to the fastest EC implementation available.
1759  *
1760  * \param cc   SSL engine context.
1761  */
1762 void br_ssl_engine_set_default_ecdsa(br_ssl_engine_context *cc);
1763 
1764 /**
1765  * \brief Get the ECDSA implementation (signature verification) configured
1766  * in the provided engine.
1767  *
1768  * \param cc   SSL engine context.
1769  * \return  the ECDSA signature verification implementation.
1770  */
1771 static inline br_ecdsa_vrfy
1772 br_ssl_engine_get_ecdsa(br_ssl_engine_context *cc)
1773 {
1774 	return cc->iecdsa;
1775 }
1776 
1777 /**
1778  * \brief Set the I/O buffer for the SSL engine.
1779  *
1780  * Once this call has been made, `br_ssl_client_reset()` or
1781  * `br_ssl_server_reset()` MUST be called before using the context.
1782  *
1783  * The provided buffer will be used as long as the engine context is
1784  * used. The caller is responsible for keeping it available.
1785  *
1786  * If `bidi` is 0, then the engine will operate in half-duplex mode
1787  * (it won't be able to send data while there is unprocessed incoming
1788  * data in the buffer, and it won't be able to receive data while there
1789  * is unsent data in the buffer). The optimal buffer size in half-duplex
1790  * mode is `BR_SSL_BUFSIZE_MONO`; if the buffer is larger, then extra
1791  * bytes are ignored. If the buffer is smaller, then this limits the
1792  * capacity of the engine to support all allowed record sizes.
1793  *
1794  * If `bidi` is 1, then the engine will split the buffer into two
1795  * parts, for separate handling of outgoing and incoming data. This
1796  * enables full-duplex processing, but requires more RAM. The optimal
1797  * buffer size in full-duplex mode is `BR_SSL_BUFSIZE_BIDI`; if the
1798  * buffer is larger, then extra bytes are ignored. If the buffer is
1799  * smaller, then the split will favour the incoming part, so that
1800  * interoperability is maximised.
1801  *
1802  * \param cc          SSL engine context
1803  * \param iobuf       I/O buffer.
1804  * \param iobuf_len   I/O buffer length (in bytes).
1805  * \param bidi        non-zero for full-duplex mode.
1806  */
1807 void br_ssl_engine_set_buffer(br_ssl_engine_context *cc,
1808 	void *iobuf, size_t iobuf_len, int bidi);
1809 
1810 /**
1811  * \brief Set the I/O buffers for the SSL engine.
1812  *
1813  * Once this call has been made, `br_ssl_client_reset()` or
1814  * `br_ssl_server_reset()` MUST be called before using the context.
1815  *
1816  * This function is similar to `br_ssl_engine_set_buffer()`, except
1817  * that it enforces full-duplex mode, and the two I/O buffers are
1818  * provided as separate chunks.
1819  *
1820  * The macros `BR_SSL_BUFSIZE_INPUT` and `BR_SSL_BUFSIZE_OUTPUT`
1821  * evaluate to the optimal (maximum) sizes for the input and output
1822  * buffer, respectively.
1823  *
1824  * \param cc         SSL engine context
1825  * \param ibuf       input buffer.
1826  * \param ibuf_len   input buffer length (in bytes).
1827  * \param obuf       output buffer.
1828  * \param obuf_len   output buffer length (in bytes).
1829  */
1830 void br_ssl_engine_set_buffers_bidi(br_ssl_engine_context *cc,
1831 	void *ibuf, size_t ibuf_len, void *obuf, size_t obuf_len);
1832 
1833 /**
1834  * \brief Inject some "initial entropy" in the context.
1835  *
1836  * This entropy will be added to what can be obtained from the
1837  * underlying operating system, if that OS is supported.
1838  *
1839  * This function may be called several times; all injected entropy chunks
1840  * are cumulatively mixed.
1841  *
1842  * If entropy gathering from the OS is supported and compiled in, then this
1843  * step is optional. Otherwise, it is mandatory to inject randomness, and
1844  * the caller MUST take care to push (as one or several successive calls)
1845  * enough entropy to achieve cryptographic resistance (at least 80 bits,
1846  * preferably 128 or more). The engine will report an error if no entropy
1847  * was provided and none can be obtained from the OS.
1848  *
1849  * Take care that this function cannot assess the cryptographic quality of
1850  * the provided bytes.
1851  *
1852  * In all generality, "entropy" must here be considered to mean "that
1853  * which the attacker cannot predict". If your OS/architecture does not
1854  * have a suitable source of randomness, then you can make do with the
1855  * combination of a large enough secret value (possibly a copy of an
1856  * asymmetric private key that you also store on the system) AND a
1857  * non-repeating value (e.g. current time, provided that the local clock
1858  * cannot be reset or altered by the attacker).
1859  *
1860  * \param cc     SSL engine context.
1861  * \param data   extra entropy to inject.
1862  * \param len    length of the extra data (in bytes).
1863  */
1864 void br_ssl_engine_inject_entropy(br_ssl_engine_context *cc,
1865 	const void *data, size_t len);
1866 
1867 /**
1868  * \brief Get the "server name" in this engine.
1869  *
1870  * For clients, this is the name provided with `br_ssl_client_reset()`;
1871  * for servers, this is the name received from the client as part of the
1872  * ClientHello message. If there is no such name (e.g. the client did
1873  * not send an SNI extension) then the returned string is empty
1874  * (returned pointer points to a byte of value 0).
1875  *
1876  * The returned pointer refers to a buffer inside the context, which may
1877  * be overwritten as part of normal SSL activity (even within the same
1878  * connection, if a renegotiation occurs).
1879  *
1880  * \param cc   SSL engine context.
1881  * \return  the server name (possibly empty).
1882  */
1883 static inline const char *
1884 br_ssl_engine_get_server_name(const br_ssl_engine_context *cc)
1885 {
1886 	return cc->server_name;
1887 }
1888 
1889 /**
1890  * \brief Get the protocol version.
1891  *
1892  * This function returns the protocol version that is used by the
1893  * engine. That value is set after sending (for a server) or receiving
1894  * (for a client) the ServerHello message.
1895  *
1896  * \param cc   SSL engine context.
1897  * \return  the protocol version.
1898  */
1899 static inline unsigned
1900 br_ssl_engine_get_version(const br_ssl_engine_context *cc)
1901 {
1902 	return cc->session.version;
1903 }
1904 
1905 /**
1906  * \brief Get a copy of the session parameters.
1907  *
1908  * The session parameters are filled during the handshake, so this
1909  * function shall not be called before completion of the handshake.
1910  * The initial handshake is completed when the context first allows
1911  * application data to be injected.
1912  *
1913  * This function copies the current session parameters into the provided
1914  * structure. Beware that the session parameters include the master
1915  * secret, which is sensitive data, to handle with great care.
1916  *
1917  * \param cc   SSL engine context.
1918  * \param pp   destination structure for the session parameters.
1919  */
1920 static inline void
1921 br_ssl_engine_get_session_parameters(const br_ssl_engine_context *cc,
1922 	br_ssl_session_parameters *pp)
1923 {
1924 	memcpy(pp, &cc->session, sizeof *pp);
1925 }
1926 
1927 /**
1928  * \brief Set the session parameters to the provided values.
1929  *
1930  * This function is meant to be used in the client, before doing a new
1931  * handshake; a session resumption will be attempted with these
1932  * parameters. In the server, this function has no effect.
1933  *
1934  * \param cc   SSL engine context.
1935  * \param pp   source structure for the session parameters.
1936  */
1937 static inline void
1938 br_ssl_engine_set_session_parameters(br_ssl_engine_context *cc,
1939 	const br_ssl_session_parameters *pp)
1940 {
1941 	memcpy(&cc->session, pp, sizeof *pp);
1942 }
1943 
1944 /**
1945  * \brief Get identifier for the curve used for key exchange.
1946  *
1947  * If the cipher suite uses ECDHE, then this function returns the
1948  * identifier for the curve used for transient parameters. This is
1949  * defined during the course of the handshake, when the ServerKeyExchange
1950  * is sent (on the server) or received (on the client). If the
1951  * cipher suite does not use ECDHE (e.g. static ECDH, or RSA key
1952  * exchange), then this value is indeterminate.
1953  *
1954  * @param cc   SSL engine context.
1955  * @return  the ECDHE curve identifier.
1956  */
1957 static inline int
1958 br_ssl_engine_get_ecdhe_curve(br_ssl_engine_context *cc)
1959 {
1960 	return cc->ecdhe_curve;
1961 }
1962 
1963 /**
1964  * \brief Get the current engine state.
1965  *
1966  * An SSL engine (client or server) has, at any time, a state which is
1967  * the combination of zero, one or more of these flags:
1968  *
1969  *   - `BR_SSL_CLOSED`
1970  *
1971  *     Engine is finished, no more I/O (until next reset).
1972  *
1973  *   - `BR_SSL_SENDREC`
1974  *
1975  *     Engine has some bytes to send to the peer.
1976  *
1977  *   - `BR_SSL_RECVREC`
1978  *
1979  *     Engine expects some bytes from the peer.
1980  *
1981  *   - `BR_SSL_SENDAPP`
1982  *
1983  *     Engine may receive application data to send (or flush).
1984  *
1985  *   - `BR_SSL_RECVAPP`
1986  *
1987  *     Engine has obtained some application data from the peer,
1988  *     that should be read by the caller.
1989  *
1990  * If no flag at all is set (state value is 0), then the engine is not
1991  * fully initialised yet.
1992  *
1993  * The `BR_SSL_CLOSED` flag is exclusive; when it is set, no other flag
1994  * is set. To distinguish between a normal closure and an error, use
1995  * `br_ssl_engine_last_error()`.
1996  *
1997  * Generally speaking, `BR_SSL_SENDREC` and `BR_SSL_SENDAPP` are mutually
1998  * exclusive: the input buffer, at any point, either accumulates
1999  * plaintext data, or contains an assembled record that is being sent.
2000  * Similarly, `BR_SSL_RECVREC` and `BR_SSL_RECVAPP` are mutually exclusive.
2001  * This may change in a future library version.
2002  *
2003  * \param cc   SSL engine context.
2004  * \return  the current engine state.
2005  */
2006 unsigned br_ssl_engine_current_state(const br_ssl_engine_context *cc);
2007 
2008 /** \brief SSL engine state: closed or failed. */
2009 #define BR_SSL_CLOSED    0x0001
2010 /** \brief SSL engine state: record data is ready to be sent to the peer. */
2011 #define BR_SSL_SENDREC   0x0002
2012 /** \brief SSL engine state: engine may receive records from the peer. */
2013 #define BR_SSL_RECVREC   0x0004
2014 /** \brief SSL engine state: engine may accept application data to send. */
2015 #define BR_SSL_SENDAPP   0x0008
2016 /** \brief SSL engine state: engine has received application data. */
2017 #define BR_SSL_RECVAPP   0x0010
2018 
2019 /**
2020  * \brief Get the engine error indicator.
2021  *
2022  * The error indicator is `BR_ERR_OK` (0) if no error was encountered
2023  * since the last call to `br_ssl_client_reset()` or
2024  * `br_ssl_server_reset()`. Other status values are "sticky": they
2025  * remain set, and prevent all I/O activity, until cleared. Only the
2026  * reset calls clear the error indicator.
2027  *
2028  * \param cc   SSL engine context.
2029  * \return  0, or a non-zero error code.
2030  */
2031 static inline int
2032 br_ssl_engine_last_error(const br_ssl_engine_context *cc)
2033 {
2034 	return cc->err;
2035 }
2036 
2037 /*
2038  * There are four I/O operations, each identified by a symbolic name:
2039  *
2040  *   sendapp   inject application data in the engine
2041  *   recvapp   retrieving application data from the engine
2042  *   sendrec   sending records on the transport medium
2043  *   recvrec   receiving records from the transport medium
2044  *
2045  * Terminology works thus: in a layered model where the SSL engine sits
2046  * between the application and the network, "send" designates operations
2047  * where bytes flow from application to network, and "recv" for the
2048  * reverse operation. Application data (the plaintext that is to be
2049  * conveyed through SSL) is "app", while encrypted records are "rec".
2050  * Note that from the SSL engine point of view, "sendapp" and "recvrec"
2051  * designate bytes that enter the engine ("inject" operation), while
2052  * "recvapp" and "sendrec" designate bytes that exit the engine
2053  * ("extract" operation).
2054  *
2055  * For the operation 'xxx', two functions are defined:
2056  *
2057  *   br_ssl_engine_xxx_buf
2058  *      Returns a pointer and length to the buffer to use for that
2059  *      operation. '*len' is set to the number of bytes that may be read
2060  *      from the buffer (extract operation) or written to the buffer
2061  *      (inject operation). If no byte may be exchanged for that operation
2062  *      at that point, then '*len' is set to zero, and NULL is returned.
2063  *      The engine state is unmodified by this call.
2064  *
2065  *   br_ssl_engine_xxx_ack
2066  *      Informs the engine that 'len' bytes have been read from the buffer
2067  *      (extract operation) or written to the buffer (inject operation).
2068  *      The 'len' value MUST NOT be zero. The 'len' value MUST NOT exceed
2069  *      that which was obtained from a preceding br_ssl_engine_xxx_buf()
2070  *      call.
2071  */
2072 
2073 /**
2074  * \brief Get buffer for application data to send.
2075  *
2076  * If the engine is ready to accept application data to send to the
2077  * peer, then this call returns a pointer to the buffer where such
2078  * data shall be written, and its length is written in `*len`.
2079  * Otherwise, `*len` is set to 0 and `NULL` is returned.
2080  *
2081  * \param cc    SSL engine context.
2082  * \param len   receives the application data output buffer length, or 0.
2083  * \return  the application data output buffer, or `NULL`.
2084  */
2085 unsigned char *br_ssl_engine_sendapp_buf(
2086 	const br_ssl_engine_context *cc, size_t *len);
2087 
2088 /**
2089  * \brief Inform the engine of some new application data.
2090  *
2091  * After writing `len` bytes in the buffer returned by
2092  * `br_ssl_engine_sendapp_buf()`, the application shall call this
2093  * function to trigger any relevant processing. The `len` parameter
2094  * MUST NOT be 0, and MUST NOT exceed the value obtained in the
2095  * `br_ssl_engine_sendapp_buf()` call.
2096  *
2097  * \param cc    SSL engine context.
2098  * \param len   number of bytes pushed (not zero).
2099  */
2100 void br_ssl_engine_sendapp_ack(br_ssl_engine_context *cc, size_t len);
2101 
2102 /**
2103  * \brief Get buffer for received application data.
2104  *
2105  * If the engine has received application data from the peer, then this
2106  * call returns a pointer to the buffer from where such data shall be
2107  * read, and its length is written in `*len`. Otherwise, `*len` is set
2108  * to 0 and `NULL` is returned.
2109  *
2110  * \param cc    SSL engine context.
2111  * \param len   receives the application data input buffer length, or 0.
2112  * \return  the application data input buffer, or `NULL`.
2113  */
2114 unsigned char *br_ssl_engine_recvapp_buf(
2115 	const br_ssl_engine_context *cc, size_t *len);
2116 
2117 /**
2118  * \brief Acknowledge some received application data.
2119  *
2120  * After reading `len` bytes from the buffer returned by
2121  * `br_ssl_engine_recvapp_buf()`, the application shall call this
2122  * function to trigger any relevant processing. The `len` parameter
2123  * MUST NOT be 0, and MUST NOT exceed the value obtained in the
2124  * `br_ssl_engine_recvapp_buf()` call.
2125  *
2126  * \param cc    SSL engine context.
2127  * \param len   number of bytes read (not zero).
2128  */
2129 void br_ssl_engine_recvapp_ack(br_ssl_engine_context *cc, size_t len);
2130 
2131 /**
2132  * \brief Get buffer for record data to send.
2133  *
2134  * If the engine has prepared some records to send to the peer, then this
2135  * call returns a pointer to the buffer from where such data shall be
2136  * read, and its length is written in `*len`. Otherwise, `*len` is set
2137  * to 0 and `NULL` is returned.
2138  *
2139  * \param cc    SSL engine context.
2140  * \param len   receives the record data output buffer length, or 0.
2141  * \return  the record data output buffer, or `NULL`.
2142  */
2143 unsigned char *br_ssl_engine_sendrec_buf(
2144 	const br_ssl_engine_context *cc, size_t *len);
2145 
2146 /**
2147  * \brief Acknowledge some sent record data.
2148  *
2149  * After reading `len` bytes from the buffer returned by
2150  * `br_ssl_engine_sendrec_buf()`, the application shall call this
2151  * function to trigger any relevant processing. The `len` parameter
2152  * MUST NOT be 0, and MUST NOT exceed the value obtained in the
2153  * `br_ssl_engine_sendrec_buf()` call.
2154  *
2155  * \param cc    SSL engine context.
2156  * \param len   number of bytes read (not zero).
2157  */
2158 void br_ssl_engine_sendrec_ack(br_ssl_engine_context *cc, size_t len);
2159 
2160 /**
2161  * \brief Get buffer for incoming records.
2162  *
2163  * If the engine is ready to accept records from the peer, then this
2164  * call returns a pointer to the buffer where such data shall be
2165  * written, and its length is written in `*len`. Otherwise, `*len` is
2166  * set to 0 and `NULL` is returned.
2167  *
2168  * \param cc    SSL engine context.
2169  * \param len   receives the record data input buffer length, or 0.
2170  * \return  the record data input buffer, or `NULL`.
2171  */
2172 unsigned char *br_ssl_engine_recvrec_buf(
2173 	const br_ssl_engine_context *cc, size_t *len);
2174 
2175 /**
2176  * \brief Inform the engine of some new record data.
2177  *
2178  * After writing `len` bytes in the buffer returned by
2179  * `br_ssl_engine_recvrec_buf()`, the application shall call this
2180  * function to trigger any relevant processing. The `len` parameter
2181  * MUST NOT be 0, and MUST NOT exceed the value obtained in the
2182  * `br_ssl_engine_recvrec_buf()` call.
2183  *
2184  * \param cc    SSL engine context.
2185  * \param len   number of bytes pushed (not zero).
2186  */
2187 void br_ssl_engine_recvrec_ack(br_ssl_engine_context *cc, size_t len);
2188 
2189 /**
2190  * \brief Flush buffered application data.
2191  *
2192  * If some application data has been buffered in the engine, then wrap
2193  * it into a record and mark it for sending. If no application data has
2194  * been buffered but the engine would be ready to accept some, AND the
2195  * `force` parameter is non-zero, then an empty record is assembled and
2196  * marked for sending. In all other cases, this function does nothing.
2197  *
2198  * Empty records are technically legal, but not all existing SSL/TLS
2199  * implementations support them. Empty records can be useful as a
2200  * transparent "keep-alive" mechanism to maintain some low-level
2201  * network activity.
2202  *
2203  * \param cc      SSL engine context.
2204  * \param force   non-zero to force sending an empty record.
2205  */
2206 void br_ssl_engine_flush(br_ssl_engine_context *cc, int force);
2207 
2208 /**
2209  * \brief Initiate a closure.
2210  *
2211  * If, at that point, the context is open and in ready state, then a
2212  * `close_notify` alert is assembled and marked for sending; this
2213  * triggers the closure protocol. Otherwise, no such alert is assembled.
2214  *
2215  * \param cc   SSL engine context.
2216  */
2217 void br_ssl_engine_close(br_ssl_engine_context *cc);
2218 
2219 /**
2220  * \brief Initiate a renegotiation.
2221  *
2222  * If the engine is failed or closed, or if the peer is known not to
2223  * support secure renegotiation (RFC 5746), or if renegotiations have
2224  * been disabled with the `BR_OPT_NO_RENEGOTIATION` flag, or if there
2225  * is buffered incoming application data, then this function returns 0
2226  * and nothing else happens.
2227  *
2228  * Otherwise, this function returns 1, and a renegotiation attempt is
2229  * triggered (if a handshake is already ongoing at that point, then
2230  * no new handshake is triggered).
2231  *
2232  * \param cc   SSL engine context.
2233  * \return  1 on success, 0 on error.
2234  */
2235 int br_ssl_engine_renegotiate(br_ssl_engine_context *cc);
2236 
2237 /**
2238  * \brief Export key material from a connected SSL engine (RFC 5705).
2239  *
2240  * This calls compute a secret key of arbitrary length from the master
2241  * secret of a connected SSL engine. If the provided context is not
2242  * currently in "application data" state (initial handshake is not
2243  * finished, another handshake is ongoing, or the connection failed or
2244  * was closed), then this function returns 0. Otherwise, a secret key of
2245  * length `len` bytes is computed and written in the buffer pointed to
2246  * by `dst`, and 1 is returned.
2247  *
2248  * The computed key follows the specification described in RFC 5705.
2249  * That RFC includes two key computations, with and without a "context
2250  * value". If `context` is `NULL`, then the variant without context is
2251  * used; otherwise, the `context_len` bytes located at the address
2252  * pointed to by `context` are used in the computation. Note that it
2253  * is possible to have a "with context" key with a context length of
2254  * zero bytes, by setting `context` to a non-`NULL` value but
2255  * `context_len` to 0.
2256  *
2257  * When context bytes are used, the context length MUST NOT exceed
2258  * 65535 bytes.
2259  *
2260  * \param cc            SSL engine context.
2261  * \param dst           destination buffer for exported key.
2262  * \param len           exported key length (in bytes).
2263  * \param label         disambiguation label.
2264  * \param context       context value (or `NULL`).
2265  * \param context_len   context length (in bytes).
2266  * \return  1 on success, 0 on error.
2267  */
2268 int br_ssl_key_export(br_ssl_engine_context *cc,
2269 	void *dst, size_t len, const char *label,
2270 	const void *context, size_t context_len);
2271 
2272 /*
2273  * Pre-declaration for the SSL client context.
2274  */
2275 typedef struct br_ssl_client_context_ br_ssl_client_context;
2276 
2277 /**
2278  * \brief Type for the client certificate, if requested by the server.
2279  */
2280 typedef struct {
2281 	/**
2282 	 * \brief Authentication type.
2283 	 *
2284 	 * This is either `BR_AUTH_RSA` (RSA signature), `BR_AUTH_ECDSA`
2285 	 * (ECDSA signature), or `BR_AUTH_ECDH` (static ECDH key exchange).
2286 	 */
2287 	int auth_type;
2288 
2289 	/**
2290 	 * \brief Hash function for computing the CertificateVerify.
2291 	 *
2292 	 * This is the symbolic identifier for the hash function that
2293 	 * will be used to produce the hash of handshake messages, to
2294 	 * be signed into the CertificateVerify. For full static ECDH
2295 	 * (client and server certificates are both EC in the same
2296 	 * curve, and static ECDH is used), this value is set to -1.
2297 	 *
2298 	 * Take care that with TLS 1.0 and 1.1, that value MUST match
2299 	 * the protocol requirements: value must be 0 (MD5+SHA-1) for
2300 	 * a RSA signature, or 2 (SHA-1) for an ECDSA signature. Only
2301 	 * TLS 1.2 allows for other hash functions.
2302 	 */
2303 	int hash_id;
2304 
2305 	/**
2306 	 * \brief Certificate chain to send to the server.
2307 	 *
2308 	 * This is an array of `br_x509_certificate` objects, each
2309 	 * normally containing a DER-encoded certificate. The client
2310 	 * code does not try to decode these elements. If there is no
2311 	 * chain to send to the server, then this pointer shall be
2312 	 * set to `NULL`.
2313 	 */
2314 	const br_x509_certificate *chain;
2315 
2316 	/**
2317 	 * \brief Certificate chain length (number of certificates).
2318 	 *
2319 	 * If there is no chain to send to the server, then this value
2320 	 * shall be set to 0.
2321 	 */
2322 	size_t chain_len;
2323 
2324 } br_ssl_client_certificate;
2325 
2326 /*
2327  * Note: the constants below for signatures match the TLS constants.
2328  */
2329 
2330 /** \brief Client authentication type: static ECDH. */
2331 #define BR_AUTH_ECDH    0
2332 /** \brief Client authentication type: RSA signature. */
2333 #define BR_AUTH_RSA     1
2334 /** \brief Client authentication type: ECDSA signature. */
2335 #define BR_AUTH_ECDSA   3
2336 
2337 /**
2338  * \brief Class type for a certificate handler (client side).
2339  *
2340  * A certificate handler selects a client certificate chain to send to
2341  * the server, upon explicit request from that server. It receives
2342  * the list of trust anchor DN from the server, and supported types
2343  * of certificates and signatures, and returns the chain to use. It
2344  * is also invoked to perform the corresponding private key operation
2345  * (a signature, or an ECDH computation).
2346  *
2347  * The SSL client engine will first push the trust anchor DN with
2348  * `start_name_list()`, `start_name()`, `append_name()`, `end_name()`
2349  * and `end_name_list()`. Then it will call `choose()`, to select the
2350  * actual chain (and signature/hash algorithms). Finally, it will call
2351  * either `do_sign()` or `do_keyx()`, depending on the algorithm choices.
2352  */
2353 typedef struct br_ssl_client_certificate_class_ br_ssl_client_certificate_class;
2354 struct br_ssl_client_certificate_class_ {
2355 	/**
2356 	 * \brief Context size (in bytes).
2357 	 */
2358 	size_t context_size;
2359 
2360 	/**
2361 	 * \brief Begin reception of a list of trust anchor names. This
2362 	 * is called while parsing the incoming CertificateRequest.
2363 	 *
2364 	 * \param pctx   certificate handler context.
2365 	 */
2366 	void (*start_name_list)(const br_ssl_client_certificate_class **pctx);
2367 
2368 	/**
2369 	 * \brief Begin reception of a new trust anchor name.
2370 	 *
2371 	 * The total encoded name length is provided; it is less than
2372 	 * 65535 bytes.
2373 	 *
2374 	 * \param pctx   certificate handler context.
2375 	 * \param len    encoded name length (in bytes).
2376 	 */
2377 	void (*start_name)(const br_ssl_client_certificate_class **pctx,
2378 		size_t len);
2379 
2380 	/**
2381 	 * \brief Receive some more bytes for the current trust anchor name.
2382 	 *
2383 	 * The provided reference (`data`) points to a transient buffer
2384 	 * they may be reused as soon as this function returns. The chunk
2385 	 * length (`len`) is never zero.
2386 	 *
2387 	 * \param pctx   certificate handler context.
2388 	 * \param data   anchor name chunk.
2389 	 * \param len    anchor name chunk length (in bytes).
2390 	 */
2391 	void (*append_name)(const br_ssl_client_certificate_class **pctx,
2392 		const unsigned char *data, size_t len);
2393 
2394 	/**
2395 	 * \brief End current trust anchor name.
2396 	 *
2397 	 * This function is called when all the encoded anchor name data
2398 	 * has been provided.
2399 	 *
2400 	 * \param pctx   certificate handler context.
2401 	 */
2402 	void (*end_name)(const br_ssl_client_certificate_class **pctx);
2403 
2404 	/**
2405 	 * \brief End list of trust anchor names.
2406 	 *
2407 	 * This function is called when all the anchor names in the
2408 	 * CertificateRequest message have been obtained.
2409 	 *
2410 	 * \param pctx   certificate handler context.
2411 	 */
2412 	void (*end_name_list)(const br_ssl_client_certificate_class **pctx);
2413 
2414 	/**
2415 	 * \brief Select client certificate and algorithms.
2416 	 *
2417 	 * This callback function shall fill the provided `choices`
2418 	 * structure with the selected algorithms and certificate chain.
2419 	 * The `hash_id`, `chain` and `chain_len` fields must be set. If
2420 	 * the client cannot or does not wish to send a certificate,
2421 	 * then it shall set `chain` to `NULL` and `chain_len` to 0.
2422 	 *
2423 	 * The `auth_types` parameter describes the authentication types,
2424 	 * signature algorithms and hash functions that are supported by
2425 	 * both the client context and the server, and compatible with
2426 	 * the current protocol version. This is a bit field with the
2427 	 * following contents:
2428 	 *
2429 	 *   - If RSA signatures with hash function x are supported, then
2430 	 *     bit x is set.
2431 	 *
2432 	 *   - If ECDSA signatures with hash function x are supported,
2433 	 *     then bit 8+x is set.
2434 	 *
2435 	 *   - If static ECDH is supported, with a RSA-signed certificate,
2436 	 *     then bit 16 is set.
2437 	 *
2438 	 *   - If static ECDH is supported, with an ECDSA-signed certificate,
2439 	 *     then bit 17 is set.
2440 	 *
2441 	 * Notes:
2442 	 *
2443 	 *   - When using TLS 1.0 or 1.1, the hash function for RSA
2444 	 *     signatures is always the special MD5+SHA-1 (id 0), and the
2445 	 *     hash function for ECDSA signatures is always SHA-1 (id 2).
2446 	 *
2447 	 *   - When using TLS 1.2, the list of hash functions is trimmed
2448 	 *     down to include only hash functions that the client context
2449 	 *     can support. The actual server list can be obtained with
2450 	 *     `br_ssl_client_get_server_hashes()`; that list may be used
2451 	 *     to select the certificate chain to send to the server.
2452 	 *
2453 	 * \param pctx         certificate handler context.
2454 	 * \param cc           SSL client context.
2455 	 * \param auth_types   supported authentication types and algorithms.
2456 	 * \param choices      destination structure for the policy choices.
2457 	 */
2458 	void (*choose)(const br_ssl_client_certificate_class **pctx,
2459 		const br_ssl_client_context *cc, uint32_t auth_types,
2460 		br_ssl_client_certificate *choices);
2461 
2462 	/**
2463 	 * \brief Perform key exchange (client part).
2464 	 *
2465 	 * This callback is invoked in case of a full static ECDH key
2466 	 * exchange:
2467 	 *
2468 	 *   - the cipher suite uses `ECDH_RSA` or `ECDH_ECDSA`;
2469 	 *
2470 	 *   - the server requests a client certificate;
2471 	 *
2472 	 *   - the client has, and sends, a client certificate that
2473 	 *     uses an EC key in the same curve as the server's key,
2474 	 *     and chooses static ECDH (the `hash_id` field in the choice
2475 	 *     structure was set to -1).
2476 	 *
2477 	 * In that situation, this callback is invoked to compute the
2478 	 * client-side ECDH: the provided `data` (of length `*len` bytes)
2479 	 * is the server's public key point (as decoded from its
2480 	 * certificate), and the client shall multiply that point with
2481 	 * its own private key, and write back the X coordinate of the
2482 	 * resulting point in the same buffer, starting at offset 0.
2483 	 * The `*len` value shall be modified to designate the actual
2484 	 * length of the X coordinate.
2485 	 *
2486 	 * The callback must uphold the following:
2487 	 *
2488 	 *   - If the input array does not have the proper length for
2489 	 *     an encoded curve point, then an error (0) shall be reported.
2490 	 *
2491 	 *   - If the input array has the proper length, then processing
2492 	 *     MUST be constant-time, even if the data is not a valid
2493 	 *     encoded point.
2494 	 *
2495 	 *   - This callback MUST check that the input point is valid.
2496 	 *
2497 	 * Returned value is 1 on success, 0 on error.
2498 	 *
2499 	 * \param pctx   certificate handler context.
2500 	 * \param data   server public key point.
2501 	 * \param len    public key point length / X coordinate length.
2502 	 * \return  1 on success, 0 on error.
2503 	 */
2504 	uint32_t (*do_keyx)(const br_ssl_client_certificate_class **pctx,
2505 		unsigned char *data, size_t *len);
2506 
2507 	/**
2508 	 * \brief Perform a signature (client authentication).
2509 	 *
2510 	 * This callback is invoked when a client certificate was sent,
2511 	 * and static ECDH is not used. It shall compute a signature,
2512 	 * using the client's private key, over the provided hash value
2513 	 * (which is the hash of all previous handshake messages).
2514 	 *
2515 	 * On input, the hash value to sign is in `data`, of size
2516 	 * `hv_len`; the involved hash function is identified by
2517 	 * `hash_id`. The signature shall be computed and written
2518 	 * back into `data`; the total size of that buffer is `len`
2519 	 * bytes.
2520 	 *
2521 	 * This callback shall verify that the signature length does not
2522 	 * exceed `len` bytes, and abstain from writing the signature if
2523 	 * it does not fit.
2524 	 *
2525 	 * For RSA signatures, the `hash_id` may be 0, in which case
2526 	 * this is the special header-less signature specified in TLS 1.0
2527 	 * and 1.1, with a 36-byte hash value. Otherwise, normal PKCS#1
2528 	 * v1.5 signatures shall be computed.
2529 	 *
2530 	 * For ECDSA signatures, the signature value shall use the ASN.1
2531 	 * based encoding.
2532 	 *
2533 	 * Returned value is the signature length (in bytes), or 0 on error.
2534 	 *
2535 	 * \param pctx      certificate handler context.
2536 	 * \param hash_id   hash function identifier.
2537 	 * \param hv_len    hash value length (in bytes).
2538 	 * \param data      input/output buffer (hash value, then signature).
2539 	 * \param len       total buffer length (in bytes).
2540 	 * \return  signature length (in bytes) on success, or 0 on error.
2541 	 */
2542 	size_t (*do_sign)(const br_ssl_client_certificate_class **pctx,
2543 		int hash_id, size_t hv_len, unsigned char *data, size_t len);
2544 };
2545 
2546 /**
2547  * \brief A single-chain RSA client certificate handler.
2548  *
2549  * This handler uses a single certificate chain, with a RSA
2550  * signature. The list of trust anchor DN is ignored.
2551  *
2552  * Apart from the first field (vtable pointer), its contents are
2553  * opaque and shall not be accessed directly.
2554  */
2555 typedef struct {
2556 	/** \brief Pointer to vtable. */
2557 	const br_ssl_client_certificate_class *vtable;
2558 #ifndef BR_DOXYGEN_IGNORE
2559 	const br_x509_certificate *chain;
2560 	size_t chain_len;
2561 	const br_rsa_private_key *sk;
2562 	br_rsa_pkcs1_sign irsasign;
2563 #endif
2564 } br_ssl_client_certificate_rsa_context;
2565 
2566 /**
2567  * \brief A single-chain EC client certificate handler.
2568  *
2569  * This handler uses a single certificate chain, with a RSA
2570  * signature. The list of trust anchor DN is ignored.
2571  *
2572  * This handler may support both static ECDH, and ECDSA signatures
2573  * (either usage may be selectively disabled).
2574  *
2575  * Apart from the first field (vtable pointer), its contents are
2576  * opaque and shall not be accessed directly.
2577  */
2578 typedef struct {
2579 	/** \brief Pointer to vtable. */
2580 	const br_ssl_client_certificate_class *vtable;
2581 #ifndef BR_DOXYGEN_IGNORE
2582 	const br_x509_certificate *chain;
2583 	size_t chain_len;
2584 	const br_ec_private_key *sk;
2585 	unsigned allowed_usages;
2586 	unsigned issuer_key_type;
2587 	const br_multihash_context *mhash;
2588 	const br_ec_impl *iec;
2589 	br_ecdsa_sign iecdsa;
2590 #endif
2591 } br_ssl_client_certificate_ec_context;
2592 
2593 /**
2594  * \brief Context structure for a SSL client.
2595  *
2596  * The first field (called `eng`) is the SSL engine; all functions that
2597  * work on a `br_ssl_engine_context` structure shall take as parameter
2598  * a pointer to that field. The other structure fields are opaque and
2599  * must not be accessed directly.
2600  */
2601 struct br_ssl_client_context_ {
2602 	/**
2603 	 * \brief The encapsulated engine context.
2604 	 */
2605 	br_ssl_engine_context eng;
2606 
2607 #ifndef BR_DOXYGEN_IGNORE
2608 	/*
2609 	 * Minimum ClientHello length; padding with an extension (RFC
2610 	 * 7685) is added if necessary to match at least that length.
2611 	 * Such padding is nominally unnecessary, but it has been used
2612 	 * to work around some server implementation bugs.
2613 	 */
2614 	uint16_t min_clienthello_len;
2615 
2616 	/*
2617 	 * Bit field for algoithms (hash + signature) supported by the
2618 	 * server when requesting a client certificate.
2619 	 */
2620 	uint32_t hashes;
2621 
2622 	/*
2623 	 * Server's public key curve.
2624 	 */
2625 	int server_curve;
2626 
2627 	/*
2628 	 * Context for certificate handler.
2629 	 */
2630 	const br_ssl_client_certificate_class **client_auth_vtable;
2631 
2632 	/*
2633 	 * Client authentication type.
2634 	 */
2635 	unsigned char auth_type;
2636 
2637 	/*
2638 	 * Hash function to use for the client signature. This is 0xFF
2639 	 * if static ECDH is used.
2640 	 */
2641 	unsigned char hash_id;
2642 
2643 	/*
2644 	 * For the core certificate handlers, thus avoiding (in most
2645 	 * cases) the need for an externally provided policy context.
2646 	 */
2647 	union {
2648 		const br_ssl_client_certificate_class *vtable;
2649 		br_ssl_client_certificate_rsa_context single_rsa;
2650 		br_ssl_client_certificate_ec_context single_ec;
2651 	} client_auth;
2652 
2653 	/*
2654 	 * Implementations.
2655 	 */
2656 	br_rsa_public irsapub;
2657 #endif
2658 };
2659 
2660 /**
2661  * \brief Get the hash functions and signature algorithms supported by
2662  * the server.
2663  *
2664  * This value is a bit field:
2665  *
2666  *   - If RSA (PKCS#1 v1.5) is supported with hash function of ID `x`,
2667  *     then bit `x` is set (hash function ID is 0 for the special MD5+SHA-1,
2668  *     or 2 to 6 for the SHA family).
2669  *
2670  *   - If ECDSA is supported with hash function of ID `x`, then bit `8+x`
2671  *     is set.
2672  *
2673  *   - Newer algorithms are symbolic 16-bit identifiers that do not
2674  *     represent signature algorithm and hash function separately. If
2675  *     the TLS-level identifier is `0x0800+x` for a `x` in the 0..15
2676  *     range, then bit `16+x` is set.
2677  *
2678  * "New algorithms" are currently defined only in draft documents, so
2679  * this support is subject to possible change. Right now (early 2017),
2680  * this maps ed25519 (EdDSA on Curve25519) to bit 23, and ed448 (EdDSA
2681  * on Curve448) to bit 24. If the identifiers on the wire change in
2682  * future document, then the decoding mechanism in BearSSL will be
2683  * amended to keep mapping ed25519 and ed448 on bits 23 and 24,
2684  * respectively. Mapping of other new algorithms (e.g. RSA/PSS) is not
2685  * guaranteed yet.
2686  *
2687  * \param cc   client context.
2688  * \return  the server-supported hash functions and signature algorithms.
2689  */
2690 static inline uint32_t
2691 br_ssl_client_get_server_hashes(const br_ssl_client_context *cc)
2692 {
2693 	return cc->hashes;
2694 }
2695 
2696 /**
2697  * \brief Get the server key curve.
2698  *
2699  * This function returns the ID for the curve used by the server's public
2700  * key. This is set when the server's certificate chain is processed;
2701  * this value is 0 if the server's key is not an EC key.
2702  *
2703  * \return  the server's public key curve ID, or 0.
2704  */
2705 static inline int
2706 br_ssl_client_get_server_curve(const br_ssl_client_context *cc)
2707 {
2708 	return cc->server_curve;
2709 }
2710 
2711 /*
2712  * Each br_ssl_client_init_xxx() function sets the list of supported
2713  * cipher suites and used implementations, as specified by the profile
2714  * name 'xxx'. Defined profile names are:
2715  *
2716  *    full    all supported versions and suites; constant-time implementations
2717  *    TODO: add other profiles
2718  */
2719 
2720 /**
2721  * \brief SSL client profile: full.
2722  *
2723  * This function initialises the provided SSL client context with
2724  * all supported algorithms and cipher suites. It also initialises
2725  * a companion X.509 validation engine with all supported algorithms,
2726  * and the provided trust anchors; the X.509 engine will be used by
2727  * the client context to validate the server's certificate.
2728  *
2729  * \param cc                  client context to initialise.
2730  * \param xc                  X.509 validation context to initialise.
2731  * \param trust_anchors       trust anchors to use.
2732  * \param trust_anchors_num   number of trust anchors.
2733  */
2734 void br_ssl_client_init_full(br_ssl_client_context *cc,
2735 	br_x509_minimal_context *xc,
2736 	const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num);
2737 
2738 /**
2739  * \brief Clear the complete contents of a SSL client context.
2740  *
2741  * Everything is cleared, including the reference to the configured buffer,
2742  * implementations, cipher suites and state. This is a preparatory step
2743  * to assembling a custom profile.
2744  *
2745  * \param cc   client context to clear.
2746  */
2747 void br_ssl_client_zero(br_ssl_client_context *cc);
2748 
2749 /**
2750  * \brief Set an externally provided client certificate handler context.
2751  *
2752  * The handler's methods are invoked when the server requests a client
2753  * certificate.
2754  *
2755  * \param cc     client context.
2756  * \param pctx   certificate handler context (pointer to its vtable field).
2757  */
2758 static inline void
2759 br_ssl_client_set_client_certificate(br_ssl_client_context *cc,
2760 	const br_ssl_client_certificate_class **pctx)
2761 {
2762 	cc->client_auth_vtable = pctx;
2763 }
2764 
2765 /**
2766  * \brief Set the RSA public-key operations implementation.
2767  *
2768  * This will be used to encrypt the pre-master secret with the server's
2769  * RSA public key (RSA-encryption cipher suites only).
2770  *
2771  * \param cc        client context.
2772  * \param irsapub   RSA public-key encryption implementation.
2773  */
2774 static inline void
2775 br_ssl_client_set_rsapub(br_ssl_client_context *cc, br_rsa_public irsapub)
2776 {
2777 	cc->irsapub = irsapub;
2778 }
2779 
2780 /**
2781  * \brief Set the "default" RSA implementation for public-key operations.
2782  *
2783  * This sets the RSA implementation in the client context (for encrypting
2784  * the pre-master secret, in `TLS_RSA_*` cipher suites) to the fastest
2785  * available on the current platform.
2786  *
2787  * \param cc   client context.
2788  */
2789 void br_ssl_client_set_default_rsapub(br_ssl_client_context *cc);
2790 
2791 /**
2792  * \brief Set the minimum ClientHello length (RFC 7685 padding).
2793  *
2794  * If this value is set and the ClientHello would be shorter, then
2795  * the Pad ClientHello extension will be added with enough padding bytes
2796  * to reach the target size. Because of the extension header, the resulting
2797  * size will sometimes be slightly more than `len` bytes if the target
2798  * size cannot be exactly met.
2799  *
2800  * The target length relates to the _contents_ of the ClientHello, not
2801  * counting its 4-byte header. For instance, if `len` is set to 512,
2802  * then the padding will bring the ClientHello size to 516 bytes with its
2803  * header, and 521 bytes when counting the 5-byte record header.
2804  *
2805  * \param cc    client context.
2806  * \param len   minimum ClientHello length (in bytes).
2807  */
2808 static inline void
2809 br_ssl_client_set_min_clienthello_len(br_ssl_client_context *cc, uint16_t len)
2810 {
2811 	cc->min_clienthello_len = len;
2812 }
2813 
2814 /**
2815  * \brief Prepare or reset a client context for a new connection.
2816  *
2817  * The `server_name` parameter is used to fill the SNI extension; the
2818  * X.509 "minimal" engine will also match that name against the server
2819  * names included in the server's certificate. If the parameter is
2820  * `NULL` then no SNI extension will be sent, and the X.509 "minimal"
2821  * engine (if used for server certificate validation) will not check
2822  * presence of any specific name in the received certificate.
2823  *
2824  * Therefore, setting the `server_name` to `NULL` shall be reserved
2825  * to cases where alternate or additional methods are used to ascertain
2826  * that the right server public key is used (e.g. a "known key" model).
2827  *
2828  * If `resume_session` is non-zero and the context was previously used
2829  * then the session parameters may be reused (depending on whether the
2830  * server previously sent a non-empty session ID, and accepts the session
2831  * resumption). The session parameters for session resumption can also
2832  * be set explicitly with `br_ssl_engine_set_session_parameters()`.
2833  *
2834  * On failure, the context is marked as failed, and this function
2835  * returns 0. A possible failure condition is when no initial entropy
2836  * was injected, and none could be obtained from the OS (either OS
2837  * randomness gathering is not supported, or it failed).
2838  *
2839  * \param cc               client context.
2840  * \param server_name      target server name, or `NULL`.
2841  * \param resume_session   non-zero to try session resumption.
2842  * \return  0 on failure, 1 on success.
2843  */
2844 int br_ssl_client_reset(br_ssl_client_context *cc,
2845 	const char *server_name, int resume_session);
2846 
2847 /**
2848  * \brief Forget any session in the context.
2849  *
2850  * This means that the next handshake that uses this context will
2851  * necessarily be a full handshake (this applies both to new connections
2852  * and to renegotiations).
2853  *
2854  * \param cc   client context.
2855  */
2856 static inline void
2857 br_ssl_client_forget_session(br_ssl_client_context *cc)
2858 {
2859 	cc->eng.session.session_id_len = 0;
2860 }
2861 
2862 /**
2863  * \brief Set client certificate chain and key (single RSA case).
2864  *
2865  * This function sets a client certificate chain, that the client will
2866  * send to the server whenever a client certificate is requested. This
2867  * certificate uses an RSA public key; the corresponding private key is
2868  * invoked for authentication. Trust anchor names sent by the server are
2869  * ignored.
2870  *
2871  * The provided chain and private key are linked in the client context;
2872  * they must remain valid as long as they may be used, i.e. normally
2873  * for the duration of the connection, since they might be invoked
2874  * again upon renegotiations.
2875  *
2876  * \param cc          SSL client context.
2877  * \param chain       client certificate chain (SSL order: EE comes first).
2878  * \param chain_len   client chain length (number of certificates).
2879  * \param sk          client private key.
2880  * \param irsasign    RSA signature implementation (PKCS#1 v1.5).
2881  */
2882 void br_ssl_client_set_single_rsa(br_ssl_client_context *cc,
2883 	const br_x509_certificate *chain, size_t chain_len,
2884 	const br_rsa_private_key *sk, br_rsa_pkcs1_sign irsasign);
2885 
2886 /*
2887  * \brief Set the client certificate chain and key (single EC case).
2888  *
2889  * This function sets a client certificate chain, that the client will
2890  * send to the server whenever a client certificate is requested. This
2891  * certificate uses an EC public key; the corresponding private key is
2892  * invoked for authentication. Trust anchor names sent by the server are
2893  * ignored.
2894  *
2895  * The provided chain and private key are linked in the client context;
2896  * they must remain valid as long as they may be used, i.e. normally
2897  * for the duration of the connection, since they might be invoked
2898  * again upon renegotiations.
2899  *
2900  * The `allowed_usages` is a combination of usages, namely
2901  * `BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`. The `BR_KEYTYPE_KEYX`
2902  * value allows full static ECDH, while the `BR_KEYTYPE_SIGN` value
2903  * allows ECDSA signatures. If ECDSA signatures are used, then an ECDSA
2904  * signature implementation must be provided; otherwise, the `iecdsa`
2905  * parameter may be 0.
2906  *
2907  * The `cert_issuer_key_type` value is either `BR_KEYTYPE_RSA` or
2908  * `BR_KEYTYPE_EC`; it is the type of the public key used the the CA
2909  * that issued (signed) the client certificate. That value is used with
2910  * full static ECDH: support of the certificate by the server depends
2911  * on how the certificate was signed. (Note: when using TLS 1.2, this
2912  * parameter is ignored; but its value matters for TLS 1.0 and 1.1.)
2913  *
2914  * \param cc                     server context.
2915  * \param chain                  server certificate chain to send.
2916  * \param chain_len              chain length (number of certificates).
2917  * \param sk                     server private key (EC).
2918  * \param allowed_usages         allowed private key usages.
2919  * \param cert_issuer_key_type   issuing CA's key type.
2920  * \param iec                    EC core implementation.
2921  * \param iecdsa                 ECDSA signature implementation ("asn1" format).
2922  */
2923 void br_ssl_client_set_single_ec(br_ssl_client_context *cc,
2924 	const br_x509_certificate *chain, size_t chain_len,
2925 	const br_ec_private_key *sk, unsigned allowed_usages,
2926 	unsigned cert_issuer_key_type,
2927 	const br_ec_impl *iec, br_ecdsa_sign iecdsa);
2928 
2929 /**
2930  * \brief Type for a "translated cipher suite", as an array of two
2931  * 16-bit integers.
2932  *
2933  * The first element is the cipher suite identifier (as used on the wire).
2934  * The second element is the concatenation of four 4-bit elements which
2935  * characterise the cipher suite contents. In most to least significant
2936  * order, these 4-bit elements are:
2937  *
2938  *   - Bits 12 to 15: key exchange + server key type
2939  *
2940  *     | val | symbolic constant        | suite type  | details                                          |
2941  *     | :-- | :----------------------- | :---------- | :----------------------------------------------- |
2942  *     |  0  | `BR_SSLKEYX_RSA`         | RSA         | RSA key exchange, key is RSA (encryption)        |
2943  *     |  1  | `BR_SSLKEYX_ECDHE_RSA`   | ECDHE_RSA   | ECDHE key exchange, key is RSA (signature)       |
2944  *     |  2  | `BR_SSLKEYX_ECDHE_ECDSA` | ECDHE_ECDSA | ECDHE key exchange, key is EC (signature)        |
2945  *     |  3  | `BR_SSLKEYX_ECDH_RSA`    | ECDH_RSA    | Key is EC (key exchange), cert signed with RSA   |
2946  *     |  4  | `BR_SSLKEYX_ECDH_ECDSA`  | ECDH_ECDSA  | Key is EC (key exchange), cert signed with ECDSA |
2947  *
2948  *   - Bits 8 to 11: symmetric encryption algorithm
2949  *
2950  *     | val | symbolic constant      | symmetric encryption | key strength (bits) |
2951  *     | :-- | :--------------------- | :------------------- | :------------------ |
2952  *     |  0  | `BR_SSLENC_3DES_CBC`   | 3DES/CBC             | 168                 |
2953  *     |  1  | `BR_SSLENC_AES128_CBC` | AES-128/CBC          | 128                 |
2954  *     |  2  | `BR_SSLENC_AES256_CBC` | AES-256/CBC          | 256                 |
2955  *     |  3  | `BR_SSLENC_AES128_GCM` | AES-128/GCM          | 128                 |
2956  *     |  4  | `BR_SSLENC_AES256_GCM` | AES-256/GCM          | 256                 |
2957  *     |  5  | `BR_SSLENC_CHACHA20`   | ChaCha20/Poly1305    | 256                 |
2958  *
2959  *   - Bits 4 to 7: MAC algorithm
2960  *
2961  *     | val | symbolic constant  | MAC type     | details                               |
2962  *     | :-- | :----------------- | :----------- | :------------------------------------ |
2963  *     |  0  | `BR_SSLMAC_AEAD`   | AEAD         | No dedicated MAC (encryption is AEAD) |
2964  *     |  2  | `BR_SSLMAC_SHA1`   | HMAC/SHA-1   | Value matches `br_sha1_ID`            |
2965  *     |  4  | `BR_SSLMAC_SHA256` | HMAC/SHA-256 | Value matches `br_sha256_ID`          |
2966  *     |  5  | `BR_SSLMAC_SHA384` | HMAC/SHA-384 | Value matches `br_sha384_ID`          |
2967  *
2968  *   - Bits 0 to 3: hash function for PRF when used with TLS-1.2
2969  *
2970  *     | val | symbolic constant  | hash function | details                              |
2971  *     | :-- | :----------------- | :------------ | :----------------------------------- |
2972  *     |  4  | `BR_SSLPRF_SHA256` | SHA-256       | Value matches `br_sha256_ID`         |
2973  *     |  5  | `BR_SSLPRF_SHA384` | SHA-384       | Value matches `br_sha384_ID`         |
2974  *
2975  * For instance, cipher suite `TLS_RSA_WITH_AES_128_GCM_SHA256` has
2976  * standard identifier 0x009C, and is translated to 0x0304, for, in
2977  * that order: RSA key exchange (0), AES-128/GCM (3), AEAD integrity (0),
2978  * SHA-256 in the TLS PRF (4).
2979  */
2980 typedef uint16_t br_suite_translated[2];
2981 
2982 #ifndef BR_DOXYGEN_IGNORE
2983 /*
2984  * Constants are already documented in the br_suite_translated type.
2985  */
2986 
2987 #define BR_SSLKEYX_RSA           0
2988 #define BR_SSLKEYX_ECDHE_RSA     1
2989 #define BR_SSLKEYX_ECDHE_ECDSA   2
2990 #define BR_SSLKEYX_ECDH_RSA      3
2991 #define BR_SSLKEYX_ECDH_ECDSA    4
2992 
2993 #define BR_SSLENC_3DES_CBC       0
2994 #define BR_SSLENC_AES128_CBC     1
2995 #define BR_SSLENC_AES256_CBC     2
2996 #define BR_SSLENC_AES128_GCM     3
2997 #define BR_SSLENC_AES256_GCM     4
2998 #define BR_SSLENC_CHACHA20       5
2999 
3000 #define BR_SSLMAC_AEAD           0
3001 #define BR_SSLMAC_SHA1           br_sha1_ID
3002 #define BR_SSLMAC_SHA256         br_sha256_ID
3003 #define BR_SSLMAC_SHA384         br_sha384_ID
3004 
3005 #define BR_SSLPRF_SHA256         br_sha256_ID
3006 #define BR_SSLPRF_SHA384         br_sha384_ID
3007 
3008 #endif
3009 
3010 /*
3011  * Pre-declaration for the SSL server context.
3012  */
3013 typedef struct br_ssl_server_context_ br_ssl_server_context;
3014 
3015 /**
3016  * \brief Type for the server policy choices, taken after analysis of
3017  * the client message (ClientHello).
3018  */
3019 typedef struct {
3020 	/**
3021 	 * \brief Cipher suite to use with that client.
3022 	 */
3023 	uint16_t cipher_suite;
3024 
3025 	/**
3026 	 * \brief Hash function or algorithm for signing the ServerKeyExchange.
3027 	 *
3028 	 * This parameter is ignored for `TLS_RSA_*` and `TLS_ECDH_*`
3029 	 * cipher suites; it is used only for `TLS_ECDHE_*` suites, in
3030 	 * which the server _signs_ the ephemeral EC Diffie-Hellman
3031 	 * parameters sent to the client.
3032 	 *
3033 	 * This identifier must be one of the following values:
3034 	 *
3035 	 *   - `0xFF00 + id`, where `id` is a hash function identifier
3036 	 *     (0 for MD5+SHA-1, or 2 to 6 for one of the SHA functions);
3037 	 *
3038 	 *   - a full 16-bit identifier, lower than `0xFF00`.
3039 	 *
3040 	 * If the first option is used, then the SSL engine will
3041 	 * compute the hash of the data that is to be signed, with the
3042 	 * designated hash function. The `do_sign()` method will be
3043 	 * invoked with that hash value provided in the the `data`
3044 	 * buffer.
3045 	 *
3046 	 * If the second option is used, then the SSL engine will NOT
3047 	 * compute a hash on the data; instead, it will provide the
3048 	 * to-be-signed data itself in `data`, i.e. the concatenation of
3049 	 * the client random, server random, and encoded ECDH
3050 	 * parameters. Furthermore, with TLS-1.2 and later, the 16-bit
3051 	 * identifier will be used "as is" in the protocol, in the
3052 	 * SignatureAndHashAlgorithm; for instance, `0x0401` stands for
3053 	 * RSA PKCS#1 v1.5 signature (the `01`) with SHA-256 as hash
3054 	 * function (the `04`).
3055 	 *
3056 	 * Take care that with TLS 1.0 and 1.1, the hash function is
3057 	 * constrainted by the protocol: RSA signature must use
3058 	 * MD5+SHA-1 (so use `0xFF00`), while ECDSA must use SHA-1
3059 	 * (`0xFF02`). Since TLS 1.0 and 1.1 don't include a
3060 	 * SignatureAndHashAlgorithm field in their ServerKeyExchange
3061 	 * messages, any value below `0xFF00` will be usable to send the
3062 	 * raw ServerKeyExchange data to the `do_sign()` callback, but
3063 	 * that callback must still follow the protocol requirements
3064 	 * when generating the signature.
3065 	 */
3066 	unsigned algo_id;
3067 
3068 	/**
3069 	 * \brief Certificate chain to send to the client.
3070 	 *
3071 	 * This is an array of `br_x509_certificate` objects, each
3072 	 * normally containing a DER-encoded certificate. The server
3073 	 * code does not try to decode these elements.
3074 	 */
3075 	const br_x509_certificate *chain;
3076 
3077 	/**
3078 	 * \brief Certificate chain length (number of certificates).
3079 	 */
3080 	size_t chain_len;
3081 
3082 } br_ssl_server_choices;
3083 
3084 /**
3085  * \brief Class type for a policy handler (server side).
3086  *
3087  * A policy handler selects the policy parameters for a connection
3088  * (cipher suite and other algorithms, and certificate chain to send to
3089  * the client); it also performs the server-side computations involving
3090  * its permanent private key.
3091  *
3092  * The SSL server engine will invoke first `choose()`, once the
3093  * ClientHello message has been received, then either `do_keyx()`
3094  * `do_sign()`, depending on the cipher suite.
3095  */
3096 typedef struct br_ssl_server_policy_class_ br_ssl_server_policy_class;
3097 struct br_ssl_server_policy_class_ {
3098 	/**
3099 	 * \brief Context size (in bytes).
3100 	 */
3101 	size_t context_size;
3102 
3103 	/**
3104 	 * \brief Select algorithms and certificates for this connection.
3105 	 *
3106 	 * This callback function shall fill the provided `choices`
3107 	 * structure with the policy choices for this connection. This
3108 	 * entails selecting the cipher suite, hash function for signing
3109 	 * the ServerKeyExchange (applicable only to ECDHE cipher suites),
3110 	 * and certificate chain to send.
3111 	 *
3112 	 * The callback receives a pointer to the server context that
3113 	 * contains the relevant data. In particular, the functions
3114 	 * `br_ssl_server_get_client_suites()`,
3115 	 * `br_ssl_server_get_client_hashes()` and
3116 	 * `br_ssl_server_get_client_curves()` can be used to obtain
3117 	 * the cipher suites, hash functions and elliptic curves
3118 	 * supported by both the client and server, respectively. The
3119 	 * `br_ssl_engine_get_version()` and `br_ssl_engine_get_server_name()`
3120 	 * functions yield the protocol version and requested server name
3121 	 * (SNI), respectively.
3122 	 *
3123 	 * This function may modify its context structure (`pctx`) in
3124 	 * arbitrary ways to keep track of its own choices.
3125 	 *
3126 	 * This function shall return 1 if appropriate policy choices
3127 	 * could be made, or 0 if this connection cannot be pursued.
3128 	 *
3129 	 * \param pctx      policy context.
3130 	 * \param cc        SSL server context.
3131 	 * \param choices   destination structure for the policy choices.
3132 	 * \return  1 on success, 0 on error.
3133 	 */
3134 	int (*choose)(const br_ssl_server_policy_class **pctx,
3135 		const br_ssl_server_context *cc,
3136 		br_ssl_server_choices *choices);
3137 
3138 	/**
3139 	 * \brief Perform key exchange (server part).
3140 	 *
3141 	 * This callback is invoked to perform the server-side cryptographic
3142 	 * operation for a key exchange that is not ECDHE. This callback
3143 	 * uses the private key.
3144 	 *
3145 	 * **For RSA key exchange**, the provided `data` (of length `*len`
3146 	 * bytes) shall be decrypted with the server's private key, and
3147 	 * the 48-byte premaster secret copied back to the first 48 bytes
3148 	 * of `data`.
3149 	 *
3150 	 *   - The caller makes sure that `*len` is at least 59 bytes.
3151 	 *
3152 	 *   - This callback MUST check that the provided length matches
3153 	 *     that of the key modulus; it shall report an error otherwise.
3154 	 *
3155 	 *   - If the length matches that of the RSA key modulus, then
3156 	 *     processing MUST be constant-time, even if decryption fails,
3157 	 *     or the padding is incorrect, or the plaintext message length
3158 	 *     is not exactly 48 bytes.
3159 	 *
3160 	 *   - This callback needs not check the two first bytes of the
3161 	 *     obtained pre-master secret (the caller will do that).
3162 	 *
3163 	 *   - If an error is reported (0), then what the callback put
3164 	 *     in the first 48 bytes of `data` is unimportant (the caller
3165 	 *     will use random bytes instead).
3166 	 *
3167 	 * **For ECDH key exchange**, the provided `data` (of length `*len`
3168 	 * bytes) is the elliptic curve point from the client. The
3169 	 * callback shall multiply it with its private key, and store
3170 	 * the resulting X coordinate in `data`, starting at offset 0,
3171 	 * and set `*len` to the length of the X coordinate.
3172 	 *
3173 	 *   - If the input array does not have the proper length for
3174 	 *     an encoded curve point, then an error (0) shall be reported.
3175 	 *
3176 	 *   - If the input array has the proper length, then processing
3177 	 *     MUST be constant-time, even if the data is not a valid
3178 	 *     encoded point.
3179 	 *
3180 	 *   - This callback MUST check that the input point is valid.
3181 	 *
3182 	 * Returned value is 1 on success, 0 on error.
3183 	 *
3184 	 * \param pctx   policy context.
3185 	 * \param data   key exchange data from the client.
3186 	 * \param len    key exchange data length (in bytes).
3187 	 * \return  1 on success, 0 on error.
3188 	 */
3189 	uint32_t (*do_keyx)(const br_ssl_server_policy_class **pctx,
3190 		unsigned char *data, size_t *len);
3191 
3192 	/**
3193 	 * \brief Perform a signature (for a ServerKeyExchange message).
3194 	 *
3195 	 * This callback function is invoked for ECDHE cipher suites. On
3196 	 * input, the hash value or message to sign is in `data`, of
3197 	 * size `hv_len`; the involved hash function or algorithm is
3198 	 * identified by `algo_id`. The signature shall be computed and
3199 	 * written back into `data`; the total size of that buffer is
3200 	 * `len` bytes.
3201 	 *
3202 	 * This callback shall verify that the signature length does not
3203 	 * exceed `len` bytes, and abstain from writing the signature if
3204 	 * it does not fit.
3205 	 *
3206 	 * The `algo_id` value matches that which was written in the
3207 	 * `choices` structures by the `choose()` callback. This will be
3208 	 * one of the following:
3209 	 *
3210 	 *   - `0xFF00 + id` for a hash function identifier `id`. In
3211 	 *     that case, the `data` buffer contains a hash value
3212 	 *     already computed over the data that is to be signed,
3213 	 *     of length `hv_len`. The `id` may be 0 to designate the
3214 	 *     special MD5+SHA-1 concatenation (old-style RSA signing).
3215 	 *
3216 	 *   - Another value, lower than `0xFF00`. The `data` buffer
3217 	 *     then contains the raw, non-hashed data to be signed
3218 	 *     (concatenation of the client and server randoms and
3219 	 *     ECDH parameters). The callback is responsible to apply
3220 	 *     any relevant hashing as part of the signing process.
3221 	 *
3222 	 * Returned value is the signature length (in bytes), or 0 on error.
3223 	 *
3224 	 * \param pctx      policy context.
3225 	 * \param algo_id   hash function / algorithm identifier.
3226 	 * \param data      input/output buffer (message/hash, then signature).
3227 	 * \param hv_len    hash value or message length (in bytes).
3228 	 * \param len       total buffer length (in bytes).
3229 	 * \return  signature length (in bytes) on success, or 0 on error.
3230 	 */
3231 	size_t (*do_sign)(const br_ssl_server_policy_class **pctx,
3232 		unsigned algo_id,
3233 		unsigned char *data, size_t hv_len, size_t len);
3234 };
3235 
3236 /**
3237  * \brief A single-chain RSA policy handler.
3238  *
3239  * This policy context uses a single certificate chain, and a RSA
3240  * private key. The context can be restricted to only signatures or
3241  * only key exchange.
3242  *
3243  * Apart from the first field (vtable pointer), its contents are
3244  * opaque and shall not be accessed directly.
3245  */
3246 typedef struct {
3247 	/** \brief Pointer to vtable. */
3248 	const br_ssl_server_policy_class *vtable;
3249 #ifndef BR_DOXYGEN_IGNORE
3250 	const br_x509_certificate *chain;
3251 	size_t chain_len;
3252 	const br_rsa_private_key *sk;
3253 	unsigned allowed_usages;
3254 	br_rsa_private irsacore;
3255 	br_rsa_pkcs1_sign irsasign;
3256 #endif
3257 } br_ssl_server_policy_rsa_context;
3258 
3259 /**
3260  * \brief A single-chain EC policy handler.
3261  *
3262  * This policy context uses a single certificate chain, and an EC
3263  * private key. The context can be restricted to only signatures or
3264  * only key exchange.
3265  *
3266  * Due to how TLS is defined, this context must be made aware whether
3267  * the server certificate was itself signed with RSA or ECDSA. The code
3268  * does not try to decode the certificate to obtain that information.
3269  *
3270  * Apart from the first field (vtable pointer), its contents are
3271  * opaque and shall not be accessed directly.
3272  */
3273 typedef struct {
3274 	/** \brief Pointer to vtable. */
3275 	const br_ssl_server_policy_class *vtable;
3276 #ifndef BR_DOXYGEN_IGNORE
3277 	const br_x509_certificate *chain;
3278 	size_t chain_len;
3279 	const br_ec_private_key *sk;
3280 	unsigned allowed_usages;
3281 	unsigned cert_issuer_key_type;
3282 	const br_multihash_context *mhash;
3283 	const br_ec_impl *iec;
3284 	br_ecdsa_sign iecdsa;
3285 #endif
3286 } br_ssl_server_policy_ec_context;
3287 
3288 /**
3289  * \brief Class type for a session parameter cache.
3290  *
3291  * Session parameters are saved in the cache with `save()`, and
3292  * retrieved with `load()`. The cache implementation can apply any
3293  * storage and eviction strategy that it sees fit. The SSL server
3294  * context that performs the request is provided, so that its
3295  * functionalities may be used by the implementation (e.g. hash
3296  * functions or random number generation).
3297  */
3298 typedef struct br_ssl_session_cache_class_ br_ssl_session_cache_class;
3299 struct br_ssl_session_cache_class_ {
3300 	/**
3301 	 * \brief Context size (in bytes).
3302 	 */
3303 	size_t context_size;
3304 
3305 	/**
3306 	 * \brief Record a session.
3307 	 *
3308 	 * This callback should record the provided session parameters.
3309 	 * The `params` structure is transient, so its contents shall
3310 	 * be copied into the cache. The session ID has been randomly
3311 	 * generated and always has length exactly 32 bytes.
3312 	 *
3313 	 * \param ctx          session cache context.
3314 	 * \param server_ctx   SSL server context.
3315 	 * \param params       session parameters to save.
3316 	 */
3317 	void (*save)(const br_ssl_session_cache_class **ctx,
3318 		br_ssl_server_context *server_ctx,
3319 		const br_ssl_session_parameters *params);
3320 
3321 	/**
3322 	 * \brief Lookup a session in the cache.
3323 	 *
3324 	 * The session ID to lookup is in `params` and always has length
3325 	 * exactly 32 bytes. If the session parameters are found in the
3326 	 * cache, then the parameters shall be copied into the `params`
3327 	 * structure. Returned value is 1 on successful lookup, 0
3328 	 * otherwise.
3329 	 *
3330 	 * \param ctx          session cache context.
3331 	 * \param server_ctx   SSL server context.
3332 	 * \param params       destination for session parameters.
3333 	 * \return  1 if found, 0 otherwise.
3334 	 */
3335 	int (*load)(const br_ssl_session_cache_class **ctx,
3336 		br_ssl_server_context *server_ctx,
3337 		br_ssl_session_parameters *params);
3338 };
3339 
3340 /**
3341  * \brief Context for a basic cache system.
3342  *
3343  * The system stores session parameters in a buffer provided at
3344  * initialisation time. Each entry uses exactly 100 bytes, and
3345  * buffer sizes up to 4294967295 bytes are supported.
3346  *
3347  * Entries are evicted with a LRU (Least Recently Used) policy. A
3348  * search tree is maintained to keep lookups fast even with large
3349  * caches.
3350  *
3351  * Apart from the first field (vtable pointer), the structure
3352  * contents are opaque and shall not be accessed directly.
3353  */
3354 typedef struct {
3355 	/** \brief Pointer to vtable. */
3356 	const br_ssl_session_cache_class *vtable;
3357 #ifndef BR_DOXYGEN_IGNORE
3358 	unsigned char *store;
3359 	size_t store_len, store_ptr;
3360 	unsigned char index_key[32];
3361 	const br_hash_class *hash;
3362 	int init_done;
3363 	uint32_t head, tail, root;
3364 #endif
3365 } br_ssl_session_cache_lru;
3366 
3367 /**
3368  * \brief Initialise a LRU session cache with the provided storage space.
3369  *
3370  * The provided storage space must remain valid as long as the cache
3371  * is used. Arbitrary lengths are supported, up to 4294967295 bytes;
3372  * each entry uses up exactly 100 bytes.
3373  *
3374  * \param cc          session cache context.
3375  * \param store       storage space for cached entries.
3376  * \param store_len   storage space length (in bytes).
3377  */
3378 void br_ssl_session_cache_lru_init(br_ssl_session_cache_lru *cc,
3379 	unsigned char *store, size_t store_len);
3380 
3381 /**
3382  * \brief Forget an entry in an LRU session cache.
3383  *
3384  * The session cache context must have been initialised. The entry
3385  * with the provided session ID (of exactly 32 bytes) is looked for
3386  * in the cache; if located, it is disabled.
3387  *
3388  * \param cc   session cache context.
3389  * \param id   session ID to forget.
3390  */
3391 void br_ssl_session_cache_lru_forget(
3392 	br_ssl_session_cache_lru *cc, const unsigned char *id);
3393 
3394 /**
3395  * \brief Context structure for a SSL server.
3396  *
3397  * The first field (called `eng`) is the SSL engine; all functions that
3398  * work on a `br_ssl_engine_context` structure shall take as parameter
3399  * a pointer to that field. The other structure fields are opaque and
3400  * must not be accessed directly.
3401  */
3402 struct br_ssl_server_context_ {
3403 	/**
3404 	 * \brief The encapsulated engine context.
3405 	 */
3406 	br_ssl_engine_context eng;
3407 
3408 #ifndef BR_DOXYGEN_IGNORE
3409 	/*
3410 	 * Maximum version from the client.
3411 	 */
3412 	uint16_t client_max_version;
3413 
3414 	/*
3415 	 * Session cache.
3416 	 */
3417 	const br_ssl_session_cache_class **cache_vtable;
3418 
3419 	/*
3420 	 * Translated cipher suites supported by the client. The list
3421 	 * is trimmed to include only the cipher suites that the
3422 	 * server also supports; they are in the same order as in the
3423 	 * client message.
3424 	 */
3425 	br_suite_translated client_suites[BR_MAX_CIPHER_SUITES];
3426 	unsigned char client_suites_num;
3427 
3428 	/*
3429 	 * Hash functions supported by the client, with ECDSA and RSA
3430 	 * (bit mask). For hash function with id 'x', set bit index is
3431 	 * x for RSA, x+8 for ECDSA. For newer algorithms, with ID
3432 	 * 0x08**, bit 16+k is set for algorithm 0x0800+k.
3433 	 */
3434 	uint32_t hashes;
3435 
3436 	/*
3437 	 * Curves supported by the client (bit mask, for named curves).
3438 	 */
3439 	uint32_t curves;
3440 
3441 	/*
3442 	 * Context for chain handler.
3443 	 */
3444 	const br_ssl_server_policy_class **policy_vtable;
3445 	uint16_t sign_hash_id;
3446 
3447 	/*
3448 	 * For the core handlers, thus avoiding (in most cases) the
3449 	 * need for an externally provided policy context.
3450 	 */
3451 	union {
3452 		const br_ssl_server_policy_class *vtable;
3453 		br_ssl_server_policy_rsa_context single_rsa;
3454 		br_ssl_server_policy_ec_context single_ec;
3455 	} chain_handler;
3456 
3457 	/*
3458 	 * Buffer for the ECDHE private key.
3459 	 */
3460 	unsigned char ecdhe_key[70];
3461 	size_t ecdhe_key_len;
3462 
3463 	/*
3464 	 * Trust anchor names for client authentication. "ta_names" and
3465 	 * "tas" cannot be both non-NULL.
3466 	 */
3467 	const br_x500_name *ta_names;
3468 	const br_x509_trust_anchor *tas;
3469 	size_t num_tas;
3470 	size_t cur_dn_index;
3471 	const unsigned char *cur_dn;
3472 	size_t cur_dn_len;
3473 
3474 	/*
3475 	 * Buffer for the hash value computed over all handshake messages
3476 	 * prior to CertificateVerify, and identifier for the hash function.
3477 	 */
3478 	unsigned char hash_CV[64];
3479 	size_t hash_CV_len;
3480 	int hash_CV_id;
3481 
3482 	/*
3483 	 * Server-specific implementations.
3484 	 * (none for now)
3485 	 */
3486 #endif
3487 };
3488 
3489 /*
3490  * Each br_ssl_server_init_xxx() function sets the list of supported
3491  * cipher suites and used implementations, as specified by the profile
3492  * name 'xxx'. Defined profile names are:
3493  *
3494  *    full_rsa    all supported algorithm, server key type is RSA
3495  *    full_ec     all supported algorithm, server key type is EC
3496  *    TODO: add other profiles
3497  *
3498  * Naming scheme for "minimal" profiles: min123
3499  *
3500  * -- character 1: key exchange
3501  *      r = RSA
3502  *      e = ECDHE_RSA
3503  *      f = ECDHE_ECDSA
3504  *      u = ECDH_RSA
3505  *      v = ECDH_ECDSA
3506  * -- character 2: version / PRF
3507  *      0 = TLS 1.0 / 1.1 with MD5+SHA-1
3508  *      2 = TLS 1.2 with SHA-256
3509  *      3 = TLS 1.2 with SHA-384
3510  * -- character 3: encryption
3511  *      a = AES/CBC
3512  *      d = 3DES/CBC
3513  *      g = AES/GCM
3514  *      c = ChaCha20+Poly1305
3515  */
3516 
3517 /**
3518  * \brief SSL server profile: full_rsa.
3519  *
3520  * This function initialises the provided SSL server context with
3521  * all supported algorithms and cipher suites that rely on a RSA
3522  * key pair.
3523  *
3524  * \param cc          server context to initialise.
3525  * \param chain       server certificate chain.
3526  * \param chain_len   certificate chain length (number of certificate).
3527  * \param sk          RSA private key.
3528  */
3529 void br_ssl_server_init_full_rsa(br_ssl_server_context *cc,
3530 	const br_x509_certificate *chain, size_t chain_len,
3531 	const br_rsa_private_key *sk);
3532 
3533 /**
3534  * \brief SSL server profile: full_ec.
3535  *
3536  * This function initialises the provided SSL server context with
3537  * all supported algorithms and cipher suites that rely on an EC
3538  * key pair.
3539  *
3540  * The key type of the CA that issued the server's certificate must
3541  * be provided, since it matters for ECDH cipher suites (ECDH_RSA
3542  * suites require a RSA-powered CA). The key type is either
3543  * `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`.
3544  *
3545  * \param cc                     server context to initialise.
3546  * \param chain                  server certificate chain.
3547  * \param chain_len              chain length (number of certificates).
3548  * \param cert_issuer_key_type   certificate issuer's key type.
3549  * \param sk                     EC private key.
3550  */
3551 void br_ssl_server_init_full_ec(br_ssl_server_context *cc,
3552 	const br_x509_certificate *chain, size_t chain_len,
3553 	unsigned cert_issuer_key_type, const br_ec_private_key *sk);
3554 
3555 /**
3556  * \brief SSL server profile: minr2g.
3557  *
3558  * This profile uses only TLS_RSA_WITH_AES_128_GCM_SHA256. Server key is
3559  * RSA, and RSA key exchange is used (not forward secure, but uses little
3560  * CPU in the client).
3561  *
3562  * \param cc          server context to initialise.
3563  * \param chain       server certificate chain.
3564  * \param chain_len   certificate chain length (number of certificate).
3565  * \param sk          RSA private key.
3566  */
3567 void br_ssl_server_init_minr2g(br_ssl_server_context *cc,
3568 	const br_x509_certificate *chain, size_t chain_len,
3569 	const br_rsa_private_key *sk);
3570 
3571 /**
3572  * \brief SSL server profile: mine2g.
3573  *
3574  * This profile uses only TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Server key
3575  * is RSA, and ECDHE key exchange is used. This suite provides forward
3576  * security, with a higher CPU expense on the client, and a somewhat
3577  * larger code footprint (compared to "minr2g").
3578  *
3579  * \param cc          server context to initialise.
3580  * \param chain       server certificate chain.
3581  * \param chain_len   certificate chain length (number of certificate).
3582  * \param sk          RSA private key.
3583  */
3584 void br_ssl_server_init_mine2g(br_ssl_server_context *cc,
3585 	const br_x509_certificate *chain, size_t chain_len,
3586 	const br_rsa_private_key *sk);
3587 
3588 /**
3589  * \brief SSL server profile: minf2g.
3590  *
3591  * This profile uses only TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
3592  * Server key is EC, and ECDHE key exchange is used. This suite provides
3593  * forward security, with a higher CPU expense on the client and server
3594  * (by a factor of about 3 to 4), and a somewhat larger code footprint
3595  * (compared to "minu2g" and "minv2g").
3596  *
3597  * \param cc          server context to initialise.
3598  * \param chain       server certificate chain.
3599  * \param chain_len   certificate chain length (number of certificate).
3600  * \param sk          EC private key.
3601  */
3602 void br_ssl_server_init_minf2g(br_ssl_server_context *cc,
3603 	const br_x509_certificate *chain, size_t chain_len,
3604 	const br_ec_private_key *sk);
3605 
3606 /**
3607  * \brief SSL server profile: minu2g.
3608  *
3609  * This profile uses only TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256.
3610  * Server key is EC, and ECDH key exchange is used; the issuing CA used
3611  * a RSA key.
3612  *
3613  * The "minu2g" and "minv2g" profiles do not provide forward secrecy,
3614  * but are the lightest on the server (for CPU usage), and are rather
3615  * inexpensive on the client as well.
3616  *
3617  * \param cc          server context to initialise.
3618  * \param chain       server certificate chain.
3619  * \param chain_len   certificate chain length (number of certificate).
3620  * \param sk          EC private key.
3621  */
3622 void br_ssl_server_init_minu2g(br_ssl_server_context *cc,
3623 	const br_x509_certificate *chain, size_t chain_len,
3624 	const br_ec_private_key *sk);
3625 
3626 /**
3627  * \brief SSL server profile: minv2g.
3628  *
3629  * This profile uses only TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256.
3630  * Server key is EC, and ECDH key exchange is used; the issuing CA used
3631  * an EC key.
3632  *
3633  * The "minu2g" and "minv2g" profiles do not provide forward secrecy,
3634  * but are the lightest on the server (for CPU usage), and are rather
3635  * inexpensive on the client as well.
3636  *
3637  * \param cc          server context to initialise.
3638  * \param chain       server certificate chain.
3639  * \param chain_len   certificate chain length (number of certificate).
3640  * \param sk          EC private key.
3641  */
3642 void br_ssl_server_init_minv2g(br_ssl_server_context *cc,
3643 	const br_x509_certificate *chain, size_t chain_len,
3644 	const br_ec_private_key *sk);
3645 
3646 /**
3647  * \brief SSL server profile: mine2c.
3648  *
3649  * This profile uses only TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256.
3650  * Server key is RSA, and ECDHE key exchange is used. This suite
3651  * provides forward security.
3652  *
3653  * \param cc          server context to initialise.
3654  * \param chain       server certificate chain.
3655  * \param chain_len   certificate chain length (number of certificate).
3656  * \param sk          RSA private key.
3657  */
3658 void br_ssl_server_init_mine2c(br_ssl_server_context *cc,
3659 	const br_x509_certificate *chain, size_t chain_len,
3660 	const br_rsa_private_key *sk);
3661 
3662 /**
3663  * \brief SSL server profile: minf2c.
3664  *
3665  * This profile uses only TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256.
3666  * Server key is EC, and ECDHE key exchange is used. This suite provides
3667  * forward security.
3668  *
3669  * \param cc          server context to initialise.
3670  * \param chain       server certificate chain.
3671  * \param chain_len   certificate chain length (number of certificate).
3672  * \param sk          EC private key.
3673  */
3674 void br_ssl_server_init_minf2c(br_ssl_server_context *cc,
3675 	const br_x509_certificate *chain, size_t chain_len,
3676 	const br_ec_private_key *sk);
3677 
3678 /**
3679  * \brief Get the supported client suites.
3680  *
3681  * This function shall be called only after the ClientHello has been
3682  * processed, typically from the policy engine. The returned array
3683  * contains the cipher suites that are supported by both the client
3684  * and the server; these suites are in client preference order, unless
3685  * the `BR_OPT_ENFORCE_SERVER_PREFERENCES` flag was set, in which case
3686  * they are in server preference order.
3687  *
3688  * The suites are _translated_, which means that each suite is given
3689  * as two 16-bit integers: the standard suite identifier, and its
3690  * translated version, broken down into its individual components,
3691  * as explained with the `br_suite_translated` type.
3692  *
3693  * The returned array is allocated in the context and will be rewritten
3694  * by each handshake.
3695  *
3696  * \param cc    server context.
3697  * \param num   receives the array size (number of suites).
3698  * \return  the translated common cipher suites, in preference order.
3699  */
3700 static inline const br_suite_translated *
3701 br_ssl_server_get_client_suites(const br_ssl_server_context *cc, size_t *num)
3702 {
3703 	*num = cc->client_suites_num;
3704 	return cc->client_suites;
3705 }
3706 
3707 /**
3708  * \brief Get the hash functions and signature algorithms supported by
3709  * the client.
3710  *
3711  * This value is a bit field:
3712  *
3713  *   - If RSA (PKCS#1 v1.5) is supported with hash function of ID `x`,
3714  *     then bit `x` is set (hash function ID is 0 for the special MD5+SHA-1,
3715  *     or 2 to 6 for the SHA family).
3716  *
3717  *   - If ECDSA is supported with hash function of ID `x`, then bit `8+x`
3718  *     is set.
3719  *
3720  *   - Newer algorithms are symbolic 16-bit identifiers that do not
3721  *     represent signature algorithm and hash function separately. If
3722  *     the TLS-level identifier is `0x0800+x` for a `x` in the 0..15
3723  *     range, then bit `16+x` is set.
3724  *
3725  * "New algorithms" are currently defined only in draft documents, so
3726  * this support is subject to possible change. Right now (early 2017),
3727  * this maps ed25519 (EdDSA on Curve25519) to bit 23, and ed448 (EdDSA
3728  * on Curve448) to bit 24. If the identifiers on the wire change in
3729  * future document, then the decoding mechanism in BearSSL will be
3730  * amended to keep mapping ed25519 and ed448 on bits 23 and 24,
3731  * respectively. Mapping of other new algorithms (e.g. RSA/PSS) is not
3732  * guaranteed yet.
3733  *
3734  * \param cc   server context.
3735  * \return  the client-supported hash functions and signature algorithms.
3736  */
3737 static inline uint32_t
3738 br_ssl_server_get_client_hashes(const br_ssl_server_context *cc)
3739 {
3740 	return cc->hashes;
3741 }
3742 
3743 /**
3744  * \brief Get the elliptic curves supported by the client.
3745  *
3746  * This is a bit field (bit x is set if curve of ID x is supported).
3747  *
3748  * \param cc   server context.
3749  * \return  the client-supported elliptic curves.
3750  */
3751 static inline uint32_t
3752 br_ssl_server_get_client_curves(const br_ssl_server_context *cc)
3753 {
3754 	return cc->curves;
3755 }
3756 
3757 /**
3758  * \brief Clear the complete contents of a SSL server context.
3759  *
3760  * Everything is cleared, including the reference to the configured buffer,
3761  * implementations, cipher suites and state. This is a preparatory step
3762  * to assembling a custom profile.
3763  *
3764  * \param cc   server context to clear.
3765  */
3766 void br_ssl_server_zero(br_ssl_server_context *cc);
3767 
3768 /**
3769  * \brief Set an externally provided policy context.
3770  *
3771  * The policy context's methods are invoked to decide the cipher suite
3772  * and certificate chain, and to perform operations involving the server's
3773  * private key.
3774  *
3775  * \param cc     server context.
3776  * \param pctx   policy context (pointer to its vtable field).
3777  */
3778 static inline void
3779 br_ssl_server_set_policy(br_ssl_server_context *cc,
3780 	const br_ssl_server_policy_class **pctx)
3781 {
3782 	cc->policy_vtable = pctx;
3783 }
3784 
3785 /**
3786  * \brief Set the server certificate chain and key (single RSA case).
3787  *
3788  * This function uses a policy context included in the server context.
3789  * It configures use of a single server certificate chain with a RSA
3790  * private key. The `allowed_usages` is a combination of usages, namely
3791  * `BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`; this enables or disables
3792  * the corresponding cipher suites (i.e. `TLS_RSA_*` use the RSA key for
3793  * key exchange, while `TLS_ECDHE_RSA_*` use the RSA key for signatures).
3794  *
3795  * \param cc               server context.
3796  * \param chain            server certificate chain to send to the client.
3797  * \param chain_len        chain length (number of certificates).
3798  * \param sk               server private key (RSA).
3799  * \param allowed_usages   allowed private key usages.
3800  * \param irsacore         RSA core implementation.
3801  * \param irsasign         RSA signature implementation (PKCS#1 v1.5).
3802  */
3803 void br_ssl_server_set_single_rsa(br_ssl_server_context *cc,
3804 	const br_x509_certificate *chain, size_t chain_len,
3805 	const br_rsa_private_key *sk, unsigned allowed_usages,
3806 	br_rsa_private irsacore, br_rsa_pkcs1_sign irsasign);
3807 
3808 /**
3809  * \brief Set the server certificate chain and key (single EC case).
3810  *
3811  * This function uses a policy context included in the server context.
3812  * It configures use of a single server certificate chain with an EC
3813  * private key. The `allowed_usages` is a combination of usages, namely
3814  * `BR_KEYTYPE_KEYX` and/or `BR_KEYTYPE_SIGN`; this enables or disables
3815  * the corresponding cipher suites (i.e. `TLS_ECDH_*` use the EC key for
3816  * key exchange, while `TLS_ECDHE_ECDSA_*` use the EC key for signatures).
3817  *
3818  * In order to support `TLS_ECDH_*` cipher suites (non-ephemeral ECDH),
3819  * the algorithm type of the key used by the issuing CA to sign the
3820  * server's certificate must be provided, as `cert_issuer_key_type`
3821  * parameter (this value is either `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC`).
3822  *
3823  * \param cc                     server context.
3824  * \param chain                  server certificate chain to send.
3825  * \param chain_len              chain length (number of certificates).
3826  * \param sk                     server private key (EC).
3827  * \param allowed_usages         allowed private key usages.
3828  * \param cert_issuer_key_type   issuing CA's key type.
3829  * \param iec                    EC core implementation.
3830  * \param iecdsa                 ECDSA signature implementation ("asn1" format).
3831  */
3832 void br_ssl_server_set_single_ec(br_ssl_server_context *cc,
3833 	const br_x509_certificate *chain, size_t chain_len,
3834 	const br_ec_private_key *sk, unsigned allowed_usages,
3835 	unsigned cert_issuer_key_type,
3836 	const br_ec_impl *iec, br_ecdsa_sign iecdsa);
3837 
3838 /**
3839  * \brief Activate client certificate authentication.
3840  *
3841  * The trust anchor encoded X.500 names (DN) to send to the client are
3842  * provided. A client certificate will be requested and validated through
3843  * the X.509 validator configured in the SSL engine. If `num` is 0, then
3844  * client certificate authentication is disabled.
3845  *
3846  * If the client does not send a certificate, or on validation failure,
3847  * the handshake aborts. Unauthenticated clients can be tolerated by
3848  * setting the `BR_OPT_TOLERATE_NO_CLIENT_AUTH` flag.
3849  *
3850  * The provided array is linked in, not copied, so that pointer must
3851  * remain valid as long as anchor names may be used.
3852  *
3853  * \param cc         server context.
3854  * \param ta_names   encoded trust anchor names.
3855  * \param num        number of encoded trust anchor names.
3856  */
3857 static inline void
3858 br_ssl_server_set_trust_anchor_names(br_ssl_server_context *cc,
3859 	const br_x500_name *ta_names, size_t num)
3860 {
3861 	cc->ta_names = ta_names;
3862 	cc->tas = NULL;
3863 	cc->num_tas = num;
3864 }
3865 
3866 /**
3867  * \brief Activate client certificate authentication.
3868  *
3869  * This is a variant for `br_ssl_server_set_trust_anchor_names()`: the
3870  * trust anchor names are provided not as an array of stand-alone names
3871  * (`br_x500_name` structures), but as an array of trust anchors
3872  * (`br_x509_trust_anchor` structures). The server engine itself will
3873  * only use the `dn` field of each trust anchor. This is meant to allow
3874  * defining a single array of trust anchors, to be used here and in the
3875  * X.509 validation engine itself.
3876  *
3877  * The provided array is linked in, not copied, so that pointer must
3878  * remain valid as long as anchor names may be used.
3879  *
3880  * \param cc    server context.
3881  * \param tas   trust anchors (only names are used).
3882  * \param num   number of trust anchors.
3883  */
3884 static inline void
3885 br_ssl_server_set_trust_anchor_names_alt(br_ssl_server_context *cc,
3886 	const br_x509_trust_anchor *tas, size_t num)
3887 {
3888 	cc->ta_names = NULL;
3889 	cc->tas = tas;
3890 	cc->num_tas = num;
3891 }
3892 
3893 /**
3894  * \brief Configure the cache for session parameters.
3895  *
3896  * The cache context is provided as a pointer to its first field (vtable
3897  * pointer).
3898  *
3899  * \param cc       server context.
3900  * \param vtable   session cache context.
3901  */
3902 static inline void
3903 br_ssl_server_set_cache(br_ssl_server_context *cc,
3904 	const br_ssl_session_cache_class **vtable)
3905 {
3906 	cc->cache_vtable = vtable;
3907 }
3908 
3909 /**
3910  * \brief Prepare or reset a server context for handling an incoming client.
3911  *
3912  * \param cc   server context.
3913  * \return  1 on success, 0 on error.
3914  */
3915 int br_ssl_server_reset(br_ssl_server_context *cc);
3916 
3917 /* ===================================================================== */
3918 
3919 /*
3920  * Context for the simplified I/O context. The transport medium is accessed
3921  * through the low_read() and low_write() callback functions, each with
3922  * its own opaque context pointer.
3923  *
3924  *  low_read()    read some bytes, at most 'len' bytes, into data[]. The
3925  *                returned value is the number of read bytes, or -1 on error.
3926  *                The 'len' parameter is guaranteed never to exceed 20000,
3927  *                so the length always fits in an 'int' on all platforms.
3928  *
3929  *  low_write()   write up to 'len' bytes, to be read from data[]. The
3930  *                returned value is the number of written bytes, or -1 on
3931  *                error. The 'len' parameter is guaranteed never to exceed
3932  *                20000, so the length always fits in an 'int' on all
3933  *                parameters.
3934  *
3935  * A socket closure (if the transport medium is a socket) should be reported
3936  * as an error (-1). The callbacks shall endeavour to block until at least
3937  * one byte can be read or written; a callback returning 0 at times is
3938  * acceptable, but this normally leads to the callback being immediately
3939  * called again, so the callback should at least always try to block for
3940  * some time if no I/O can take place.
3941  *
3942  * The SSL engine naturally applies some buffering, so the callbacks need
3943  * not apply buffers of their own.
3944  */
3945 /**
3946  * \brief Context structure for the simplified SSL I/O wrapper.
3947  *
3948  * This structure is initialised with `br_sslio_init()`. Its contents
3949  * are opaque and shall not be accessed directly.
3950  */
3951 typedef struct {
3952 #ifndef BR_DOXYGEN_IGNORE
3953 	br_ssl_engine_context *engine;
3954 	int (*low_read)(void *read_context,
3955 		unsigned char *data, size_t len);
3956 	void *read_context;
3957 	int (*low_write)(void *write_context,
3958 		const unsigned char *data, size_t len);
3959 	void *write_context;
3960 #endif
3961 } br_sslio_context;
3962 
3963 /**
3964  * \brief Initialise a simplified I/O wrapper context.
3965  *
3966  * The simplified I/O wrapper offers a simpler read/write API for a SSL
3967  * engine (client or server), using the provided callback functions for
3968  * reading data from, or writing data to, the transport medium.
3969  *
3970  * The callback functions have the following semantics:
3971  *
3972  *   - Each callback receives an opaque context value (of type `void *`)
3973  *     that the callback may use arbitrarily (or possibly ignore).
3974  *
3975  *   - `low_read()` reads at least one byte, at most `len` bytes, from
3976  *     the transport medium. Read bytes shall be written in `data`.
3977  *
3978  *   - `low_write()` writes at least one byte, at most `len` bytes, unto
3979  *     the transport medium. The bytes to write are read from `data`.
3980  *
3981  *   - The `len` parameter is never zero, and is always lower than 20000.
3982  *
3983  *   - The number of processed bytes (read or written) is returned. Since
3984  *     that number is less than 20000, it always fits on an `int`.
3985  *
3986  *   - On error, the callbacks return -1. Reaching end-of-stream is an
3987  *     error. Errors are permanent: the SSL connection is terminated.
3988  *
3989  *   - Callbacks SHOULD NOT return 0. This is tolerated, as long as
3990  *     callbacks endeavour to block for some non-negligible amount of
3991  *     time until at least one byte can be sent or received (if a
3992  *     callback returns 0, then the wrapper invokes it again
3993  *     immediately).
3994  *
3995  *   - Callbacks MAY return as soon as at least one byte is processed;
3996  *     they MAY also insist on reading or writing _all_ requested bytes.
3997  *     Since SSL is a self-terminated protocol (each record has a length
3998  *     header), this does not change semantics.
3999  *
4000  *   - Callbacks need not apply any buffering (for performance) since SSL
4001  *     itself uses buffers.
4002  *
4003  * \param ctx             wrapper context to initialise.
4004  * \param engine          SSL engine to wrap.
4005  * \param low_read        callback for reading data from the transport.
4006  * \param read_context    context pointer for `low_read()`.
4007  * \param low_write       callback for writing data on the transport.
4008  * \param write_context   context pointer for `low_write()`.
4009  */
4010 void br_sslio_init(br_sslio_context *ctx,
4011 	br_ssl_engine_context *engine,
4012 	int (*low_read)(void *read_context,
4013 		unsigned char *data, size_t len),
4014 	void *read_context,
4015 	int (*low_write)(void *write_context,
4016 		const unsigned char *data, size_t len),
4017 	void *write_context);
4018 
4019 /**
4020  * \brief Read some application data from a SSL connection.
4021  *
4022  * If `len` is zero, then this function returns 0 immediately. In
4023  * all other cases, it never returns 0.
4024  *
4025  * This call returns only when at least one byte has been obtained.
4026  * Returned value is the number of bytes read, or -1 on error. The
4027  * number of bytes always fits on an 'int' (data from a single SSL/TLS
4028  * record is returned).
4029  *
4030  * On error or SSL closure, this function returns -1. The caller should
4031  * inspect the error status on the SSL engine to distinguish between
4032  * normal closure and error.
4033  *
4034  * \param cc    SSL wrapper context.
4035  * \param dst   destination buffer for application data.
4036  * \param len   maximum number of bytes to obtain.
4037  * \return  number of bytes obtained, or -1 on error.
4038  */
4039 int br_sslio_read(br_sslio_context *cc, void *dst, size_t len);
4040 
4041 /**
4042  * \brief Read application data from a SSL connection.
4043  *
4044  * This calls returns only when _all_ requested `len` bytes are read,
4045  * or an error is reached. Returned value is 0 on success, -1 on error.
4046  * A normal (verified) SSL closure before that many bytes are obtained
4047  * is reported as an error by this function.
4048  *
4049  * \param cc    SSL wrapper context.
4050  * \param dst   destination buffer for application data.
4051  * \param len   number of bytes to obtain.
4052  * \return  0 on success, or -1 on error.
4053  */
4054 int br_sslio_read_all(br_sslio_context *cc, void *dst, size_t len);
4055 
4056 /**
4057  * \brief Write some application data unto a SSL connection.
4058  *
4059  * If `len` is zero, then this function returns 0 immediately. In
4060  * all other cases, it never returns 0.
4061  *
4062  * This call returns only when at least one byte has been written.
4063  * Returned value is the number of bytes written, or -1 on error. The
4064  * number of bytes always fits on an 'int' (less than 20000).
4065  *
4066  * On error or SSL closure, this function returns -1. The caller should
4067  * inspect the error status on the SSL engine to distinguish between
4068  * normal closure and error.
4069  *
4070  * **Important:** SSL is buffered; a "written" byte is a byte that was
4071  * injected into the wrapped SSL engine, but this does not necessarily mean
4072  * that it has been scheduled for sending. Use `br_sslio_flush()` to
4073  * ensure that all pending data has been sent to the transport medium.
4074  *
4075  * \param cc    SSL wrapper context.
4076  * \param src   source buffer for application data.
4077  * \param len   maximum number of bytes to write.
4078  * \return  number of bytes written, or -1 on error.
4079  */
4080 int br_sslio_write(br_sslio_context *cc, const void *src, size_t len);
4081 
4082 /**
4083  * \brief Write application data unto a SSL connection.
4084  *
4085  * This calls returns only when _all_ requested `len` bytes have been
4086  * written, or an error is reached. Returned value is 0 on success, -1
4087  * on error. A normal (verified) SSL closure before that many bytes are
4088  * written is reported as an error by this function.
4089  *
4090  * **Important:** SSL is buffered; a "written" byte is a byte that was
4091  * injected into the wrapped SSL engine, but this does not necessarily mean
4092  * that it has been scheduled for sending. Use `br_sslio_flush()` to
4093  * ensure that all pending data has been sent to the transport medium.
4094  *
4095  * \param cc    SSL wrapper context.
4096  * \param src   source buffer for application data.
4097  * \param len   number of bytes to write.
4098  * \return  0 on success, or -1 on error.
4099  */
4100 int br_sslio_write_all(br_sslio_context *cc, const void *src, size_t len);
4101 
4102 /**
4103  * \brief Flush pending data.
4104  *
4105  * This call makes sure that any buffered application data in the
4106  * provided context (including the wrapped SSL engine) has been sent
4107  * to the transport medium (i.e. accepted by the `low_write()` callback
4108  * method). If there is no such pending data, then this function does
4109  * nothing (and returns a success, i.e. 0).
4110  *
4111  * If the underlying transport medium has its own buffers, then it is
4112  * up to the caller to ensure the corresponding flushing.
4113  *
4114  * Returned value is 0 on success, -1 on error.
4115  *
4116  * \param cc    SSL wrapper context.
4117  * \return  0 on success, or -1 on error.
4118  */
4119 int br_sslio_flush(br_sslio_context *cc);
4120 
4121 /**
4122  * \brief Close the SSL connection.
4123  *
4124  * This call runs the SSL closure protocol (sending a `close_notify`,
4125  * receiving the response `close_notify`). When it returns, the SSL
4126  * connection is finished. It is still up to the caller to manage the
4127  * possible transport-level termination, if applicable (alternatively,
4128  * the underlying transport stream may be reused for non-SSL messages).
4129  *
4130  * Returned value is 0 on success, -1 on error. A failure by the peer
4131  * to process the complete closure protocol (i.e. sending back the
4132  * `close_notify`) is an error.
4133  *
4134  * \param cc    SSL wrapper context.
4135  * \return  0 on success, or -1 on error.
4136  */
4137 int br_sslio_close(br_sslio_context *cc);
4138 
4139 /* ===================================================================== */
4140 
4141 /*
4142  * Symbolic constants for cipher suites.
4143  */
4144 
4145 /* From RFC 5246 */
4146 #define BR_TLS_NULL_WITH_NULL_NULL                   0x0000
4147 #define BR_TLS_RSA_WITH_NULL_MD5                     0x0001
4148 #define BR_TLS_RSA_WITH_NULL_SHA                     0x0002
4149 #define BR_TLS_RSA_WITH_NULL_SHA256                  0x003B
4150 #define BR_TLS_RSA_WITH_RC4_128_MD5                  0x0004
4151 #define BR_TLS_RSA_WITH_RC4_128_SHA                  0x0005
4152 #define BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA             0x000A
4153 #define BR_TLS_RSA_WITH_AES_128_CBC_SHA              0x002F
4154 #define BR_TLS_RSA_WITH_AES_256_CBC_SHA              0x0035
4155 #define BR_TLS_RSA_WITH_AES_128_CBC_SHA256           0x003C
4156 #define BR_TLS_RSA_WITH_AES_256_CBC_SHA256           0x003D
4157 #define BR_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA          0x000D
4158 #define BR_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA          0x0010
4159 #define BR_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA         0x0013
4160 #define BR_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA         0x0016
4161 #define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA           0x0030
4162 #define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA           0x0031
4163 #define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA          0x0032
4164 #define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA          0x0033
4165 #define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA           0x0036
4166 #define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA           0x0037
4167 #define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA          0x0038
4168 #define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA          0x0039
4169 #define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA256        0x003E
4170 #define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA256        0x003F
4171 #define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256       0x0040
4172 #define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256       0x0067
4173 #define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA256        0x0068
4174 #define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA256        0x0069
4175 #define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256       0x006A
4176 #define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256       0x006B
4177 #define BR_TLS_DH_anon_WITH_RC4_128_MD5              0x0018
4178 #define BR_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA         0x001B
4179 #define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA          0x0034
4180 #define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA          0x003A
4181 #define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA256       0x006C
4182 #define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA256       0x006D
4183 
4184 /* From RFC 4492 */
4185 #define BR_TLS_ECDH_ECDSA_WITH_NULL_SHA              0xC001
4186 #define BR_TLS_ECDH_ECDSA_WITH_RC4_128_SHA           0xC002
4187 #define BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA      0xC003
4188 #define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA       0xC004
4189 #define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA       0xC005
4190 #define BR_TLS_ECDHE_ECDSA_WITH_NULL_SHA             0xC006
4191 #define BR_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA          0xC007
4192 #define BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA     0xC008
4193 #define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA      0xC009
4194 #define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA      0xC00A
4195 #define BR_TLS_ECDH_RSA_WITH_NULL_SHA                0xC00B
4196 #define BR_TLS_ECDH_RSA_WITH_RC4_128_SHA             0xC00C
4197 #define BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA        0xC00D
4198 #define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA         0xC00E
4199 #define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA         0xC00F
4200 #define BR_TLS_ECDHE_RSA_WITH_NULL_SHA               0xC010
4201 #define BR_TLS_ECDHE_RSA_WITH_RC4_128_SHA            0xC011
4202 #define BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA       0xC012
4203 #define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA        0xC013
4204 #define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA        0xC014
4205 #define BR_TLS_ECDH_anon_WITH_NULL_SHA               0xC015
4206 #define BR_TLS_ECDH_anon_WITH_RC4_128_SHA            0xC016
4207 #define BR_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA       0xC017
4208 #define BR_TLS_ECDH_anon_WITH_AES_128_CBC_SHA        0xC018
4209 #define BR_TLS_ECDH_anon_WITH_AES_256_CBC_SHA        0xC019
4210 
4211 /* From RFC 5288 */
4212 #define BR_TLS_RSA_WITH_AES_128_GCM_SHA256           0x009C
4213 #define BR_TLS_RSA_WITH_AES_256_GCM_SHA384           0x009D
4214 #define BR_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256       0x009E
4215 #define BR_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384       0x009F
4216 #define BR_TLS_DH_RSA_WITH_AES_128_GCM_SHA256        0x00A0
4217 #define BR_TLS_DH_RSA_WITH_AES_256_GCM_SHA384        0x00A1
4218 #define BR_TLS_DHE_DSS_WITH_AES_128_GCM_SHA256       0x00A2
4219 #define BR_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384       0x00A3
4220 #define BR_TLS_DH_DSS_WITH_AES_128_GCM_SHA256        0x00A4
4221 #define BR_TLS_DH_DSS_WITH_AES_256_GCM_SHA384        0x00A5
4222 #define BR_TLS_DH_anon_WITH_AES_128_GCM_SHA256       0x00A6
4223 #define BR_TLS_DH_anon_WITH_AES_256_GCM_SHA384       0x00A7
4224 
4225 /* From RFC 5289 */
4226 #define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256   0xC023
4227 #define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384   0xC024
4228 #define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256    0xC025
4229 #define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384    0xC026
4230 #define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256     0xC027
4231 #define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384     0xC028
4232 #define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256      0xC029
4233 #define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384      0xC02A
4234 #define BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256   0xC02B
4235 #define BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384   0xC02C
4236 #define BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256    0xC02D
4237 #define BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384    0xC02E
4238 #define BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256     0xC02F
4239 #define BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384     0xC030
4240 #define BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256      0xC031
4241 #define BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384      0xC032
4242 
4243 /* From RFC 6655 and 7251 */
4244 #define BR_TLS_RSA_WITH_AES_128_CCM                  0xC09C
4245 #define BR_TLS_RSA_WITH_AES_256_CCM                  0xC09D
4246 #define BR_TLS_RSA_WITH_AES_128_CCM_8                0xC0A0
4247 #define BR_TLS_RSA_WITH_AES_256_CCM_8                0xC0A1
4248 #define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM          0xC0AC
4249 #define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM          0xC0AD
4250 #define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8        0xC0AE
4251 #define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8        0xC0AF
4252 
4253 /* From RFC 7905 */
4254 #define BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256     0xCCA8
4255 #define BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256   0xCCA9
4256 #define BR_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256       0xCCAA
4257 #define BR_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256           0xCCAB
4258 #define BR_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256     0xCCAC
4259 #define BR_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256       0xCCAD
4260 #define BR_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256       0xCCAE
4261 
4262 /* From RFC 7507 */
4263 #define BR_TLS_FALLBACK_SCSV                         0x5600
4264 
4265 /*
4266  * Symbolic constants for alerts.
4267  */
4268 #define BR_ALERT_CLOSE_NOTIFY                0
4269 #define BR_ALERT_UNEXPECTED_MESSAGE         10
4270 #define BR_ALERT_BAD_RECORD_MAC             20
4271 #define BR_ALERT_RECORD_OVERFLOW            22
4272 #define BR_ALERT_DECOMPRESSION_FAILURE      30
4273 #define BR_ALERT_HANDSHAKE_FAILURE          40
4274 #define BR_ALERT_BAD_CERTIFICATE            42
4275 #define BR_ALERT_UNSUPPORTED_CERTIFICATE    43
4276 #define BR_ALERT_CERTIFICATE_REVOKED        44
4277 #define BR_ALERT_CERTIFICATE_EXPIRED        45
4278 #define BR_ALERT_CERTIFICATE_UNKNOWN        46
4279 #define BR_ALERT_ILLEGAL_PARAMETER          47
4280 #define BR_ALERT_UNKNOWN_CA                 48
4281 #define BR_ALERT_ACCESS_DENIED              49
4282 #define BR_ALERT_DECODE_ERROR               50
4283 #define BR_ALERT_DECRYPT_ERROR              51
4284 #define BR_ALERT_PROTOCOL_VERSION           70
4285 #define BR_ALERT_INSUFFICIENT_SECURITY      71
4286 #define BR_ALERT_INTERNAL_ERROR             80
4287 #define BR_ALERT_USER_CANCELED              90
4288 #define BR_ALERT_NO_RENEGOTIATION          100
4289 #define BR_ALERT_UNSUPPORTED_EXTENSION     110
4290 #define BR_ALERT_NO_APPLICATION_PROTOCOL   120
4291 
4292 #ifdef __cplusplus
4293 }
4294 #endif
4295 
4296 #endif
4297