Path: blob/main/contrib/bearssl/src/ssl/ssl_server_full_rsa.c
39488 views
/*1* Copyright (c) 2016 Thomas Pornin <[email protected]>2*3* Permission is hereby granted, free of charge, to any person obtaining4* a copy of this software and associated documentation files (the5* "Software"), to deal in the Software without restriction, including6* without limitation the rights to use, copy, modify, merge, publish,7* distribute, sublicense, and/or sell copies of the Software, and to8* permit persons to whom the Software is furnished to do so, subject to9* the following conditions:10*11* The above copyright notice and this permission notice shall be12* included in all copies or substantial portions of the Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,15* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF16* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND17* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS18* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN19* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN20* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE21* SOFTWARE.22*/2324#include "inner.h"2526/* see bearssl_ssl.h */27void28br_ssl_server_init_full_rsa(br_ssl_server_context *cc,29const br_x509_certificate *chain, size_t chain_len,30const br_rsa_private_key *sk)31{32/*33* The "full" profile supports all implemented cipher suites.34*35* Rationale for suite order, from most important to least36* important rule:37*38* -- Don't use 3DES if AES is available.39* -- Try to have Forward Secrecy (ECDHE suite) if possible.40* -- ChaCha20+Poly1305 is better than AES/GCM (faster, smaller).41* -- GCM is better than CBC.42* -- AES-128 is preferred over AES-256 (AES-128 is already43* strong enough, and AES-256 is 40% more expensive).44*/45static const uint16_t suites[] = {46BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,47BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,48BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,49BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,50BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,51BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,52BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,53BR_TLS_RSA_WITH_AES_128_GCM_SHA256,54BR_TLS_RSA_WITH_AES_256_GCM_SHA384,55BR_TLS_RSA_WITH_AES_128_CCM,56BR_TLS_RSA_WITH_AES_256_CCM,57BR_TLS_RSA_WITH_AES_128_CCM_8,58BR_TLS_RSA_WITH_AES_256_CCM_8,59BR_TLS_RSA_WITH_AES_128_CBC_SHA256,60BR_TLS_RSA_WITH_AES_256_CBC_SHA256,61BR_TLS_RSA_WITH_AES_128_CBC_SHA,62BR_TLS_RSA_WITH_AES_256_CBC_SHA,63BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,64BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA65};6667/*68* All hash functions are activated.69* Note: the X.509 validation engine will nonetheless refuse to70* validate signatures that use MD5 as hash function.71*/72static const br_hash_class *hashes[] = {73&br_md5_vtable,74&br_sha1_vtable,75&br_sha224_vtable,76&br_sha256_vtable,77&br_sha384_vtable,78&br_sha512_vtable79};8081int id;8283/*84* Reset server context and set supported versions from TLS-1.085* to TLS-1.2 (inclusive).86*/87br_ssl_server_zero(cc);88br_ssl_engine_set_versions(&cc->eng, BR_TLS10, BR_TLS12);8990/*91* Set suites and elliptic curve implementation (for ECDHE).92*/93br_ssl_engine_set_suites(&cc->eng, suites,94(sizeof suites) / (sizeof suites[0]));95br_ssl_engine_set_default_ec(&cc->eng);9697/*98* Set the "server policy": handler for the certificate chain99* and private key operations.100*/101br_ssl_server_set_single_rsa(cc, chain, chain_len, sk,102BR_KEYTYPE_KEYX | BR_KEYTYPE_SIGN,103br_rsa_private_get_default(),104br_rsa_pkcs1_sign_get_default());105106/*107* Set supported hash functions.108*/109for (id = br_md5_ID; id <= br_sha512_ID; id ++) {110const br_hash_class *hc;111112hc = hashes[id - 1];113br_ssl_engine_set_hash(&cc->eng, id, hc);114}115116/*117* Set the PRF implementations.118*/119br_ssl_engine_set_prf10(&cc->eng, &br_tls10_prf);120br_ssl_engine_set_prf_sha256(&cc->eng, &br_tls12_sha256_prf);121br_ssl_engine_set_prf_sha384(&cc->eng, &br_tls12_sha384_prf);122123/*124* Symmetric encryption.125*/126br_ssl_engine_set_default_aes_cbc(&cc->eng);127br_ssl_engine_set_default_aes_ccm(&cc->eng);128br_ssl_engine_set_default_aes_gcm(&cc->eng);129br_ssl_engine_set_default_des_cbc(&cc->eng);130br_ssl_engine_set_default_chapol(&cc->eng);131}132133134