Blame INSTALL

Packit c4476c
 OPENSSL INSTALLATION
Packit c4476c
 --------------------
Packit c4476c
Packit c4476c
 This document describes installation on all supported operating
Packit c4476c
 systems (the Unix/Linux family (which includes Mac OS/X), OpenVMS,
Packit c4476c
 and Windows).
Packit c4476c
Packit c4476c
 To install OpenSSL, you will need:
Packit c4476c
Packit c4476c
  * A make implementation
Packit c4476c
  * Perl 5 with core modules (please read NOTES.PERL)
Packit c4476c
  * The perl module Text::Template (please read NOTES.PERL)
Packit c4476c
  * an ANSI C compiler
Packit c4476c
  * a development environment in the form of development libraries and C
Packit c4476c
    header files
Packit c4476c
  * a supported operating system
Packit c4476c
Packit c4476c
 For additional platform specific requirements, solutions to specific
Packit c4476c
 issues and other details, please read one of these:
Packit c4476c
Packit c4476c
  * NOTES.UNIX (any supported Unix like system)
Packit c4476c
  * NOTES.VMS (OpenVMS)
Packit c4476c
  * NOTES.WIN (any supported Windows)
Packit c4476c
  * NOTES.DJGPP (DOS platform with DJGPP)
Packit c4476c
  * NOTES.ANDROID (obviously Android [NDK])
Packit c4476c
Packit c4476c
 Notational conventions in this document
Packit c4476c
 ---------------------------------------
Packit c4476c
Packit c4476c
 Throughout this document, we use the following conventions in command
Packit c4476c
 examples:
Packit c4476c
Packit c4476c
 $ command                      Any line starting with a dollar sign
Packit c4476c
                                ($) is a command line.
Packit c4476c
Packit c4476c
 { word1 | word2 | word3 }      This denotes a mandatory choice, to be
Packit c4476c
                                replaced with one of the given words.
Packit c4476c
                                A simple example would be this:
Packit c4476c
Packit c4476c
                                $ echo { FOO | BAR | COOKIE }
Packit c4476c
Packit c4476c
                                which is to be understood as one of
Packit c4476c
                                these:
Packit c4476c
Packit c4476c
                                $ echo FOO
Packit c4476c
                                - or -
Packit c4476c
                                $ echo BAR
Packit c4476c
                                - or -
Packit c4476c
                                $ echo COOKIE
Packit c4476c
Packit c4476c
 [ word1 | word2 | word3 ]      Similar to { word1 | word2 | word3 }
Packit c4476c
                                except it's optional to give any of
Packit c4476c
                                those.  In addition to the examples
Packit c4476c
                                above, this would also be valid:
Packit c4476c
Packit c4476c
                                $ echo
Packit c4476c
Packit c4476c
 {{ target }}                   This denotes a mandatory word or
Packit c4476c
                                sequence of words of some sort.  A
Packit c4476c
                                simple example would be this:
Packit c4476c
Packit c4476c
                                $ type {{ filename }}
Packit c4476c
Packit c4476c
                                which is to be understood to use the
Packit c4476c
                                command 'type' on some file name
Packit c4476c
                                determined by the user.
Packit c4476c
Packit c4476c
 [[ options ]]                  Similar to {{ target }}, but is
Packit c4476c
                                optional.
Packit c4476c
Packit c4476c
 Note that the notation assumes spaces around {, }, [, ], {{, }} and
Packit c4476c
 [[, ]].  This is to differentiate from OpenVMS directory
Packit c4476c
 specifications, which also use [ and ], but without spaces.
Packit c4476c
Packit c4476c
 Quick Start
Packit c4476c
 -----------
Packit c4476c
Packit c4476c
 If you want to just get on with it, do:
Packit c4476c
Packit c4476c
  on Unix (again, this includes Mac OS/X):
Packit c4476c
Packit c4476c
    $ ./config
Packit c4476c
    $ make
Packit c4476c
    $ make test
Packit c4476c
    $ make install
Packit c4476c
Packit c4476c
  on OpenVMS:
Packit c4476c
Packit c4476c
    $ @config
Packit c4476c
    $ mms
Packit c4476c
    $ mms test
Packit c4476c
    $ mms install
Packit c4476c
Packit c4476c
  on Windows (only pick one of the targets for configuration):
Packit c4476c
Packit c4476c
    $ perl Configure { VC-WIN32 | VC-WIN64A | VC-WIN64I | VC-CE }
Packit c4476c
    $ nmake
Packit c4476c
    $ nmake test
Packit c4476c
    $ nmake install
Packit c4476c
Packit c4476c
 Note that in order to perform the install step above you need to have
Packit c4476c
 appropriate permissions to write to the installation directory.
Packit c4476c
Packit c4476c
 If any of these steps fails, see section Installation in Detail below.
Packit c4476c
Packit c4476c
 This will build and install OpenSSL in the default location, which is:
Packit c4476c
Packit c4476c
  Unix:    normal installation directories under /usr/local
Packit c4476c
  OpenVMS: SYS$COMMON:[OPENSSL-'version'...], where 'version' is the
Packit c4476c
           OpenSSL version number with underscores instead of periods.
Packit c4476c
  Windows: C:\Program Files\OpenSSL or C:\Program Files (x86)\OpenSSL
Packit c4476c
Packit c4476c
 The installation directory should be appropriately protected to ensure
Packit c4476c
 unprivileged users cannot make changes to OpenSSL binaries or files, or install
Packit c4476c
 engines. If you already have a pre-installed version of OpenSSL as part of
Packit c4476c
 your Operating System it is recommended that you do not overwrite the system
Packit c4476c
 version and instead install to somewhere else.
Packit c4476c
Packit c4476c
 If you want to install it anywhere else, run config like this:
Packit c4476c
Packit c4476c
  On Unix:
Packit c4476c
Packit c4476c
    $ ./config --prefix=/opt/openssl --openssldir=/usr/local/ssl
Packit c4476c
Packit c4476c
  On OpenVMS:
Packit c4476c
Packit c4476c
    $ @config --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL]
Packit c4476c
Packit c4476c
 (Note: if you do add options to the configuration command, please make sure
Packit c4476c
 you've read more than just this Quick Start, such as relevant NOTES.* files,
Packit c4476c
 the options outline below, as configuration options may change the outcome
Packit c4476c
 in otherwise unexpected ways)
Packit c4476c
Packit c4476c
Packit c4476c
 Configuration Options
Packit c4476c
 ---------------------
Packit c4476c
Packit c4476c
 There are several options to ./config (or ./Configure) to customize
Packit c4476c
 the build (note that for Windows, the defaults for --prefix and
Packit c4476c
 --openssldir depend in what configuration is used and what Windows
Packit c4476c
 implementation OpenSSL is built on.  More notes on this in NOTES.WIN):
Packit c4476c
Packit c4476c
  --api=x.y.z
Packit c4476c
                   Don't build with support for deprecated APIs below the
Packit c4476c
                   specified version number. For example "--api=1.1.0" will
Packit c4476c
                   remove support for all APIS that were deprecated in OpenSSL
Packit c4476c
                   version 1.1.0 or below. This is a rather specialized option
Packit c4476c
                   for developers. If you just intend to remove all deprecated
Packit c4476c
                   APIs entirely (up to the current version), it is easier
Packit c4476c
                   to add the 'no-deprecated' option instead (see below).
Packit c4476c
Packit c4476c
  --cross-compile-prefix=PREFIX
Packit c4476c
                   The PREFIX to include in front of commands for your
Packit c4476c
                   toolchain. It's likely to have to end with dash, e.g.
Packit c4476c
                   a-b-c- would invoke GNU compiler as a-b-c-gcc, etc.
Packit c4476c
                   Unfortunately cross-compiling is too case-specific to
Packit c4476c
                   put together one-size-fits-all instructions. You might
Packit c4476c
                   have to pass more flags or set up environment variables
Packit c4476c
                   to actually make it work. Android and iOS cases are
Packit c4476c
                   discussed in corresponding Configurations/15-*.conf
Packit c4476c
                   files. But there are cases when this option alone is
Packit c4476c
                   sufficient. For example to build the mingw64 target on
Packit c4476c
                   Linux "--cross-compile-prefix=x86_64-w64-mingw32-"
Packit c4476c
                   works. Naturally provided that mingw packages are
Packit c4476c
                   installed. Today Debian and Ubuntu users have option to
Packit c4476c
                   install a number of prepackaged cross-compilers along
Packit c4476c
                   with corresponding run-time and development packages for
Packit c4476c
                   "alien" hardware. To give another example
Packit c4476c
                   "--cross-compile-prefix=mipsel-linux-gnu-" suffices
