mbedtls: add support for 4.0.0

After this patch libcurl requires (as already documented)
the `curl_global_init()` call when using the `curl_formadd()` API with
mbedTLS.

Note: NTLM is not supported with mbedTLS 4+, because it lacks
the necessary crypto primitive: DES.

Also:
- lib: de-dupe mbedTLS minimum version checks into `curl_setup.h`.
- lib: initialize PSA Crypto as part of `curl_global_init()`.
  For MD5, SHA-256, `curl_formadd()`, and MultiSSL builds with mbedTLS
  but where mbedTLS isn't the default backend.
- lib1308: fix to call `curl_global_init()` (for the Form API).
- curl_ntlm_core: disable with mbedTLS 4+.
- md4: disable mbedTLS implementation when building against 4.x.
- md5: use mbedTLS PSA Crypto API when available, otherwise use
  the default local implementation.
- sha256: use mbedTLS PSA Crypto API when available, otherwise use
  the default local implementation.
- vtls/mbedtls: drop PSA Crypto initialization in favor of
  `curl_global_init()`.
- vtls/mbedtls: use PSA Crypto random API with all mbedTLS versions.
- vtls/mbedtls: do the same for the SHA-256 callback.
- autotools: detect mbedTLS 4+, and disable NTLM for 3.x.
- cmake: disable NTLM for mbedTLS 3.x.
- GHA/linux: keep building mbedTLS 3.x manually and use it in
  an existing job, while also enabling pytest in it.
- GHA/linux: bump to mbedTLS 4.0.0.
  Closes #19075
  Closes #19074

Refs:
https://github.com/Mbed-TLS/mbedtls/releases/tag/mbedtls-4.0.0
https://github.com/Mbed-TLS/mbedtls/blob/mbedtls-4.0.0/docs/4.0-migration-guide.md
https://github.com/Mbed-TLS/mbedtls/blob/mbedtls-4.0.0/tf-psa-crypto/docs/1.0-migration-guide.md [404]
https://github.com/Mbed-TLS/TF-PSA-Crypto/blob/tf-psa-crypto-1.0.0/docs/1.0-migration-guide.md
https://github.com/Mbed-TLS/TF-PSA-Crypto/blob/tf-psa-crypto-1.0.0/docs/psa-transition.md
627f727bbe/docs/4.0-migration-guide

Closes #19077
This commit is contained in:
Viktor Szakats 2025-10-15 21:01:46 +02:00
parent 7e12139719
commit 3a305831d1
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
12 changed files with 218 additions and 106 deletions

View file

@ -43,12 +43,15 @@ static CURLcode test_lib1308(const char *URL)
{
int errorcount = 0;
CURLFORMcode rc;
int res;
CURLcode res = CURLE_OK;
int formres = 0;
struct curl_httppost *post = NULL;
struct curl_httppost *last = NULL;
size_t total_size = 0;
char buffer[] = "test buffer";
global_init(CURL_GLOBAL_ALL);
rc = curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
t1308_fail_unless(rc == 0, "curl_formadd returned error");
@ -66,8 +69,8 @@ static CURLcode test_lib1308(const char *URL)
CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
t1308_fail_unless(rc == 0, "curl_formadd returned error");
res = curl_formget(post, &total_size, print_httppost_callback);
t1308_fail_unless(res == 0, "curl_formget returned error");
formres = curl_formget(post, &total_size, print_httppost_callback);
t1308_fail_unless(formres == 0, "curl_formget returned error");
t1308_fail_unless(total_size == 518, "curl_formget got wrong size back");
@ -83,12 +86,14 @@ static CURLcode test_lib1308(const char *URL)
CURLFORM_END);
t1308_fail_unless(rc == 0, "curl_formadd returned error");
res = curl_formget(post, &total_size, print_httppost_callback);
formres = curl_formget(post, &total_size, print_httppost_callback);
t1308_fail_unless(res == 0, "curl_formget returned error");
t1308_fail_unless(formres == 0, "curl_formget returned error");
t1308_fail_unless(total_size == 899, "curl_formget got wrong size back");
curl_formfree(post);
curl_global_cleanup();
return errorcount ? TEST_ERR_FAILURE : CURLE_OK;
}