BIO_GET_EX_NEW_INDEX(3ossl)

πŸ’– BIO_GET_EX_NEW_INDEX πŸ’–

okay so bestie, we're in BIO_GET_EX_NEW_INDEX(3ossl) territory, and this is the OpenSSL manual page for application-specific data β€” aka the little secret pocket you get to stuff your own stuff into when OpenSSL objects aren't giving you enough room. πŸŽ€


✨ 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… that's a LOT of names. it's giving "the whole group chat got invited." πŸ’…


🌈 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)

now the messy part. the following functions have been 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 all of this description, TYPE is just a placeholder standing in for any of the OpenSSL datatypes listed over in CRYPTO_get_ex_new_index(3). it's the "insert your fave here" of the manpage. πŸ’–

okay, the sad part first:

  • all functions with a TYPE of DH, DSA, RSA and EC_KEY are deprecated. applications should instead use EVP_PKEY_set_ex_data(), EVP_PKEY_get_ex_data() and EVP_PKEY_get_ex_new_index(). πŸ”„
  • all functions with a TYPE of ENGINE are deprecated. applications using engines should be replaced by providers. 🫠

now the actual vibe: these functions handle application-specific data for OpenSSL data structures. it's your lil VIP section. 🎟️

  • TYPE_get_ex_new_index() β€” this is a macro that calls CRYPTO_get_ex_new_index() with the correct index value. ✨
  • TYPE_set_ex_data() β€” a function that calls CRYPTO_set_ex_data() with an offset into the opaque exdata part of the TYPE object. d MUST NOT be NULL. no cap.
  • TYPE_get_ex_data() β€” a function that calls CRYPTO_get_ex_data() with an offset into the opaque exdata part of the TYPE object. d MUST NOT be NULL. again. don't do it. πŸ™ˆ
fun lore moment: for compatibility with previous releases, the exdata index of zero is reserved for "application data."

there are two convenience functions for that:

  • TYPE_set_app_data() β€” a macro that invokes TYPE_set_ex_data() with idx set to zero. πŸ“
  • TYPE_get_app_data() β€” 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 🌸

CRYPTO_get_ex_new_index(3).


⭐ HISTORY ⭐

the following functions were deprecated in OpenSSL 3.0: 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().

like… rest in peace besties, y'all served your time. πŸͺ¦βœ¨


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>.


and that's the whole thing, bestie!! πŸŽ€ this page is from OpenSSL 3.5.9, dated 2026-09-29, and the manual page name is BIO_GET_EX_NEW_INDEX(3ossl) β€” go forth and store your little secrets responsibly. mwah. πŸ’…πŸ«ΆπŸ’–

πŸ“¦ where this page comes from