Packit c4476c
                   in such case. Needless to mention that you have to
Packit c4476c
                   invoke ./Configure, not ./config, and pass your target
Packit c4476c
                   name explicitly. Also, note that --openssldir refers
Packit c4476c
                   to target's file system, not one you are building on.
Packit c4476c
Packit c4476c
  --debug
Packit c4476c
                   Build OpenSSL with debugging symbols and zero optimization
Packit c4476c
                   level.
Packit c4476c
Packit c4476c
  --libdir=DIR
Packit c4476c
                   The name of the directory under the top of the installation
Packit c4476c
                   directory tree (see the --prefix option) where libraries will
Packit c4476c
                   be installed. By default this is "lib". Note that on Windows
Packit c4476c
                   only ".lib" files will be stored in this location. dll files
Packit c4476c
                   will always be installed to the "bin" directory.
Packit c4476c
Packit c4476c
  --openssldir=DIR
Packit c4476c
                   Directory for OpenSSL configuration files, and also the
Packit c4476c
                   default certificate and key store.  Defaults are:
Packit c4476c
Packit c4476c
                   Unix:           /usr/local/ssl
Packit c4476c
                   Windows:        C:\Program Files\Common Files\SSL
Packit c4476c
                                or C:\Program Files (x86)\Common Files\SSL
Packit c4476c
                   OpenVMS:        SYS$COMMON:[OPENSSL-COMMON]
Packit c4476c
Packit c4476c
  --prefix=DIR
Packit c4476c
                   The top of the installation directory tree.  Defaults are:
Packit c4476c
Packit c4476c
                   Unix:           /usr/local
Packit c4476c
                   Windows:        C:\Program Files\OpenSSL
Packit c4476c
                                or C:\Program Files (x86)\OpenSSL
Packit c4476c
                   OpenVMS:        SYS$COMMON:[OPENSSL-'version']
Packit c4476c
Packit c4476c
  --release
Packit c4476c
                   Build OpenSSL without debugging symbols. This is the default.
Packit c4476c
Packit c4476c
  --strict-warnings
Packit c4476c
                   This is a developer flag that switches on various compiler
Packit c4476c
                   options recommended for OpenSSL development. It only works
Packit c4476c
                   when using gcc or clang as the compiler. If you are
Packit c4476c
                   developing a patch for OpenSSL then it is recommended that
Packit c4476c
                   you use this option where possible.
Packit c4476c
Packit c4476c
  --with-zlib-include=DIR
Packit c4476c
                   The directory for the location of the zlib include file. This
Packit c4476c
                   option is only necessary if enable-zlib (see below) is used
Packit c4476c
                   and the include file is not already on the system include
Packit c4476c
                   path.
Packit c4476c
Packit c4476c
  --with-zlib-lib=LIB
Packit c4476c
                   On Unix: this is the directory containing the zlib library.
Packit c4476c
                   If not provided the system library path will be used.
Packit c4476c
                   On Windows: this is the filename of the zlib library (with or
Packit c4476c
                   without a path). This flag must be provided if the
Packit c4476c
                   zlib-dynamic option is not also used. If zlib-dynamic is used
Packit c4476c
                   then this flag is optional and a default value ("ZLIB1") is
Packit c4476c
                   used if not provided.
Packit c4476c
                   On VMS: this is the filename of the zlib library (with or
Packit c4476c
                   without a path). This flag is optional and if not provided
Packit c4476c
                   then "GNV$LIBZSHR", "GNV$LIBZSHR32" or "GNV$LIBZSHR64" is
Packit c4476c
                   used by default depending on the pointer size chosen.
Packit c4476c
Packit c4476c
Packit c4476c
  --with-rand-seed=seed1[,seed2,...]
Packit c4476c
                   A comma separated list of seeding methods which will be tried
Packit c4476c
                   by OpenSSL in order to obtain random input (a.k.a "entropy")
Packit c4476c
                   for seeding its cryptographically secure random number
Packit c4476c
                   generator (CSPRNG). The current seeding methods are:
Packit c4476c
Packit c4476c
                   os:         Use a trusted operating system entropy source.
Packit c4476c
                               This is the default method if such an entropy
Packit c4476c
                               source exists.
Packit c4476c
                   getrandom:  Use the L<getrandom(2)> or equivalent system
Packit c4476c
                               call.
Packit c4476c
                   devrandom:  Use the first device from the DEVRANDOM list
Packit c4476c
                               which can be opened to read random bytes. The
Packit c4476c
                               DEVRANDOM preprocessor constant expands to
Packit c4476c
                               "/dev/urandom","/dev/random","/dev/srandom" on
Packit c4476c
                               most unix-ish operating systems.
Packit c4476c
                   egd:        Check for an entropy generating daemon.
Packit c4476c
                   rdcpu:      Use the RDSEED or RDRAND command if provided by
Packit c4476c
                               the CPU.
Packit c4476c
                   librandom:  Use librandom (not implemented yet).
Packit c4476c
                   none:       Disable automatic seeding. This is the default
Packit c4476c
                               on some operating systems where no suitable
Packit c4476c
                               entropy source exists, or no support for it is
Packit c4476c
                               implemented yet.
Packit c4476c
Packit c4476c
                   For more information, see the section 'Note on random number
Packit c4476c
                   generation' at the end of this document.
Packit c4476c
Packit c4476c
  no-afalgeng
Packit c4476c
                   Don't build the AFALG engine. This option will be forced if
Packit c4476c
                   on a platform that does not support AFALG.
Packit c4476c
Packit c4476c
  enable-asan
Packit c4476c
                   Build with the Address sanitiser. This is a developer option
Packit c4476c
                   only. It may not work on all platforms and should never be
Packit c4476c
                   used in production environments. It will only work when used
Packit c4476c
                   with gcc or clang and should be used in conjunction with the
Packit c4476c
                   no-shared option.
Packit c4476c
Packit c4476c
  no-asm
Packit c4476c
                   Do not use assembler code. This should be viewed as
Packit c4476c
                   debugging/trouble-shooting option rather than production.
Packit c4476c
                   On some platforms a small amount of assembler code may
Packit c4476c
                   still be used even with this option.
Packit c4476c
Packit c4476c
  no-async
Packit c4476c
                   Do not build support for async operations.
Packit c4476c
Packit c4476c
  no-autoalginit
Packit c4476c
                   Don't automatically load all supported ciphers and digests.
Packit c4476c
                   Typically OpenSSL will make available all of its supported
Packit c4476c
                   ciphers and digests. For a statically linked application this
Packit c4476c
                   may be undesirable if small executable size is an objective.
Packit c4476c
                   This only affects libcrypto. Ciphers and digests will have to
Packit c4476c
                   be loaded manually using EVP_add_cipher() and
Packit c4476c
                   EVP_add_digest() if this option is used. This option will
Packit c4476c
                   force a non-shared build.
Packit c4476c
Packit c4476c
  no-autoerrinit
Packit c4476c
                   Don't automatically load all libcrypto/libssl error strings.
Packit c4476c
                   Typically OpenSSL will automatically load human readable
Packit c4476c
                   error strings. For a statically linked application this may
Packit c4476c
                   be undesirable if small executable size is an objective.
Packit c4476c
Packit c4476c
  no-autoload-config
Packit c4476c
                   Don't automatically load the default openssl.cnf file.
Packit c4476c
                   Typically OpenSSL will automatically load a system config
Packit c4476c
                   file which configures default ssl options.
Packit c4476c
Packit c4476c
  enable-buildtest-c++
Packit c4476c
                   While testing, generate C++ buildtest files that
Packit c4476c
                   simply check that the public OpenSSL header files
Packit c4476c
                   are usable standalone with C++.
Packit c4476c
Packit c4476c
                   Enabling this option demands extra care.  For any
Packit c4476c
                   compiler flag given directly as configuration
Packit c4476c
                   option, you must ensure that it's valid for both
Packit c4476c
                   the C and the C++ compiler.  If not, the C++ build
Packit c4476c
                   test will most likely break.  As an alternative,
Packit c4476c
                   you can use the language specific variables, CFLAGS
Packit c4476c
                   and CXXFLAGS.
Packit c4476c
Packit c4476c
  no-capieng
Packit c4476c
                   Don't build the CAPI engine. This option will be forced if
Packit c4476c
                   on a platform that does not support CAPI.
Packit c4476c
Packit c4476c
  no-cms
Packit c4476c
                   Don't build support for CMS features
Packit c4476c
Packit c4476c
  no-comp
Packit c4476c
                   Don't build support for SSL/TLS compression. If this option
Packit c4476c
                   is left enabled (the default), then compression will only
