| =pod |
| |
| =head1 NAME |
| |
| 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, OSSL_STORE_INFO_get0_data |
| - Functions to manipulate OSSL_STORE_INFO objects |
| |
| =head1 SYNOPSIS |
| |
| #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); |
| |
| =head1 DESCRIPTION |
| |
| These functions are primarily useful for applications to retrieve |
| supported objects from B<OSSL_STORE_INFO> objects and for scheme specific |
| loaders to create B<OSSL_STORE_INFO> holders. |
| |
| =head2 Types |
| |
| B<OSSL_STORE_INFO> is an opaque type that's just an intermediary holder for |
| the objects that have been retrieved by OSSL_STORE_load() and similar functions. |
| 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 life time of this extracted object is as long as the life time of |
| the B<OSSL_STORE_INFO> it was extracted from, so care should be taken not |
| to free the latter too early. |
| 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 B<OSSL_STORE_INFO> has been freed. |
| The object returned by STORE_INFO_get1_<TYPE>() must be freed separately |
| by the caller. |
| See L</SUPPORTED OBJECTS> for more information on the types that are supported. |
| |
| =head2 Functions |
| |
| OSSL_STORE_INFO_get_type() takes a B<OSSL_STORE_INFO> and returns the STORE |
| type number for the object inside. |
| |
| STORE_INFO_get_type_string() takes a STORE type number and returns a |
| short string describing it. |
| |
| 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() |
| all take a B<OSSL_STORE_INFO> and return the object it holds if the |
| B<OSSL_STORE_INFO> type (as returned by OSSL_STORE_INFO_get_type()) |
| matches the function, otherwise NULL. |
| |
| 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() and |
| OSSL_STORE_INFO_get1_CRL() |
| all take a B<OSSL_STORE_INFO> and return a duplicate the object it |
| holds if the B<OSSL_STORE_INFO> type (as returned by |
| OSSL_STORE_INFO_get_type()) matches the function, otherwise NULL. |
| |
| OSSL_STORE_INFO_free() frees a B<OSSL_STORE_INFO> and its contained type. |
| |
| 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() and OSSL_STORE_INFO_new_CRL() |
| create a B<OSSL_STORE_INFO> object to hold the given input object. |
| On success the input object is consumed. |
| |
| Additionally, for B<OSSL_STORE_INFO_NAME> objects, |
| OSSL_STORE_INFO_set0_NAME_description() can be used to add an extra |
| description. |
| This description is meant to be human readable and should be used for |
| information printout. |
| |
| OSSL_STORE_INFO_new() creates a B<OSSL_STORE_INFO> with an arbitrary I<type> |
| number and I<data> structure. It's the responsibility of the caller to |
| define type numbers other than the ones defined by F<< <openssl/store.h> >>, |
| and to handle freeing the associated data structure on their own. |
| I<Using type numbers that are defined by F<< <openssl/store.h> >> may cause |
| undefined behaviours, including crashes>. |
| |
| OSSL_STORE_INFO_get0_data() returns the data pointer that was passed to |
| OSSL_STORE_INFO_new() if I<type> matches the type number in I<info>. |
| |
| OSSL_STORE_INFO_new() and OSSL_STORE_INFO_get0_data() may be useful for |
| applications that define their own STORE data, but must be used with care. |
| |
| =head1 SUPPORTED OBJECTS |
| |
| Currently supported object types are: |
| |
| =over 4 |
| |
| =item 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 C<file:/foo/bar/> could include a file |
| named C<cookie.pem>, and in that case, the returned B<OSSL_STORE_INFO_NAME> |
| object would have the URI C<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 C<file:> URIs that are used without the explicit scheme, the |
| returned name will be the path of each object, so if C</foo/bar> was |
| given and that path has the file C<cookie.pem>, the name |
| C</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. |
| |
| =item OSSL_STORE_INFO_PARAMS |
| |
| Key parameters. |
| |
| =item OSSL_STORE_INFO_PKEY |
| |
| A keypair or just a private key (possibly with key parameters). |
| |
| =item OSSL_STORE_INFO_PUBKEY |
| |
| A public key (possibly with key parameters). |
| |
| =item OSSL_STORE_INFO_CERT |
| |
| An X.509 certificate. |
| |
| =item OSSL_STORE_INFO_CRL |
| |
| A X.509 certificate revocation list. |
| |
| =back |
| |
| =head1 RETURN VALUES |
| |
| OSSL_STORE_INFO_get_type() returns the STORE type number of the given |
| B<OSSL_STORE_INFO>. |
| There is no error value. |
| |
| 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() and OSSL_STORE_INFO_get0_CRL() all return |
| a pointer to the OpenSSL object on success, NULL otherwise. |
| |
| 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() and OSSL_STORE_INFO_get1_CRL() all return |
| a pointer to a duplicate of the OpenSSL object on success, NULL otherwise. |
| |
| OSSL_STORE_INFO_type_string() returns a string on success, or NULL on |
| failure. |
| |
| OSSL_STORE_INFO_new_NAME(), OSSL_STORE_INFO_new_PARAMS(), |
| OSSL_STORE_INFO_new_PKEY(), OSSL_STORE_INFO_new_CERT() and |
| OSSL_STORE_INFO_new_CRL() return a B<OSSL_STORE_INFO> |
| pointer on success, or NULL on failure. |
| |
| OSSL_STORE_INFO_set0_NAME_description() returns 1 on success, or 0 on |
| failure. |
| |
| =head1 SEE ALSO |
| |
| L<ossl_store(7)>, L<OSSL_STORE_open(3)>, L<OSSL_STORE_register_loader(3)> |
| |
| =head1 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. |
| |
| =head1 COPYRIGHT |
| |
| Copyright 2016-2021 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 |
| L<https://www.openssl.org/source/license.html>. |
| |
| =cut |