BIO_GET_EX_NEW_INDEX(3ossl)

πŸ“¦
version 3.5.9 Β· 3 versions
, in alpine 3.23, alpine 3.24

πŸ’… 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 defining OPENSSL_API_COMPAT with a suitable version value, see openssl_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 TYPE of DH, DSA, RSA and EC_KEY is deprecated. no cap. applications should instead use EVP_PKEY_set_ex_data(), EVP_PKEY_get_ex_data() and EVP_PKEY_get_ex_new_index(). that's the glow-up path ✨
  • everything with a TYPE of ENGINE is 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 calls CRYPTO_get_ex_new_index() with the correct index value.
  • TYPE_set_ex_data() is a function that calls CRYPTO_set_ex_data() with an offset into the opaque exdata part of the TYPE object. and listen β€” d MUST NOT be NULL. like literally do not do that 😭
  • TYPE_get_ex_data() is a function that calls CRYPTO_get_ex_data() with an offset into the opaque exdata part of the TYPE object. same rule, bestie: d MUST NOT be NULL.

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 invokes TYPE_set_ex_data() with idx set to zero.
  • TYPE_get_app_data() is a macro that invokes TYPE_get_ex_data() with idx set to zero.

πŸ¦‹ RETURN VALUES πŸ¦‹

  • TYPE_get_ex_new_index() returns a new index on success or -1 on error.
  • TYPE_set_ex_data() returns 1 on success or 0 on error.
  • TYPE_get_ex_data() returns the application data or NULL if 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 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