Packit c4476c
                   work if the zlib or zlib-dynamic options are also chosen.
Packit c4476c
Packit c4476c
  enable-crypto-mdebug
Packit c4476c
                   Build support for debugging memory allocated via
Packit c4476c
                   OPENSSL_malloc() or OPENSSL_zalloc().
Packit c4476c
Packit c4476c
  enable-crypto-mdebug-backtrace
Packit c4476c
                   As for crypto-mdebug, but additionally provide backtrace
Packit c4476c
                   information for allocated memory.
Packit c4476c
                   TO BE USED WITH CARE: this uses GNU C functionality, and
Packit c4476c
                   is therefore not usable for non-GNU config targets.  If
Packit c4476c
                   your build complains about the use of '-rdynamic' or the
Packit c4476c
                   lack of header file execinfo.h, this option is not for you.
Packit c4476c
                   ALSO NOTE that even though execinfo.h is available on your
Packit c4476c
                   system (through Gnulib), the functions might just be stubs
Packit c4476c
                   that do nothing.
Packit c4476c
Packit c4476c
  no-ct
Packit c4476c
                   Don't build support for Certificate Transparency.
Packit c4476c
Packit c4476c
  no-deprecated
Packit c4476c
                   Don't build with support for any deprecated APIs. This is the
Packit c4476c
                   same as using "--api" and supplying the latest version
Packit c4476c
                   number.
Packit c4476c
Packit c4476c
  no-dgram
Packit c4476c
                   Don't build support for datagram based BIOs. Selecting this
Packit c4476c
                   option will also force the disabling of DTLS.
Packit c4476c
Packit c4476c
  no-dso
Packit c4476c
                   Don't build support for loading Dynamic Shared Objects.
Packit c4476c
Packit c4476c
  enable-devcryptoeng
Packit c4476c
                   Build the /dev/crypto engine.  It is automatically selected
Packit c4476c
                   on BSD implementations, in which case it can be disabled with
Packit c4476c
                   no-devcryptoeng.
Packit c4476c
Packit c4476c
  no-dynamic-engine
Packit c4476c
                   Don't build the dynamically loaded engines. This only has an
Packit c4476c
                   effect in a "shared" build
Packit c4476c
Packit c4476c
  no-ec
Packit c4476c
                   Don't build support for Elliptic Curves.
Packit c4476c
Packit c4476c
  no-ec2m
Packit c4476c
                   Don't build support for binary Elliptic Curves
Packit c4476c
Packit c4476c
  enable-ec_nistp_64_gcc_128
Packit c4476c
                   Enable support for optimised implementations of some commonly
Packit c4476c
                   used NIST elliptic curves.
Packit c4476c
                   This is only supported on platforms:
Packit c4476c
                   - with little-endian storage of non-byte types
Packit c4476c
                   - that tolerate misaligned memory references
Packit c4476c
                   - where the compiler:
Packit c4476c
                     - supports the non-standard type __uint128_t
Packit c4476c
                     - defines the built-in macro __SIZEOF_INT128__
Packit c4476c
Packit c4476c
  enable-egd
Packit c4476c
                   Build support for gathering entropy from EGD (Entropy
Packit c4476c
                   Gathering Daemon).
Packit c4476c
Packit c4476c
  no-engine
Packit c4476c
                   Don't build support for loading engines.
Packit c4476c
Packit c4476c
  no-err
Packit c4476c
                   Don't compile in any error strings.
Packit c4476c
Packit c4476c
  enable-external-tests
Packit c4476c
                   Enable building of integration with external test suites.
Packit c4476c
                   This is a developer option and may not work on all platforms.
Packit c4476c
                   The only supported external test suite at the current time is
Packit c4476c
                   the BoringSSL test suite. See the file test/README.external
Packit c4476c
                   for further details.
Packit c4476c
Packit c4476c
  no-filenames
Packit c4476c
                   Don't compile in filename and line number information (e.g.
Packit c4476c
                   for errors and memory allocation).
Packit c4476c
Packit c4476c
  enable-fuzz-libfuzzer, enable-fuzz-afl
Packit c4476c
                   Build with support for fuzzing using either libfuzzer or AFL.
Packit c4476c
                   These are developer options only. They may not work on all
Packit c4476c
                   platforms and should never be used in production environments.
Packit c4476c
                   See the file fuzz/README.md for further details.
Packit c4476c
Packit c4476c
  no-gost
Packit c4476c
                   Don't build support for GOST based ciphersuites. Note that
Packit c4476c
                   if this feature is enabled then GOST ciphersuites are only
Packit c4476c
                   available if the GOST algorithms are also available through
Packit c4476c
                   loading an externally supplied engine.
Packit c4476c
Packit c4476c
  no-hw-padlock
Packit c4476c
                   Don't build the padlock engine.
Packit c4476c
Packit c4476c
  no-makedepend
Packit c4476c
                   Don't generate dependencies.
Packit c4476c
Packit c4476c
  no-multiblock
Packit c4476c
                   Don't build support for writing multiple records in one
Packit c4476c
                   go in libssl (Note: this is a different capability to the
Packit c4476c
                   pipelining functionality).
Packit c4476c
Packit c4476c
  no-nextprotoneg
Packit c4476c
                   Don't build support for the NPN TLS extension.
Packit c4476c
Packit c4476c
  no-ocsp
Packit c4476c
                   Don't build support for OCSP.
Packit c4476c
Packit c4476c
  no-pic
Packit c4476c
                   Don't build with support for Position Independent Code.
Packit c4476c
Packit c4476c
  no-pinshared     By default OpenSSL will attempt to stay in memory until the
Packit c4476c
                   process exits. This is so that libcrypto and libssl can be
Packit c4476c
                   properly cleaned up automatically via an "atexit()" handler.
Packit c4476c
                   The handler is registered by libcrypto and cleans up both
Packit c4476c
                   libraries. On some platforms the atexit() handler will run on
Packit c4476c
                   unload of libcrypto (if it has been dynamically loaded)
Packit c4476c
                   rather than at process exit. This option can be used to stop
Packit c4476c
                   OpenSSL from attempting to stay in memory until the process
Packit c4476c
                   exits. This could lead to crashes if either libcrypto or
Packit c4476c
                   libssl have already been unloaded at the point
Packit c4476c
                   that the atexit handler is invoked, e.g. on a platform which
Packit c4476c
                   calls atexit() on unload of the library, and libssl is
Packit c4476c
                   unloaded before libcrypto then a crash is likely to happen.
Packit c4476c
                   Applications can suppress running of the atexit() handler at
Packit c4476c
                   run time by using the OPENSSL_INIT_NO_ATEXIT option to
Packit c4476c
                   OPENSSL_init_crypto(). See the man page for it for further
Packit c4476c
                   details.
Packit c4476c
Packit c4476c
  no-posix-io
Packit c4476c
                   Don't use POSIX IO capabilities.
Packit c4476c
Packit c4476c
  no-psk
Packit c4476c
                   Don't build support for Pre-Shared Key based ciphersuites.
Packit c4476c
Packit c4476c
  no-rdrand
Packit c4476c
                   Don't use hardware RDRAND capabilities.
Packit c4476c
Packit c4476c
  no-rfc3779
Packit c4476c
                   Don't build support for RFC3779 ("X.509 Extensions for IP
Packit c4476c
                   Addresses and AS Identifiers")
Packit c4476c
Packit c4476c
  sctp
Packit c4476c
                   Build support for SCTP
Packit c4476c
Packit c4476c
  no-shared
Packit c4476c
                   Do not create shared libraries, only static ones.  See "Note
Packit c4476c
                   on shared libraries" below.
Packit c4476c
Packit c4476c
  no-sock
Packit c4476c
                   Don't build support for socket BIOs
Packit c4476c
Packit c4476c
  no-srp
Packit c4476c
                   Don't build support for SRP or SRP based ciphersuites.
Packit c4476c
Packit c4476c
  no-srtp
Packit c4476c
                   Don't build SRTP support
Packit c4476c
Packit c4476c
  no-sse2
Packit c4476c
                   Exclude SSE2 code paths from 32-bit x86 assembly modules.
Packit c4476c
                   Normally SSE2 extension is detected at run-time, but the
Packit c4476c
                   decision whether or not the machine code will be executed
Packit c4476c
                   is taken solely on CPU capability vector. This means that
Packit c4476c
                   if you happen to run OS kernel which does not support SSE2
Packit c4476c
                   extension on Intel P4 processor, then your application
Packit c4476c
                   might be exposed to "illegal instruction" exception.
Packit c4476c
                   There might be a way to enable support in kernel, e.g.
Packit c4476c
                   FreeBSD kernel can  be compiled with CPU_ENABLE_SSE, and
