123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- =pod
- =head1 NAME
- X509_LOOKUP, X509_LOOKUP_TYPE,
- X509_LOOKUP_new, X509_LOOKUP_free, X509_LOOKUP_init,
- X509_LOOKUP_shutdown,
- X509_LOOKUP_set_method_data, X509_LOOKUP_get_method_data,
- X509_LOOKUP_ctrl,
- X509_LOOKUP_load_file, X509_LOOKUP_add_dir,
- X509_LOOKUP_get_store, X509_LOOKUP_by_subject,
- X509_LOOKUP_by_issuer_serial, X509_LOOKUP_by_fingerprint,
- X509_LOOKUP_by_alias
- - OpenSSL certificate lookup mechanisms
- =head1 SYNOPSIS
- #include <openssl/x509_vfy.h>
- typedef x509_lookup_st X509_LOOKUP;
- typedef enum X509_LOOKUP_TYPE;
- X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method);
- int X509_LOOKUP_init(X509_LOOKUP *ctx);
- int X509_LOOKUP_shutdown(X509_LOOKUP *ctx);
- void X509_LOOKUP_free(X509_LOOKUP *ctx);
- int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data);
- void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx);
- int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
- long argl, char **ret);
- int X509_LOOKUP_load_file(X509_LOOKUP *ctx, char *name, long type);
- int X509_LOOKUP_add_dir(X509_LOOKUP *ctx, char *name, long type);
- X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx);
- int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
- X509_NAME *name, X509_OBJECT *ret);
- int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
- X509_NAME *name, ASN1_INTEGER *serial,
- X509_OBJECT *ret);
- int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
- const unsigned char *bytes, int len,
- X509_OBJECT *ret);
- int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type,
- const char *str, int len, X509_OBJECT *ret);
- =head1 DESCRIPTION
- The B<X509_LOOKUP> structure holds the information needed to look up
- certificates and CRLs according to an associated L<X509_LOOKUP_METHOD(3)>.
- Multiple B<X509_LOOKUP> instances can be added to an L<X509_STORE(3)>
- to enable lookup in that store.
- X509_LOOKUP_new() creates a new B<X509_LOOKUP> using the given lookup
- I<method>.
- It can also be created by calling L<X509_STORE_add_lookup(3)>, which
- will associate an B<X509_STORE> with the lookup mechanism.
- X509_LOOKUP_init() initializes the internal state and resources as
- needed by the given B<X509_LOOKUP> to do its work.
- X509_LOOKUP_shutdown() tears down the internal state and resources of
- the given B<X509_LOOKUP>.
- X509_LOOKUP_free() destructs the given B<X509_LOOKUP>.
- X509_LOOKUP_set_method_data() associates a pointer to application data
- to the given B<X509_LOOKUP>.
- X509_LOOKUP_get_method_data() retrieves a pointer to application data
- from the given B<X509_LOOKUP>.
- X509_LOOKUP_ctrl() is used to set or get additional data to or from an
- B<X509_LOOKUP> structure or its associated L<X509_LOOKUP_METHOD(3)>.
- The arguments of the control command are passed via I<argc> and I<argl>,
- its return value via I<*ret>.
- The meaning of the arguments depends on the I<cmd> number of the
- control command. In general, this function is not called directly, but
- wrapped by a macro call, see below.
- The control I<cmd>s known to OpenSSL are discussed in more depth
- in L</Control Commands>.
- X509_LOOKUP_load_file() passes a filename to be loaded immediately
- into the associated B<X509_STORE>.
- I<type> indicates what type of object is expected.
- This can only be used with a lookup using the implementation
- L<X509_LOOKUP_file(3)>.
- X509_LOOKUP_add_dir() passes a directory specification from which
- certificates and CRLs are loaded on demand into the associated
- B<X509_STORE>.
- I<type> indicates what type of object is expected.
- This can only be used with a lookup using the implementation
- L<X509_LOOKUP_hash_dir(3)>.
- X509_LOOKUP_load_file(), X509_LOOKUP_add_dir(),
- X509_LOOKUP_add_store(), and X509_LOOKUP_load_store() are implemented
- as macros that use X509_LOOKUP_ctrl().
- X509_LOOKUP_by_subject(), X509_LOOKUP_by_issuer_serial(),
- X509_LOOKUP_by_fingerprint(), and X509_LOOKUP_by_alias() look up
- certificates and CRLs in the L<X509_STORE(3)> associated with the
- B<X509_LOOKUP> using different criteria, where the looked up object is
- stored in I<ret>.
- Some of the underlying B<X509_LOOKUP_METHOD>s will also cache objects
- matching the criteria in the associated B<X509_STORE>, which makes it
- possible to handle cases where the criteria have more than one hit.
- =head2 File Types
- X509_LOOKUP_load_file() and X509_LOOKUP_add_dir() take a I<type>,
- which can be one of the following:
- =over 4
- =item B<X509_FILETYPE_PEM>
- The file or files that are loaded are expected to be in PEM format.
- =item B<X509_FILETYPE_ASN1>
- The file or files that are loaded are expected to be in raw DER format.
- =item B<X509_FILETYPE_DEFAULT>
- The default certificate file or directory is used. In this case,
- I<name> is ignored.
- =begin comment
- TODO
- Document X509_get_default_cert_file_env(3),
- X509_get_default_cert_file(3), X509_get_default_cert_dir_env(3) and
- X509_get_default_cert_dir(3) and link to them here.
- =end comment
- =back
- =head2 Control Commands
- The B<X509_LOOKUP_METHOD>s built into OpenSSL recognise the following
- X509_LOOKUP_ctrl() I<cmd>s:
- =over 4
- =item B<X509_L_FILE_LOAD>
- This is the command that X509_LOOKUP_load_file() uses.
- The filename is passed in I<argc>, and the type in I<argl>.
- =item B<X509_L_ADD_DIR>
- This is the command that X509_LOOKUP_add_dir() uses.
- The directory specification is passed in I<argc>, and the type in
- I<argl>.
- =item B<X509_L_ADD_STORE>
- This is the command that X509_LOOKUP_add_store() uses.
- The URI is passed in I<argc>.
- =item B<X509_L_LOAD_STORE>
- This is the command that X509_LOOKUP_load_store() uses.
- The URI is passed in I<argc>.
- =back
- =head1 RETURN VALUES
- X509_LOOKUP_new() returns an B<X509_LOOKUP> pointer when successful,
- or NULL on error.
- X509_LOOKUP_init() and X509_LOOKUP_shutdown() return 1 on success, or
- 0 on error.
- X509_LOOKUP_ctrl() returns -1 if the B<X509_LOOKUP> doesn't have an
- associated B<X509_LOOKUP_METHOD>, or 1 if the X<509_LOOKUP_METHOD>
- doesn't have a control function.
- Otherwise, it returns what the control function in the
- B<X509_LOOKUP_METHOD> returns, which is usually 1 on success and 0 in
- error.
- X509_LOOKUP_get_store() returns an B<X509_STORE> pointer if there is
- one, otherwise NULL.
- X509_LOOKUP_by_subject(), X509_LOOKUP_by_issuer_serial(),
- X509_LOOKUP_by_fingerprint(), and X509_LOOKUP_by_alias() all return 0
- if there is no B<X509_LOOKUP_METHOD> or that method doesn't implement
- the corresponding function.
- Otherwise, it returns what the corresponding function in the
- B<X509_LOOKUP_METHOD> returns, which is usually 1 on success and 0 in
- error.
- =head1 SEE ALSO
- L<X509_LOOKUP_METHOD(3)>, L<X509_STORE(3)>
- =head1 COPYRIGHT
- Copyright 2020 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
|