=pod

=head1 NAME

X509V3_set_ctx,
X509V3_set_issuer_pkey - X.509 v3 extension generation utilities

=head1 SYNOPSIS

 #include <openssl/x509v3.h>

 void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,
                     X509_REQ *req, X509_CRL *crl, int flags);
 int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey);

=head1 DESCRIPTION

X509V3_set_ctx() fills in the basic fields of I<ctx> of type B<X509V3_CTX>,
providing details potentially needed by functions producing X509 v3 extensions,
e.g., to look up values for filling in authority key identifiers.
Any of I<subj>, I<req>, or I<crl> may be provided, pointing to a certificate,
certification request, or certificate revocation list, respectively.
If I<subj> or I<crl> is provided, I<issuer> should point to its issuer,
for instance to help generating an authority key identifier extension.
Note that if I<subj> is provided, I<issuer> may be the same as I<subj>,
which means that I<subj> is self-issued (or even self-signed).
I<flags> may be 0
or contain B<X509V3_CTX_TEST>, which means that just the syntax of
extension definitions is to be checked without actually producing an extension,
or B<X509V3_CTX_REPLACE>, which means that each X.509v3 extension added as
defined in some configuration section shall replace any already existing
extension with the same OID.

X509V3_set_issuer_pkey() explicitly sets the issuer private key of
the certificate that has been provided in I<ctx>.
This should be done for self-issued certificates (which may be self-signed
or not) to provide fallback data for the authority key identifier extension.

=head1 RETURN VALUES

X509V3_set_ctx() and X509V3_set_issuer_pkey()
return 1 on success and 0 on error.

=head1 SEE ALSO

L<X509_add_ext(3)>

=head1 HISTORY

X509V3_set_issuer_pkey() was added in OpenSSL 3.0.

CTX_TEST was deprecated in OpenSSL 3.0; use X509V3_CTX_TEST instead.

=head1 COPYRIGHT

Copyright 2015-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
