1=pod
2
3=head1 NAME
4
5OSSL_STORE_SEARCH,
6OSSL_STORE_SEARCH_by_name,
7OSSL_STORE_SEARCH_by_issuer_serial,
8OSSL_STORE_SEARCH_by_key_fingerprint,
9OSSL_STORE_SEARCH_by_alias,
10OSSL_STORE_SEARCH_free,
11OSSL_STORE_SEARCH_get_type,
12OSSL_STORE_SEARCH_get0_name,
13OSSL_STORE_SEARCH_get0_serial,
14OSSL_STORE_SEARCH_get0_bytes,
15OSSL_STORE_SEARCH_get0_string,
16OSSL_STORE_SEARCH_get0_digest
17- Type and functions to create OSSL_STORE search criteria
18
19=head1 SYNOPSIS
20
21 #include <openssl/store.h>
22
23 typedef struct ossl_store_search_st OSSL_STORE_SEARCH;
24
25 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name);
26 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name,
27                                                       const ASN1_INTEGER
28                                                       *serial);
29 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest,
30                                                         const unsigned char
31                                                         *bytes, int len);
32 OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias);
33
34 void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search);
35
36 int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion);
37 X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion);
38 const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH
39                                                   *criterion);
40 const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH
41                                                   *criterion, size_t *length);
42 const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion);
43 const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH
44                                             *criterion);
45
46=head1 DESCRIPTION
47
48These functions are used to specify search criteria to help search for specific
49objects through other names than just the URI that's given to OSSL_STORE_open().
50For example, this can be useful for an application that has received a URI
51and then wants to add on search criteria in a uniform and supported manner.
52
53=head2 Types
54
55B<OSSL_STORE_SEARCH> is an opaque type that holds the constructed search
56criterion, and that can be given to an OSSL_STORE context with
57OSSL_STORE_find().
58
59The calling application owns the allocation of an B<OSSL_STORE_SEARCH> at all
60times, and should therefore be careful not to deallocate it before
61OSSL_STORE_close() has been called for the OSSL_STORE context it was given
62to.
63
64=head2 Application Functions
65
66OSSL_STORE_SEARCH_by_name(),
67OSSL_STORE_SEARCH_by_issuer_serial(),
68OSSL_STORE_SEARCH_by_key_fingerprint(),
69and OSSL_STORE_SEARCH_by_alias()
70are used to create an B<OSSL_STORE_SEARCH> from a subject name, an issuer name
71and serial number pair, a key fingerprint, and an alias (for example a friendly
72name).
73The parameters that are provided are not copied, only referred to in a
74criterion, so they must have at least the same life time as the created
75B<OSSL_STORE_SEARCH>.
76
77OSSL_STORE_SEARCH_free() is used to free the B<OSSL_STORE_SEARCH>.
78If the argument is NULL, nothing is done.
79
80=head2 Loader Functions
81
82OSSL_STORE_SEARCH_get_type() returns the criterion type for the given
83B<OSSL_STORE_SEARCH>.
84
85OSSL_STORE_SEARCH_get0_name(), OSSL_STORE_SEARCH_get0_serial(),
86OSSL_STORE_SEARCH_get0_bytes(), OSSL_STORE_SEARCH_get0_string(),
87and OSSL_STORE_SEARCH_get0_digest()
88are used to retrieve different data from a B<OSSL_STORE_SEARCH>, as
89available for each type.
90For more information, see L</SUPPORTED CRITERION TYPES> below.
91
92=head1 SUPPORTED CRITERION TYPES
93
94Currently supported criterion types are:
95
96=over 4
97
98=item OSSL_STORE_SEARCH_BY_NAME
99
100This criterion supports a search by exact match of subject name.
101The subject name itself is a B<X509_NAME> pointer.
102A criterion of this type is created with OSSL_STORE_SEARCH_by_name(),
103and the actual subject name is retrieved with OSSL_STORE_SEARCH_get0_name().
104
105=item OSSL_STORE_SEARCH_BY_ISSUER_SERIAL
106
107This criterion supports a search by exact match of both issuer name and serial
108number.
109The issuer name itself is a B<X509_NAME> pointer, and the serial number is
110a B<ASN1_INTEGER> pointer.
111A criterion of this type is created with OSSL_STORE_SEARCH_by_issuer_serial()
112and the actual issuer name and serial number are retrieved with
113OSSL_STORE_SEARCH_get0_name() and OSSL_STORE_SEARCH_get0_serial().
114
115=item OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT
116
117This criterion supports a search by exact match of key fingerprint.
118The key fingerprint in itself is a string of bytes and its length, as
119well as the algorithm that was used to compute the fingerprint.
120The digest may be left unspecified (NULL), and in that case, the
121loader has to decide on a default digest and compare fingerprints
122accordingly.
123A criterion of this type is created with OSSL_STORE_SEARCH_by_key_fingerprint()
124and the actual fingerprint and its length can be retrieved with
125OSSL_STORE_SEARCH_get0_bytes().
126The digest can be retrieved with OSSL_STORE_SEARCH_get0_digest().
127
128=item OSSL_STORE_SEARCH_BY_ALIAS
129
130This criterion supports a search by match of an alias of some kind.
131The alias in itself is a simple C string.
132A criterion of this type is created with OSSL_STORE_SEARCH_by_alias()
133and the actual alias is retrieved with OSSL_STORE_SEARCH_get0_string().
134
135=back
136
137=head1 RETURN VALUES
138
139OSSL_STORE_SEARCH_by_name(),
140OSSL_STORE_SEARCH_by_issuer_serial(),
141OSSL_STORE_SEARCH_by_key_fingerprint(),
142and OSSL_STORE_SEARCH_by_alias()
143return a B<OSSL_STORE_SEARCH> pointer on success, or NULL on failure.
144
145OSSL_STORE_SEARCH_get_type() returns the criterion type of the given
146B<OSSL_STORE_SEARCH>.
147There is no error value.
148
149OSSL_STORE_SEARCH_get0_name() returns a B<X509_NAME> pointer on success,
150or NULL when the given B<OSSL_STORE_SEARCH> was of a different type.
151
152OSSL_STORE_SEARCH_get0_serial() returns a B<ASN1_INTEGER> pointer on success,
153or NULL when the given B<OSSL_STORE_SEARCH> was of a different type.
154
155OSSL_STORE_SEARCH_get0_bytes() returns a B<const unsigned char> pointer and
156sets I<*length> to the strings length on success, or NULL when the given
157B<OSSL_STORE_SEARCH> was of a different type.
158
159OSSL_STORE_SEARCH_get0_string() returns a B<const char> pointer on success,
160or NULL when the given B<OSSL_STORE_SEARCH> was of a different type.
161
162OSSL_STORE_SEARCH_get0_digest() returns a B<const EVP_MD> pointer.
163NULL is a valid value and means that the store loader default will
164be used when applicable.
165
166=head1 SEE ALSO
167
168L<ossl_store(7)>, L<OSSL_STORE_supports_search(3)>, L<OSSL_STORE_find(3)>
169
170=head1 HISTORY
171
172B<OSSL_STORE_SEARCH>,
173OSSL_STORE_SEARCH_by_name(),
174OSSL_STORE_SEARCH_by_issuer_serial(),
175OSSL_STORE_SEARCH_by_key_fingerprint(),
176OSSL_STORE_SEARCH_by_alias(),
177OSSL_STORE_SEARCH_free(),
178OSSL_STORE_SEARCH_get_type(),
179OSSL_STORE_SEARCH_get0_name(),
180OSSL_STORE_SEARCH_get0_serial(),
181OSSL_STORE_SEARCH_get0_bytes(),
182and OSSL_STORE_SEARCH_get0_string()
183were added in OpenSSL 1.1.1.
184
185=head1 COPYRIGHT
186
187Copyright 2018-2024 The OpenSSL Project Authors. All Rights Reserved.
188
189Licensed under the Apache License 2.0 (the "License").  You may not use
190this file except in compliance with the License.  You can obtain a copy
191in the file LICENSE in the source distribution or at
192L<https://www.openssl.org/source/license.html>.
193
194=cut
195