@@ -795,6 +795,64 @@ extern "C" {
795795 BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA
796796#endif
797797 };
798+ #ifndef BEARSSL_BASIC
799+ // Server w/EC has one set, not possible with basic SSL config
800+ static const uint16_t suites_server_ec_P [] PROGMEM = {
801+ BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
802+ BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
803+ BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
804+ BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM,
805+ BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM,
806+ BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8,
807+ BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8,
808+ BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
809+ BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
810+ BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
811+ BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
812+ BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
813+ BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,
814+ BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
815+ BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
816+ BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
817+ BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
818+ BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
819+ BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
820+ BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
821+ BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
822+ BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
823+ BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
824+ BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
825+ BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,
826+ BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
827+ };
828+ #endif
829+
830+ static const uint16_t suites_server_rsa_P[] PROGMEM = {
831+ #ifndef BEARSSL_BASIC
832+ BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
833+ BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
834+ BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
835+ BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
836+ BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
837+ BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
838+ BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
839+ BR_TLS_RSA_WITH_AES_128_GCM_SHA256,
840+ BR_TLS_RSA_WITH_AES_256_GCM_SHA384,
841+ BR_TLS_RSA_WITH_AES_128_CCM,
842+ BR_TLS_RSA_WITH_AES_256_CCM,
843+ BR_TLS_RSA_WITH_AES_128_CCM_8,
844+ BR_TLS_RSA_WITH_AES_256_CCM_8,
845+ #endif
846+ BR_TLS_RSA_WITH_AES_128_CBC_SHA256,
847+ BR_TLS_RSA_WITH_AES_256_CBC_SHA256,
848+ BR_TLS_RSA_WITH_AES_128_CBC_SHA,
849+ BR_TLS_RSA_WITH_AES_256_CBC_SHA,
850+ #ifndef BEARSSL_BASIC
851+ BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
852+ BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA
853+ #endif
854+ };
855+
798856
799857 // For apps which want to use less secure but faster ciphers, only
800858 static const uint16_t faster_suites_P[] PROGMEM = {
@@ -848,6 +906,31 @@ extern "C" {
848906#endif
849907 }
850908
909+ // Default initializion for our SSL clients
910+ static void br_ssl_server_base_init (br_ssl_server_context *cc, const uint16_t *cipher_list, int cipher_cnt) {
911+ uint16_t suites[cipher_cnt];
912+ memcpy_P (suites, cipher_list, cipher_cnt * sizeof (cipher_list[0 ]));
913+ br_ssl_server_zero (cc);
914+ br_ssl_engine_add_flags (&cc->eng , BR_OPT_NO_RENEGOTIATION); // forbid SSL renegociation, as we free the Private Key after handshake
915+ br_ssl_engine_set_versions (&cc->eng , BR_TLS10, BR_TLS12);
916+ br_ssl_engine_set_suites (&cc->eng , suites, (sizeof suites) / (sizeof suites[0 ]));
917+ #ifndef BEARSSL_SSL_BASIC
918+ br_ssl_engine_set_default_ec (&cc->eng );
919+ #endif
920+
921+ br_ssl_client_install_hashes (&cc->eng );
922+ br_ssl_engine_set_prf10 (&cc->eng , &br_tls10_prf);
923+ br_ssl_engine_set_prf_sha256 (&cc->eng , &br_tls12_sha256_prf);
924+ br_ssl_engine_set_prf_sha384 (&cc->eng , &br_tls12_sha384_prf);
925+ br_ssl_engine_set_default_aes_cbc (&cc->eng );
926+ #ifndef BEARSSL_SSL_BASIC
927+ br_ssl_engine_set_default_aes_ccm (&cc->eng );
928+ br_ssl_engine_set_default_aes_gcm (&cc->eng );
929+ br_ssl_engine_set_default_des_cbc (&cc->eng );
930+ br_ssl_engine_set_default_chapol (&cc->eng );
931+ #endif
932+ }
933+
851934}
852935
853936// Set custom list of ciphers
@@ -1050,6 +1133,7 @@ bool WiFiClientSecure::_installServerX509Validator(const X509List *client_CA_ta)
10501133 return true ;
10511134}
10521135
1136+
10531137// Called by WiFiServerBearSSL when an RSA cert/key is specified.
10541138bool WiFiClientSecure::_connectSSLServerRSA (const X509List *chain,
10551139 const PrivateKey *sk,
@@ -1068,7 +1152,10 @@ bool WiFiClientSecure::_connectSSLServerRSA(const X509List *chain,
10681152 return false ;
10691153 }
10701154
1071- br_ssl_server_init_full_rsa (_sc_svr.get (), chain ? chain->getX509Certs () : nullptr , chain ? chain->getCount () : 0 , sk ? sk->getRSA () : nullptr );
1155+ br_ssl_server_base_init (_sc_svr.get (), suites_server_rsa_P, sizeof (suites_server_rsa_P) / sizeof (suites_server_rsa_P[0 ]));
1156+ br_ssl_server_set_single_rsa (_sc_svr.get (), chain ? chain->getX509Certs () : nullptr , chain ? chain->getCount () : 0 ,
1157+ sk ? sk->getRSA () : nullptr , BR_KEYTYPE_KEYX | BR_KEYTYPE_SIGN,
1158+ br_rsa_private_get_default (), br_rsa_pkcs1_sign_get_default ());
10721159 br_ssl_engine_set_buffers_bidi (_eng, _iobuf_in.get (), _iobuf_in_size, _iobuf_out.get (), _iobuf_out_size);
10731160 if (client_CA_ta && !_installServerX509Validator (client_CA_ta)) {
10741161 DEBUG_BSSL (" _connectSSLServerRSA: Can't install serverX509check\n " );
@@ -1102,8 +1189,10 @@ bool WiFiClientSecure::_connectSSLServerEC(const X509List *chain,
11021189 return false ;
11031190 }
11041191
1105- br_ssl_server_init_full_ec (_sc_svr.get (), chain ? chain->getX509Certs () : nullptr , chain ? chain->getCount () : 0 ,
1106- cert_issuer_key_type, sk ? sk->getEC () : nullptr );
1192+ br_ssl_server_base_init (_sc_svr.get (), suites_server_ec_P, sizeof (suites_server_ec_P) / sizeof (suites_server_ec_P[0 ]));
1193+ br_ssl_server_set_single_ec (_sc_svr.get (), chain ? chain->getX509Certs () : nullptr , chain ? chain->getCount () : 0 ,
1194+ sk ? sk->getEC () : nullptr , BR_KEYTYPE_KEYX | BR_KEYTYPE_SIGN,
1195+ cert_issuer_key_type, br_ssl_engine_get_ec (_eng), br_ecdsa_i15_sign_asn1);
11071196 br_ssl_engine_set_buffers_bidi (_eng, _iobuf_in.get (), _iobuf_in_size, _iobuf_out.get (), _iobuf_out_size);
11081197 if (client_CA_ta && !_installServerX509Validator (client_CA_ta)) {
11091198 DEBUG_BSSL (" _connectSSLServerEC: Can't install serverX509check\n " );
0 commit comments