Packit c4476c
                   there is a way to disengage SSE2 code paths upon application
Packit c4476c
                   start-up, but if you aim for wider "audience" running
Packit c4476c
                   such kernel, consider no-sse2. Both the 386 and
Packit c4476c
                   no-asm options imply no-sse2.
Packit c4476c
Packit c4476c
  enable-ssl-trace
Packit c4476c
                   Build with the SSL Trace capabilities (adds the "-trace"
Packit c4476c
                   option to s_client and s_server).
Packit c4476c
Packit c4476c
  no-static-engine
Packit c4476c
                   Don't build the statically linked engines. This only
Packit c4476c
                   has an impact when not built "shared".
Packit c4476c
Packit c4476c
  no-stdio
Packit c4476c
                   Don't use anything from the C header file "stdio.h" that
Packit c4476c
                   makes use of the "FILE" type. Only libcrypto and libssl can
Packit c4476c
                   be built in this way. Using this option will suppress
Packit c4476c
                   building the command line applications. Additionally since
Packit c4476c
                   the OpenSSL tests also use the command line applications the
Packit c4476c
                   tests will also be skipped.
Packit c4476c
Packit c4476c
  no-tests
Packit c4476c
                   Don't build test programs or run any test.
Packit c4476c
Packit c4476c
  no-threads
Packit c4476c
                   Don't try to build with support for multi-threaded
Packit c4476c
                   applications.
Packit c4476c
Packit c4476c
  threads
Packit c4476c
                   Build with support for multi-threaded applications. Most
Packit c4476c
                   platforms will enable this by default. However if on a
Packit c4476c
                   platform where this is not the case then this will usually
Packit c4476c
                   require additional system-dependent options! See "Note on
Packit c4476c
                   multi-threading" below.
Packit c4476c
Packit c4476c
  no-ts
Packit c4476c
                   Don't build Time Stamping Authority support.
Packit c4476c
Packit c4476c
  enable-ubsan
Packit c4476c
                   Build with the Undefined Behaviour sanitiser. This is a
Packit c4476c
                   developer option only. It may not work on all platforms and
Packit c4476c
                   should never be used in production environments. It will only
Packit c4476c
                   work when used with gcc or clang and should be used in
Packit c4476c
                   conjunction with the "-DPEDANTIC" option (or the
Packit c4476c
                   --strict-warnings option).
Packit c4476c
Packit c4476c
  no-ui-console
Packit c4476c
                   Don't build with the "UI" console method (i.e. the "UI"
Packit c4476c
                   method that enables text based console prompts).
Packit c4476c
Packit c4476c
  enable-unit-test
Packit c4476c
                   Enable additional unit test APIs. This should not typically
Packit c4476c
                   be used in production deployments.
Packit c4476c
Packit c4476c
  enable-weak-ssl-ciphers
Packit c4476c
                   Build support for SSL/TLS ciphers that are considered "weak"
Packit c4476c
                   (e.g. RC4 based ciphersuites).
Packit c4476c
Packit c4476c
  zlib
Packit c4476c
                   Build with support for zlib compression/decompression.
Packit c4476c
Packit c4476c
  zlib-dynamic
Packit c4476c
                   Like "zlib", but has OpenSSL load the zlib library
Packit c4476c
                   dynamically when needed.  This is only supported on systems
Packit c4476c
                   where loading of shared libraries is supported.
Packit c4476c
Packit c4476c
  386
Packit c4476c
                   In 32-bit x86 builds, when generating assembly modules,
Packit c4476c
                   use the 80386 instruction set only (the default x86 code
Packit c4476c
                   is more efficient, but requires at least a 486). Note:
Packit c4476c
                   This doesn't affect code generated by compiler, you're
Packit c4476c
                   likely to complement configuration command line with
Packit c4476c
                   suitable compiler-specific option.
Packit c4476c
Packit c4476c
  no-<prot>
Packit c4476c
                   Don't build support for negotiating the specified SSL/TLS
Packit c4476c
                   protocol (one of ssl, ssl3, tls, tls1, tls1_1, tls1_2,
Packit c4476c
                   tls1_3, dtls, dtls1 or dtls1_2). If "no-tls" is selected then
Packit c4476c
                   all of tls1, tls1_1, tls1_2 and tls1_3 are disabled.
Packit c4476c
                   Similarly "no-dtls" will disable dtls1 and dtls1_2. The
Packit c4476c
                   "no-ssl" option is synonymous with "no-ssl3". Note this only
Packit c4476c
                   affects version negotiation. OpenSSL will still provide the
Packit c4476c
                   methods for applications to explicitly select the individual
Packit c4476c
                   protocol versions.
Packit c4476c
Packit c4476c
  no-<prot>-method
Packit c4476c
                   As for no-<prot> but in addition do not build the methods for
Packit c4476c
                   applications to explicitly select individual protocol
Packit c4476c
                   versions. Note that there is no "no-tls1_3-method" option
Packit c4476c
                   because there is no application method for TLSv1.3. Using
Packit c4476c
                   individual protocol methods directly is deprecated.
Packit c4476c
                   Applications should use TLS_method() instead.
Packit c4476c
Packit c4476c
  enable-<alg>
Packit c4476c
                   Build with support for the specified algorithm, where <alg>
Packit c4476c
                   is one of: md2 or rc5.
Packit c4476c
Packit c4476c
  no-<alg>
Packit c4476c
                   Build without support for the specified algorithm, where
Packit c4476c
                   <alg> is one of: aria, bf, blake2, camellia, cast, chacha,
Packit c4476c
                   cmac, des, dh, dsa, ecdh, ecdsa, idea, md4, mdc2, ocb,
Packit c4476c
                   poly1305, rc2, rc4, rmd160, scrypt, seed, siphash, sm2, sm3,
Packit c4476c
                   sm4 or whirlpool.  The "ripemd" algorithm is deprecated and
Packit c4476c
                   if used is synonymous with rmd160.
Packit c4476c
Packit c4476c
  -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
Packit c4476c
                   These system specific options will be recognised and
Packit c4476c
                   passed through to the compiler to allow you to define
Packit c4476c
                   preprocessor symbols, specify additional libraries, library
Packit c4476c
                   directories or other compiler options. It might be worth
Packit c4476c
                   noting that some compilers generate code specifically for
Packit c4476c
                   processor the compiler currently executes on. This is not
Packit c4476c
                   necessarily what you might have in mind, since it might be
Packit c4476c
                   unsuitable for execution on other, typically older,
Packit c4476c
                   processor. Consult your compiler documentation.
Packit c4476c
Packit c4476c
                   Take note of the VAR=value documentation below and how
Packit c4476c
                   these flags interact with those variables.
Packit c4476c
Packit c4476c
  -xxx, +xxx, /xxx
Packit c4476c
                   Additional options that are not otherwise recognised are
Packit c4476c
                   passed through as they are to the compiler as well.
Packit c4476c
                   Unix-style options beginning with a '-' or '+' and
Packit c4476c
                   Windows-style options beginning with a '/' are recognized.
Packit c4476c
                   Again, consult your compiler documentation.
Packit c4476c
Packit c4476c
                   If the option contains arguments separated by spaces,
Packit c4476c
                   then the URL-style notation %20 can be used for the space
Packit c4476c
                   character in order to avoid having to quote the option.
Packit c4476c
                   For example, -opt%20arg gets expanded to -opt arg.
Packit c4476c
                   In fact, any ASCII character can be encoded as %xx using its
Packit c4476c
                   hexadecimal encoding.
Packit c4476c
Packit c4476c
                   Take note of the VAR=value documentation below and how
Packit c4476c
                   these flags interact with those variables.
Packit c4476c
Packit c4476c
  VAR=value
Packit c4476c
                   Assignment of environment variable for Configure.  These
Packit c4476c
                   work just like normal environment variable assignments,
Packit c4476c
                   but are supported on all platforms and are confined to
Packit c4476c
                   the configuration scripts only.  These assignments override
Packit c4476c
                   the corresponding value in the inherited environment, if
Packit c4476c
                   there is one.
Packit c4476c
Packit c4476c
                   The following variables are used as "make variables" and
Packit c4476c
                   can be used as an alternative to giving preprocessor,
Packit c4476c
                   compiler and linker options directly as configuration.
Packit c4476c
                   The following variables are supported:
Packit c4476c
Packit c4476c
                   AR              The static library archiver.
Packit c4476c
                   ARFLAGS         Flags for the static library archiver.
Packit c4476c
                   AS              The assembler compiler.
Packit c4476c
                   ASFLAGS         Flags for the assembler compiler.
Packit c4476c
                   CC              The C compiler.
