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