SSL_GET_EX_NEW_INDEX(3)

πŸ“¦ version 4.4.0, in alpine 3.24, arch rolling

πŸ’… SSL_GET_EX_NEW_INDEX(3) β€” the libssl/libcrypto glow-up

okay so bestie, this is one of those pages from the libssl / libcrypto manual set, and it's all about the little secret pocket dimension where OpenSSL structures keep your stuff πŸŽ€ Like, the library has these big important structs, and sometimes you just wanna tuck a lil something of your own in there. That's what this is. Internal application-specific data functions, periodt.


✨ SYNOPSIS ✨

library β€œlibssl” libcrypto #include <openssl/ssl.h>

int
SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
    CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);

int
SSL_set_ex_data(SSL *ssl, int idx, void *arg);

void *
SSL_get_ex_data(const SSL *ssl, int idx);

typedef int new_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
               int idx, long argl, void *argp);
typedef void free_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
               int idx, long argl, void *argp);
typedef int dup_func(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d,
               int idx, long argl, void *argp);

Like, vibe check those typedefs β€” new_func, free_func, dup_func β€” they're giving callback energy and honestly? iconic πŸ”₯


🌸 DESCRIPTION 🌸

So. Several OpenSSL structures can have application specific data attached to them β€” like lil friendship bracelets only your app knows the meaning of 🫢 These functions here are used internally by OpenSSL to manipulate that application specific data attached to a specific structure.

  • SSL_get_ex_new_index() β€” registers a brand new index for application specific data. New index, new you, slay ✨
  • SSL_set_ex_data() β€” stores application data at arg for idx into the ssl object. It's giving "put it in the box, bestie" πŸ’–
  • SSL_get_ex_data() β€” retrieves the information for idx from ssl. The box opens, your stuff is still there, we love to see it πŸ‘‘

ngl, if you want the full tea on this stuff: a detailed description of the *_get_ex_new_index() functionality can be found in RSA_get_ex_new_index(3), and the *_get_ex_data() and *_set_ex_data() functionality is described in CRYPTO_set_ex_data(3). Go read those too, iykyk πŸ’…


πŸ’€ EXAMPLES πŸ’€

An example of how to use the functionality is included in the example verify_callback() in SSL_CTX_set_verify(3). Literally go look at it, it ate 🌈


πŸ¦‹ SEE ALSO πŸ¦‹


πŸ‘‘ HISTORY πŸ‘‘

Precursor functions SSL_set_app_data() and SSL_get_app_data() first appeared in SSLeay 0.6.1. Ancient. Historical. Respect the elders 🧚

Then SSL_get_ex_new_index(), SSL_set_ex_data(), and SSL_get_ex_data() first appeared in SSLeay 0.9.0 and have been available since OpenBSD 2.4. Not me being this well-traveled πŸ˜­πŸ’œ


no cap, every flag, every signature, every path up there is copy-pasted from the real page on purpose β€” the vibe is mine, the facts are sacred πŸ“

anyway that's the whole page, stan CRYPTO_EX_DATA, and remember: this beauty shipped from the Debian libssl/libcrypto manual set, dated June 8, 2025, page SSL_GET_EX_NEW_INDEX(3) β€” mwah πŸ’‹β­

πŸ“¦ where this page comes from