Packit c4476c
                   CFLAGS          Flags for the C compiler.
Packit c4476c
                   CXX             The C++ compiler.
Packit c4476c
                   CXXFLAGS        Flags for the C++ compiler.
Packit c4476c
                   CPP             The C/C++ preprocessor.
Packit c4476c
                   CPPFLAGS        Flags for the C/C++ preprocessor.
Packit c4476c
                   CPPDEFINES      List of CPP macro definitions, separated
Packit c4476c
                                   by a platform specific character (':' or
Packit c4476c
                                   space for Unix, ';' for Windows, ',' for
Packit c4476c
                                   VMS).  This can be used instead of using
Packit c4476c
                                   -D (or what corresponds to that on your
Packit c4476c
                                   compiler) in CPPFLAGS.
Packit c4476c
                   CPPINCLUDES     List of CPP inclusion directories, separated
Packit c4476c
                                   the same way as for CPPDEFINES.  This can
Packit c4476c
                                   be used instead of -I (or what corresponds
Packit c4476c
                                   to that on your compiler) in CPPFLAGS.
Packit c4476c
                   HASHBANGPERL    Perl invocation to be inserted after '#!'
Packit c4476c
                                   in public perl scripts (only relevant on
Packit c4476c
                                   Unix).
Packit c4476c
                   LD              The program linker (not used on Unix, $(CC)
Packit c4476c
                                   is used there).
Packit c4476c
                   LDFLAGS         Flags for the shared library, DSO and
Packit c4476c
                                   program linker.
Packit c4476c
                   LDLIBS          Extra libraries to use when linking.
Packit c4476c
                                   Takes the form of a space separated list
Packit c4476c
                                   of library specifications on Unix and
Packit c4476c
                                   Windows, and as a comma separated list of
Packit c4476c
                                   libraries on VMS.
Packit c4476c
                   RANLIB          The library archive indexer.
Packit c4476c
                   RC              The Windows resource compiler.
Packit c4476c
                   RCFLAGS         Flags for the Windows resource compiler.
Packit c4476c
                   RM              The command to remove files and directories.
Packit c4476c
Packit c4476c
                   These cannot be mixed with compiling / linking flags given
Packit c4476c
                   on the command line.  In other words, something like this
Packit c4476c
                   isn't permitted.
Packit c4476c
Packit c4476c
                       ./config -DFOO CPPFLAGS=-DBAR -DCOOKIE
Packit c4476c
Packit c4476c
                   Backward compatibility note:
Packit c4476c
Packit c4476c
                   To be compatible with older configuration scripts, the
Packit c4476c
                   environment variables are ignored if compiling / linking
Packit c4476c
                   flags are given on the command line, except for these:
Packit c4476c
Packit c4476c
                   AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC
Packit c4476c
                   and WINDRES
Packit c4476c
Packit c4476c
                   For example, the following command will not see -DBAR:
Packit c4476c
Packit c4476c
                        CPPFLAGS=-DBAR ./config -DCOOKIE
Packit c4476c
Packit c4476c
                   However, the following will see both set variables:
Packit c4476c
Packit c4476c
                        CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- \
Packit c4476c
                        ./config -DCOOKIE
Packit c4476c
Packit c4476c
                   If CC is set, it is advisable to also set CXX to ensure
Packit c4476c
                   both C and C++ compilers are in the same "family".  This
Packit c4476c
                   becomes relevant with 'enable-external-tests' and
Packit c4476c
                   'enable-buildtest-c++'.
Packit c4476c
Packit c4476c
  reconf
Packit c4476c
  reconfigure
Packit c4476c
                   Reconfigure from earlier data.  This fetches the previous
Packit c4476c
                   command line options and environment from data saved in
Packit c4476c
                   "configdata.pm", and runs the configuration process again,
Packit c4476c
                   using these options and environment.
Packit c4476c
                   Note: NO other option is permitted together with "reconf".
Packit c4476c
                   This means that you also MUST use "./Configure" (or
Packit c4476c
                   what corresponds to that on non-Unix platforms) directly
Packit c4476c
                   to invoke this option.
Packit c4476c
                   Note: The original configuration saves away values for ALL
Packit c4476c
                   environment variables that were used, and if they weren't
Packit c4476c
                   defined, they are still saved away with information that
Packit c4476c
                   they weren't originally defined.  This information takes
Packit c4476c
                   precedence over environment variables that are defined
Packit c4476c
                   when reconfiguring.
Packit c4476c
Packit c4476c
 Displaying configuration data
Packit c4476c
 -----------------------------
Packit c4476c
Packit c4476c
 The configuration script itself will say very little, and finishes by
Packit c4476c
 creating "configdata.pm".  This perl module can be loaded by other scripts
Packit c4476c
 to find all the configuration data, and it can also be used as a script to
Packit c4476c
 display all sorts of configuration data in a human readable form.
Packit c4476c
Packit c4476c
 For more information, please do:
Packit c4476c
Packit c4476c
       $ ./configdata.pm --help                         # Unix
Packit c4476c
Packit c4476c
       or
Packit c4476c
Packit c4476c
       $ perl configdata.pm --help                      # Windows and VMS
Packit c4476c
Packit c4476c
 Installation in Detail
Packit c4476c
 ----------------------
Packit c4476c
Packit c4476c
 1a. Configure OpenSSL for your operation system automatically:
Packit c4476c
Packit c4476c
     NOTE: This is not available on Windows.
Packit c4476c
Packit c4476c
       $ ./config [[ options ]]                         # Unix
Packit c4476c
Packit c4476c
       or
Packit c4476c
Packit c4476c
       $ @config [[ options ]]                          ! OpenVMS
Packit c4476c
Packit c4476c
     For the remainder of this text, the Unix form will be used in all
Packit c4476c
     examples, please use the appropriate form for your platform.
Packit c4476c
Packit c4476c
     This guesses at your operating system (and compiler, if necessary) and
Packit c4476c
     configures OpenSSL based on this guess. Run ./config -t to see
Packit c4476c
     if it guessed correctly. If you want to use a different compiler, you
Packit c4476c
     are cross-compiling for another platform, or the ./config guess was
Packit c4476c
     wrong for other reasons, go to step 1b. Otherwise go to step 2.
Packit c4476c
Packit c4476c
     On some systems, you can include debugging information as follows:
Packit c4476c
Packit c4476c
       $ ./config -d [[ options ]]
Packit c4476c
Packit c4476c
 1b. Configure OpenSSL for your operating system manually
Packit c4476c
Packit c4476c
     OpenSSL knows about a range of different operating system, hardware and
Packit c4476c
     compiler combinations. To see the ones it knows about, run
Packit c4476c
Packit c4476c
       $ ./Configure                                    # Unix
Packit c4476c
Packit c4476c
       or
Packit c4476c
Packit c4476c
       $ perl Configure                                 # All other platforms
Packit c4476c
Packit c4476c
     For the remainder of this text, the Unix form will be used in all
Packit c4476c
     examples, please use the appropriate form for your platform.
Packit c4476c
Packit c4476c
     Pick a suitable name from the list that matches your system. For most
Packit c4476c
     operating systems there is a choice between using "cc" or "gcc".  When
Packit c4476c
     you have identified your system (and if necessary compiler) use this name
Packit c4476c
     as the argument to Configure. For example, a "linux-elf" user would
Packit c4476c
     run:
Packit c4476c
Packit c4476c
       $ ./Configure linux-elf [[ options ]]
Packit c4476c
Packit c4476c
     If your system isn't listed, you will have to create a configuration
Packit c4476c
     file named Configurations/{{ something }}.conf and add the correct
Packit c4476c
     configuration for your system. See the available configs as examples
Packit c4476c
     and read Configurations/README and Configurations/README.design for
Packit c4476c
     more information.
Packit c4476c
Packit c4476c
     The generic configurations "cc" or "gcc" should usually work on 32 bit
Packit c4476c
     Unix-like systems.
Packit c4476c
Packit c4476c
     Configure creates a build file ("Makefile" on Unix, "makefile" on Windows
Packit c4476c
     and "descrip.mms" on OpenVMS) from a suitable template in Configurations,
Packit c4476c
     and defines various macros in include/openssl/opensslconf.h (generated from
Packit c4476c
     include/openssl/opensslconf.h.in).
Packit c4476c
Packit c4476c
 1c. Configure OpenSSL for building outside of the source tree.
Packit c4476c
Packit c4476c
     OpenSSL can be configured to build in a build directory separate from
Packit c4476c
     the directory with the source code.  It's done by placing yourself in
Packit c4476c
     some other directory and invoking the configuration commands from
Packit c4476c
     there.
Packit c4476c
Packit c4476c
     Unix example:
