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, 6*b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_NAME_description, 7*b077aed3SPierre 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, 10*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PARAMS, OSSL_STORE_INFO_get1_PUBKEY, 11*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PKEY, OSSL_STORE_INFO_get1_CERT, OSSL_STORE_INFO_get1_CRL, 12*b077aed3SPierre ProncheryOSSL_STORE_INFO_type_string, OSSL_STORE_INFO_free, 13e71b7053SJung-uk KimOSSL_STORE_INFO_new_NAME, OSSL_STORE_INFO_set0_NAME_description, 14*b077aed3SPierre ProncheryOSSL_STORE_INFO_new_PARAMS, OSSL_STORE_INFO_new_PUBKEY, 15*b077aed3SPierre ProncheryOSSL_STORE_INFO_new_PKEY, OSSL_STORE_INFO_new_CERT, OSSL_STORE_INFO_new_CRL, 16*b077aed3SPierre ProncheryOSSL_STORE_INFO_new, OSSL_STORE_INFO_get0_data 17*b077aed3SPierre 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); 33*b077aed3SPierre Pronchery EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); 34*b077aed3SPierre 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); 49*b077aed3SPierre 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 54*b077aed3SPierre Pronchery OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); 55*b077aed3SPierre Pronchery void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); 56*b077aed3SPierre 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 66*b077aed3SPierre 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 68*b077aed3SPierre 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. 72*b077aed3SPierre 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. 75*b077aed3SPierre ProncheryThe object returned by STORE_INFO_get1_<TYPE>() must be freed separately 76e71b7053SJung-uk Kimby the caller. 77*b077aed3SPierre 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. 83*b077aed3SPierre 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(), 88*b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PUBKEY(), 89*b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), 90*b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_CRL() 91*b077aed3SPierre Proncheryall take a B<OSSL_STORE_INFO> and return the object it holds if the 92*b077aed3SPierre ProncheryB<OSSL_STORE_INFO> type (as returned by OSSL_STORE_INFO_get_type()) 93*b077aed3SPierre Proncherymatches the function, otherwise NULL. 94e71b7053SJung-uk Kim 95e71b7053SJung-uk KimOSSL_STORE_INFO_get1_NAME(), OSSL_STORE_INFO_get1_NAME_description(), 96*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PARAMS(), OSSL_STORE_INFO_get1_PUBKEY(), 97*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PKEY(), OSSL_STORE_INFO_get1_CERT() and 98*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_CRL() 99*b077aed3SPierre Proncheryall take a B<OSSL_STORE_INFO> and return a duplicate the object it 100*b077aed3SPierre Proncheryholds if the B<OSSL_STORE_INFO> type (as returned by 101*b077aed3SPierre 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. 104e71b7053SJung-uk Kim 105e71b7053SJung-uk KimOSSL_STORE_INFO_new_NAME() , OSSL_STORE_INFO_new_PARAMS(), 106*b077aed3SPierre Pronchery, OSSL_STORE_INFO_new_PUBKEY(), OSSL_STORE_INFO_new_PKEY(), 107*b077aed3SPierre ProncheryOSSL_STORE_INFO_new_CERT() and OSSL_STORE_INFO_new_CRL() 108*b077aed3SPierre Proncherycreate a B<OSSL_STORE_INFO> object to hold the given input object. 109*b077aed3SPierre ProncheryOn success the input object is consumed. 110*b077aed3SPierre Pronchery 111*b077aed3SPierre ProncheryAdditionally, for B<OSSL_STORE_INFO_NAME> objects, 112e71b7053SJung-uk KimOSSL_STORE_INFO_set0_NAME_description() can be used to add an extra 113e71b7053SJung-uk Kimdescription. 114e71b7053SJung-uk KimThis description is meant to be human readable and should be used for 115e71b7053SJung-uk Kiminformation printout. 116e71b7053SJung-uk Kim 117*b077aed3SPierre ProncheryOSSL_STORE_INFO_new() creates a B<OSSL_STORE_INFO> with an arbitrary I<type> 118*b077aed3SPierre Proncherynumber and I<data> structure. It's the responsibility of the caller to 119*b077aed3SPierre Proncherydefine type numbers other than the ones defined by F<< <openssl/store.h> >>, 120*b077aed3SPierre Proncheryand to handle freeing the associated data structure on their own. 121*b077aed3SPierre ProncheryI<Using type numbers that are defined by F<< <openssl/store.h> >> may cause 122*b077aed3SPierre Proncheryundefined behaviours, including crashes>. 123*b077aed3SPierre Pronchery 124*b077aed3SPierre ProncheryOSSL_STORE_INFO_get0_data() returns the data pointer that was passed to 125*b077aed3SPierre ProncheryOSSL_STORE_INFO_new() if I<type> matches the type number in I<info>. 126*b077aed3SPierre Pronchery 127*b077aed3SPierre ProncheryOSSL_STORE_INFO_new() and OSSL_STORE_INFO_get0_data() may be useful for 128*b077aed3SPierre Proncheryapplications that define their own STORE data, but must be used with care. 129*b077aed3SPierre Pronchery 130e71b7053SJung-uk Kim=head1 SUPPORTED OBJECTS 131e71b7053SJung-uk Kim 132e71b7053SJung-uk KimCurrently supported object types are: 133e71b7053SJung-uk Kim 134e71b7053SJung-uk Kim=over 4 135e71b7053SJung-uk Kim 136e71b7053SJung-uk Kim=item OSSL_STORE_INFO_NAME 137e71b7053SJung-uk Kim 138e71b7053SJung-uk KimA name is exactly that, a name. 139e71b7053SJung-uk KimIt's like a name in a directory, but formatted as a complete URI. 140e71b7053SJung-uk KimFor example, the path in URI C<file:/foo/bar/> could include a file 141e71b7053SJung-uk Kimnamed C<cookie.pem>, and in that case, the returned B<OSSL_STORE_INFO_NAME> 142e71b7053SJung-uk Kimobject would have the URI C<file:/foo/bar/cookie.pem>, which can be 143e71b7053SJung-uk Kimused by the application to get the objects in that file. 144e71b7053SJung-uk KimThis can be applied to all schemes that can somehow support a listing 145e71b7053SJung-uk Kimof object URIs. 146e71b7053SJung-uk Kim 147e71b7053SJung-uk KimFor C<file:> URIs that are used without the explicit scheme, the 148e71b7053SJung-uk Kimreturned name will be the path of each object, so if C</foo/bar> was 149e71b7053SJung-uk Kimgiven and that path has the file C<cookie.pem>, the name 150e71b7053SJung-uk KimC</foo/bar/cookie.pem> will be returned. 151e71b7053SJung-uk Kim 152e71b7053SJung-uk KimThe returned URI is considered canonical and must be unique and permanent 153e71b7053SJung-uk Kimfor the storage where the object (or collection of objects) resides. 154e71b7053SJung-uk KimEach loader is responsible for ensuring that it only returns canonical 155e71b7053SJung-uk KimURIs. 156e71b7053SJung-uk KimHowever, it's possible that certain schemes allow an object (or collection 157e71b7053SJung-uk Kimthereof) to be reached with alternative URIs; just because one URI is 158e71b7053SJung-uk Kimcanonical doesn't mean that other variants can't be used. 159e71b7053SJung-uk Kim 160e71b7053SJung-uk KimAt the discretion of the loader that was used to get these names, an 161e71b7053SJung-uk Kimextra description may be attached as well. 162e71b7053SJung-uk Kim 163e71b7053SJung-uk Kim=item OSSL_STORE_INFO_PARAMS 164e71b7053SJung-uk Kim 165e71b7053SJung-uk KimKey parameters. 166e71b7053SJung-uk Kim 167e71b7053SJung-uk Kim=item OSSL_STORE_INFO_PKEY 168e71b7053SJung-uk Kim 169*b077aed3SPierre ProncheryA keypair or just a private key (possibly with key parameters). 170*b077aed3SPierre Pronchery 171*b077aed3SPierre Pronchery=item OSSL_STORE_INFO_PUBKEY 172*b077aed3SPierre Pronchery 173*b077aed3SPierre ProncheryA public key (possibly with key parameters). 174e71b7053SJung-uk Kim 175e71b7053SJung-uk Kim=item OSSL_STORE_INFO_CERT 176e71b7053SJung-uk Kim 177e71b7053SJung-uk KimAn X.509 certificate. 178e71b7053SJung-uk Kim 179e71b7053SJung-uk Kim=item OSSL_STORE_INFO_CRL 180e71b7053SJung-uk Kim 181e71b7053SJung-uk KimA X.509 certificate revocation list. 182e71b7053SJung-uk Kim 183e71b7053SJung-uk Kim=back 184e71b7053SJung-uk Kim 185e71b7053SJung-uk Kim=head1 RETURN VALUES 186e71b7053SJung-uk Kim 187e71b7053SJung-uk KimOSSL_STORE_INFO_get_type() returns the STORE type number of the given 188e71b7053SJung-uk KimB<OSSL_STORE_INFO>. 189e71b7053SJung-uk KimThere is no error value. 190e71b7053SJung-uk Kim 191e71b7053SJung-uk KimOSSL_STORE_INFO_get0_NAME(), OSSL_STORE_INFO_get0_NAME_description(), 192e71b7053SJung-uk KimOSSL_STORE_INFO_get0_PARAMS(), OSSL_STORE_INFO_get0_PKEY(), 193e71b7053SJung-uk KimOSSL_STORE_INFO_get0_CERT() and OSSL_STORE_INFO_get0_CRL() all return 194e71b7053SJung-uk Kima pointer to the OpenSSL object on success, NULL otherwise. 195e71b7053SJung-uk Kim 196*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_NAME(), OSSL_STORE_INFO_get1_NAME_description(), 197*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_PARAMS(), OSSL_STORE_INFO_get1_PKEY(), 198*b077aed3SPierre ProncheryOSSL_STORE_INFO_get1_CERT() and OSSL_STORE_INFO_get1_CRL() all return 199e71b7053SJung-uk Kima pointer to a duplicate of the OpenSSL object on success, NULL otherwise. 200e71b7053SJung-uk Kim 201*b077aed3SPierre ProncheryOSSL_STORE_INFO_type_string() returns a string on success, or NULL on 202e71b7053SJung-uk Kimfailure. 203e71b7053SJung-uk Kim 204e71b7053SJung-uk KimOSSL_STORE_INFO_new_NAME(), OSSL_STORE_INFO_new_PARAMS(), 205e71b7053SJung-uk KimOSSL_STORE_INFO_new_PKEY(), OSSL_STORE_INFO_new_CERT() and 206e71b7053SJung-uk KimOSSL_STORE_INFO_new_CRL() return a B<OSSL_STORE_INFO> 207*b077aed3SPierre Proncherypointer on success, or NULL on failure. 208e71b7053SJung-uk Kim 209e71b7053SJung-uk KimOSSL_STORE_INFO_set0_NAME_description() returns 1 on success, or 0 on 210e71b7053SJung-uk Kimfailure. 211e71b7053SJung-uk Kim 212e71b7053SJung-uk Kim=head1 SEE ALSO 213e71b7053SJung-uk Kim 214e71b7053SJung-uk KimL<ossl_store(7)>, L<OSSL_STORE_open(3)>, L<OSSL_STORE_register_loader(3)> 215e71b7053SJung-uk Kim 216e71b7053SJung-uk Kim=head1 HISTORY 217e71b7053SJung-uk Kim 218*b077aed3SPierre ProncheryThe OSSL_STORE API was added in OpenSSL 1.1.1. 219*b077aed3SPierre Pronchery 220*b077aed3SPierre ProncheryThe OSSL_STORE_INFO_PUBKEY object type was added in OpenSSL 3.0. 221e71b7053SJung-uk Kim 222e71b7053SJung-uk Kim=head1 COPYRIGHT 223e71b7053SJung-uk Kim 224*b077aed3SPierre ProncheryCopyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. 225e71b7053SJung-uk Kim 226*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License"). You may not use 227e71b7053SJung-uk Kimthis file except in compliance with the License. You can obtain a copy 228e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at 229e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>. 230e71b7053SJung-uk Kim 231e71b7053SJung-uk Kim=cut 232