1=pod 2 3=head1 NAME 4 5OPENSSL_VERSION_MAJOR, OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, 6OPENSSL_VERSION_PRE_RELEASE, OPENSSL_VERSION_BUILD_METADATA, 7OPENSSL_VERSION_TEXT, OPENSSL_VERSION_PREREQ, OPENSSL_version_major, 8OPENSSL_version_minor, OPENSSL_version_patch, OPENSSL_version_pre_release, 9OPENSSL_version_build_metadata, OpenSSL_version, OPENSSL_VERSION_NUMBER, 10OpenSSL_version_num, OPENSSL_info 11- get OpenSSL version number and other information 12 13=head1 SYNOPSIS 14 15 #include <openssl/opensslv.h> 16 17 #define OPENSSL_VERSION_MAJOR x 18 #define OPENSSL_VERSION_MINOR y 19 #define OPENSSL_VERSION_PATCH z 20 21 /* The definitions here are typical release values */ 22 #define OPENSSL_VERSION_PRE_RELEASE "" 23 #define OPENSSL_VERSION_BUILD_METADATA "" 24 25 #define OPENSSL_VERSION_TEXT "OpenSSL x.y.z xx XXX xxxx" 26 27 #define OPENSSL_VERSION_PREREQ(maj,min) 28 29 #include <openssl/crypto.h> 30 31 unsigned int OPENSSL_version_major(void); 32 unsigned int OPENSSL_version_minor(void); 33 unsigned int OPENSSL_version_patch(void); 34 const char *OPENSSL_version_pre_release(void); 35 const char *OPENSSL_version_build_metadata(void); 36 37 const char *OpenSSL_version(int t); 38 39 const char *OPENSSL_info(int t); 40 41 /* from openssl/opensslv.h */ 42 #define OPENSSL_VERSION_NUMBER 0xnnnnnnnnL 43 44 /* from openssl/crypto.h */ 45 unsigned long OpenSSL_version_num(); 46 47=head1 DESCRIPTION 48 49=head2 Macros 50 51The three macros B<OPENSSL_VERSION_MAJOR>, B<OPENSSL_VERSION_MINOR> and 52B<OPENSSL_VERSION_PATCH> represent the three parts of a version 53identifier, B<I<MAJOR>.I<MINOR>.I<PATCH>>. 54 55The macro B<OPENSSL_VERSION_PRE_RELEASE> is an added bit of text that 56indicates that this is a pre-release version, such as C<"-dev"> for an 57ongoing development snapshot or C<"-alpha3"> for an alpha release. 58The value must be a string. 59 60The macro B<OPENSSL_VERSION_BUILD_METADATA> is extra information, reserved 61for other parties, such as C<"+fips">, or C<"+vendor.1">). 62The OpenSSL project will not touch this macro (will leave it an empty string). 63The value must be a string. 64 65B<OPENSSL_VERSION_STR> is a convenience macro to get the short version 66identifier string, C<"I<MAJOR>.I<MINOR>.I<PATCH>">. 67 68B<OPENSSL_FULL_VERSION_STR> is a convenience macro to get the longer 69version identifier string, which combines B<OPENSSL_VERSION_STR>, 70B<OPENSSL_VERSION_PRE_RELEASE> and B<OPENSSL_VERSION_BUILD_METADATA>. 71 72B<OPENSSL_VERSION_TEXT> is a convenience macro to get a full descriptive 73version text, which includes B<OPENSSL_FULL_VERSION_STR> and the release 74date. 75 76B<OPENSSL_VERSION_PREREQ> is a useful macro for checking whether the OpenSSL 77version for the headers in use is at least at the given pre-requisite major 78(B<maj>) and minor (B<min>) number or not. It will evaluate to true if the 79header version number (B<OPENSSL_VERSION_MAJOR>.B<OPENSSL_VERSION_MINOR>) is 80greater than or equal to B<maj>.B<min>. 81 82B<OPENSSL_VERSION_NUMBER> is a combination of the major, minor and 83patch version into a single integer 0xMNN00PP0L, where: 84 85=over 4 86 87=item M 88 89is the number from B<OPENSSL_VERSION_MAJOR>, in hexadecimal notation 90 91=item NN 92 93is the number from B<OPENSSL_VERSION_MINOR>, in hexadecimal notation 94 95=item PP 96 97is the number from B<OPENSSL_VERSION_PATCH>, in hexadecimal notation 98 99=back 100 101=head2 Functions 102 103OPENSSL_version_major(), OPENSSL_version_minor(), OPENSSL_version_patch(), 104OPENSSL_version_pre_release(), and OPENSSL_version_build_metadata() return 105the values of the macros above for the build of the library, respectively. 106 107OpenSSL_version() returns different strings depending on I<t>: 108 109=over 4 110 111=item OPENSSL_VERSION 112 113The value of B<OPENSSL_VERSION_TEXT> 114 115=item OPENSSL_VERSION_STRING 116 117The value of B<OPENSSL_VERSION_STR> 118 119=item OPENSSL_FULL_VERSION_STRING 120 121The value of B<OPENSSL_FULL_VERSION_STR> 122 123=item OPENSSL_CFLAGS 124 125The compiler flags set for the compilation process in the form 126C<compiler: ...> if available, or C<compiler: information not available> 127otherwise. 128 129=item OPENSSL_BUILT_ON 130 131The date of the build process in the form C<built on: ...> if available 132or C<built on: date not available> otherwise. 133The date would not be available in a reproducible build, for example. 134 135=item OPENSSL_PLATFORM 136 137The "Configure" target of the library build in the form C<platform: ...> 138if available, or C<platform: information not available> otherwise. 139 140=item OPENSSL_DIR 141 142The B<OPENSSLDIR> setting of the library build in the form C<OPENSSLDIR: "..."> 143if available, or C<OPENSSLDIR: N/A> otherwise. 144 145=item OPENSSL_ENGINES_DIR 146 147The B<ENGINESDIR> setting of the library build in the form C<ENGINESDIR: "..."> 148if available, or C<ENGINESDIR: N/A> otherwise. This option is deprecated in 149OpenSSL 3.0. 150 151=item OPENSSL_MODULES_DIR 152 153The B<MODULESDIR> setting of the library build in the form C<MODULESDIR: "..."> 154if available, or C<MODULESDIR: N/A> otherwise. 155 156=item OPENSSL_CPU_INFO 157 158The current OpenSSL cpu settings. 159This is the current setting of the cpu capability flags. It is usually 160automatically configured but may be set via an environment variable. 161The value has the same syntax as the environment variable. 162For x86 the string looks like C<CPUINFO: OPENSSL_ia32cap=0x123:0x456> 163or C<CPUINFO: N/A> if not available. 164 165=back 166 167For an unknown I<t>, the text C<not available> is returned. 168 169OPENSSL_info() also returns different strings depending on I<t>: 170 171=over 4 172 173=item OPENSSL_INFO_CONFIG_DIR 174 175The configured C<OPENSSLDIR>, which is the default location for 176OpenSSL configuration files. 177 178=item OPENSSL_INFO_ENGINES_DIR 179 180The configured C<ENGINESDIR>, which is the default location for 181OpenSSL engines. 182 183=item OPENSSL_INFO_MODULES_DIR 184 185The configured C<MODULESDIR>, which is the default location for 186dynamically loadable OpenSSL modules other than engines. 187 188=item OPENSSL_INFO_DSO_EXTENSION 189 190The configured dynamically loadable module extension. 191 192=item OPENSSL_INFO_DIR_FILENAME_SEPARATOR 193 194The separator between a directory specification and a filename. 195Note that on some operating systems, this is not the same as the 196separator between directory elements. 197 198=item OPENSSL_INFO_LIST_SEPARATOR 199 200The OpenSSL list separator. 201This is typically used in strings that are lists of items, such as the 202value of the environment variable C<$PATH> on Unix (where the 203separator is C<:>) or C<%PATH%> on Windows (where the separator is 204C<;>). 205 206=item OPENSSL_INFO_CPU_SETTINGS 207 208The current OpenSSL cpu settings. 209This is the current setting of the cpu capability flags. It is usually 210automatically configured but may be set via an environment variable. 211The value has the same syntax as the environment variable. 212For x86 the string looks like C<OPENSSL_ia32cap=0x123:0x456>. 213 214=back 215 216For an unknown I<t>, NULL is returned. 217 218OpenSSL_version_num() returns the value of B<OPENSSL_VERSION_NUMBER>. 219 220=head1 RETURN VALUES 221 222OPENSSL_version_major(), OPENSSL_version_minor() and OPENSSL_version_patch() 223return the version number parts as integers. 224 225OPENSSL_version_pre_release() and OPENSSL_version_build_metadata() return 226the values of B<OPENSSL_VERSION_PRE_RELEASE> and 227B<OPENSSL_VERSION_BUILD_METADATA> respectively as constant strings. 228For any of them that is undefined, the empty string is returned. 229 230OpenSSL_version() returns constant strings. 231 232=head1 SEE ALSO 233 234L<crypto(7)> 235 236=head1 HISTORY 237 238The macros and functions described here were added in OpenSSL 3.0, 239except for OPENSSL_VERSION_NUMBER and OpenSSL_version_num(). 240 241=head1 COPYRIGHT 242 243Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. 244 245Licensed under the Apache License 2.0 (the "License"). You may not use 246this file except in compliance with the License. You can obtain a copy 247in the file LICENSE in the source distribution or at 248L<https://www.openssl.org/source/license.html>. 249 250=cut 251