Packit c4476c
Packit c4476c
       $ mkdir /var/tmp/openssl-build
Packit c4476c
       $ cd /var/tmp/openssl-build
Packit c4476c
       $ /PATH/TO/OPENSSL/SOURCE/config [[ options ]]
Packit c4476c
Packit c4476c
       or
Packit c4476c
Packit c4476c
       $ /PATH/TO/OPENSSL/SOURCE/Configure {{ target }} [[ options ]]
Packit c4476c
Packit c4476c
     OpenVMS example:
Packit c4476c
Packit c4476c
       $ set default sys$login:
Packit c4476c
       $ create/dir [.tmp.openssl-build]
Packit c4476c
       $ set default [.tmp.openssl-build]
Packit c4476c
       $ @[PATH.TO.OPENSSL.SOURCE]config [[ options ]]
Packit c4476c
Packit c4476c
       or
Packit c4476c
Packit c4476c
       $ @[PATH.TO.OPENSSL.SOURCE]Configure {{ target }} [[ options ]]
Packit c4476c
Packit c4476c
     Windows example:
Packit c4476c
Packit c4476c
       $ C:
Packit c4476c
       $ mkdir \temp-openssl
Packit c4476c
       $ cd \temp-openssl
Packit c4476c
       $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure {{ target }} [[ options ]]
Packit c4476c
Packit c4476c
     Paths can be relative just as well as absolute.  Configure will
Packit c4476c
     do its best to translate them to relative paths whenever possible.
Packit c4476c
Packit c4476c
  2. Build OpenSSL by running:
Packit c4476c
Packit c4476c
       $ make                                           # Unix
Packit c4476c
       $ mms                                            ! (or mmk) OpenVMS
Packit c4476c
       $ nmake                                          # Windows
Packit c4476c
Packit c4476c
     This will build the OpenSSL libraries (libcrypto.a and libssl.a on
Packit c4476c
     Unix, corresponding on other platforms) and the OpenSSL binary
Packit c4476c
     ("openssl"). The libraries will be built in the top-level directory,
Packit c4476c
     and the binary will be in the "apps" subdirectory.
Packit c4476c
Packit c4476c
     Troubleshooting:
Packit c4476c
Packit c4476c
     If the build fails, look at the output.  There may be reasons
Packit c4476c
     for the failure that aren't problems in OpenSSL itself (like
Packit c4476c
     missing standard headers).
Packit c4476c
Packit c4476c
     If the build succeeded previously, but fails after a source or
Packit c4476c
     configuration change, it might be helpful to clean the build tree
Packit c4476c
     before attempting another build. Use this command:
Packit c4476c
Packit c4476c
       $ make clean                                     # Unix
Packit c4476c
       $ mms clean                                      ! (or mmk) OpenVMS
Packit c4476c
       $ nmake clean                                    # Windows
Packit c4476c
Packit c4476c
     Assembler error messages can sometimes be sidestepped by using the
Packit c4476c
     "no-asm" configuration option.
Packit c4476c
Packit c4476c
     Compiling parts of OpenSSL with gcc and others with the system
Packit c4476c
     compiler will result in unresolved symbols on some systems.
Packit c4476c
Packit c4476c
     If you are still having problems you can get help by sending an email
Packit c4476c
     to the openssl-users email list (see
Packit c4476c
     https://www.openssl.org/community/mailinglists.html for details). If
Packit c4476c
     it is a bug with OpenSSL itself, please open an issue on GitHub, at
Packit c4476c
     https://github.com/openssl/openssl/issues. Please review the existing
Packit c4476c
     ones first; maybe the bug was already reported or has already been
Packit c4476c
     fixed.
Packit c4476c
Packit c4476c
  3. After a successful build, the libraries should be tested. Run:
Packit c4476c
Packit c4476c
       $ make test                                      # Unix
Packit c4476c
       $ mms test                                       ! OpenVMS
Packit c4476c
       $ nmake test                                     # Windows
Packit c4476c
Packit c4476c
     NOTE: you MUST run the tests from an unprivileged account (or
Packit c4476c
     disable your privileges temporarily if your platform allows it).
Packit c4476c
Packit c4476c
     If some tests fail, look at the output.  There may be reasons for
Packit c4476c
     the failure that isn't a problem in OpenSSL itself (like a
Packit c4476c
     malfunction with Perl).  You may want increased verbosity, that
Packit c4476c
     can be accomplished like this:
Packit c4476c
Packit c4476c
       $ make VERBOSE=1 test                            # Unix
Packit c4476c
Packit c4476c
       $ mms /macro=(VERBOSE=1) test                    ! OpenVMS
Packit c4476c
Packit c4476c
       $ nmake VERBOSE=1 test                           # Windows
Packit c4476c
Packit c4476c
     If you want to run just one or a few specific tests, you can use
Packit c4476c
     the make variable TESTS to specify them, like this:
Packit c4476c
Packit c4476c
       $ make TESTS='test_rsa test_dsa' test            # Unix
Packit c4476c
       $ mms/macro="TESTS=test_rsa test_dsa" test       ! OpenVMS
Packit c4476c
       $ nmake TESTS='test_rsa test_dsa' test           # Windows
Packit c4476c
Packit c4476c
     And of course, you can combine (Unix example shown):
Packit c4476c
Packit c4476c
       $ make VERBOSE=1 TESTS='test_rsa test_dsa' test
Packit c4476c
Packit c4476c
     You can find the list of available tests like this:
Packit c4476c
Packit c4476c
       $ make list-tests                                # Unix
Packit c4476c
       $ mms list-tests                                 ! OpenVMS
Packit c4476c
       $ nmake list-tests                               # Windows
Packit c4476c
Packit c4476c
     Have a look at the manual for the perl module Test::Harness to
Packit c4476c
     see what other HARNESS_* variables there are.
Packit c4476c
Packit c4476c
     If you find a problem with OpenSSL itself, try removing any
Packit c4476c
     compiler optimization flags from the CFLAGS line in Makefile and
Packit c4476c
     run "make clean; make" or corresponding.
Packit c4476c
Packit c4476c
     To report a bug please open an issue on GitHub, at
Packit c4476c
     https://github.com/openssl/openssl/issues.
Packit c4476c
Packit c4476c
     For more details on how the make variables TESTS can be used,
Packit c4476c
     see section TESTS in Detail below.
Packit c4476c
Packit c4476c
  4. If everything tests ok, install OpenSSL with
Packit c4476c
Packit c4476c
       $ make install                                   # Unix
Packit c4476c
       $ mms install                                    ! OpenVMS
Packit c4476c
       $ nmake install                                  # Windows
Packit c4476c
Packit c4476c
     Note that in order to perform the install step above you need to have
Packit c4476c
     appropriate permissions to write to the installation directory.
Packit c4476c
Packit c4476c
     The above commands will install all the software components in this
Packit c4476c
     directory tree under PREFIX (the directory given with --prefix or its
Packit c4476c
     default):
Packit c4476c
Packit c4476c
       Unix:
Packit c4476c
Packit c4476c
         bin/           Contains the openssl binary and a few other
Packit c4476c
                        utility scripts.
Packit c4476c
         include/openssl
Packit c4476c
                        Contains the header files needed if you want
Packit c4476c
                        to build your own programs that use libcrypto
Packit c4476c
                        or libssl.
Packit c4476c
         lib            Contains the OpenSSL library files.
Packit c4476c
         lib/engines    Contains the OpenSSL dynamically loadable engines.
Packit c4476c
Packit c4476c
         share/man/man1 Contains the OpenSSL command line man-pages.
Packit c4476c
         share/man/man3 Contains the OpenSSL library calls man-pages.
Packit c4476c
         share/man/man5 Contains the OpenSSL configuration format man-pages.
Packit c4476c
         share/man/man7 Contains the OpenSSL other misc man-pages.
Packit c4476c
Packit c4476c
         share/doc/openssl/html/man1
Packit c4476c
         share/doc/openssl/html/man3
Packit c4476c
         share/doc/openssl/html/man5
Packit c4476c
         share/doc/openssl/html/man7
Packit c4476c
                        Contains the HTML rendition of the man-pages.
Packit c4476c
Packit c4476c
       OpenVMS ('arch' is replaced with the architecture name, "Alpha"
Packit c4476c
       or "ia64", 'sover' is replaced with the shared library version
Packit c4476c
       (0101 for 1.1), and 'pz' is replaced with the pointer size
Packit c4476c
       OpenSSL was built with):
Packit c4476c
Packit c4476c
         [.EXE.'arch']  Contains the openssl binary.
Packit c4476c
         [.EXE]         Contains a few utility scripts.
Packit c4476c
         [.include.openssl]
Packit c4476c
                        Contains the header files needed if you want
Packit c4476c
                        to build your own programs that use libcrypto
Packit c4476c
                        or libssl.
Packit c4476c
         [.LIB.'arch']  Contains the OpenSSL library files.
Packit c4476c
         [.ENGINES'sover''pz'.'arch']
Packit c4476c
                        Contains the OpenSSL dynamically loadable engines.
Packit c4476c
         [.SYS$STARTUP] Contains startup, login and shutdown scripts.
Packit c4476c
                        These define appropriate logical names and
Packit c4476c
                        command symbols.
Packit c4476c
         [.SYSTEST]     Contains the installation verification procedure.
Packit c4476c
         [.HTML]        Contains the HTML rendition of the manual pages.
Packit c4476c
Packit c4476c
Packit c4476c
     Additionally, install will add the following directories under
Packit c4476c
     OPENSSLDIR (the directory given with --openssldir or its default)
Packit c4476c
     for you convenience:
Packit c4476c
Packit c4476c
         certs          Initially empty, this is the default location
Packit c4476c
                        for certificate files.
Packit c4476c
         private        Initially empty, this is the default location
Packit c4476c
                        for private key files.
Packit c4476c
         misc           Various scripts.
Packit c4476c
Packit c4476c
     The installation directory should be appropriately protected to ensure
Packit c4476c
     unprivileged users cannot make changes to OpenSSL binaries or files, or
Packit c4476c
     install engines. If you already have a pre-installed version of OpenSSL as
Packit c4476c
     part of your Operating System it is recommended that you do not overwrite
Packit c4476c
     the system version and instead install to somewhere else.
Packit c4476c
Packit c4476c
     Package builders who want to configure the library for standard
Packit c4476c
     locations, but have the package installed somewhere else so that
Packit c4476c
     it can easily be packaged, can use
Packit c4476c
Packit c4476c
       $ make DESTDIR=/tmp/package-root install         # Unix
Packit c4476c
       $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
Packit c4476c
Packit c4476c
     The specified destination directory will be prepended to all
Packit c4476c
     installation target paths.
Packit c4476c
Packit c4476c
  Compatibility issues with previous OpenSSL versions:
Packit c4476c
Packit c4476c
  *  COMPILING existing applications
Packit c4476c
Packit c4476c
     Starting with version 1.1.0, OpenSSL hides a number of structures
Packit c4476c
     that were previously open.  This includes all internal libssl
Packit c4476c
     structures and a number of EVP types.  Accessor functions have
Packit c4476c
     been added to allow controlled access to the structures' data.
Packit c4476c
Packit c4476c
     This means that some software needs to be rewritten to adapt to
Packit c4476c
     the new ways of doing things.  This often amounts to allocating
Packit c4476c
     an instance of a structure explicitly where you could previously
Packit c4476c
     allocate them on the stack as automatic variables, and using the
Packit c4476c
     provided accessor functions where you would previously access a
Packit c4476c
     structure's field directly.
Packit c4476c
Packit c4476c
     Some APIs have changed as well.  However, older APIs have been
Packit c4476c
     preserved when possible.
Packit c4476c
Packit c4476c
 Environment Variables
Packit c4476c
 ---------------------
Packit c4476c
Packit c4476c
 A number of environment variables can be used to provide additional control
Packit c4476c
 over the build process. Typically these should be defined prior to running
Packit c4476c
 config or Configure. Not all environment variables are relevant to all
Packit c4476c
 platforms.
Packit c4476c
Packit c4476c
 AR
Packit c4476c
                The name of the ar executable to use.
Packit c4476c
Packit c4476c
 BUILDFILE
Packit c4476c
                Use a different build file name than the platform default
Packit c4476c
                ("Makefile" on Unix-like platforms, "makefile" on native Windows,
Packit c4476c
                "descrip.mms" on OpenVMS).  This requires that there is a
Packit c4476c
                corresponding build file template.  See Configurations/README
Packit c4476c
                for further information.
Packit c4476c
Packit c4476c
 CC
Packit c4476c
                The compiler to use. Configure will attempt to pick a default
Packit c4476c
                compiler for your platform but this choice can be overridden
Packit c4476c
                using this variable. Set it to the compiler executable you wish
Packit c4476c
                to use, e.g. "gcc" or "clang".
Packit c4476c
Packit c4476c
 CROSS_COMPILE
Packit c4476c
                This environment variable has the same meaning as for the
Packit c4476c
                "--cross-compile-prefix" Configure flag described above. If both
Packit c4476c
                are set then the Configure flag takes precedence.
Packit c4476c
Packit c4476c
 NM
Packit c4476c
                The name of the nm executable to use.
Packit c4476c
Packit c4476c
 OPENSSL_LOCAL_CONFIG_DIR
Packit c4476c
                OpenSSL comes with a database of information about how it
Packit c4476c
                should be built on different platforms as well as build file
Packit c4476c
                templates for those platforms. The database is comprised of
Packit c4476c
                ".conf" files in the Configurations directory.  The build
Packit c4476c
                file templates reside there as well as ".tmpl" files. See the
Packit c4476c
                file Configurations/README for further information about the
Packit c4476c
                format of ".conf" files as well as information on the ".tmpl"
Packit c4476c
                files.
Packit c4476c
                In addition to the standard ".conf" and ".tmpl" files, it is
Packit c4476c
                possible to create your own ".conf" and ".tmpl" files and store
Packit c4476c
                them locally, outside the OpenSSL source tree. This environment
Packit c4476c
                variable can be set to the directory where these files are held
Packit c4476c
                and will be considered by Configure before it looks in the
Packit c4476c
                standard directories.
Packit c4476c
Packit c4476c
 PERL
Packit c4476c
                The name of the Perl executable to use when building OpenSSL.
Packit c4476c
                This variable is used in config script only. Configure on the
Packit c4476c
                other hand imposes the interpreter by which it itself was
Packit c4476c
                executed on the whole build procedure.
Packit c4476c
Packit c4476c
 HASHBANGPERL
Packit c4476c
                The command string for the Perl executable to insert in the
Packit c4476c
                #! line of perl scripts that will be publicly installed.
Packit c4476c
                Default: /usr/bin/env perl
Packit c4476c
                Note: the value of this variable is added to the same scripts
Packit c4476c
                on all platforms, but it's only relevant on Unix-like platforms.
Packit c4476c
Packit c4476c
 RC
Packit c4476c
                The name of the rc executable to use. The default will be as
Packit c4476c
                defined for the target platform in the ".conf" file. If not
Packit c4476c
                defined then "windres" will be used. The WINDRES environment
Packit c4476c
                variable is synonymous to this. If both are defined then RC
Packit c4476c
                takes precedence.
Packit c4476c
Packit c4476c
 RANLIB
Packit c4476c
                The name of the ranlib executable to use.
Packit c4476c
Packit c4476c
 WINDRES
Packit c4476c
                See RC.
Packit c4476c
Packit c4476c
 Makefile targets
Packit c4476c
 ----------------
Packit c4476c
Packit c4476c
 The Configure script generates a Makefile in a format relevant to the specific
Packit c4476c
 platform. The Makefiles provide a number of targets that can be used. Not all
Packit c4476c
 targets may be available on all platforms. Only the most common targets are
Packit c4476c
 described here. Examine the Makefiles themselves for the full list.
Packit c4476c
Packit c4476c
 all
Packit c4476c
                The default target to build all the software components.
Packit c4476c
Packit c4476c
 clean
Packit c4476c
                Remove all build artefacts and return the directory to a "clean"
Packit c4476c
                state.
Packit c4476c
Packit c4476c
 depend
Packit c4476c
                Rebuild the dependencies in the Makefiles. This is a legacy
Packit c4476c
                option that no longer needs to be used since OpenSSL 1.1.0.
Packit c4476c
Packit c4476c
 install
Packit c4476c
                Install all OpenSSL components.
Packit c4476c
Packit c4476c
 install_sw
Packit c4476c
                Only install the OpenSSL software components.
Packit c4476c
Packit c4476c
 install_docs
Packit c4476c
                Only install the OpenSSL documentation components.
Packit c4476c
Packit c4476c
 install_man_docs
Packit c4476c
                Only install the OpenSSL man pages (Unix only).
Packit c4476c
Packit c4476c
 install_html_docs
Packit c4476c
                Only install the OpenSSL html documentation.
Packit c4476c
Packit c4476c
 list-tests
Packit c4476c
                Prints a list of all the self test names.
Packit c4476c
Packit c4476c
 test
Packit c4476c
                Build and run the OpenSSL self tests.
Packit c4476c
Packit c4476c
 uninstall
