BIO_GET_EX_NEW_INDEX(3ossl)
π BIO_GET_EX_NEW_INDEX π
okay so bestie, this is an OpenSSL manpage β the 3ossl one β and it's literally all about stashing your own custom data inside OpenSSL's data structures. like, giving their structs little pockets for your stuff. obsessed. π
β¨ NAME β¨
BIO_get_ex_new_index, BIO_set_ex_data, BIO_get_ex_data, BIO_set_app_data, BIO_get_app_data, DH_get_ex_new_index, DH_set_ex_data, DH_get_ex_data, DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data, EC_KEY_get_ex_new_index, EC_KEY_set_ex_data, EC_KEY_get_ex_data, ENGINE_get_ex_new_index, ENGINE_set_ex_data, ENGINE_get_ex_data, EVP_PKEY_get_ex_new_index, EVP_PKEY_set_ex_data, EVP_PKEY_get_ex_data, RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data, RSA_set_app_data, RSA_get_app_data, SSL_get_ex_new_index, SSL_set_ex_data, SSL_get_ex_data, SSL_set_app_data, SSL_get_app_data, SSL_CTX_get_ex_new_index, SSL_CTX_set_ex_data, SSL_CTX_get_ex_data, SSL_CTX_set_app_data, SSL_CTX_get_app_data, SSL_SESSION_get_ex_new_index, SSL_SESSION_set_ex_data, SSL_SESSION_get_ex_data, SSL_SESSION_set_app_data, SSL_SESSION_get_app_data, UI_get_ex_new_index, UI_set_ex_data, UI_get_ex_data, UI_set_app_data, UI_get_app_data, X509_STORE_CTX_get_ex_new_index, X509_STORE_CTX_set_ex_data, X509_STORE_CTX_get_ex_data, X509_STORE_CTX_set_app_data, X509_STORE_CTX_get_app_data, X509_STORE_get_ex_new_index, X509_STORE_set_ex_data, X509_STORE_get_ex_data, X509_get_ex_new_index, X509_set_ex_data, X509_get_ex_data β application-specific data π«Ά
like yes, that's a lot of names, but they're all the same vibe, i promise.
β¨ SYNOPSIS β¨
#include <openssl/x509.h>
int TYPE_get_ex_new_index(long argl, void *argp,
CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func,
CRYPTO_EX_free *free_func);
int TYPE_set_ex_data(TYPE *d, int idx, void *arg);
void *TYPE_get_ex_data(const TYPE *d, int idx);
#define TYPE_set_app_data(TYPE *d, void *arg)
#define TYPE_get_app_data(TYPE *d)
β οΈ heads up bestie β the following functions are deprecated since OpenSSL 3.0, and you can hide them entirely by definingOPENSSL_API_COMPATwith a suitable version value, seeopenssl_user_macros(7):
int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
int DH_set_ex_data(DH *type, int idx, void *arg);
void *DH_get_ex_data(DH *type, int idx);
int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
int DSA_set_ex_data(DSA *type, int idx, void *arg);
void *DSA_get_ex_data(DSA *type, int idx);
int EC_KEY_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
int EC_KEY_set_ex_data(EC_KEY *type, int idx, void *arg);
void *EC_KEY_get_ex_data(EC_KEY *type, int idx);
int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
int RSA_set_ex_data(RSA *type, int idx, void *arg);
void *RSA_get_ex_data(RSA *type, int idx);
int RSA_set_app_data(RSA *type, void *arg);
void *RSA_get_app_data(RSA *type);
int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
int ENGINE_set_ex_data(ENGINE *type, int idx, void *arg);
void *ENGINE_get_ex_data(ENGINE *type, int idx);
πΈ DESCRIPTION πΈ
so in this whole description, TYPE is just a placeholder for any of the OpenSSL datatypes listed over in CRYPTO_get_ex_new_index(3). it's giving "insert your fave struct here" energy π
- everything with a
TYPEofDH,DSA,RSAandEC_KEYis deprecated. no cap. applications should instead useEVP_PKEY_set_ex_data(),EVP_PKEY_get_ex_data()andEVP_PKEY_get_ex_new_index(). that's the glow-up path β¨ - everything with a
TYPEofENGINEis also deprecated. if you're using engines, they should be replaced by providers. periodt.
these functions handle application-specific data for OpenSSL data structures β like little VIP lockers for your own stuff inside their objects π
TYPE_get_ex_new_index()is a macro that callsCRYPTO_get_ex_new_index()with the correct index value.TYPE_set_ex_data()is a function that callsCRYPTO_set_ex_data()with an offset into the opaque exdata part of theTYPEobject. and listen βdMUST NOT beNULL. like literally do not do that πTYPE_get_ex_data()is a function that callsCRYPTO_get_ex_data()with an offset into the opaque exdata part of theTYPEobject. same rule, bestie:dMUST NOT beNULL.
for compatibility with previous releases, the exdata index of zero is reserved for "application data." there are two convenience functions for this, because of course there are π
TYPE_set_app_data()is a macro that invokesTYPE_set_ex_data()withidxset to zero.TYPE_get_app_data()is a macro that invokesTYPE_get_ex_data()withidxset to zero.
π¦ RETURN VALUES π¦
TYPE_get_ex_new_index()returns a new index on success or-1on error.TYPE_set_ex_data()returns1on success or0on error.TYPE_get_ex_data()returns the application data orNULLif an error occurred.
π SEE ALSO π
π HISTORY π
the following were deprecated in OpenSSL 3.0 β mark it down, iykyk:
DH_get_ex_new_index(), DH_set_ex_data(), DH_get_ex_data(), DSA_get_ex_new_index(), DSA_set_ex_data(), DSA_get_ex_data(), EC_KEY_get_ex_new_index(), EC_KEY_set_ex_data(), EC_KEY_get_ex_data(), ENGINE_get_ex_new_index(), ENGINE_set_ex_data(), ENGINE_get_ex_data(), RSA_get_ex_new_index(), RSA_set_ex_data(), RSA_get_ex_data(), RSA_set_app_data() and RSA_get_app_data().
π COPYRIGHT π
Copyright 2015-2021 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 thing, you ate that π this was OpenSSL 3.5.9, dated 2026-09-29 β mwah, go forth and store your exdata responsibly πβ¨π§
π¦ where this page comes from
- alpine 3.23: openssl-doc 3.5.9-r0 Β· Apache-2.0
- alpine 3.24: openssl-doc 3.5.9-r0 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms