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 whatever algorithm you asked for, from any provider offering it, matching the criteria in properties, all inside the scope of the given library context ctx (peep OSSL_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 that EVP_ASYM_CIPHER structure. usually you got this struct from an earlier EVP_ASYM_CIPHER_fetch() call. if the ref count hits 0, the structure gets freed. and if the argument is NULL? nothing happens at all. iconic, no drama. 😌
  • EVP_ASYM_CIPHER_up_ref() β€” increments the reference count for an EVP_ASYM_CIPHER structure. sharing is caring πŸ’…
  • EVP_ASYM_CIPHER_is_a() β€” returns 1 if cipher is an implementation of an algorithm that's identifiable with name, otherwise 0.
  • EVP_ASYM_CIPHER_get0_provider() β€” returns the provider that cipher was fetched from. like, who raised her? 🍼
  • EVP_ASYM_CIPHER_do_all_provided() β€” strolls through all the EVP_ASYM_CIPHERs implemented by all the activated providers in the given library context libctx, and for each implementation it calls the given function fn, passing in the implementation method and the given arg. a full lil tour ✨
  • EVP_ASYM_CIPHER_get0_name() β€” returns the algorithm name from the provided implementation for the given cipher. heads up tho: the cipher can 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 the cipher object β€” do not free it yourself, that's not your string, she's not yours πŸ’–
  • EVP_ASYM_CIPHER_names_do_all() β€” traverses every single name for cipher, and calls fn with each name plus data.
  • EVP_ASYM_CIPHER_get0_description() β€” returns a description of the cipher, 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() and EVP_ASYM_CIPHER_settable_ctx_params() β€” these two return a constant OSSL_PARAM(3) array that describes the names and types of key parameters that can be retrieved or set by a key encryption algorithm using EVP_PKEY_CTX_get_params(3) and EVP_PKEY_CTX_set_params(3). very organized of them, we love a structured queen πŸ‘‘

πŸ‘‘ RETURN VALUES πŸ‘‘

  • EVP_ASYM_CIPHER_fetch() returns a pointer to an EVP_ASYM_CIPHER for success, or NULL for failure. 😭
  • EVP_ASYM_CIPHER_up_ref() returns 1 for success or 0 otherwise.
  • EVP_ASYM_CIPHER_names_do_all() returns 1 if the callback was called for all names. a return value of 0 means the callback was not called for any names.
  • EVP_ASYM_CIPHER_gettable_ctx_params() and EVP_ASYM_CIPHER_settable_ctx_params() return a constant OSSL_PARAM(3) array, or NULL on 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 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