Packit c4476c
                Uninstall all OpenSSL components.
Packit c4476c
Packit c4476c
 reconfigure
Packit c4476c
 reconf
Packit c4476c
                Re-run the configuration process, as exactly as the last time
Packit c4476c
                as possible.
Packit c4476c
Packit c4476c
 update
Packit c4476c
                This is a developer option. If you are developing a patch for
Packit c4476c
                OpenSSL you may need to use this if you want to update
Packit c4476c
                automatically generated files; add new error codes or add new
Packit c4476c
                (or change the visibility of) public API functions. (Unix only).
Packit c4476c
Packit c4476c
 TESTS in Detail
Packit c4476c
 ---------------
Packit c4476c
Packit c4476c
 The make variable TESTS supports a versatile set of space separated tokens
Packit c4476c
 with which you can specify a set of tests to be performed.  With a "current
Packit c4476c
 set of tests" in mind, initially being empty, here are the possible tokens:
Packit c4476c
Packit c4476c
 alltests       The current set of tests becomes the whole set of available
Packit c4476c
                tests (as listed when you do 'make list-tests' or similar).
Packit c4476c
 xxx            Adds the test 'xxx' to the current set of tests.
Packit c4476c
 -xxx           Removes 'xxx' from the current set of tests.  If this is the
Packit c4476c
                first token in the list, the current set of tests is first
Packit c4476c
                assigned the whole set of available tests, effectively making
Packit c4476c
                this token equivalent to TESTS="alltests -xxx".
Packit c4476c
 nn             Adds the test group 'nn' (which is a number) to the current
Packit c4476c
                set of tests.
Packit c4476c
 -nn            Removes the test group 'nn' from the current set of tests.
Packit c4476c
                If this is the first token in the list, the current set of
Packit c4476c
                tests is first assigned the whole set of available tests,
Packit c4476c
                effectively making this token equivalent to
Packit c4476c
                TESTS="alltests -xxx".
Packit c4476c
Packit c4476c
 Also, all tokens except for "alltests" may have wildcards, such as *.
Packit c4476c
 (on Unix and Windows, BSD style wildcards are supported, while on VMS,
Packit c4476c
 it's VMS style wildcards)
Packit c4476c
Packit c4476c
 Example: All tests except for the fuzz tests:
Packit c4476c
Packit c4476c
 $ make TESTS=-test_fuzz test
Packit c4476c
Packit c4476c
 or (if you want to be explicit)
Packit c4476c
Packit c4476c
 $ make TESTS='alltests -test_fuzz' test
Packit c4476c
Packit c4476c
 Example: All tests that have a name starting with "test_ssl" but not those
Packit c4476c
 starting with "test_ssl_":
Packit c4476c
Packit c4476c
 $ make TESTS='test_ssl* -test_ssl_*' test
Packit c4476c
Packit c4476c
 Example: Only test group 10:
Packit c4476c
Packit c4476c
 $ make TESTS='10'
Packit c4476c
Packit c4476c
 Example: All tests except the slow group (group 99):
Packit c4476c
Packit c4476c
 $ make TESTS='-99'
Packit c4476c
Packit c4476c
 Example: All tests in test groups 80 to 99 except for tests in group 90:
Packit c4476c
Packit c4476c
 $ make TESTS='[89]? -90'
Packit c4476c
Packit c4476c
 Note on multi-threading
Packit c4476c
 -----------------------
Packit c4476c
Packit c4476c
 For some systems, the OpenSSL Configure script knows what compiler options
Packit c4476c
 are needed to generate a library that is suitable for multi-threaded
Packit c4476c
 applications.  On these systems, support for multi-threading is enabled
Packit c4476c
 by default; use the "no-threads" option to disable (this should never be
Packit c4476c
 necessary).
Packit c4476c
Packit c4476c
 On other systems, to enable support for multi-threading, you will have
Packit c4476c
 to specify at least two options: "threads", and a system-dependent option.
Packit c4476c
 (The latter is "-D_REENTRANT" on various systems.)  The default in this
Packit c4476c
 case, obviously, is not to include support for multi-threading (but
Packit c4476c
 you can still use "no-threads" to suppress an annoying warning message
Packit c4476c
 from the Configure script.)
Packit c4476c
Packit c4476c
 OpenSSL provides built-in support for two threading models: pthreads (found on
Packit c4476c
 most UNIX/Linux systems), and Windows threads. No other threading models are
Packit c4476c
 supported. If your platform does not provide pthreads or Windows threads then
Packit c4476c
 you should Configure with the "no-threads" option.
Packit c4476c
Packit c4476c
 Notes on shared libraries
Packit c4476c
 -------------------------
Packit c4476c
Packit c4476c
 For most systems the OpenSSL Configure script knows what is needed to
Packit c4476c
 build shared libraries for libcrypto and libssl. On these systems
Packit c4476c
 the shared libraries will be created by default. This can be suppressed and
Packit c4476c
 only static libraries created by using the "no-shared" option. On systems
Packit c4476c
 where OpenSSL does not know how to build shared libraries the "no-shared"
Packit c4476c
 option will be forced and only static libraries will be created.
Packit c4476c
Packit c4476c
 Shared libraries are named a little differently on different platforms.
Packit c4476c
 One way or another, they all have the major OpenSSL version number as
Packit c4476c
 part of the file name, i.e. for OpenSSL 1.1.x, 1.1 is somehow part of
Packit c4476c
 the name.
Packit c4476c
Packit c4476c
 On most POSIX platforms, shared libraries are named libcrypto.so.1.1
Packit c4476c
 and libssl.so.1.1.
Packit c4476c
Packit c4476c
 on Cygwin, shared libraries are named cygcrypto-1.1.dll and cygssl-1.1.dll
Packit c4476c
 with import libraries libcrypto.dll.a and libssl.dll.a.
Packit c4476c
Packit c4476c
 On Windows build with MSVC or using MingW, shared libraries are named
Packit c4476c
 libcrypto-1_1.dll and libssl-1_1.dll for 32-bit Windows, libcrypto-1_1-x64.dll
Packit c4476c
 and libssl-1_1-x64.dll for 64-bit x86_64 Windows, and libcrypto-1_1-ia64.dll
Packit c4476c
 and libssl-1_1-ia64.dll for IA64 Windows.  With MSVC, the import libraries
Packit c4476c
 are named libcrypto.lib and libssl.lib, while with MingW, they are named
Packit c4476c
 libcrypto.dll.a and libssl.dll.a.
Packit c4476c
Packit c4476c
 On VMS, shareable images (VMS speak for shared libraries) are named
Packit c4476c
 ossl$libcrypto0101_shr.exe and ossl$libssl0101_shr.exe.  However, when
Packit c4476c
 OpenSSL is specifically built for 32-bit pointers, the shareable images
Packit c4476c
 are named ossl$libcrypto0101_shr32.exe and ossl$libssl0101_shr32.exe
Packit c4476c
 instead, and when built for 64-bit pointers, they are named
Packit c4476c
 ossl$libcrypto0101_shr64.exe and ossl$libssl0101_shr64.exe.
Packit c4476c
Packit c4476c
 Note on random number generation
Packit c4476c
 --------------------------------
Packit c4476c
Packit c4476c
 Availability of cryptographically secure random numbers is required for
Packit c4476c
 secret key generation. OpenSSL provides several options to seed the
Packit c4476c
 internal CSPRNG. If not properly seeded, the internal CSPRNG will refuse
Packit c4476c
 to deliver random bytes and a "PRNG not seeded error" will occur.
Packit c4476c
Packit c4476c
 The seeding method can be configured using the --with-rand-seed option,
Packit c4476c
 which can be used to specify a comma separated list of seed methods.
Packit c4476c
 However in most cases OpenSSL will choose a suitable default method,
Packit c4476c
 so it is not necessary to explicitly provide this option. Note also
Packit c4476c
 that not all methods are available on all platforms.
Packit c4476c
Packit c4476c
 I) On operating systems which provide a suitable randomness source (in
Packit c4476c
 form  of a system call or system device), OpenSSL will use the optimal
Packit c4476c
 available  method to seed the CSPRNG from the operating system's
Packit c4476c
 randomness sources. This corresponds to the option --with-rand-seed=os.
Packit c4476c
Packit c4476c
 II) On systems without such a suitable randomness source, automatic seeding
Packit c4476c
 and reseeding is disabled (--with-rand-seed=none) and it may be necessary
Packit c4476c
 to install additional support software to obtain a random seed and reseed
Packit c4476c
 the CSPRNG manually.  Please check out the manual pages for RAND_add(),
Packit c4476c
 RAND_bytes(), RAND_egd(), and the FAQ for more information.