EVP_ASYM_CIPHER_FREE(3SSL)
π EVP_ASYM_CIPHER_FREE β bestie's guide to managing EVP_ASYM_CIPHER objects π
okay so this is the 3SSL OpenSSL page for the whole little friend group of functions that manage EVP_ASYM_CIPHER algorithm objects β fetching them, freeing them, ref-counting them, asking them their name, all of it. no cap, it's a whole squad. π«Ά
β¨ NAME β¨
EVP_ASYM_CIPHER_fetch, EVP_ASYM_CIPHER_free, EVP_ASYM_CIPHER_up_ref, EVP_ASYM_CIPHER_is_a, EVP_ASYM_CIPHER_get0_provider, EVP_ASYM_CIPHER_do_all_provided, EVP_ASYM_CIPHER_names_do_all, EVP_ASYM_CIPHER_get0_name, EVP_ASYM_CIPHER_get0_description, EVP_ASYM_CIPHER_gettable_ctx_params, EVP_ASYM_CIPHER_settable_ctx_params β Functions to manage EVP_ASYM_CIPHER algorithm objects π₯
πΈ SYNOPSIS πΈ
#include <openssl/evp.h>
EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
const char *properties);
void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher);
int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher);
const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher);
int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name);
OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher);
void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx,
void (*fn)(EVP_ASYM_CIPHER *cipher,
void *arg),
void *arg);
int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher,
void (*fn)(const char *name, void *data),
void *data);
const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher);
const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *cip);
const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *cip);
π¦ DESCRIPTION π¦
EVP_ASYM_CIPHER_fetch()β this one goes and grabs you the implementation for whateveralgorithmyou asked for, from any provider offering it, matching the criteria inproperties, all inside the scope of the given library contextctx(peepOSSL_LIB_CTX(3)for the deets π). and like, the algorithm you get back is one that offers functions for doing asymmetric cipher type tasks β asymmetric encryption and decryption, that kind of thing. want more lore? go read"ALGORITHM FETCHING" in crypto(7).
π important bestie: whatever this hands back, you must eventually release it with EVP_ASYM_CIPHER_free(). don't just let it vibe in memory forever, that's not the move.
EVP_ASYM_CIPHER_free()β decrements the reference count on thatEVP_ASYM_CIPHERstructure. usually you got this struct from an earlierEVP_ASYM_CIPHER_fetch()call. if the ref count hits0, the structure gets freed. and if the argument isNULL? nothing happens at all. iconic, no drama. πEVP_ASYM_CIPHER_up_ref()β increments the reference count for anEVP_ASYM_CIPHERstructure. sharing is caring πEVP_ASYM_CIPHER_is_a()β returns1ifcipheris an implementation of an algorithm that's identifiable withname, otherwise0.EVP_ASYM_CIPHER_get0_provider()β returns the provider thatcipherwas fetched from. like, who raised her? πΌEVP_ASYM_CIPHER_do_all_provided()β strolls through all theEVP_ASYM_CIPHERs implemented by all the activated providers in the given library contextlibctx, and for each implementation it calls the given functionfn, passing in the implementation method and the givenarg. a full lil tour β¨EVP_ASYM_CIPHER_get0_name()β returns the algorithm name from the provided implementation for the givencipher. heads up tho: theciphercan have multiple synonyms attached to it. when that happens, you get the first name from the algorithm definition. also, ownership of the returned string stays with thecipherobject β do not free it yourself, that's not your string, she's not yours πEVP_ASYM_CIPHER_names_do_all()β traverses every single name forcipher, and callsfnwith each name plusdata.EVP_ASYM_CIPHER_get0_description()β returns a description of thecipher, made for display and human consumption. and honestly? what that description says is entirely at the discretion of the cipher implementation. it's giving free spirit π§EVP_ASYM_CIPHER_gettable_ctx_params()andEVP_ASYM_CIPHER_settable_ctx_params()β these two return a constantOSSL_PARAM(3)array that describes the names and types of key parameters that can be retrieved or set by a key encryption algorithm usingEVP_PKEY_CTX_get_params(3)andEVP_PKEY_CTX_set_params(3). very organized of them, we love a structured queen π
π RETURN VALUES π
EVP_ASYM_CIPHER_fetch()returns a pointer to anEVP_ASYM_CIPHERfor success, orNULLfor failure. πEVP_ASYM_CIPHER_up_ref()returns1for success or0otherwise.EVP_ASYM_CIPHER_names_do_all()returns1if the callback was called for all names. a return value of0means the callback was not called for any names.EVP_ASYM_CIPHER_gettable_ctx_params()andEVP_ASYM_CIPHER_settable_ctx_params()return a constantOSSL_PARAM(3)array, orNULLon error.
π SEE ALSO π
"ALGORITHM FETCHING" in crypto(7), OSSL_PROVIDER(3) β go read these too bestie, iykyk πβ¨
β HISTORY β
The functions described here were added in OpenSSL 3.0. so like, she's not even that old but she's already a classic π
π COPYRIGHT π
Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
and that's the whole page bestie, mwah π
this was OpenSSL 4.0.3, dated 2026-09-29, and yes it's the EVP_ASYM_CIPHER_FREE(3SSL) manual β go forth and free your ciphers responsibly π«ΆππΈ
π¦ where this page comes from
- ubuntu stonking: libssl-doc 4.0.3-1ubuntu1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms