# include <mbedtls/ssl.h>
# include <mbedtls/threading.h>
# include <mbedtls/version.h>
+# include <psa/crypto.h>
# if defined(ENOTSUP)
# define NCBI_NOTSUPPORTED ENOTSUP
if (lock) {
switch (MT_LOCK_Do(*lock, eMT_Lock)) {
case -1:
+#ifdef MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE
return MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE;
+#else
+ return MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED;
+#endif
case 0:
return MBEDTLS_ERR_THREADING_MUTEX_ERROR;
case 1:
if (lock) {
switch (MT_LOCK_Do(*lock, eMT_Unlock)) {
case -1:
+#ifdef MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE
return MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE;
+#else
+ return MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED;
+#endif
case 0:
return MBEDTLS_ERR_THREADING_MUTEX_ERROR;
case 1:
if (!error)
return eIO_Success;
+#if MBEDTLS_VERSION_MAJOR >= 3
+ sock = ((SNcbiSSLctx*)(session->MBEDTLS_PRIVATE(p_bio)))->sock;
+#else
sock = ((SNcbiSSLctx*)(session->p_bio))->sock;
+#endif
switch (error) {
case MBEDTLS_ERR_SSL_WANT_READ:
status = x_RetryStatus(sock, direction);
case MBEDTLS_ERR_SSL_TIMEOUT:
status = eIO_Timeout;
break;
+#ifdef MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE
case MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE:
+#endif
+#ifdef MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE
case MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE:
+#endif
case MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE:
+#ifdef MBEDTLS_ERR_SSL_UNKNOWN_CIPHER
case MBEDTLS_ERR_SSL_UNKNOWN_CIPHER:
+#endif
case MBEDTLS_ERR_SSL_INTERNAL_ERROR:
+#ifdef MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED
+ case MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED:
+#endif
status = eIO_NotSupported;
break;
case MBEDTLS_ERR_THREADING_BAD_INPUT_DATA:
static EIO_Status s_MbedTlsWrite(void* session, const void* data,
size_t n_todo, size_t* n_done, int* error)
{
- size_t max_size
- = mbedtls_ssl_get_output_max_frag_len((mbedtls_ssl_context*) session);
+ size_t max_size = mbedtls_ssl_get_max_out_record_payload
+ ((mbedtls_ssl_context*) session);
EIO_Status status;
*n_done = 0;
char version[80];
const char* val;
char buf[32];
+ psa_status_t psa_status;
mbedtls_version_get_string(version);
if (strcasecmp(MBEDTLS_VERSION_STRING, version) != 0) {
MBEDTLS_SSL_TRANSPORT_STREAM,
MBEDTLS_SSL_PRESET_DEFAULT);
mbedtls_ssl_conf_authmode(&s_MbedTlsConf, MBEDTLS_SSL_VERIFY_NONE);
+#if MBEDTLS_VERSION_MAJOR >= 3
+ /* The above line can otherwise be ineffective. */
+ mbedtls_ssl_conf_max_tls_version(&s_MbedTlsConf,
+ MBEDTLS_SSL_VERSION_TLS1_2);
+#endif
/* Check CONN_[MBED]TLS_LOGLEVEL or [CONN][MBED]TLS_LOGLEVEL */
val = ConnNetInfo_GetValueInternal(0, "MBED" REG_CONN_TLS_LOGLEVEL,
mbedtls_ssl_conf_rng(&s_MbedTlsConf,
mbedtls_ctr_drbg_random, &s_MbedTlsCtrDrbg);
+ if ((psa_status = psa_crypto_init()) != PSA_SUCCESS) {
+ CORE_LOGF_X(51, eLOG_Error,
+ ("psa_crypto_init failed with status %d", psa_status));
+ return eIO_NotSupported;
+ }
+
s_Pull = pull;
s_Push = push;
err = mbedtls_pk_parse_key(xcred->pkey,
(const unsigned char*) pkey, pkeysz ? pkeysz
- : strlen((const char*) pkey) + 1, 0, 0);
+ : strlen((const char*) pkey) + 1, 0, 0
+#if MBEDTLS_VERSION_MAJOR >= 3
+ , mbedtls_ctr_drbg_random, &s_MbedTlsCtrDrbg
+#endif
+ );
if (err) {
mbedtls_strerror(err, errbuf, sizeof(errbuf) - 1);
CORE_LOG_ERRNO_EXX(12, eLOG_Error, err, errbuf,
#include <corelib/ncbiapp.hpp>
#include <corelib/request_ctx.hpp>
+#include <psa/crypto.h>
+
BEGIN_NCBI_SCOPE
#define NCBI_UV_WRITE_TRACE(message) _TRACE(message)
}
mbedtls_ssl_conf_authmode(&m_Conf, MBEDTLS_SSL_VERIFY_NONE);
+#if MBEDTLS_VERSION_MAJOR >= 3
+ /* The above line can otherwise be ineffective. */
+ mbedtls_ssl_conf_max_tls_version(&m_Conf, MBEDTLS_SSL_VERSION_TLS1_2);
+#endif
mbedtls_entropy_init(&m_Entropy);
mbedtls_ctr_drbg_init(&m_CtrDrbg);
mbedtls_x509_crt_init(&m_Cert);
}
mbedtls_ssl_conf_rng(&m_Conf, mbedtls_ctr_drbg_random, &m_CtrDrbg);
+ auto p_rv = psa_crypto_init();
+
+ if (p_rv != PSA_SUCCESS) {
+ NCBI_UVNGHTTP2_TLS_TRACE(this << " psa_crypto_init: error code"
+ << p_rv);
+ return;
+ }
+
mbedtls_ssl_conf_alpn_protocols(&m_Conf, m_Protocols.data());
mbedtls_ssl_init(&m_Ssl);
return;
}
- auto pk_rv = mbedtls_pk_parse_key(&m_Pkey, reinterpret_cast<const unsigned char*>(pkey.data()), pkey.size() + 1, nullptr, 0);
+ auto pk_rv = mbedtls_pk_parse_key(
+ &m_Pkey, reinterpret_cast<const unsigned char*>(pkey.data()),
+ pkey.size() + 1, nullptr, 0
+#if MBEDTLS_VERSION_MAJOR >= 3
+ , mbedtls_ctr_drbg_random, &m_CtrDrbg
+#endif
+ );
if (pk_rv) {
NCBI_UVNGHTTP2_TLS_TRACE(this << " mbedtls_pk_parse_key: " << SUvNgHttp2_Error::MbedTlsStr(pk_rv));