xref: /freebsd/crypto/openssl/doc/man3/OSSL_STORE_INFO.pod (revision a7148ab39c03abd4d1a84997c70bf96f15dd2a09)
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