1e71b7053SJung-uk Kim=pod 2e71b7053SJung-uk Kim 3e71b7053SJung-uk Kim=head1 NAME 4e71b7053SJung-uk Kim 5e71b7053SJung-uk KimOSSL_STORE_INFO, OSSL_STORE_INFO_get_type, OSSL_STORE_INFO_get0_NAME, 6b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_NAME_description, 7b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_PARAMS, OSSL_STORE_INFO_get0_PUBKEY, 8e71b7053SJung-uk KimOSSL_STORE_INFO_get0_PKEY, OSSL_STORE_INFO_get0_CERT, OSSL_STORE_INFO_get0_CRL, 9e71b7053SJung-uk KimOSSL_STORE_INFO_get1_NAME, OSSL_STORE_INFO_get1_NAME_description, 10b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PARAMS, OSSL_STORE_INFO_get1_PUBKEY, 11b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PKEY, OSSL_STORE_INFO_get1_CERT, OSSL_STORE_INFO_get1_CRL, 12b077aed3SPierre ProncheryOSSL_STORE_INFO_type_string, OSSL_STORE_INFO_free, 13e71b7053SJung-uk KimOSSL_STORE_INFO_new_NAME, OSSL_STORE_INFO_set0_NAME_description, 14b077aed3SPierre ProncheryOSSL_STORE_INFO_new_PARAMS, OSSL_STORE_INFO_new_PUBKEY, 15b077aed3SPierre ProncheryOSSL_STORE_INFO_new_PKEY, OSSL_STORE_INFO_new_CERT, OSSL_STORE_INFO_new_CRL, 16b077aed3SPierre ProncheryOSSL_STORE_INFO_new, OSSL_STORE_INFO_get0_data 17b077aed3SPierre Pronchery- Functions to manipulate OSSL_STORE_INFO objects 18e71b7053SJung-uk Kim 19e71b7053SJung-uk Kim=head1 SYNOPSIS 20e71b7053SJung-uk Kim 21e71b7053SJung-uk Kim #include <openssl/store.h> 22e71b7053SJung-uk Kim 23e71b7053SJung-uk Kim typedef struct ossl_store_info_st OSSL_STORE_INFO; 24e71b7053SJung-uk Kim 25e71b7053SJung-uk Kim int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *store_info); 26e71b7053SJung-uk Kim const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *store_info); 27e71b7053SJung-uk Kim char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *store_info); 28e71b7053SJung-uk Kim const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO 29e71b7053SJung-uk Kim *store_info); 30e71b7053SJung-uk Kim char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *store_info); 31e71b7053SJung-uk Kim EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *store_info); 32e71b7053SJung-uk Kim EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *store_info); 33b077aed3SPierre Pronchery EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); 34b077aed3SPierre Pronchery EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info); 35e71b7053SJung-uk Kim EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *store_info); 36e71b7053SJung-uk Kim EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *store_info); 37e71b7053SJung-uk Kim X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *store_info); 38e71b7053SJung-uk Kim X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *store_info); 39e71b7053SJung-uk Kim X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *store_info); 40e71b7053SJung-uk Kim X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *store_info); 41e71b7053SJung-uk Kim 42e71b7053SJung-uk Kim const char *OSSL_STORE_INFO_type_string(int type); 43e71b7053SJung-uk Kim 44e71b7053SJung-uk Kim void OSSL_STORE_INFO_free(OSSL_STORE_INFO *store_info); 45e71b7053SJung-uk Kim 46e71b7053SJung-uk Kim OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); 47e71b7053SJung-uk Kim int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); 48e71b7053SJung-uk Kim OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(DSA *dsa_params); 49b077aed3SPierre Pronchery OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey); 50e71b7053SJung-uk Kim OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); 51e71b7053SJung-uk Kim OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); 52e71b7053SJung-uk Kim OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); 53e71b7053SJung-uk Kim 54b077aed3SPierre Pronchery OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); 55b077aed3SPierre Pronchery void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); 56b077aed3SPierre Pronchery 57e71b7053SJung-uk Kim=head1 DESCRIPTION 58e71b7053SJung-uk Kim 59e71b7053SJung-uk KimThese functions are primarily useful for applications to retrieve 60e71b7053SJung-uk Kimsupported objects from B<OSSL_STORE_INFO> objects and for scheme specific 61e71b7053SJung-uk Kimloaders to create B<OSSL_STORE_INFO> holders. 62e71b7053SJung-uk Kim 63e71b7053SJung-uk Kim=head2 Types 64e71b7053SJung-uk Kim 65e71b7053SJung-uk KimB<OSSL_STORE_INFO> is an opaque type that's just an intermediary holder for 66b077aed3SPierre Proncherythe objects that have been retrieved by OSSL_STORE_load() and similar functions. 67e71b7053SJung-uk KimSupported OpenSSL type object can be extracted using one of 68b077aed3SPierre ProncherySTORE_INFO_get0_<TYPE>() where <TYPE> can be NAME, PARAMS, PKEY, CERT, or CRL. 69e71b7053SJung-uk KimThe life time of this extracted object is as long as the life time of 70e71b7053SJung-uk Kimthe B<OSSL_STORE_INFO> it was extracted from, so care should be taken not 71e71b7053SJung-uk Kimto free the latter too early. 72b077aed3SPierre ProncheryAs an alternative, STORE_INFO_get1_<TYPE>() extracts a duplicate (or the 73e71b7053SJung-uk Kimsame object with its reference count increased), which can be used 74e71b7053SJung-uk Kimafter the containing B<OSSL_STORE_INFO> has been freed. 75b077aed3SPierre ProncheryThe object returned by STORE_INFO_get1_<TYPE>() must be freed separately 76e71b7053SJung-uk Kimby the caller. 77b077aed3SPierre ProncherySee L</SUPPORTED OBJECTS> for more information on the types that are supported. 78e71b7053SJung-uk Kim 79e71b7053SJung-uk Kim=head2 Functions 80e71b7053SJung-uk Kim 81e71b7053SJung-uk KimOSSL_STORE_INFO_get_type() takes a B<OSSL_STORE_INFO> and returns the STORE 82e71b7053SJung-uk Kimtype number for the object inside. 83b077aed3SPierre Pronchery 84e71b7053SJung-uk KimSTORE_INFO_get_type_string() takes a STORE type number and returns a 85e71b7053SJung-uk Kimshort string describing it. 86e71b7053SJung-uk Kim 87e71b7053SJung-uk KimOSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_NAME_description(), 88b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PUBKEY(), 89b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), 90b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_CRL() 91b077aed3SPierre Proncheryall take a B<OSSL_STORE_INFO> and return the object it holds if the 92b077aed3SPierre ProncheryB<OSSL_STORE_INFO> type (as returned by OSSL_STORE_INFO_get_type()) 93b077aed3SPierre Proncherymatches the function, otherwise NULL. 94e71b7053SJung-uk Kim 95e71b7053SJung-uk KimOSSL_STORE_INFO_get1_NAME(), OSSL_STORE_INFO_get1_NAME_description(), 96b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PARAMS(), OSSL_STORE_INFO_get1_PUBKEY(), 97b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PKEY(), OSSL_STORE_INFO_get1_CERT() and 98b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_CRL() 99b077aed3SPierre Proncheryall take a B<OSSL_STORE_INFO> and return a duplicate the object it 100b077aed3SPierre Proncheryholds if the B<OSSL_STORE_INFO> type (as returned by 101b077aed3SPierre ProncheryOSSL_STORE_INFO_get_type()) matches the function, otherwise NULL. 102e71b7053SJung-uk Kim 103e71b7053SJung-uk KimOSSL_STORE_INFO_free() frees a B<OSSL_STORE_INFO> and its contained type. 104*a7148ab3SEnji CooperIf the argument is NULL, nothing is done. 105e71b7053SJung-uk Kim 106e71b7053SJung-uk KimOSSL_STORE_INFO_new_NAME() , OSSL_STORE_INFO_new_PARAMS(), 107b077aed3SPierre Pronchery, OSSL_STORE_INFO_new_PUBKEY(), OSSL_STORE_INFO_new_PKEY(), 108b077aed3SPierre ProncheryOSSL_STORE_INFO_new_CERT() and OSSL_STORE_INFO_new_CRL() 109b077aed3SPierre Proncherycreate a B<OSSL_STORE_INFO> object to hold the given input object. 110b077aed3SPierre ProncheryOn success the input object is consumed. 111b077aed3SPierre Pronchery 112b077aed3SPierre ProncheryAdditionally, for B<OSSL_STORE_INFO_NAME> objects, 113e71b7053SJung-uk KimOSSL_STORE_INFO_set0_NAME_description() can be used to add an extra 114e71b7053SJung-uk Kimdescription. 115e71b7053SJung-uk KimThis description is meant to be human readable and should be used for 116e71b7053SJung-uk Kiminformation printout. 117e71b7053SJung-uk Kim 118b077aed3SPierre ProncheryOSSL_STORE_INFO_new() creates a B<OSSL_STORE_INFO> with an arbitrary I<type> 119b077aed3SPierre Proncherynumber and I<data> structure. It's the responsibility of the caller to 120b077aed3SPierre Proncherydefine type numbers other than the ones defined by F<< <openssl/store.h> >>, 121b077aed3SPierre Proncheryand to handle freeing the associated data structure on their own. 122b077aed3SPierre ProncheryI<Using type numbers that are defined by F<< <openssl/store.h> >> may cause 123b077aed3SPierre Proncheryundefined behaviours, including crashes>. 124b077aed3SPierre Pronchery 125b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_data() returns the data pointer that was passed to 126b077aed3SPierre ProncheryOSSL_STORE_INFO_new() if I<type> matches the type number in I<info>. 127b077aed3SPierre Pronchery 128b077aed3SPierre ProncheryOSSL_STORE_INFO_new() and OSSL_STORE_INFO_get0_data() may be useful for 129b077aed3SPierre Proncheryapplications that define their own STORE data, but must be used with care. 130b077aed3SPierre Pronchery 131e71b7053SJung-uk Kim=head1 SUPPORTED OBJECTS 132e71b7053SJung-uk Kim 133e71b7053SJung-uk KimCurrently supported object types are: 134e71b7053SJung-uk Kim 135e71b7053SJung-uk Kim=over 4 136e71b7053SJung-uk Kim 137e71b7053SJung-uk Kim=item OSSL_STORE_INFO_NAME 138e71b7053SJung-uk Kim 139e71b7053SJung-uk KimA name is exactly that, a name. 140e71b7053SJung-uk KimIt's like a name in a directory, but formatted as a complete URI. 141e71b7053SJung-uk KimFor example, the path in URI C<file:/foo/bar/> could include a file 142e71b7053SJung-uk Kimnamed C<cookie.pem>, and in that case, the returned B<OSSL_STORE_INFO_NAME> 143e71b7053SJung-uk Kimobject would have the URI C<file:/foo/bar/cookie.pem>, which can be 144e71b7053SJung-uk Kimused by the application to get the objects in that file. 145e71b7053SJung-uk KimThis can be applied to all schemes that can somehow support a listing 146e71b7053SJung-uk Kimof object URIs. 147e71b7053SJung-uk Kim 148e71b7053SJung-uk KimFor C<file:> URIs that are used without the explicit scheme, the 149e71b7053SJung-uk Kimreturned name will be the path of each object, so if C</foo/bar> was 150e71b7053SJung-uk Kimgiven and that path has the file C<cookie.pem>, the name 151e71b7053SJung-uk KimC</foo/bar/cookie.pem> will be returned. 152e71b7053SJung-uk Kim 153e71b7053SJung-uk KimThe returned URI is considered canonical and must be unique and permanent 154e71b7053SJung-uk Kimfor the storage where the object (or collection of objects) resides. 155e71b7053SJung-uk KimEach loader is responsible for ensuring that it only returns canonical 156e71b7053SJung-uk KimURIs. 157e71b7053SJung-uk KimHowever, it's possible that certain schemes allow an object (or collection 158e71b7053SJung-uk Kimthereof) to be reached with alternative URIs; just because one URI is 159e71b7053SJung-uk Kimcanonical doesn't mean that other variants can't be used. 160e71b7053SJung-uk Kim 161e71b7053SJung-uk KimAt the discretion of the loader that was used to get these names, an 162e71b7053SJung-uk Kimextra description may be attached as well. 163e71b7053SJung-uk Kim 164e71b7053SJung-uk Kim=item OSSL_STORE_INFO_PARAMS 165e71b7053SJung-uk Kim 166e71b7053SJung-uk KimKey parameters. 167e71b7053SJung-uk Kim 168e71b7053SJung-uk Kim=item OSSL_STORE_INFO_PKEY 169e71b7053SJung-uk Kim 170b077aed3SPierre ProncheryA keypair or just a private key (possibly with key parameters). 171b077aed3SPierre Pronchery 172b077aed3SPierre Pronchery=item OSSL_STORE_INFO_PUBKEY 173b077aed3SPierre Pronchery 174b077aed3SPierre ProncheryA public key (possibly with key parameters). 175e71b7053SJung-uk Kim 176e71b7053SJung-uk Kim=item OSSL_STORE_INFO_CERT 177e71b7053SJung-uk Kim 178e71b7053SJung-uk KimAn X.509 certificate. 179e71b7053SJung-uk Kim 180e71b7053SJung-uk Kim=item OSSL_STORE_INFO_CRL 181e71b7053SJung-uk Kim 182e71b7053SJung-uk KimA X.509 certificate revocation list. 183e71b7053SJung-uk Kim 184e71b7053SJung-uk Kim=back 185e71b7053SJung-uk Kim 186e71b7053SJung-uk Kim=head1 RETURN VALUES 187e71b7053SJung-uk Kim 188e71b7053SJung-uk KimOSSL_STORE_INFO_get_type() returns the STORE type number of the given 189e71b7053SJung-uk KimB<OSSL_STORE_INFO>. 190e71b7053SJung-uk KimThere is no error value. 191e71b7053SJung-uk Kim 192e71b7053SJung-uk KimOSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_NAME_description(), 193e71b7053SJung-uk KimOSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PKEY(), 194e71b7053SJung-uk KimOSSL_STORE_INFO_get0_CERT() and OSSL_STORE_INFO_get0_CRL() all return 195e71b7053SJung-uk Kima pointer to the OpenSSL object on success, NULL otherwise. 196e71b7053SJung-uk Kim 197b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_NAME(), OSSL_STORE_INFO_get1_NAME_description(), 198b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PARAMS(), OSSL_STORE_INFO_get1_PKEY(), 199b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_CERT() and OSSL_STORE_INFO_get1_CRL() all return 200e71b7053SJung-uk Kima pointer to a duplicate of the OpenSSL object on success, NULL otherwise. 201e71b7053SJung-uk Kim 202b077aed3SPierre ProncheryOSSL_STORE_INFO_type_string() returns a string on success, or NULL on 203e71b7053SJung-uk Kimfailure. 204e71b7053SJung-uk Kim 205e71b7053SJung-uk KimOSSL_STORE_INFO_new_NAME(), OSSL_STORE_INFO_new_PARAMS(), 206e71b7053SJung-uk KimOSSL_STORE_INFO_new_PKEY(), OSSL_STORE_INFO_new_CERT() and 207e71b7053SJung-uk KimOSSL_STORE_INFO_new_CRL() return a B<OSSL_STORE_INFO> 208b077aed3SPierre Proncherypointer on success, or NULL on failure. 209e71b7053SJung-uk Kim 210e71b7053SJung-uk KimOSSL_STORE_INFO_set0_NAME_description() returns 1 on success, or 0 on 211e71b7053SJung-uk Kimfailure. 212e71b7053SJung-uk Kim 213e71b7053SJung-uk Kim=head1 SEE ALSO 214e71b7053SJung-uk Kim 215e71b7053SJung-uk KimL<ossl_store(7)>, L<OSSL_STORE_open(3)>, L<OSSL_STORE_register_loader(3)> 216e71b7053SJung-uk Kim 217e71b7053SJung-uk Kim=head1 HISTORY 218e71b7053SJung-uk Kim 219b077aed3SPierre ProncheryThe OSSL_STORE API was added in OpenSSL 1.1.1. 220b077aed3SPierre Pronchery 221b077aed3SPierre ProncheryThe OSSL_STORE_INFO_PUBKEY object type was added in OpenSSL 3.0. 222e71b7053SJung-uk Kim 223e71b7053SJung-uk Kim=head1 COPYRIGHT 224e71b7053SJung-uk Kim 225*a7148ab3SEnji CooperCopyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved. 226e71b7053SJung-uk Kim 227b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License"). You may not use 228e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 229e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 230e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 231e71b7053SJung-uk Kim 232e71b7053SJung-uk Kim=cut 233