return pkey;
}
+int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection,
+ OSSL_CALLBACK *export_cb, void *export_cbarg)
+{
+ return evp_keymgmt_export(pk->keymgmt, pk->keydata, selection,
+ export_cb, export_cbarg);
+}
+
void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt)
{
struct evp_keymgmt_util_try_import_data_st import_data;
* The export function calls the callback (evp_keymgmt_util_try_import),
* which does the import for us. If successful, we're done.
*/
- if (!evp_keymgmt_export(pk->keymgmt, pk->keydata, OSSL_KEYMGMT_SELECT_ALL,
- &evp_keymgmt_util_try_import, &import_data)) {
+ if (!evp_keymgmt_util_export(pk, OSSL_KEYMGMT_SELECT_ALL,
+ &evp_keymgmt_util_try_import, &import_data)) {
/* If there was an error, bail out */
evp_keymgmt_freedata(keymgmt, import_data.keydata);
return NULL;
import_data.keydata = to_keydata;
import_data.selection = selection;
- if (!evp_keymgmt_export(from->keymgmt, from->keydata, selection,
- &evp_keymgmt_util_try_import, &import_data)) {
+ if (!evp_keymgmt_util_export(from, selection,
+ &evp_keymgmt_util_try_import,
+ &import_data)) {
evp_keymgmt_freedata(to_keymgmt, alloc_keydata);
return 0;
}
raw_key.len = len;
raw_key.selection = OSSL_KEYMGMT_SELECT_PRIVATE_KEY;
- return evp_keymgmt_export(pkey->keymgmt, pkey->keydata,
- OSSL_KEYMGMT_SELECT_PRIVATE_KEY,
- get_raw_key_details, &raw_key);
+ return evp_keymgmt_util_export(pkey, OSSL_KEYMGMT_SELECT_PRIVATE_KEY,
+ get_raw_key_details, &raw_key);
}
if (pkey->ameth == NULL) {
raw_key.len = len;
raw_key.selection = OSSL_KEYMGMT_SELECT_PUBLIC_KEY;
- return evp_keymgmt_export(pkey->keymgmt, pkey->keydata,
- OSSL_KEYMGMT_SELECT_PUBLIC_KEY,
- get_raw_key_details, &raw_key);
+ return evp_keymgmt_util_export(pkey, OSSL_KEYMGMT_SELECT_PUBLIC_KEY,
+ get_raw_key_details, &raw_key);
}
if (pkey->ameth == NULL) {
} else if (EVP_PKEY_is_a(pkey, "EC") || EVP_PKEY_is_a(pkey, "SM2")) {
char *curve_name = NULL;
- ret = evp_keymgmt_export(pkey->keymgmt, pkey->keydata,
- OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
- get_ec_curve_name_cb, &curve_name);
+ ret = evp_keymgmt_util_export(pkey,
+ OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS,
+ get_ec_curve_name_cb, &curve_name);
if (ret)
ret = ec_curve_name2nid(curve_name);
OPENSSL_free(curve_name);
=head1 NAME
+evp_keymgmt_util_export,
evp_keymgmt_util_export_to_provider,
evp_keymgmt_util_find_operation_cache_index,
evp_keymgmt_util_clear_operation_cache,
#include "crypto/evp.h"
+ int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection,
+ OSSL_CALLBACK *export_cb, void *export_cbarg);
void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt);
size_t evp_keymgmt_util_find_operation_cache_index(EVP_PKEY *pk,
EVP_KEYMGMT *keymgmt);
=head1 DESCRIPTION
+evp_keymgmt_util_export() calls L<evp_keymgmt_export(3)> with the
+I<keymgmt> and I<keydata> from I<pk>. This is a convenience function.
+
evp_keymgmt_util_export_to_provider() exports cached key material
(provider side key material) from the given key I<pk> to a provider
via a B<EVP_KEYMGMT> interface, if this hasn't already been done.
void *keydata);
EVP_PKEY *evp_keymgmt_util_make_pkey(EVP_KEYMGMT *keymgmt, void *keydata);
+int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection,
+ OSSL_CALLBACK *export_cb, void *export_cbarg);
void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt);
size_t evp_keymgmt_util_find_operation_cache_index(EVP_PKEY *pk,
EVP_KEYMGMT *keymgmt);