]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bearssl/inc/bearssl_ssl.h
zfs: merge openzfs/zfs@86e115e21
[FreeBSD/FreeBSD.git] / contrib / bearssl / inc / bearssl_ssl.h
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