=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(X509 *x);
 int X509_set_version(X509 *x, long version);

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

 long X509_CRL_get_version(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 verson 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.

=cut
