@@ -795,6 +795,64 @@ extern "C" {
795
795
BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA
796
796
#endif
797
797
};
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
+
798
856
799
857
// For apps which want to use less secure but faster ciphers, only
800
858
static const uint16_t faster_suites_P[] PROGMEM = {
@@ -848,6 +906,31 @@ extern "C" {
848
906
#endif
849
907
}
850
908
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
+
851
934
}
852
935
853
936
// Set custom list of ciphers
@@ -1050,6 +1133,7 @@ bool WiFiClientSecure::_installServerX509Validator(const X509List *client_CA_ta)
1050
1133
return true ;
1051
1134
}
1052
1135
1136
+
1053
1137
// Called by WiFiServerBearSSL when an RSA cert/key is specified.
1054
1138
bool WiFiClientSecure::_connectSSLServerRSA (const X509List *chain,
1055
1139
const PrivateKey *sk,
@@ -1068,7 +1152,10 @@ bool WiFiClientSecure::_connectSSLServerRSA(const X509List *chain,
1068
1152
return false ;
1069
1153
}
1070
1154
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 ());
1072
1159
br_ssl_engine_set_buffers_bidi (_eng, _iobuf_in.get (), _iobuf_in_size, _iobuf_out.get (), _iobuf_out_size);
1073
1160
if (client_CA_ta && !_installServerX509Validator (client_CA_ta)) {
1074
1161
DEBUG_BSSL (" _connectSSLServerRSA: Can't install serverX509check\n " );
@@ -1102,8 +1189,10 @@ bool WiFiClientSecure::_connectSSLServerEC(const X509List *chain,
1102
1189
return false ;
1103
1190
}
1104
1191
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);
1107
1196
br_ssl_engine_set_buffers_bidi (_eng, _iobuf_in.get (), _iobuf_in_size, _iobuf_out.get (), _iobuf_out_size);
1108
1197
if (client_CA_ta && !_installServerX509Validator (client_CA_ta)) {
1109
1198
DEBUG_BSSL (" _connectSSLServerEC: Can't install serverX509check\n " );
0 commit comments