=pod

=head1 NAME

X509_get_version, X509_set_version, X509_REQ_get_version, X509_REQ_set_version,
X509_CRL_get_version, X509_CRL_set_version - get or set certificate,
certificate request or CRL version

=head1 SYNOPSIS

 #include <openssl/x509.h>

 long X509_get_version(const X509 *x);
 int X509_set_version(X509 *x, long version);

 long X509_REQ_get_version(const X509_REQ *req);
 int X509_REQ_set_version(X509_REQ *x, long version);

 long X509_CRL_get_version(const X509_CRL *crl);
 int X509_CRL_set_version(X509_CRL *x, long version);

=head1 DESCRIPTION

X509_get_version() returns the numerical value of the version field of
certificate B<x>. Note: this is defined by standards (X.509 et al) to be one
less than the certificate version. So a version 3 certificate will return 2 and
a version 1 certificate will return 0.

X509_set_version() sets the numerical value of the version field of certificate
B<x> to B<version>.

Similarly X509_REQ_get_version(), X509_REQ_set_version(),
X509_CRL_get_version() and X509_CRL_set_version() get and set the version
number of certificate requests and CRLs.

=head1 NOTES

The version field of certificates, certificate requests and CRLs has a
DEFAULT value of B<v1(0)> meaning the field should be omitted for version
1. This is handled transparently by these functions.

=head1 RETURN VALUES

X509_get_version(), X509_REQ_get_version() and X509_CRL_get_version()
return the numerical value of the version field.

X509_set_version(), X509_REQ_set_version() and X509_CRL_set_version()
return 1 for success and 0 for failure.

=head1 SEE ALSO

L<d2i_X509(3)>,
L<ERR_get_error(3)>,
L<X509_CRL_get0_by_serial(3)>,
L<X509_get0_signature(3)>,
L<X509_get_ext_d2i(3)>,
L<X509_get_extension_flags(3)>,
L<X509_get_pubkey(3)>,
L<X509_get_subject_name(3)>,
L<X509_NAME_add_entry_by_txt(3)>,
L<X509_NAME_ENTRY_get_object(3)>,
L<X509_NAME_get_index_by_NID(3)>,
L<X509_NAME_print_ex(3)>,
L<X509_new(3)>,
L<X509_sign(3)>,
L<X509V3_get_d2i(3)>,
L<X509_verify_cert(3)>

=head1 HISTORY

X509_get_version(), X509_REQ_get_version() and X509_CRL_get_version() are
functions in OpenSSL 1.1.0, in previous versions they were macros.

=head1 COPYRIGHT

Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (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
