BIO_GET_EX_NEW_INDEX(3SSL)

πŸ’… BIO_GET_EX_NEW_INDEX β€” the OpenSSL one, bestie

okay so this is from the OpenSSL manual pages (yes the 3SSL ones, you know the vibe) and it's literally the blueprint for stuffing your own lil data into OpenSSL's objects. no cap, it's giving ✨ "I made this struct and I want to keep my stuff in it" ✨ energy. let's get into it 🫢


🌸 NAME 🌸

okay babes, buckle up, this is a long guest list. all of these cuties live here:

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, 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 β€” and what do they do? application-specific data. that's the whole vibe. πŸ’œ


✨ SYNOPSIS ✨

the general shape of it all, slay:

#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 have been deprecated since OpenSSL 3.0, and you can hide them entirely by defining OPENSSL_API_COMPAT with a suitable version value. peep openssl_user_macros(7) for the deets:
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);

πŸ’– DESCRIPTION πŸ’–

okay so throughout this whole page, TYPE is just a lil placeholder β€” swap it in for any of the OpenSSL datatypes listed over in CRYPTO_get_ex_new_index(3). it's a ✨ template ✨, iykyk.

🚨 real talk: every function where TYPE is DH, DSA, RSA or EC_KEY is deprecated. like, dead to us (affectionately). applications should use EVP_PKEY_set_ex_data(), EVP_PKEY_get_ex_data() and EVP_PKEY_get_ex_new_index() instead. periodt.

so what do these even do?? they handle application-specific data for OpenSSL data structures. basically you get to stash your own stuff on their objects. main character energy πŸŽ€

  • TYPE_get_ex_new_index() β€” it's a macro, and it calls CRYPTO_get_ex_new_index() with the correct index value. it's out here booking you a fresh slot 🎟️
  • TYPE_set_ex_data() β€” a function that calls CRYPTO_set_ex_data() with an offset into the opaque exdata part of the TYPE object. and babes, d MUST NOT be NULL. like seriously, don't. 😭
  • TYPE_get_ex_data() β€” a function that calls CRYPTO_get_ex_data() with an offset into the opaque exdata part of the TYPE object. and yep, d MUST NOT be NULL here either. we been knew πŸ’€
  • the app data duo β€” for compatibility with previous releases, the exdata index of zero is reserved for "application data." there are two lil convenience functions for this, no cap:
    • 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 πŸ‘‘

bestie, listen. these functions were deprecated in OpenSSL 3.0, and the whole list is:

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(), RSA_get_ex_new_index(), RSA_set_ex_data(), RSA_get_ex_data(), RSA_set_app_data() and RSA_get_app_data().

they were gorgeous, they served, but they're legacy now. 🌈


Copyright 2015-2025 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 πŸ’… sending you off with the cute lil sign-off: this was OpenSSL 4.0.3, dated 2026-09-29, and you'll find it filed under BIO_GET_EX_NEW_INDEX(3SSL). go forth and ex_data responsibly 🫢✨🌸

πŸ“¦ where this page comes from