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