Commit d318587d8f for openssl.org

commit d318587d8f979eaa706ff7e1a22e7a450f198fd2
Author: Jakub Zelenka <jakub.zelenka@openssl.foundation>
Date:   Mon Jun 1 23:28:57 2026 +0200

    evp: add test_set_get_raw_keys_mfail to evp extra tests

    Reviewed-by: Norbert Pocs <norbertp@openssl.org>
    Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
    MergeDate: Thu Jun 11 16:00:16 2026
    (Merged from https://github.com/openssl/openssl/pull/31356)

diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c
index d020f91aff..3033255103 100644
--- a/test/evp_extra_test.c
+++ b/test/evp_extra_test.c
@@ -3414,6 +3414,49 @@ static int test_set_get_raw_keys(int tst)
         && test_set_get_raw_keys_int(tst, 1, 1);
 }

+static int test_set_get_raw_keys_mfail(int idx)
+{
+    const uint8_t *in;
+    size_t inlen, len = 0;
+    EVP_PKEY *pkey = NULL;
+    unsigned char *buf = NULL;
+    unsigned char *privalloc = NULL;
+    const char *name;
+    int ok = 0;
+    int ret = 0;
+
+    name = keys[idx].name != NULL ? keys[idx].name : OBJ_nid2sn(keys[idx].type);
+    inlen = keys[idx].privlen;
+    in = keys[idx].priv;
+#ifndef OPENSSL_NO_ML_KEM
+    if (in == ml_kem_seed) {
+        if (!TEST_true(ml_kem_seed_to_priv(name, in, inlen, &privalloc, &inlen)))
+            goto err;
+        in = privalloc;
+    }
+#endif
+
+    MFAIL_start();
+    pkey = EVP_PKEY_new_raw_private_key_ex(testctx, name, NULL, in, inlen);
+    if (pkey != NULL
+        && EVP_PKEY_get_raw_private_key(pkey, NULL, &len)
+        && (buf = OPENSSL_malloc(len == 0 ? 1 : len)) != NULL
+        && EVP_PKEY_get_raw_private_key(pkey, buf, &len))
+        ok = 1;
+    MFAIL_end();
+
+    if (!ok)
+        goto err;
+
+    ret = TEST_mem_eq(in, inlen, buf, len);
+
+err:
+    OPENSSL_free(privalloc);
+    OPENSSL_free(buf);
+    EVP_PKEY_free(pkey);
+    return ret;
+}
+
 static int test_EVP_PKEY_check(int i)
 {
     int ret = 0;
@@ -8443,6 +8486,12 @@ int setup_tests(void)
     ADD_TEST(test_EVP_SM2_verify);
 #endif
     ADD_ALL_TESTS(test_set_get_raw_keys, OSSL_NELEM(keys));
+#if defined(_MSC_VER) || defined(OPENSSL_NO_CACHED_FETCH)
+    ADD_MFAIL_ALL_NO_CHECK_TESTS(test_set_get_raw_keys_mfail,
+        OSSL_NELEM(keys));
+#else
+    ADD_MFAIL_ALL_TESTS(test_set_get_raw_keys_mfail, OSSL_NELEM(keys));
+#endif
     ADD_ALL_TESTS(test_EVP_PKEY_check, OSSL_NELEM(keycheckdata));
 #ifndef OPENSSL_NO_CMAC
     ADD_TEST(test_CMAC_keygen);