evp_skey_test.c: Add test for EVP_SKEY_to_provider cross-provider transfer

Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
MergeDate: Wed Apr  8 10:27:04 2026
(Merged from https://github.com/openssl/openssl/pull/30650)
This commit is contained in:
Joshua Rogers
2026-04-04 18:28:46 +08:00
committed by Tomas Mraz
parent eaef6b20c7
commit e249566980
2 changed files with 60 additions and 0 deletions
+59
View File
@@ -391,6 +391,64 @@ end:
return ret;
}
static int test_skey_to_diff_provider(void)
{
OSSL_PROVIDER *fake_prov = NULL;
EVP_SKEY *key = NULL, *key2 = NULL;
const unsigned char *export_key = NULL;
size_t export_len;
unsigned char import_key[KEY_SIZE] = {
0x53,
0x4B,
0x45,
0x59,
0x53,
0x4B,
0x45,
0x59,
0x53,
0x4B,
0x45,
0x59,
0x53,
0x4B,
0x45,
0x59,
};
int ret = 0;
deflprov = OSSL_PROVIDER_load(libctx, "default");
if (!TEST_ptr(deflprov))
return 0;
if (!TEST_ptr(fake_prov = fake_cipher_start(libctx)))
goto end;
if (!TEST_ptr(key = EVP_SKEY_import_raw_key(libctx, OSSL_SKEY_TYPE_GENERIC,
import_key, sizeof(import_key), NULL)))
goto end;
if (!TEST_ptr(key2 = EVP_SKEY_to_provider(key, libctx, fake_prov,
FAKE_CIPHER_FETCH_PROPS)))
goto end;
/* Different provider must return a different object */
if (!TEST_ptr_ne(key2, key))
goto end;
if (!TEST_int_gt(EVP_SKEY_get0_raw_key(key2, &export_key, &export_len), 0)
|| !TEST_mem_eq(import_key, sizeof(import_key), export_key, export_len))
goto end;
ret = 1;
end:
EVP_SKEY_free(key2);
EVP_SKEY_free(key);
fake_cipher_finish(fake_prov);
OSSL_PROVIDER_unload(deflprov);
return ret;
}
int setup_tests(void)
{
libctx = OSSL_LIB_CTX_new();
@@ -401,6 +459,7 @@ int setup_tests(void)
ADD_TEST(test_skey_skeymgmt);
ADD_TEST(test_skey_to_same_provider);
ADD_TEST(test_skey_to_diff_provider);
ADD_TEST(test_aes_raw_skey);
#ifndef OPENSSL_NO_DES
ADD_TEST(test_des_raw_skey);
+1
View File
@@ -110,6 +110,7 @@ static const OSSL_DISPATCH fake_skeymgmt_funcs[] = {
static const OSSL_ALGORITHM fake_skeymgmt_algs[] = {
{ "fake_cipher", FAKE_CIPHER_FETCH_PROPS, fake_skeymgmt_funcs, "Fake Cipher Key Management" },
{ OSSL_SKEY_TYPE_GENERIC, FAKE_CIPHER_FETCH_PROPS, fake_skeymgmt_funcs, "Fake Generic Key Management" },
{ NULL, NULL, NULL, NULL }
};
static OSSL_FUNC_cipher_newctx_fn fake_newctx;