OSSL_STORE_INFO(3ossl)
πΎ OSSL_STORE_INFO (3ossl) β the store-info bestie manual
π NAME π
The whole squad for manipulating OSSL_STORE_INFO objects is: OSSL_STORE_INFO, OSSL_STORE_INFO_get_type, OSSL_STORE_INFO_get0_NAME, OSSL_STORE_INFO_get0_NAME_description, OSSL_STORE_INFO_get0_PARAMS, OSSL_STORE_INFO_get0_PUBKEY, OSSL_STORE_INFO_get0_PKEY, OSSL_STORE_INFO_get0_CERT, OSSL_STORE_INFO_get0_CRL, OSSL_STORE_INFO_get1_NAME, OSSL_STORE_INFO_get1_NAME_description, OSSL_STORE_INFO_get1_PARAMS, OSSL_STORE_INFO_get1_PUBKEY, OSSL_STORE_INFO_get1_PKEY, OSSL_STORE_INFO_get1_CERT, OSSL_STORE_INFO_get1_CRL, OSSL_STORE_INFO_type_string, OSSL_STORE_INFO_free, OSSL_STORE_INFO_new_NAME, OSSL_STORE_INFO_set0_NAME_description, OSSL_STORE_INFO_new_PARAMS, OSSL_STORE_INFO_new_PUBKEY, OSSL_STORE_INFO_new_PKEY, OSSL_STORE_INFO_new_CERT, OSSL_STORE_INFO_new_CRL, OSSL_STORE_INFO_new, and OSSL_STORE_INFO_get0_data. That's the full lineup, no cap. π
π SYNOPSIS π
Okay bestie, here's the exact code vibe:
#include <openssl/store.h>
typedef struct ossl_store_info_st OSSL_STORE_INFO;
int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *store_info);
const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *store_info);
char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *store_info);
const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO
*store_info);
char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *store_info);
EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *store_info);
EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *store_info);
EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info);
EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info);
EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *store_info);
EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *store_info);
X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *store_info);
X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *store_info);
X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *store_info);
X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *store_info);
const char *OSSL_STORE_INFO_type_string(int type);
void OSSL_STORE_INFO_free(OSSL_STORE_INFO *store_info);
OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name);
int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc);
OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(DSA *dsa_params);
OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey);
OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey);
OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509);
OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl);
OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data);
void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info);
πΈ DESCRIPTION πΈ
These functions are mostly for applications to retrieve supported objects from OSSL_STORE_INFO objects, and for scheme-specific loaders to create OSSL_STORE_INFO holders. Main character energy for loaders, honestly. π«Ά
π·οΈ Types
OSSL_STORE_INFO is an opaque type β literally just an intermediary holder for the objects that have been retrieved by OSSL_STORE_load() and similar functions. A supported OpenSSL type object can be extracted using one of STORE_INFO_get0_<TYPE>(), where <TYPE> can be NAME, PARAMS, PKEY, CERT, or CRL. The lifetime of this extracted object is as long as the lifetime of the OSSL_STORE_INFO it was extracted from, so care should be taken not to free the latter too early. Careful, bestie. As an alternative, STORE_INFO_get1_<TYPE>() extracts a duplicate (or the same object with its reference count increased), which can be used after the containing OSSL_STORE_INFO has been freed. The object returned by STORE_INFO_get1_<TYPE>() must be freed separately by the caller. See "SUPPORTED OBJECTS" for more information on the types that are supported. β¨
π οΈ Functions
OSSL_STORE_INFO_get_type()β takes aOSSL_STORE_INFOand returns the STORE type number for the object inside.STORE_INFO_get_type_string()β yep, that's exactly how this paragraph spells it; it takes a STORE type number and returns a short string describing it.- The
get0crew:OSSL_STORE_INFO_get0_NAME(),OSSL_STORE_INFO_get0_NAME_description(),OSSL_STORE_INFO_get0_PARAMS(),OSSL_STORE_INFO_get0_PUBKEY(),OSSL_STORE_INFO_get0_PKEY(),OSSL_STORE_INFO_get0_CERT(), andOSSL_STORE_INFO_get0_CRL()β all take aOSSL_STORE_INFOand return the object it holds if theOSSL_STORE_INFOtype (as returned byOSSL_STORE_INFO_get_type()) matches the function; otherwiseNULL. - The
get1crew:OSSL_STORE_INFO_get1_NAME(),OSSL_STORE_INFO_get1_NAME_description(),OSSL_STORE_INFO_get1_PARAMS(),OSSL_STORE_INFO_get1_PUBKEY(),OSSL_STORE_INFO_get1_PKEY(),OSSL_STORE_INFO_get1_CERT(), andOSSL_STORE_INFO_get1_CRL()β all take aOSSL_STORE_INFOand return a duplicate of the object it holds if theOSSL_STORE_INFOtype (as returned byOSSL_STORE_INFO_get_type()) matches the function; otherwiseNULL. OSSL_STORE_INFO_free()β frees aOSSL_STORE_INFOand its contained type. If the argument isNULL, nothing is done. Respect.OSSL_STORE_INFO_new_NAME(),OSSL_STORE_INFO_new_PARAMS(),OSSL_STORE_INFO_new_PUBKEY(),OSSL_STORE_INFO_new_PKEY(),OSSL_STORE_INFO_new_CERT(), andOSSL_STORE_INFO_new_CRL()β create aOSSL_STORE_INFOobject to hold the given input object. On success, the input object is consumed. πOSSL_STORE_INFO_set0_NAME_description()β forOSSL_STORE_INFO_NAMEobjects only, this adds an extra description. That description is meant to be human readable and should be used for information printout. Cute.OSSL_STORE_INFO_new()β creates aOSSL_STORE_INFOwith an arbitrary type number and data structure. It's the responsibility of the caller to define type numbers other than the ones defined by<openssl/store.h>, and to handle freeing the associated data structure on their own. Using type numbers that are defined by<openssl/store.h>may cause undefined behaviours, including crashes. Do not play with that, bestie.OSSL_STORE_INFO_get0_data()β returns the data pointer that was passed toOSSL_STORE_INFO_new()iftypematches the type number ininfo.
OSSL_STORE_INFO_new()andOSSL_STORE_INFO_get0_data()may be useful for applications that define their own STORE data, but must be used with care. Like, actual care.
π SUPPORTED OBJECTS π
Currently supported object types are:
OSSL_STORE_INFO_NAMEβ a name is exactly that, a name. It's like a name in a directory, but formatted as a complete URI. For example, the path in URI"file:/foo/bar/"could include a file named"cookie.pem", and in that case, the returnedOSSL_STORE_INFO_NAMEobject would have the URI"file:/foo/bar/cookie.pem", which can be used by the application to get the objects in that file. This can be applied to all schemes that can somehow support a listing of object URIs.
For "file:" URIs that are used without the explicit scheme, the returned name will be the path of each object, so if "/foo/bar" was given and that path has the file "cookie.pem", the name "/foo/bar/cookie.pem" will be returned.
The returned URI is considered canonical and must be unique and permanent for the storage where the object (or collection of objects) resides. Each loader is responsible for ensuring that it only returns canonical URIs. However, it's possible that certain schemes allow an object (or collection thereof) to be reached with alternative URIs; just because one URI is canonical doesn't mean that other variants can't be used.
At the discretion of the loader that was used to get these names, an extra description may be attached as well.
OSSL_STORE_INFO_PARAMSβ key parameters.OSSL_STORE_INFO_PKEYβ a keypair or just a private key (possibly with key parameters).OSSL_STORE_INFO_PUBKEYβ a public key (possibly with key parameters).OSSL_STORE_INFO_CERTβ an X.509 certificate.OSSL_STORE_INFO_CRLβ a X.509 certificate revocation list.
π RETURN VALUES π
OSSL_STORE_INFO_get_type()β returns the STORE type number of the givenOSSL_STORE_INFO. There is no error value. It just is.- The
get0return roster:OSSL_STORE_INFO_get0_NAME(),OSSL_STORE_INFO_get0_NAME_description(),OSSL_STORE_INFO_get0_PARAMS(),OSSL_STORE_INFO_get0_PKEY(),OSSL_STORE_INFO_get0_CERT(), andOSSL_STORE_INFO_get0_CRL()β all return a pointer to the OpenSSL object on success,NULLotherwise. - The
get1return roster:OSSL_STORE_INFO_get1_NAME(),OSSL_STORE_INFO_get1_NAME_description(),OSSL_STORE_INFO_get1_PARAMS(),OSSL_STORE_INFO_get1_PKEY(),OSSL_STORE_INFO_get1_CERT(), andOSSL_STORE_INFO_get1_CRL()β all return a pointer to a duplicate of the OpenSSL object on success,NULLotherwise. OSSL_STORE_INFO_type_string()β returns a string on success, orNULLon failure.- The
newreturn roster:OSSL_STORE_INFO_new_NAME(),OSSL_STORE_INFO_new_PARAMS(),OSSL_STORE_INFO_new_PKEY(),OSSL_STORE_INFO_new_CERT(), andOSSL_STORE_INFO_new_CRL()β return aOSSL_STORE_INFOpointer on success, orNULLon failure. OSSL_STORE_INFO_set0_NAME_description()β returns1on success, or0on failure.
π SEE ALSO π
π°οΈ HISTORY π°οΈ
The OSSL_STORE API was added in OpenSSL 1.1.1. β¨
The OSSL_STORE_INFO_PUBKEY object type was added in OpenSSL 3.0. π¦
π COPYRIGHT π
Copyright 2016-2024 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>.
Source/version: 3.5.0; date: 2026-09-25 β stay iconic, keep your refcounts balanced, and log off responsibly, bestie. π
π¦ where this page comes from
- opensuse-leap 16.0: openssl-3-doc 3.5.0-160000.11.1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms