EVP_KEM_FREE(3ossl)
π EVP_KEM_FREE β the OpenSSL 3ossl glow-up
okay so bestie, welcome to the KEM corner of OpenSSL β¨ this page is all about the little functions that manage EVP_KEM algorithm objects β fetching them, freeing them, refcounting them, naming them, and asking them nosy questions about their params. No crypto math here, just vibes and lifecycle management π
πΈ SYNOPSIS πΈ
#include <openssl/evp.h>
EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
const char *properties);
void EVP_KEM_free(EVP_KEM *kem);
int EVP_KEM_up_ref(EVP_KEM *kem);
const char *EVP_KEM_get0_name(const EVP_KEM *kem);
int EVP_KEM_is_a(const EVP_KEM *kem, const char *name);
OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *kem);
void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx,
void (*fn)(EVP_KEM *kem, void *arg), void *arg);
int EVP_KEM_names_do_all(const EVP_KEM *kem,
void (*fn)(const char *name, void *data), void *data);
const char *EVP_KEM_get0_description(const EVP_KEM *kem);
const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem);
const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem);
π¦ DESCRIPTION π¦
π« the fetch era
EVP_KEM_fetch() is your main character moment β it goes and fetches the implementation for algorithm from any provider that's offering it, filtered by the criteria in properties, all within the scope of the library context ctx (peep OSSL_LIB_CTX(3) if you need the lore). The algorithm it hands you back is one that offers functions for doing asymmetric kem-type tasks β think key encapsulation and decapsulation β¨
if you want the full tea on how fetching works, check"ALGORITHM FETCHING"incrypto(7)π
and like, fr fr β the value that comes back must eventually be freed with EVP_KEM_free(). no ghosting your structs, bestie π
π§ free & refcount energy
EVP_KEM_free()decrements the reference count on theEVP_KEMstructure. Usually you got this thing from an earlier call toEVP_KEM_fetch(). Once the refcount hits 0, the structure gets freed. And if the argument isNULL? literally nothing happens, it's giving unbothered πEVP_KEM_up_ref()is the opposite vibe β it increments the reference count on anEVP_KEMstructure π₯
π identity checks
EVP_KEM_is_a()returns1ifkemis an implementation of an algorithm that's identifiable withname, and0otherwise. it's a vibe check for algorithms π«ΆEVP_KEM_get0_provider()returns the provider thatkemwas fetched from β like finding out which group chat they came from π
β the traversal girlies
EVP_KEM_do_all_provided()walks all theEVP_KEMs implemented by all activated providers in the given library contextlibctx, and for each implementation it calls your functionfnwith the implementation method plusargas the argument π¦EVP_KEM_names_do_all()traverses all the names forkem, callingfnwith eachnameanddataπ
π names & descriptions
EVP_KEM_get0_name()returns the algorithm name from the provided implementation for the givenkem. Important caveat though βkemmay have multiple synonyms associated with it, and in that case it returns the first name from the algorithm definition. Ownership of the returned string stays with thekemobject, so do not free it yourself, bestie, that's not your string πEVP_KEM_get0_description()returns a description of thekem, meant for display and human consumption. The description is entirely at the discretion of thekemimplementation, so it's giving author's choice β¨
π₯ ctx params
EVP_KEM_gettable_ctx_params() and EVP_KEM_settable_ctx_params() return a constant OSSL_PARAM(3) array describing the names and types of key parameters that a key encapsulation algorithm can retrieve or set using EVP_PKEY_CTX_get_params(3) and EVP_PKEY_CTX_set_params(3). it's the parameter menu, basically π
π RETURN VALUES π
EVP_KEM_fetch()returns a pointer to anEVP_KEMfor success, orNULLfor failure πEVP_KEM_up_ref()returns1for success, or0otherwiseEVP_KEM_names_do_all()returns1if the callback was called for all names. A return value of0means the callback was not called for any names β so like, empty roster energy πEVP_KEM_gettable_ctx_params()andEVP_KEM_settable_ctx_params()return a constantOSSL_PARAM(3)array, orNULLon error
π§ SEE ALSO π§
"ALGORITHM FETCHING"incrypto(7)OSSL_PROVIDER(3)
π HISTORY π
The functions described here were added in OpenSSL 3.0 β so they're not new new, but they're still iconic π
πΈ COPYRIGHT πΈ
Copyright 2020-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>.
okay that's the whole page, bestie, you ate that π«Ά this was the EVP_KEM_FREE(3ossl) manual page, version 3.5.6, dated 2026-04-07 β go forth and manage your KEM objects responsibly, mwah πβ¨π
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms