]> git.ipfire.org Git - thirdparty/openssl.git/blame - INSTALL.md
Add brotli compression support (RFC7924)
[thirdparty/openssl.git] / INSTALL.md
CommitLineData
6ede7d73
DMSP
1Build and Install
2=================
3
4This document describes installation on all supported operating
5systems (the Unix/Linux family, including macOS), OpenVMS,
6and Windows).
7
8Table of Contents
9=================
10
11 - [Prerequisites](#prerequisites)
12 - [Notational Conventions](#notational-conventions)
13 - [Quick Installation Guide](#quick-installation-guide)
257e9d03
RS
14 - [Building OpenSSL](#building-openssl)
15 - [Installing OpenSSL](#installing-openssl)
6ede7d73 16 - [Configuration Options](#configuration-options)
257e9d03
RS
17 - [API Level](#api-level)
18 - [Cross Compile Prefix](#cross-compile-prefix)
19 - [Build Type](#build-type)
20 - [Directories](#directories)
21 - [Compiler Warnings](#compiler-warnings)
12e96a23 22 - [Compression Algorithm Flags](#compression-algorithm-flags)
257e9d03 23 - [Seeding the Random Generator](#seeding-the-random-generator)
31214258 24 - [Setting the FIPS HMAC key](#setting-the-FIPS-HMAC-key)
257e9d03
RS
25 - [Enable and Disable Features](#enable-and-disable-features)
26 - [Displaying configuration data](#displaying-configuration-data)
6ede7d73 27 - [Installation Steps in Detail](#installation-steps-in-detail)
257e9d03
RS
28 - [Configure](#configure-openssl)
29 - [Build](#build-openssl)
30 - [Test](#test-openssl)
31 - [Install](#install-openssl)
6ede7d73 32 - [Advanced Build Options](#advanced-build-options)
257e9d03
RS
33 - [Environment Variables](#environment-variables)
34 - [Makefile Targets](#makefile-targets)
35 - [Running Selected Tests](#running-selected-tests)
6ede7d73 36 - [Troubleshooting](#troubleshooting)
257e9d03
RS
37 - [Configuration Problems](#configuration-problems)
38 - [Build Failures](#build-failures)
39 - [Test Failures](#test-failures)
6ede7d73 40 - [Notes](#notes)
257e9d03
RS
41 - [Notes on multi-threading](#notes-on-multi-threading)
42 - [Notes on shared libraries](#notes-on-shared-libraries)
43 - [Notes on random number generation](#notes-on-random-number-generation)
203c18f1 44 - [Notes on assembler modules compilation](#notes-on-assembler-modules-compilation)
79e259e3 45
6ede7d73
DMSP
46Prerequisites
47=============
2acd8ec7 48
6ede7d73 49To install OpenSSL, you will need:
2acd8ec7 50
3a0b3cc9 51 * A "make" implementation
9f1fe6a9
DMSP
52 * Perl 5 with core modules (please read [NOTES-PERL.md](NOTES-PERL.md))
53 * The Perl module `Text::Template` (please read [NOTES-PERL.md](NOTES-PERL.md))
6ede7d73
DMSP
54 * an ANSI C compiler
55 * a development environment in the form of development libraries and C
56 header files
57 * a supported operating system
79e259e3 58
6ede7d73
DMSP
59For additional platform specific requirements, solutions to specific
60issues and other details, please read one of these:
ea24fe29 61
4148581e
DMSP
62 * [Notes for UNIX-like platforms](NOTES-UNIX.md)
63 * [Notes for Android platforms](NOTES-ANDROID.md)
64 * [Notes for Windows platforms](NOTES-WINDOWS.md)
65 * [Notes for the DOS platform with DJGPP](NOTES-DJGPP.md)
66 * [Notes for the OpenVMS platform](NOTES-VMS.md)
67 * [Notes on Perl](NOTES-PERL.md)
68 * [Notes on Valgrind](NOTES-VALGRIND.md)
ea24fe29 69
6ede7d73
DMSP
70Notational conventions
71======================
ea24fe29 72
6ede7d73 73Throughout this document, we use the following conventions.
ea24fe29 74
6ede7d73
DMSP
75Commands
76--------
ea24fe29 77
6ede7d73 78Any line starting with a dollar sign is a command line.
ea24fe29 79
6ede7d73 80 $ command
ea24fe29 81
6ede7d73
DMSP
82The dollar sign indicates the shell prompt and is not to be entered as
83part of the command.
ea24fe29 84
6ede7d73
DMSP
85Choices
86-------
ea24fe29 87
6ede7d73
DMSP
88Several words in curly braces separated by pipe characters indicate a
89**mandatory choice**, to be replaced with one of the given words.
90For example, the line
ea24fe29 91
6ede7d73 92 $ echo { WORD1 | WORD2 | WORD3 }
ea24fe29 93
6ede7d73 94represents one of the following three commands
ea24fe29 95
6ede7d73
DMSP
96 $ echo WORD1
97 - or -
98 $ echo WORD2
99 - or -
100 $ echo WORD3
ea24fe29 101
6ede7d73
DMSP
102One or several words in square brackets separated by pipe characters
103denote an **optional choice**. It is similar to the mandatory choice,
104but it can also be omitted entirely.
79e259e3 105
6ede7d73 106So the line
79e259e3 107
6ede7d73
DMSP
108 $ echo [ WORD1 | WORD2 | WORD3 ]
109
110represents one of the four commands
111
112 $ echo WORD1
113 - or -
114 $ echo WORD2
115 - or -
116 $ echo WORD3
117 - or -
118 $ echo
119
120Arguments
121---------
122
a4ffb33e 123**Optional Arguments** are enclosed in square brackets.
6ede7d73 124
a4ffb33e 125 [option...]
6ede7d73 126
a4ffb33e 127A trailing ellipsis means that more than one could be specified.
6ede7d73 128
6ede7d73
DMSP
129Quick Installation Guide
130========================
131
132If you just want to get OpenSSL installed without bothering too much
133about the details, here is the short version of how to build and install
134OpenSSL. If any of the following steps fails, please consult the
bf4cdd4a 135[Installation in Detail](#installation-steps-in-detail) section below.
6ede7d73
DMSP
136
137Building OpenSSL
138----------------
139
140Use the following commands to configure, build and test OpenSSL.
141The testing is optional, but recommended if you intend to install
142OpenSSL for production use.
143
257e9d03 144### Unix / Linux / macOS
2acd8ec7 145
16b0e0fc 146 $ ./Configure
2acd8ec7
RL
147 $ make
148 $ make test
2acd8ec7 149
257e9d03 150### OpenVMS
6ede7d73
DMSP
151
152Use the following commands to build OpenSSL:
2acd8ec7 153
16b0e0fc 154 $ perl Configure
2acd8ec7
RL
155 $ mms
156 $ mms test
79e259e3 157
257e9d03 158### Windows
6ede7d73
DMSP
159
160If you are using Visual Studio, open a Developer Command Prompt and
8c1cbc72 161issue the following commands to build OpenSSL.
b32b8961 162
16b0e0fc 163 $ perl Configure
b32b8961
RL
164 $ nmake
165 $ nmake test
6ede7d73
DMSP
166
167As mentioned in the [Choices](#choices) section, you need to pick one
168of the four Configure targets in the first command.
169
9afbb681
DDO
170Most likely you will be using the `VC-WIN64A` target for 64bit Windows
171binaries (AMD64) or `VC-WIN32` for 32bit Windows binaries (X86).
172The other two options are `VC-WIN64I` (Intel IA64, Itanium) and
173`VC-CE` (Windows CE) are rather uncommon nowadays.
6ede7d73
DMSP
174
175Installing OpenSSL
176------------------
177
178The following commands will install OpenSSL to a default system location.
179
180**Danger Zone:** even if you are impatient, please read the following two
181paragraphs carefully before you install OpenSSL.
182
183For security reasons the default system location is by default not writable
184for unprivileged users. So for the final installation step administrative
185privileges are required. The default system location and the procedure to
8c1cbc72 186obtain administrative privileges depends on the operating system.
6ede7d73
DMSP
187It is recommended to compile and test OpenSSL with normal user privileges
188and use administrative privileges only for the final installation step.
189
190On some platforms OpenSSL is preinstalled as part of the Operating System.
191In this case it is highly recommended not to overwrite the system versions,
192because other applications or libraries might depend on it.
193To avoid breaking other applications, install your copy of OpenSSL to a
194[different location](#installing-to-a-different-location) which is not in
195the global search path for system libraries.
196
41149648
RL
197Finally, if you plan on using the FIPS module, you need to read the
198[Post-installation Notes](#post-installation-notes) further down.
199
257e9d03 200### Unix / Linux / macOS
6ede7d73
DMSP
201
202Depending on your distribution, you need to run the following command as
203root user or prepend `sudo` to the command:
204
205 $ make install
206
207By default, OpenSSL will be installed to
208
209 /usr/local
210
211More precisely, the files will be installed into the subdirectories
212
213 /usr/local/bin
214 /usr/local/lib
215 /usr/local/include
216 ...
217
218depending on the file type, as it is custom on Unix-like operating systems.
219
257e9d03 220### OpenVMS
6ede7d73
DMSP
221
222Use the following command to install OpenSSL.
223
224 $ mms install
225
226By default, OpenSSL will be installed to
227
d8c1cafb 228 SYS$COMMON:[OPENSSL]
6ede7d73 229
257e9d03 230### Windows
6ede7d73
DMSP
231
232If you are using Visual Studio, open the Developer Command Prompt _elevated_
233and issue the following command.
234
8c16829e 235 $ nmake install
b32b8961 236
6ede7d73
DMSP
237The easiest way to elevate the Command Prompt is to press and hold down
238the both the `<CTRL>` and `<SHIFT>` key while clicking the menu item in the
239task menu.
240
241The default installation location is
242
243 C:\Program Files\OpenSSL
7c03bb9f 244
6ede7d73 245for native binaries, or
b1fe6b43 246
6ede7d73 247 C:\Program Files (x86)\OpenSSL
2acd8ec7 248
6ede7d73 249for 32bit binaries on 64bit Windows (WOW64).
2acd8ec7 250
257e9d03 251#### Installing to a different location
79e259e3 252
6ede7d73 253To install OpenSSL to a different location (for example into your home
9afbb681 254directory for testing purposes) run `Configure` as shown in the following
43a70f02 255examples.
6ede7d73 256
d8c1cafb
RL
257The options `--prefix` and `--openssldir` are explained in further detail in
258[Directories](#directories) below, and the values used here are mere examples.
259
43a70f02 260On Unix:
2acd8ec7 261
16b0e0fc 262 $ ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl
2acd8ec7 263
43a70f02 264On OpenVMS:
2acd8ec7 265
16b0e0fc 266 $ perl Configure --prefix=PROGRAM:[INSTALLS] --openssldir=SYS$MANAGER:[OPENSSL]
79e259e3 267
6ede7d73 268Note: if you do add options to the configuration command, please make sure
1dc1ea18 269you've read more than just this Quick Start, such as relevant `NOTES-*` files,
6ede7d73
DMSP
270the options outline below, as configuration options may change the outcome
271in otherwise unexpected ways.
272
6ede7d73
DMSP
273Configuration Options
274=====================
275
9afbb681
DDO
276There are several options to `./Configure` to customize the build (note that
277for Windows, the defaults for `--prefix` and `--openssldir` depend on what
16b0e0fc 278configuration is used and what Windows implementation OpenSSL is built on.
9f1fe6a9 279For more information, see the [Notes for Windows platforms](NOTES-WINDOWS.md).
6ede7d73
DMSP
280
281API Level
282---------
283
284 --api=x.y[.z]
285
286Build the OpenSSL libraries to support the API for the specified version.
287If [no-deprecated](#no-deprecated) is also given, don't build with support
288for deprecated APIs in or below the specified version number. For example,
473664aa 289adding
6ede7d73
DMSP
290
291 --api=1.1.0 no-deprecated
292
293will remove support for all APIs that were deprecated in OpenSSL version
2941.1.0 or below. This is a rather specialized option for developers.
295If you just intend to remove all deprecated APIs up to the current version
296entirely, just specify [no-deprecated](#no-deprecated).
297If `--api` isn't given, it defaults to the current (minor) OpenSSL version.
298
6ede7d73
DMSP
299Cross Compile Prefix
300--------------------
301
9afbb681 302 --cross-compile-prefix=<PREFIX>
6ede7d73 303
9afbb681 304The `<PREFIX>` to include in front of commands for your toolchain.
6ede7d73 305
9afbb681
DDO
306It is likely to have to end with dash, e.g. `a-b-c-` would invoke GNU compiler
307as `a-b-c-gcc`, etc. Unfortunately cross-compiling is too case-specific to put
6ede7d73 308together one-size-fits-all instructions. You might have to pass more flags or
16b0e0fc
RL
309set up environment variables to actually make it work. Android and iOS cases
310are discussed in corresponding `Configurations/15-*.conf` files. But there are
311cases when this option alone is sufficient. For example to build the mingw64
312target on Linux `--cross-compile-prefix=x86_64-w64-mingw32-` works. Naturally
313provided that mingw packages are installed. Today Debian and Ubuntu users
314have option to install a number of prepackaged cross-compilers along with
315corresponding run-time and development packages for "alien" hardware. To give
316another example `--cross-compile-prefix=mipsel-linux-gnu-` suffices in such
317case.
318
319For cross compilation, you must [configure manually](#manual-configuration).
320Also, note that `--openssldir` refers to target's file system, not one you are
321building on.
6ede7d73 322
6ede7d73
DMSP
323Build Type
324----------
325
326 --debug
327
328Build OpenSSL with debugging symbols and zero optimization level.
329
330 --release
331
332Build OpenSSL without debugging symbols. This is the default.
333
6ede7d73
DMSP
334Directories
335-----------
336
257e9d03 337### libdir
6ede7d73
DMSP
338
339 --libdir=DIR
340
341The name of the directory under the top of the installation directory tree
342(see the `--prefix` option) where libraries will be installed. By default
bd32bdb8 343this is `lib`. Note that on Windows only static libraries (`*.lib`) will
6ede7d73 344be stored in this location. Shared libraries (`*.dll`) will always be
bd32bdb8
TM
345installed to the `bin` directory.
346
347Some build targets have a multilib postfix set in the build configuration.
348For these targets the default libdir is `lib<multilib-postfix>`. Please use
349`--libdir=lib` to override the libdir if adding the postfix is undesirable.
6ede7d73 350
257e9d03 351### openssldir
6ede7d73
DMSP
352
353 --openssldir=DIR
354
355Directory for OpenSSL configuration files, and also the default certificate
356and key store. Defaults are:
357
358 Unix: /usr/local/ssl
359 Windows: C:\Program Files\Common Files\SSL
360 OpenVMS: SYS$COMMON:[OPENSSL-COMMON]
361
362For 32bit Windows applications on Windows 64bit (WOW64), always replace
363`C:\Program Files` by `C:\Program Files (x86)`.
364
257e9d03 365### prefix
6ede7d73
DMSP
366
367 --prefix=DIR
368
369The top of the installation directory tree. Defaults are:
370
371 Unix: /usr/local
372 Windows: C:\Program Files\OpenSSL
d8c1cafb 373 OpenVMS: SYS$COMMON:[OPENSSL]
6ede7d73 374
6ede7d73
DMSP
375Compiler Warnings
376-----------------
377
378 --strict-warnings
379
380This is a developer flag that switches on various compiler options recommended
381for OpenSSL development. It only works when using gcc or clang as the compiler.
382If you are developing a patch for OpenSSL then it is recommended that you use
383this option where possible.
384
12e96a23
TS
385Compression Algorithm Flags
386---------------------------
387
388### with-brotli-include
389
390 --with-brotli-include=DIR
391
392The directory for the location of the brotli include files (i.e. the location
393of the **brotli** include directory). This option is only necessary if
394[enable-brotli](#enable-brotli) is used and the include files are not already
395on the system include path.
396
397### with-brotli-lib
398
399 --with-brotli-lib=LIB
400
401**On Unix**: this is the directory containing the brotli libraries.
402If not provided, the system library path will be used.
403
404The names of the libraries are:
405
406* libbrotlicommon.a or libbrotlicommon.so
407* libbrotlidec.a or libbrotlidec.so
408* libbrotlienc.a or libbrotlienc.so
409
410**On Windows:** this is the directory containing the brotli libraries.
411If not provided, the system library path will be used.
412
413The names of the libraries are:
414
415* brotlicommon.lib
416* brotlidec.lib
417* brotlienc.lib
6ede7d73 418
257e9d03 419### with-zlib-include
6ede7d73
DMSP
420
421 --with-zlib-include=DIR
422
423The directory for the location of the zlib include file. This option is only
bf4cdd4a 424necessary if [zlib](#zlib) is used and the include file is not
6ede7d73
DMSP
425already on the system include path.
426
257e9d03 427### with-zlib-lib
6ede7d73
DMSP
428
429 --with-zlib-lib=LIB
430
431**On Unix**: this is the directory containing the zlib library.
432If not provided the system library path will be used.
433
434**On Windows:** this is the filename of the zlib library (with or
435without a path). This flag must be provided if the
9afbb681
DDO
436[zlib-dynamic](#zlib-dynamic) option is not also used. If `zlib-dynamic` is used
437then this flag is optional and defaults to `ZLIB1` if not provided.
6ede7d73
DMSP
438
439**On VMS:** this is the filename of the zlib library (with or without a path).
9afbb681
DDO
440This flag is optional and if not provided then `GNV$LIBZSHR`, `GNV$LIBZSHR32`
441or `GNV$LIBZSHR64` is used by default depending on the pointer size chosen.
6ede7d73 442
6ede7d73
DMSP
443Seeding the Random Generator
444----------------------------
445
446 --with-rand-seed=seed1[,seed2,...]
447
448A comma separated list of seeding methods which will be tried by OpenSSL
449in order to obtain random input (a.k.a "entropy") for seeding its
450cryptographically secure random number generator (CSPRNG).
451The current seeding methods are:
452
257e9d03 453### os
6ede7d73
DMSP
454
455Use a trusted operating system entropy source.
456This is the default method if such an entropy source exists.
457
257e9d03 458### getrandom
6ede7d73
DMSP
459
460Use the [getrandom(2)][man-getrandom] or equivalent system call.
461
462[man-getrandom]: http://man7.org/linux/man-pages/man2/getrandom.2.html
463
257e9d03 464### devrandom
6ede7d73 465
9afbb681
DDO
466Use the first device from the `DEVRANDOM` list which can be opened to read
467random bytes. The `DEVRANDOM` preprocessor constant expands to
6ede7d73
DMSP
468
469 "/dev/urandom","/dev/random","/dev/srandom"
470
471on most unix-ish operating systems.
472
257e9d03 473### egd
6ede7d73
DMSP
474
475Check for an entropy generating daemon.
b99c463d 476This source is ignored by the FIPS provider.
6ede7d73 477
257e9d03 478### rdcpu
6ede7d73 479
e8b597f3
OT
480Use the `RDSEED` or `RDRAND` command on x86 or `RNDRRS` command on aarch64
481if provided by the CPU.
6ede7d73 482
257e9d03 483### librandom
6ede7d73
DMSP
484
485Use librandom (not implemented yet).
b99c463d 486This source is ignored by the FIPS provider.
6ede7d73 487
257e9d03 488### none
6ede7d73
DMSP
489
490Disable automatic seeding. This is the default on some operating systems where
491no suitable entropy source exists, or no support for it is implemented yet.
b99c463d 492This option is ignored by the FIPS provider.
6ede7d73
DMSP
493
494For more information, see the section [Notes on random number generation][rng]
495at the end of this document.
496
497[rng]: #notes-on-random-number-generation
498
31214258
RS
499Setting the FIPS HMAC key
500-------------------------
501
502 --fips-key=value
503
504As part of its self-test validation, the FIPS module must verify itself
505by performing a SHA-256 HMAC computation on itself. The default key is
506the SHA256 value of "the holy handgrenade of antioch" and is sufficient
507for meeting the FIPS requirements.
508
509To change the key to a different value, use this flag. The value should
510be a hex string no more than 64 characters.
511
6ede7d73
DMSP
512Enable and Disable Features
513---------------------------
514
8c1cbc72
GN
515Feature options always come in pairs, an option to enable feature
516`xxxx`, and an option to disable it:
6ede7d73
DMSP
517
518 [ enable-xxxx | no-xxxx ]
519
520Whether a feature is enabled or disabled by default, depends on the feature.
521In the following list, always the non-default variant is documented: if
9afbb681
DDO
522feature `xxxx` is disabled by default then `enable-xxxx` is documented and
523if feature `xxxx` is enabled by default then `no-xxxx` is documented.
6ede7d73 524
257e9d03 525### no-afalgeng
6ede7d73
DMSP
526
527Don't build the AFALG engine.
528
529This option will be forced on a platform that does not support AFALG.
530
257e9d03 531### enable-ktls
6ede7d73
DMSP
532
533Build with Kernel TLS support.
534
535This option will enable the use of the Kernel TLS data-path, which can improve
536performance and allow for the use of sendfile and splice system calls on
537TLS sockets. The Kernel may use TLS accelerators if any are available on the
538system. This option will be forced off on systems that do not support the
539Kernel TLS data-path.
540
257e9d03 541### enable-asan
6ede7d73
DMSP
542
543Build with the Address sanitiser.
544
545This is a developer option only. It may not work on all platforms and should
546never be used in production environments. It will only work when used with
547gcc or clang and should be used in conjunction with the [no-shared](#no-shared)
548option.
549
d1a77041 550### enable-acvp-tests
4f2271d5 551
d1a77041 552Build support for Automated Cryptographic Validation Protocol (ACVP)
4f2271d5
SL
553tests.
554
555This is required for FIPS validation purposes. Certain ACVP tests require
556access to algorithm internals that are not normally accessible.
557Additional information related to ACVP can be found at
558<https://github.com/usnistgov/ACVP>.
559
257e9d03 560### no-asm
6ede7d73
DMSP
561
562Do not use assembler code.
563
564This should be viewed as debugging/troubleshooting option rather than for
565production use. On some platforms a small amount of assembler code may still
566be used even with this option.
567
257e9d03 568### no-async
6ede7d73
DMSP
569
570Do not build support for async operations.
571
257e9d03 572### no-autoalginit
6ede7d73
DMSP
573
574Don't automatically load all supported ciphers and digests.
575
576Typically OpenSSL will make available all of its supported ciphers and digests.
577For a statically linked application this may be undesirable if small executable
578size is an objective. This only affects libcrypto. Ciphers and digests will
9afbb681
DDO
579have to be loaded manually using `EVP_add_cipher()` and `EVP_add_digest()`
580if this option is used. This option will force a non-shared build.
6ede7d73 581
257e9d03 582### no-autoerrinit
6ede7d73
DMSP
583
584Don't automatically load all libcrypto/libssl error strings.
585
586Typically OpenSSL will automatically load human readable error strings. For a
587statically linked application this may be undesirable if small executable size
588is an objective.
589
12e96a23
TS
590### enable-brotli
591
592Build with support for brotli compression/decompression.
593
594### enable-brotli-dynamic
595
596Like the enable-brotli option, but has OpenSSL load the brotli library dynamically
597when needed.
598
599This is only supported on systems where loading of shared libraries is supported.
600
257e9d03 601### no-autoload-config
6ede7d73 602
9afbb681 603Don't automatically load the default `openssl.cnf` file.
6ede7d73
DMSP
604
605Typically OpenSSL will automatically load a system config file which configures
606default SSL options.
607
257e9d03 608### enable-buildtest-c++
6ede7d73
DMSP
609
610While testing, generate C++ buildtest files that simply check that the public
611OpenSSL header files are usable standalone with C++.
612
613Enabling this option demands extra care. For any compiler flag given directly
614as configuration option, you must ensure that it's valid for both the C and
615the C++ compiler. If not, the C++ build test will most likely break. As an
9afbb681 616alternative, you can use the language specific variables, `CFLAGS` and `CXXFLAGS`.
6ede7d73 617
d0364dcc
RS
618### --banner=text
619
620Use the specified text instead of the default banner at the end of
621configuration.
622
ecb09baf
RS
623### --w
624
625On platforms where the choice of 32-bit or 64-bit architecture
626is not explicitly specified, `Configure` will print a warning
627message and wait for a few seconds to let you interrupt the
628configuration. Using this flag skips the wait.
629
06f81af8
DDO
630### no-bulk
631
632Build only some minimal set of features.
633This is a developer option used internally for CI build tests of the project.
634
1eaf1fc3
P
635### no-cached-fetch
636
637Never cache algorithms when they are fetched from a provider. Normally, a
638provider indicates if the algorithms it supplies can be cached or not. Using
639this option will reduce run-time memory usage but it also introduces a
640significant performance penalty. This option is primarily designed to help
641with detecting incorrect reference counting.
642
257e9d03 643### no-capieng
6ede7d73
DMSP
644
645Don't build the CAPI engine.
646
647This option will be forced if on a platform that does not support CAPI.
648
257e9d03 649### no-cmp
6ede7d73 650
9afbb681
DDO
651Don't build support for Certificate Management Protocol (CMP)
652and Certificate Request Message Format (CRMF).
6ede7d73 653
257e9d03 654### no-cms
6ede7d73
DMSP
655
656Don't build support for Cryptographic Message Syntax (CMS).
657
257e9d03 658### no-comp
6ede7d73
DMSP
659
660Don't build support for SSL/TLS compression.
661
662If this option is enabled (the default), then compression will only work if
9afbb681 663the zlib or `zlib-dynamic` options are also chosen.
6ede7d73 664
257e9d03 665### enable-crypto-mdebug
6ede7d73 666
9afbb681 667This now only enables the `failed-malloc` feature.
6ede7d73 668
257e9d03 669### enable-crypto-mdebug-backtrace
6ede7d73
DMSP
670
671This is a no-op; the project uses the compiler's address/leak sanitizer instead.
672
257e9d03 673### no-ct
6ede7d73
DMSP
674
675Don't build support for Certificate Transparency (CT).
676
257e9d03 677### no-deprecated
6ede7d73
DMSP
678
679Don't build with support for deprecated APIs up until and including the version
680given with `--api` (or the current version, if `--api` wasn't specified).
681
257e9d03 682### no-dgram
6ede7d73
DMSP
683
684Don't build support for datagram based BIOs.
685
686Selecting this option will also force the disabling of DTLS.
687
257e9d03 688### no-dso
6ede7d73
DMSP
689
690Don't build support for loading Dynamic Shared Objects (DSO)
691
257e9d03 692### enable-devcryptoeng
6ede7d73
DMSP
693
694Build the `/dev/crypto` engine.
695
696This option is automatically selected on the BSD platform, in which case it can
9afbb681 697be disabled with `no-devcryptoeng`.
6ede7d73 698
257e9d03 699### no-dynamic-engine
6ede7d73
DMSP
700
701Don't build the dynamically loaded engines.
702
703This only has an effect in a shared build.
704
257e9d03 705### no-ec
6ede7d73
DMSP
706
707Don't build support for Elliptic Curves.
708
257e9d03 709### no-ec2m
6ede7d73
DMSP
710
711Don't build support for binary Elliptic Curves
712
257e9d03 713### enable-ec_nistp_64_gcc_128
6ede7d73
DMSP
714
715Enable support for optimised implementations of some commonly used NIST
716elliptic curves.
717
718This option is only supported on platforms:
719
720 - with little-endian storage of non-byte types
721 - that tolerate misaligned memory references
722 - where the compiler:
723 - supports the non-standard type `__uint128_t`
724 - defines the built-in macro `__SIZEOF_INT128__`
725
257e9d03 726### enable-egd
6ede7d73
DMSP
727
728Build support for gathering entropy from the Entropy Gathering Daemon (EGD).
729
257e9d03 730### no-engine
6ede7d73
DMSP
731
732Don't build support for loading engines.
733
257e9d03 734### no-err
6ede7d73
DMSP
735
736Don't compile in any error strings.
737
257e9d03 738### enable-external-tests
6ede7d73
DMSP
739
740Enable building of integration with external test suites.
741
742This is a developer option and may not work on all platforms. The following
743external test suites are currently supported:
744
cede07dc 745 - GOST engine test suite
6ede7d73
DMSP
746 - Python PYCA/Cryptography test suite
747 - krb5 test suite
748
036cbb6b
DDO
749See the file [test/README-external.md](test/README-external.md)
750for further details.
6ede7d73 751
257e9d03 752### no-filenames
6ede7d73
DMSP
753
754Don't compile in filename and line number information (e.g. for errors and
755memory allocation).
756
f2ea01d9 757### enable-fips
6ede7d73 758
f2ea01d9 759Build (and install) the FIPS provider
6ede7d73 760
991a6bb5
SL
761### no-fips-securitychecks
762
763Don't perform FIPS module run-time checks related to enforcement of security
764parameters such as minimum security strength of keys.
765
257e9d03 766### enable-fuzz-libfuzzer, enable-fuzz-afl
6ede7d73
DMSP
767
768Build with support for fuzzing using either libfuzzer or AFL.
769
770These are developer options only. They may not work on all platforms and
771should never be used in production environments.
772
773See the file [fuzz/README.md](fuzz/README.md) for further details.
774
257e9d03 775### no-gost
6ede7d73
DMSP
776
777Don't build support for GOST based ciphersuites.
778
779Note that if this feature is enabled then GOST ciphersuites are only available
780if the GOST algorithms are also available through loading an externally supplied
781engine.
782
257e9d03 783### no-legacy
6ede7d73
DMSP
784
785Don't build the legacy provider.
786
787Disabling this also disables the legacy algorithms: MD2 (already disabled by default).
788
257e9d03 789### no-makedepend
6ede7d73
DMSP
790
791Don't generate dependencies.
792
257e9d03 793### no-module
79e259e3 794
6ede7d73 795Don't build any dynamically loadable engines.
917a1b2e 796
9afbb681 797This also implies `no-dynamic-engine`.
917a1b2e 798
257e9d03 799### no-multiblock
917a1b2e 800
6ede7d73 801Don't build support for writing multiple records in one go in libssl
917a1b2e 802
6ede7d73 803Note: this is a different capability to the pipelining functionality.
917a1b2e 804
257e9d03 805### no-nextprotoneg
917a1b2e 806
6ede7d73 807Don't build support for the Next Protocol Negotiation (NPN) TLS extension.
c9f06e7f 808
257e9d03 809### no-ocsp
c9f06e7f 810
6ede7d73 811Don't build support for Online Certificate Status Protocol (OCSP).
b32b8961 812
257e9d03 813### no-padlockeng
2acd8ec7 814
6ede7d73 815Don't build the padlock engine.
2acd8ec7 816
257e9d03 817### no-hw-padlock
c9f06e7f 818
9afbb681 819As synonym for `no-padlockeng`. Deprecated and should not be used.
c9f06e7f 820
257e9d03 821### no-pic
b1fe6b43 822
6ede7d73 823Don't build with support for Position Independent Code.
b1fe6b43 824
257e9d03 825### no-pinshared
79e259e3 826
6ede7d73 827Don't pin the shared libraries.
79e259e3 828
6ede7d73
DMSP
829By default OpenSSL will attempt to stay in memory until the process exits.
830This is so that libcrypto and libssl can be properly cleaned up automatically
9afbb681
DDO
831via an `atexit()` handler. The handler is registered by libcrypto and cleans
832up both libraries. On some platforms the `atexit()` handler will run on unload of
6ede7d73
DMSP
833libcrypto (if it has been dynamically loaded) rather than at process exit. This
834option can be used to stop OpenSSL from attempting to stay in memory until the
835process exits. This could lead to crashes if either libcrypto or libssl have
836already been unloaded at the point that the atexit handler is invoked, e.g. on a
9afbb681 837platform which calls `atexit()` on unload of the library, and libssl is unloaded
6ede7d73 838before libcrypto then a crash is likely to happen. Applications can suppress
9afbb681
DDO
839running of the `atexit()` handler at run time by using the
840`OPENSSL_INIT_NO_ATEXIT` option to `OPENSSL_init_crypto()`.
841See the man page for it for further details.
2acd8ec7 842
257e9d03 843### no-posix-io
2acd8ec7 844
6ede7d73 845Don't use POSIX IO capabilities.
2acd8ec7 846
257e9d03 847### no-psk
79e259e3 848
6ede7d73 849Don't build support for Pre-Shared Key based ciphersuites.
79e259e3 850
257e9d03 851### no-rdrand
79e259e3 852
6ede7d73 853Don't use hardware RDRAND capabilities.
79e259e3 854
257e9d03 855### no-rfc3779
5bb9e2b4 856
6ede7d73
DMSP
857Don't build support for RFC3779, "X.509 Extensions for IP Addresses and
858AS Identifiers".
79e259e3 859
257e9d03 860### sctp
2acd8ec7 861
6ede7d73 862Build support for Stream Control Transmission Protocol (SCTP).
2acd8ec7 863
257e9d03 864### no-shared
2acd8ec7 865
6ede7d73 866Do not create shared libraries, only static ones.
2acd8ec7 867
6ede7d73 868See [Notes on shared libraries](#notes-on-shared-libraries) below.
2acd8ec7 869
257e9d03 870### no-sock
2acd8ec7 871
6ede7d73 872Don't build support for socket BIOs.
2acd8ec7 873
257e9d03 874### no-srp
2acd8ec7 875
6ede7d73
DMSP
876Don't build support for Secure Remote Password (SRP) protocol or
877SRP based ciphersuites.
2acd8ec7 878
257e9d03 879### no-srtp
b32b8961 880
6ede7d73 881Don't build Secure Real-Time Transport Protocol (SRTP) support.
b32b8961 882
257e9d03 883### no-sse2
2acd8ec7 884
6ede7d73 885Exclude SSE2 code paths from 32-bit x86 assembly modules.
79e259e3 886
6ede7d73
DMSP
887Normally SSE2 extension is detected at run-time, but the decision whether or not
888the machine code will be executed is taken solely on CPU capability vector. This
889means that if you happen to run OS kernel which does not support SSE2 extension
890on Intel P4 processor, then your application might be exposed to "illegal
891instruction" exception. There might be a way to enable support in kernel, e.g.
9afbb681 892FreeBSD kernel can be compiled with `CPU_ENABLE_SSE`, and there is a way to
6ede7d73 893disengage SSE2 code paths upon application start-up, but if you aim for wider
9afbb681
DDO
894"audience" running such kernel, consider `no-sse2`. Both the `386` and `no-asm`
895options imply `no-sse2`.
79e259e3 896
726f92e0 897### no-ssl-trace
79e259e3 898
726f92e0 899Don't build with SSL Trace capabilities.
1af66bb7 900
726f92e0
ACB
901This removes the `-trace` option from `s_client` and `s_server`, and omits the
902`SSL_trace()` function from libssl.
903
904Disabling `ssl-trace` may provide a small reduction in libssl binary size.
1af66bb7 905
257e9d03 906### no-static-engine
1af66bb7 907
6ede7d73 908Don't build the statically linked engines.
1af66bb7 909
6ede7d73 910This only has an impact when not built "shared".
1af66bb7 911
257e9d03 912### no-stdio
1af66bb7 913
3a0b3cc9 914Don't use anything from the C header file `stdio.h` that makes use of the `FILE`
6ede7d73
DMSP
915type. Only libcrypto and libssl can be built in this way. Using this option will
916suppress building the command line applications. Additionally, since the OpenSSL
917tests also use the command line applications, the tests will also be skipped.
b1fe6b43 918
257e9d03 919### no-tests
79e259e3 920
6ede7d73 921Don't build test programs or run any tests.
79e259e3 922
a3e53d56
TS
923### enable-tfo
924
925Build with support for TCP Fast Open (RFC7413). Supported on Linux, macOS and FreeBSD.
926
30b01329
TM
927### enable-quic
928
929Build with QUIC support. This is currently just for developers as the
930implementation is by no means complete and usable.
931
257e9d03 932### no-threads
6616429d 933
6ede7d73 934Don't build with support for multi-threaded applications.
2e996acf 935
257e9d03 936### threads
2acd8ec7 937
6ede7d73 938Build with support for multi-threaded applications. Most platforms will enable
8c1cbc72 939this by default. However, if on a platform where this is not the case then this
6ede7d73 940will usually require additional system-dependent options!
2e996acf 941
6ede7d73 942See [Notes on multi-threading](#notes-on-multi-threading) below.
e3d9a6b5 943
4574a7fd
ÄŒK
944### no-thread-pool
945
946Don't build with support for thread pool functionality.
947
948### thread-pool
949
950Build with thread pool functionality. If enabled, OpenSSL algorithms may
951use the thread pool to perform parallel computation. This option in itself
952does not enable OpenSSL to spawn new threads. Currently the only supported
953thread pool mechanism is the default thread pool.
954
955### no-default-thread-pool
956
957Don't build with support for default thread pool functionality.
958
959### default-thread-pool
960
961Build with default thread pool functionality. If enabled, OpenSSL may create
962and manage threads up to a maximum number of threads authorized by the
963application. Supported on POSIX compliant platforms and Windows.
964
257e9d03 965### enable-trace
b32b8961 966
6ede7d73 967Build with support for the integrated tracing api.
2e996acf 968
6ede7d73 969See manual pages OSSL_trace_set_channel(3) and OSSL_trace_enabled(3) for details.
2e996acf 970
257e9d03 971### no-ts
a73d990e 972
6ede7d73 973Don't build Time Stamping (TS) Authority support.
2e996acf 974
257e9d03 975### enable-ubsan
2e996acf 976
6ede7d73 977Build with the Undefined Behaviour sanitiser (UBSAN).
2e996acf 978
6ede7d73 979This is a developer option only. It may not work on all platforms and should
9afbb681
DDO
980never be used in production environments. It will only work when used with
981gcc or clang and should be used in conjunction with the `-DPEDANTIC` option
6ede7d73 982(or the `--strict-warnings` option).
d40b0622 983
257e9d03 984### no-ui-console
2e996acf 985
301ea192 986Don't build with the User Interface (UI) console method
b1fe6b43 987
301ea192 988The User Interface console method enables text based console prompts.
b3e718e2 989
257e9d03 990### enable-unit-test
79e259e3 991
6ede7d73 992Enable additional unit test APIs.
2acd8ec7 993
6ede7d73 994This should not typically be used in production deployments.
7c03bb9f 995
257e9d03 996### no-uplink
2acd8ec7 997
6ede7d73 998Don't build support for UPLINK interface.
2acd8ec7 999
257e9d03 1000### enable-weak-ssl-ciphers
b0940b33 1001
6ede7d73 1002Build support for SSL/TLS ciphers that are considered "weak"
fa28bfd6 1003
6ede7d73 1004Enabling this includes for example the RC4 based ciphersuites.
fa28bfd6 1005
257e9d03 1006### zlib
fa28bfd6 1007
6ede7d73 1008Build with support for zlib compression/decompression.
fa28bfd6 1009
257e9d03 1010### zlib-dynamic
fa28bfd6 1011
6ede7d73
DMSP
1012Like the zlib option, but has OpenSSL load the zlib library dynamically
1013when needed.
fa28bfd6 1014
6ede7d73 1015This is only supported on systems where loading of shared libraries is supported.
fa28bfd6 1016
257e9d03 1017### 386
fa28bfd6 1018
6ede7d73 1019In 32-bit x86 builds, use the 80386 instruction set only in assembly modules
fa28bfd6 1020
6ede7d73
DMSP
1021The default x86 code is more efficient, but requires at least an 486 processor.
1022Note: This doesn't affect compiler generated code, so this option needs to be
1023accompanied by a corresponding compiler-specific option.
fa28bfd6 1024
257e9d03 1025### no-{protocol}
bf01fbbf 1026
6ede7d73 1027 no-{ssl|ssl3|tls|tls1|tls1_1|tls1_2|tls1_3|dtls|dtls1|dtls1_2}
4fd53220 1028
6ede7d73 1029Don't build support for negotiating the specified SSL/TLS protocol.
b3e718e2 1030
9afbb681
DDO
1031If `no-tls` is selected then all of `tls1`, `tls1_1`, `tls1_2` and `tls1_3`
1032are disabled.
1033Similarly `no-dtls` will disable `dtls1` and `dtls1_2`. The `no-ssl` option is
1034synonymous with `no-ssl3`. Note this only affects version negotiation.
6ede7d73
DMSP
1035OpenSSL will still provide the methods for applications to explicitly select
1036the individual protocol versions.
b3e718e2 1037
257e9d03 1038### no-{protocol}-method
b3e718e2 1039
5f18dc7f 1040 no-{ssl3|tls1|tls1_1|tls1_2|dtls1|dtls1_2}-method
b3e718e2 1041
9afbb681 1042Analogous to `no-{protocol}` but in addition do not build the methods for
6ede7d73 1043applications to explicitly select individual protocol versions. Note that there
9afbb681 1044is no `no-tls1_3-method` option because there is no application method for
6ede7d73 1045TLSv1.3.
b3e718e2 1046
6ede7d73 1047Using individual protocol methods directly is deprecated. Applications should
9afbb681 1048use `TLS_method()` instead.
b3e718e2 1049
257e9d03 1050### enable-{algorithm}
b3e718e2 1051
6ede7d73 1052 enable-{md2|rc5}
b3e718e2 1053
6ede7d73 1054Build with support for the specified algorithm.
b3e718e2 1055
257e9d03 1056### no-{algorithm}
b3e718e2 1057
6ede7d73
DMSP
1058 no-{aria|bf|blake2|camellia|cast|chacha|cmac|
1059 des|dh|dsa|ecdh|ecdsa|idea|md4|mdc2|ocb|
1060 poly1305|rc2|rc4|rmd160|scrypt|seed|
1061 siphash|siv|sm2|sm3|sm4|whirlpool}
d0631327 1062
6ede7d73 1063Build without support for the specified algorithm.
d0631327 1064
9afbb681 1065The `ripemd` algorithm is deprecated and if used is synonymous with `rmd160`.
d0631327 1066
257e9d03 1067### Compiler-specific options
d0631327 1068
6ede7d73 1069 -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static
d0631327 1070
6ede7d73
DMSP
1071These system specific options will be recognised and passed through to the
1072compiler to allow you to define preprocessor symbols, specify additional
1073libraries, library directories or other compiler options. It might be worth
1074noting that some compilers generate code specifically for processor the
1075compiler currently executes on. This is not necessarily what you might have
1076in mind, since it might be unsuitable for execution on other, typically older,
1077processor. Consult your compiler documentation.
1078
1079Take note of the [Environment Variables](#environment-variables) documentation
1080below and how these flags interact with those variables.
1081
1082 -xxx, +xxx, /xxx
1083
1084Additional options that are not otherwise recognised are passed through as
1085they are to the compiler as well. Unix-style options beginning with a
af33b200 1086`-` or `+` and Windows-style options beginning with a `/` are recognised.
6ede7d73
DMSP
1087Again, consult your compiler documentation.
1088
1089If the option contains arguments separated by spaces, then the URL-style
9afbb681
DDO
1090notation `%20` can be used for the space character in order to avoid having
1091to quote the option. For example, `-opt%20arg` gets expanded to `-opt arg`.
6ede7d73
DMSP
1092In fact, any ASCII character can be encoded as %xx using its hexadecimal
1093encoding.
1094
1095Take note of the [Environment Variables](#environment-variables) documentation
1096below and how these flags interact with those variables.
1097
257e9d03 1098### Environment Variables
6ede7d73
DMSP
1099
1100 VAR=value
1101
9afbb681 1102Assign the given value to the environment variable `VAR` for `Configure`.
6ede7d73
DMSP
1103
1104These work just like normal environment variable assignments, but are supported
1105on all platforms and are confined to the configuration scripts only.
1106These assignments override the corresponding value in the inherited environment,
1107if there is one.
1108
3a0b3cc9 1109The following variables are used as "`make` variables" and can be used as an
6ede7d73
DMSP
1110alternative to giving preprocessor, compiler and linker options directly as
1111configuration. The following variables are supported:
1112
1113 AR The static library archiver.
1114 ARFLAGS Flags for the static library archiver.
1115 AS The assembler compiler.
1116 ASFLAGS Flags for the assembler compiler.
1117 CC The C compiler.
1118 CFLAGS Flags for the C compiler.
1119 CXX The C++ compiler.
1120 CXXFLAGS Flags for the C++ compiler.
1121 CPP The C/C++ preprocessor.
1122 CPPFLAGS Flags for the C/C++ preprocessor.
1123 CPPDEFINES List of CPP macro definitions, separated
1124 by a platform specific character (':' or
1125 space for Unix, ';' for Windows, ',' for
1126 VMS). This can be used instead of using
1127 -D (or what corresponds to that on your
1128 compiler) in CPPFLAGS.
1129 CPPINCLUDES List of CPP inclusion directories, separated
1130 the same way as for CPPDEFINES. This can
1131 be used instead of -I (or what corresponds
1132 to that on your compiler) in CPPFLAGS.
1133 HASHBANGPERL Perl invocation to be inserted after '#!'
1134 in public perl scripts (only relevant on
1135 Unix).
1136 LD The program linker (not used on Unix, $(CC)
1137 is used there).
1138 LDFLAGS Flags for the shared library, DSO and
1139 program linker.
1140 LDLIBS Extra libraries to use when linking.
1141 Takes the form of a space separated list
1142 of library specifications on Unix and
1143 Windows, and as a comma separated list of
1144 libraries on VMS.
1145 RANLIB The library archive indexer.
1146 RC The Windows resource compiler.
1147 RCFLAGS Flags for the Windows resource compiler.
1148 RM The command to remove files and directories.
1149
1150These cannot be mixed with compiling/linking flags given on the command line.
1151In other words, something like this isn't permitted.
1152
16b0e0fc 1153 $ ./Configure -DFOO CPPFLAGS=-DBAR -DCOOKIE
6ede7d73
DMSP
1154
1155Backward compatibility note:
1156
1157To be compatible with older configuration scripts, the environment variables
1158are ignored if compiling/linking flags are given on the command line, except
1159for the following:
1160
1161 AR, CC, CXX, CROSS_COMPILE, HASHBANGPERL, PERL, RANLIB, RC, and WINDRES
1162
9afbb681 1163For example, the following command will not see `-DBAR`:
6ede7d73 1164
16b0e0fc 1165 $ CPPFLAGS=-DBAR ./Configure -DCOOKIE
6ede7d73
DMSP
1166
1167However, the following will see both set variables:
1168
16b0e0fc 1169 $ CC=gcc CROSS_COMPILE=x86_64-w64-mingw32- ./Configure -DCOOKIE
6ede7d73 1170
9afbb681 1171If `CC` is set, it is advisable to also set `CXX` to ensure both the C and C++
6ede7d73 1172compiler are in the same "family". This becomes relevant with
9afbb681 1173`enable-external-tests` and `enable-buildtest-c++`.
6ede7d73 1174
257e9d03 1175### Reconfigure
6ede7d73
DMSP
1176
1177 reconf
1178 reconfigure
1179
1180Reconfigure from earlier data.
1181
16b0e0fc 1182This fetches the previous command line options and environment from data
9afbb681 1183saved in `configdata.pm` and runs the configuration process again, using
16b0e0fc 1184these options and environment. Note: NO other option is permitted together
9afbb681 1185with `reconf`. Note: The original configuration saves away values for ALL
16b0e0fc
RL
1186environment variables that were used, and if they weren't defined, they are
1187still saved away with information that they weren't originally defined.
1188This information takes precedence over environment variables that are
1189defined when reconfiguring.
6ede7d73
DMSP
1190
1191Displaying configuration data
1192-----------------------------
1193
1194The configuration script itself will say very little, and finishes by
9afbb681 1195creating `configdata.pm`. This perl module can be loaded by other scripts
6ede7d73
DMSP
1196to find all the configuration data, and it can also be used as a script to
1197display all sorts of configuration data in a human readable form.
1198
1199For more information, please do:
1200
1201 $ ./configdata.pm --help # Unix
1202
1203or
1204
1205 $ perl configdata.pm --help # Windows and VMS
1206
1207Installation Steps in Detail
1208============================
1209
1210Configure OpenSSL
1211-----------------
1212
257e9d03 1213### Automatic Configuration
6ede7d73 1214
92115096
RS
1215In previous version, the `config` script determined the platform type and
1216compiler and then called `Configure`. Starting with this release, they are
1217the same.
6ede7d73 1218
257e9d03 1219#### Unix / Linux / macOS
6ede7d73 1220
a4ffb33e 1221 $ ./Configure [options...]
6ede7d73 1222
257e9d03 1223#### OpenVMS
6ede7d73 1224
a4ffb33e 1225 $ perl Configure [options...]
6ede7d73 1226
257e9d03 1227#### Windows
6ede7d73 1228
a4ffb33e 1229 $ perl Configure [options...]
6ede7d73 1230
257e9d03 1231### Manual Configuration
6ede7d73
DMSP
1232
1233OpenSSL knows about a range of different operating system, hardware and
1234compiler combinations. To see the ones it knows about, run
1235
16b0e0fc 1236 $ ./Configure LIST # Unix
6ede7d73
DMSP
1237
1238or
1239
16b0e0fc 1240 $ perl Configure LIST # All other platforms
6ede7d73
DMSP
1241
1242For the remainder of this text, the Unix form will be used in all examples.
1243Please use the appropriate form for your platform.
1244
1245Pick a suitable name from the list that matches your system. For most
9afbb681 1246operating systems there is a choice between using cc or gcc.
6ede7d73 1247When you have identified your system (and if necessary compiler) use this
9afbb681 1248name as the argument to `Configure`. For example, a `linux-elf` user would
6ede7d73
DMSP
1249run:
1250
a4ffb33e 1251 $ ./Configure linux-elf [options...]
6ede7d73 1252
257e9d03 1253### Creating your own Configuration
6ede7d73
DMSP
1254
1255If your system isn't listed, you will have to create a configuration
a4ffb33e
RS
1256file named `Configurations/YOURFILENAME.conf` (replace `YOURFILENAME`
1257with a filename of your choosing) and add the correct
6ede7d73 1258configuration for your system. See the available configs as examples
036cbb6b
DDO
1259and read [Configurations/README.md](Configurations/README.md) and
1260[Configurations/README-design.md](Configurations/README-design.md)
3a0b3cc9 1261for more information.
6ede7d73 1262
9afbb681 1263The generic configurations `cc` or `gcc` should usually work on 32 bit
6ede7d73
DMSP
1264Unix-like systems.
1265
9afbb681
DDO
1266`Configure` creates a build file (`Makefile` on Unix, `makefile` on Windows
1267and `descrip.mms` on OpenVMS) from a suitable template in `Configurations/`,
1268and defines various macros in `include/openssl/configuration.h` (generated
1269from `include/openssl/configuration.h.in`.
6ede7d73 1270
257e9d03 1271### Out of Tree Builds
6ede7d73
DMSP
1272
1273OpenSSL can be configured to build in a build directory separate from the
1274source code directory. It's done by placing yourself in some other
1275directory and invoking the configuration commands from there.
1276
257e9d03 1277#### Unix example
6ede7d73
DMSP
1278
1279 $ mkdir /var/tmp/openssl-build
1280 $ cd /var/tmp/openssl-build
a4ffb33e 1281 $ /PATH/TO/OPENSSL/SOURCE/Configure [options...]
6ede7d73 1282
257e9d03 1283#### OpenVMS example
6ede7d73
DMSP
1284
1285 $ set default sys$login:
1286 $ create/dir [.tmp.openssl-build]
1287 $ set default [.tmp.openssl-build]
a4ffb33e 1288 $ perl D:[PATH.TO.OPENSSL.SOURCE]Configure [options...]
6ede7d73 1289
257e9d03 1290#### Windows example
6ede7d73
DMSP
1291
1292 $ C:
1293 $ mkdir \temp-openssl
1294 $ cd \temp-openssl
a4ffb33e 1295 $ perl d:\PATH\TO\OPENSSL\SOURCE\Configure [options...]
6ede7d73 1296
9afbb681 1297Paths can be relative just as well as absolute. `Configure` will do its best
6ede7d73
DMSP
1298to translate them to relative paths whenever possible.
1299
6ede7d73
DMSP
1300Build OpenSSL
1301-------------
1302
1303Build OpenSSL by running:
1304
1305 $ make # Unix
1306 $ mms ! (or mmk) OpenVMS
1307 $ nmake # Windows
1308
9afbb681 1309This will build the OpenSSL libraries (`libcrypto.a` and `libssl.a` on
6ede7d73 1310Unix, corresponding on other platforms) and the OpenSSL binary
9afbb681
DDO
1311(`openssl`). The libraries will be built in the top-level directory,
1312and the binary will be in the `apps/` subdirectory.
6ede7d73
DMSP
1313
1314If the build fails, take a look at the [Build Failures](#build-failures)
1315subsection of the [Troubleshooting](#troubleshooting) section.
1316
1317Test OpenSSL
1318------------
1319
1320After a successful build, and before installing, the libraries should
1321be tested. Run:
1322
1323 $ make test # Unix
1324 $ mms test ! OpenVMS
1325 $ nmake test # Windows
1326
1327**Warning:** you MUST run the tests from an unprivileged account (or disable
1328your privileges temporarily if your platform allows it).
1329
036cbb6b
DDO
1330See [test/README.md](test/README.md) for further details how run tests.
1331
1332See [test/README-dev.md](test/README-dev.md) for guidelines on adding tests.
6ede7d73 1333
6ede7d73
DMSP
1334Install OpenSSL
1335---------------
1336
1337If everything tests ok, install OpenSSL with
1338
1339 $ make install # Unix
1340 $ mms install ! OpenVMS
1341 $ nmake install # Windows
1342
1343Note that in order to perform the install step above you need to have
1344appropriate permissions to write to the installation directory.
1345
1346The above commands will install all the software components in this
9afbb681 1347directory tree under `<PREFIX>` (the directory given with `--prefix` or
6ede7d73
DMSP
1348its default):
1349
257e9d03 1350### Unix / Linux / macOS
6ede7d73
DMSP
1351
1352 bin/ Contains the openssl binary and a few other
1353 utility scripts.
1354 include/openssl
1355 Contains the header files needed if you want
1356 to build your own programs that use libcrypto
1357 or libssl.
1358 lib Contains the OpenSSL library files.
1359 lib/engines Contains the OpenSSL dynamically loadable engines.
1360
1361 share/man/man1 Contains the OpenSSL command line man-pages.
1362 share/man/man3 Contains the OpenSSL library calls man-pages.
1363 share/man/man5 Contains the OpenSSL configuration format man-pages.
1364 share/man/man7 Contains the OpenSSL other misc man-pages.
1365
1366 share/doc/openssl/html/man1
1367 share/doc/openssl/html/man3
1368 share/doc/openssl/html/man5
1369 share/doc/openssl/html/man7
1370 Contains the HTML rendition of the man-pages.
1371
257e9d03 1372### OpenVMS
6ede7d73 1373
d8c1cafb 1374'arch' is replaced with the architecture name, `ALPHA` or `IA64`,
9afbb681 1375'sover' is replaced with the shared library version (`0101` for 1.1), and
6ede7d73
DMSP
1376'pz' is replaced with the pointer size OpenSSL was built with:
1377
1378 [.EXE.'arch'] Contains the openssl binary.
1379 [.EXE] Contains a few utility scripts.
1380 [.include.openssl]
1381 Contains the header files needed if you want
1382 to build your own programs that use libcrypto
1383 or libssl.
1384 [.LIB.'arch'] Contains the OpenSSL library files.
1385 [.ENGINES'sover''pz'.'arch']
1386 Contains the OpenSSL dynamically loadable engines.
1387 [.SYS$STARTUP] Contains startup, login and shutdown scripts.
1388 These define appropriate logical names and
1389 command symbols.
1390 [.SYSTEST] Contains the installation verification procedure.
1391 [.HTML] Contains the HTML rendition of the manual pages.
1392
257e9d03 1393### Additional Directories
6ede7d73
DMSP
1394
1395Additionally, install will add the following directories under
1396OPENSSLDIR (the directory given with `--openssldir` or its default)
1397for you convenience:
1398
1399 certs Initially empty, this is the default location
1400 for certificate files.
1401 private Initially empty, this is the default location
1402 for private key files.
1403 misc Various scripts.
1404
1405The installation directory should be appropriately protected to ensure
1406unprivileged users cannot make changes to OpenSSL binaries or files, or
1407install engines. If you already have a pre-installed version of OpenSSL as
1408part of your Operating System it is recommended that you do not overwrite
1409the system version and instead install to somewhere else.
1410
1411Package builders who want to configure the library for standard locations,
1412but have the package installed somewhere else so that it can easily be
1413packaged, can use
1414
3a0b3cc9
DDO
1415 $ make DESTDIR=/tmp/package-root install # Unix
1416 $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS
6ede7d73
DMSP
1417
1418The specified destination directory will be prepended to all installation
1419target paths.
1420
257e9d03
RS
1421Compatibility issues with previous OpenSSL versions
1422---------------------------------------------------
6ede7d73 1423
257e9d03 1424### COMPILING existing applications
6ede7d73
DMSP
1425
1426Starting with version 1.1.0, OpenSSL hides a number of structures that were
1427previously open. This includes all internal libssl structures and a number
1428of EVP types. Accessor functions have been added to allow controlled access
1429to the structures' data.
1430
1431This means that some software needs to be rewritten to adapt to the new ways
1432of doing things. This often amounts to allocating an instance of a structure
1433explicitly where you could previously allocate them on the stack as automatic
1434variables, and using the provided accessor functions where you would previously
1435access a structure's field directly.
1436
1437Some APIs have changed as well. However, older APIs have been preserved when
1438possible.
1439
41149648
RL
1440Post-installation Notes
1441-----------------------
1442
1443With the default OpenSSL installation comes a FIPS provider module, which
1444needs some post-installation attention, without which it will not be usable.
1445This involves using the following command:
1446
270540fd 1447 $ openssl fipsinstall
41149648
RL
1448
1449See the openssl-fipsinstall(1) manual for details and examples.
1450
6ede7d73
DMSP
1451Advanced Build Options
1452======================
1453
6ede7d73
DMSP
1454Environment Variables
1455---------------------
1456
1457A number of environment variables can be used to provide additional control
1458over the build process. Typically these should be defined prior to running
9afbb681 1459`Configure`. Not all environment variables are relevant to all platforms.
6ede7d73
DMSP
1460
1461 AR
1462 The name of the ar executable to use.
1463
1464 BUILDFILE
1465 Use a different build file name than the platform default
1466 ("Makefile" on Unix-like platforms, "makefile" on native Windows,
1467 "descrip.mms" on OpenVMS). This requires that there is a
036cbb6b
DDO
1468 corresponding build file template.
1469 See [Configurations/README.md](Configurations/README.md)
6ede7d73
DMSP
1470 for further information.
1471
1472 CC
1473 The compiler to use. Configure will attempt to pick a default
1474 compiler for your platform but this choice can be overridden
1475 using this variable. Set it to the compiler executable you wish
9afbb681 1476 to use, e.g. gcc or clang.
6ede7d73
DMSP
1477
1478 CROSS_COMPILE
1479 This environment variable has the same meaning as for the
1480 "--cross-compile-prefix" Configure flag described above. If both
1481 are set then the Configure flag takes precedence.
1482
92115096
RS
1483 HASHBANGPERL
1484 The command string for the Perl executable to insert in the
1485 #! line of perl scripts that will be publicly installed.
1486 Default: /usr/bin/env perl
1487 Note: the value of this variable is added to the same scripts
1488 on all platforms, but it's only relevant on Unix-like platforms.
1489
1490 KERNEL_BITS
1491 This can be the value `32` or `64` to specify the architecture
1492 when it is not "obvious" to the configuration. It should generally
1493 not be necessary to specify this environment variable.
1494
6ede7d73
DMSP
1495 NM
1496 The name of the nm executable to use.
1497
1498 OPENSSL_LOCAL_CONFIG_DIR
1499 OpenSSL comes with a database of information about how it
1500 should be built on different platforms as well as build file
1501 templates for those platforms. The database is comprised of
1502 ".conf" files in the Configurations directory. The build
1503 file templates reside there as well as ".tmpl" files. See the
036cbb6b
DDO
1504 file [Configurations/README.md](Configurations/README.md)
1505 for further information about the format of ".conf" files
1506 as well as information on the ".tmpl" files.
6ede7d73 1507 In addition to the standard ".conf" and ".tmpl" files, it is
036cbb6b
DDO
1508 possible to create your own ".conf" and ".tmpl" files and
1509 store them locally, outside the OpenSSL source tree.
1510 This environment variable can be set to the directory where
1511 these files are held and will be considered by Configure
1512 before it looks in the standard directories.
6ede7d73
DMSP
1513
1514 PERL
1515 The name of the Perl executable to use when building OpenSSL.
16b0e0fc
RL
1516 Only needed if builing should use a different Perl executable
1517 than what is used to run the Configure script.
6ede7d73 1518
92115096
RS
1519 RANLIB
1520 The name of the ranlib executable to use.
6ede7d73
DMSP
1521
1522 RC
1523 The name of the rc executable to use. The default will be as
1524 defined for the target platform in the ".conf" file. If not
1525 defined then "windres" will be used. The WINDRES environment
1526 variable is synonymous to this. If both are defined then RC
1527 takes precedence.
1528
6ede7d73
DMSP
1529 WINDRES
1530 See RC.
1531
6ede7d73
DMSP
1532Makefile Targets
1533----------------
1534
9afbb681 1535The `Configure` script generates a Makefile in a format relevant to the specific
6ede7d73
DMSP
1536platform. The Makefiles provide a number of targets that can be used. Not all
1537targets may be available on all platforms. Only the most common targets are
1538described here. Examine the Makefiles themselves for the full list.
1539
1540 all
1541 The target to build all the software components and
1542 documentation.
1543
1544 build_sw
1545 Build all the software components.
1546 THIS IS THE DEFAULT TARGET.
1547
1548 build_docs
1549 Build all documentation components.
1550
1551 clean
1552 Remove all build artefacts and return the directory to a "clean"
1553 state.
1554
1555 depend
1556 Rebuild the dependencies in the Makefiles. This is a legacy
1557 option that no longer needs to be used since OpenSSL 1.1.0.
1558
1559 install
1560 Install all OpenSSL components.
1561
1562 install_sw
1563 Only install the OpenSSL software components.
1564
1565 install_docs
1566 Only install the OpenSSL documentation components.
1567
1568 install_man_docs
1569 Only install the OpenSSL man pages (Unix only).
1570
1571 install_html_docs
8c1cbc72 1572 Only install the OpenSSL HTML documentation.
cad80959 1573
b19b9830
RL
1574 install_fips
1575 Install the FIPS provider module configuration file.
6ede7d73
DMSP
1576
1577 list-tests
1578 Prints a list of all the self test names.
1579
1580 test
1581 Build and run the OpenSSL self tests.
1582
1583 uninstall
1584 Uninstall all OpenSSL components.
1585
1586 reconfigure
1587 reconf
1588 Re-run the configuration process, as exactly as the last time
1589 as possible.
1590
1591 update
1592 This is a developer option. If you are developing a patch for
1593 OpenSSL you may need to use this if you want to update
1594 automatically generated files; add new error codes or add new
1595 (or change the visibility of) public API functions. (Unix only).
1596
1597Running Selected Tests
1598----------------------
1599
3a0b3cc9
DDO
1600You can specify a set of tests to be performed
1601using the `make` variable `TESTS`.
6ede7d73 1602
3a0b3cc9
DDO
1603See the section [Running Selected Tests of
1604test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1605
1606Troubleshooting
1607===============
1608
1609Configuration Problems
1610----------------------
1611
257e9d03 1612### Selecting the correct target
6ede7d73 1613
16b0e0fc 1614The `./Configure` script tries hard to guess your operating system, but in some
6ede7d73
DMSP
1615cases it does not succeed. You will see a message like the following:
1616
16b0e0fc 1617 $ ./Configure
6ede7d73 1618 Operating system: x86-whatever-minix
1dc1ea18 1619 This system (minix) is not supported. See file INSTALL.md for details.
6ede7d73 1620
9afbb681
DDO
1621Even if the automatic target selection by the `./Configure` script fails,
1622chances are that you still might find a suitable target in the `Configurations`
1623directory, which you can supply to the `./Configure` command,
1624possibly after some adjustment.
6ede7d73 1625
9afbb681 1626The `Configurations/` directory contains a lot of examples of such targets.
6c8149df 1627The main configuration file is [10-main.conf], which contains all targets that
6ede7d73
DMSP
1628are officially supported by the OpenSSL team. Other configuration files contain
1629targets contributed by other OpenSSL users. The list of targets can be found in
1630a Perl list `my %targets = ( ... )`.
1631
1632 my %targets = (
1633 ...
1634 "target-name" => {
1635 inherit_from => [ "base-target" ],
1636 CC => "...",
1637 cflags => add("..."),
1638 asm_arch => '...',
1639 perlasm_scheme => "...",
1640 },
1641 ...
1642 )
1643
16b0e0fc 1644If you call `./Configure` without arguments, it will give you a list of all
6ede7d73 1645known targets. Using `grep`, you can lookup the target definition in the
9afbb681
DDO
1646`Configurations/` directory. For example the `android-x86_64` can be found in
1647[Configurations/15-android.conf](Configurations/15-android.conf).
6ede7d73
DMSP
1648
1649The directory contains two README files, which explain the general syntax and
9afbb681 1650design of the configuration files.
6ede7d73 1651
036cbb6b
DDO
1652 - [Configurations/README.md](Configurations/README.md)
1653 - [Configurations/README-design.md](Configurations/README-design.md)
6ede7d73 1654
6c8149df
DMSP
1655If you need further help, try to search the [openssl-users] mailing list
1656or the [GitHub Issues] for existing solutions. If you don't find anything,
1657you can [raise an issue] to ask a question yourself.
6ede7d73 1658
6c8149df 1659More about our support resources can be found in the [SUPPORT] file.
6ede7d73 1660
257e9d03 1661### Configuration Errors
6ede7d73 1662
16b0e0fc 1663If the `./Configure` or `./Configure` command fails with an error message,
6ede7d73
DMSP
1664read the error message carefully and try to figure out whether you made
1665a mistake (e.g., by providing a wrong option), or whether the script is
1666working incorrectly. If you think you encountered a bug, please
6c8149df 1667[raise an issue] on GitHub to file a bug report.
6ede7d73
DMSP
1668
1669Along with a short description of the bug, please provide the complete
1670configure command line and the relevant output including the error message.
1671
e304aa87 1672Note: To make the output readable, please add a 'code fence' (three backquotes
6ede7d73
DMSP
1673` ``` ` on a separate line) before and after your output:
1674
1675 ```
b0d5c1cb 1676 ./Configure [your arguments...]
6ede7d73
DMSP
1677
1678 [output...]
1679
1680 ```
1681
6ede7d73
DMSP
1682Build Failures
1683--------------
1684
1685If the build fails, look carefully at the output. Try to locate and understand
1686the error message. It might be that the compiler is already telling you
1687exactly what you need to do to fix your problem.
1688
1689There may be reasons for the failure that aren't problems in OpenSSL itself,
1690for example if the compiler reports missing standard or third party headers.
1691
1692If the build succeeded previously, but fails after a source or configuration
1693change, it might be helpful to clean the build tree before attempting another
1694build. Use this command:
1695
270540fd
RL
1696 $ make clean # Unix
1697 $ mms clean ! (or mmk) OpenVMS
1698 $ nmake clean # Windows
6ede7d73 1699
203c18f1
AM
1700Assembler error messages can sometimes be sidestepped by using the `no-asm`
1701configuration option. See also [notes](#notes-on-assembler-modules-compilation).
6ede7d73
DMSP
1702
1703Compiling parts of OpenSSL with gcc and others with the system compiler will
1704result in unresolved symbols on some systems.
1705
6c8149df
DMSP
1706If you are still having problems, try to search the [openssl-users] mailing
1707list or the [GitHub Issues] for existing solutions. If you think you
1708encountered an OpenSSL bug, please [raise an issue] to file a bug report.
6ede7d73
DMSP
1709Please take the time to review the existing issues first; maybe the bug was
1710already reported or has already been fixed.
1711
6ede7d73
DMSP
1712Test Failures
1713-------------
1714
1715If some tests fail, look at the output. There may be reasons for the failure
b0d5c1cb 1716that isn't a problem in OpenSSL itself (like an OS malfunction or a Perl issue).
6ede7d73 1717
3a0b3cc9
DDO
1718You may want increased verbosity, that can be accomplished as described in
1719section [Test Failures of test/README.md](test/README.md#test-failures).
6ede7d73 1720
e4522e10
DDO
1721You may also want to selectively specify which test(s) to perform. This can be
1722done using the `make` variable `TESTS` as described in section [Running
1723Selected Tests of test/README.md](test/README.md#running-selected-tests).
6ede7d73
DMSP
1724
1725If you find a problem with OpenSSL itself, try removing any
3a0b3cc9
DDO
1726compiler optimization flags from the `CFLAGS` line in the Makefile and
1727run `make clean; make` or corresponding.
6ede7d73
DMSP
1728
1729To report a bug please open an issue on GitHub, at
257e9d03 1730<https://github.com/openssl/openssl/issues>.
6ede7d73 1731
6ede7d73
DMSP
1732Notes
1733=====
1734
1735Notes on multi-threading
1736------------------------
1737
9afbb681 1738For some systems, the OpenSSL `Configure` script knows what compiler options
6ede7d73
DMSP
1739are needed to generate a library that is suitable for multi-threaded
1740applications. On these systems, support for multi-threading is enabled
9afbb681 1741by default; use the `no-threads` option to disable (this should never be
6ede7d73
DMSP
1742necessary).
1743
1744On other systems, to enable support for multi-threading, you will have
9afbb681
DDO
1745to specify at least two options: `threads`, and a system-dependent option.
1746(The latter is `-D_REENTRANT` on various systems.) The default in this
6ede7d73 1747case, obviously, is not to include support for multi-threading (but
9afbb681
DDO
1748you can still use `no-threads` to suppress an annoying warning message
1749from the `Configure` script.)
6ede7d73
DMSP
1750
1751OpenSSL provides built-in support for two threading models: pthreads (found on
1752most UNIX/Linux systems), and Windows threads. No other threading models are
1753supported. If your platform does not provide pthreads or Windows threads then
9afbb681 1754you should use `Configure` with the `no-threads` option.
6ede7d73 1755
3d8905f8
RS
1756For pthreads, all locks are non-recursive. In addition, in a debug build,
1757the mutex attribute `PTHREAD_MUTEX_ERRORCHECK` is used. If this is not
1758available on your platform, you might have to add
1759`-DOPENSSL_NO_MUTEX_ERRORCHECK` to your `Configure` invocation.
1760(On Linux `PTHREAD_MUTEX_ERRORCHECK` is an enum value, so a built-in
1761ifdef test cannot be used.)
1762
6ede7d73
DMSP
1763Notes on shared libraries
1764-------------------------
1765
9afbb681 1766For most systems the OpenSSL `Configure` script knows what is needed to
6ede7d73
DMSP
1767build shared libraries for libcrypto and libssl. On these systems
1768the shared libraries will be created by default. This can be suppressed and
9afbb681
DDO
1769only static libraries created by using the `no-shared` option. On systems
1770where OpenSSL does not know how to build shared libraries the `no-shared`
6ede7d73
DMSP
1771option will be forced and only static libraries will be created.
1772
1773Shared libraries are named a little differently on different platforms.
1774One way or another, they all have the major OpenSSL version number as
9afbb681 1775part of the file name, i.e. for OpenSSL 1.1.x, `1.1` is somehow part of
6ede7d73
DMSP
1776the name.
1777
9afbb681
DDO
1778On most POSIX platforms, shared libraries are named `libcrypto.so.1.1`
1779and `libssl.so.1.1`.
6ede7d73 1780
9afbb681
DDO
1781on Cygwin, shared libraries are named `cygcrypto-1.1.dll` and `cygssl-1.1.dll`
1782with import libraries `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1783
1784On Windows build with MSVC or using MingW, shared libraries are named
9afbb681
DDO
1785`libcrypto-1_1.dll` and `libssl-1_1.dll` for 32-bit Windows,
1786`libcrypto-1_1-x64.dll` and `libssl-1_1-x64.dll` for 64-bit x86_64 Windows,
1787and `libcrypto-1_1-ia64.dll` and `libssl-1_1-ia64.dll` for IA64 Windows.
1788With MSVC, the import libraries are named `libcrypto.lib` and `libssl.lib`,
1789while with MingW, they are named `libcrypto.dll.a` and `libssl.dll.a`.
6ede7d73
DMSP
1790
1791On VMS, shareable images (VMS speak for shared libraries) are named
9afbb681 1792`ossl$libcrypto0101_shr.exe` and `ossl$libssl0101_shr.exe`. However, when
6ede7d73 1793OpenSSL is specifically built for 32-bit pointers, the shareable images
9afbb681 1794are named `ossl$libcrypto0101_shr32.exe` and `ossl$libssl0101_shr32.exe`
6ede7d73 1795instead, and when built for 64-bit pointers, they are named
9afbb681 1796`ossl$libcrypto0101_shr64.exe` and `ossl$libssl0101_shr64.exe`.
6ede7d73
DMSP
1797
1798Notes on random number generation
1799---------------------------------
1800
1801Availability of cryptographically secure random numbers is required for
1802secret key generation. OpenSSL provides several options to seed the
1803internal CSPRNG. If not properly seeded, the internal CSPRNG will refuse
1804to deliver random bytes and a "PRNG not seeded error" will occur.
1805
1806The seeding method can be configured using the `--with-rand-seed` option,
1807which can be used to specify a comma separated list of seed methods.
8c1cbc72 1808However, in most cases OpenSSL will choose a suitable default method,
6ede7d73 1809so it is not necessary to explicitly provide this option. Note also
b99c463d
P
1810that not all methods are available on all platforms. The FIPS provider will
1811silently ignore seed sources that were not validated.
6ede7d73
DMSP
1812
1813I) On operating systems which provide a suitable randomness source (in
1814form of a system call or system device), OpenSSL will use the optimal
1815available method to seed the CSPRNG from the operating system's
1816randomness sources. This corresponds to the option `--with-rand-seed=os`.
1817
1818II) On systems without such a suitable randomness source, automatic seeding
9afbb681 1819and reseeding is disabled (`--with-rand-seed=none`) and it may be necessary
6ede7d73 1820to install additional support software to obtain a random seed and reseed
9afbb681
DDO
1821the CSPRNG manually. Please check out the manual pages for `RAND_add()`,
1822`RAND_bytes()`, `RAND_egd()`, and the FAQ for more information.
6ede7d73 1823
203c18f1
AM
1824Notes on assembler modules compilation
1825--------------------------------------
1826
1827Compilation of some code paths in assembler modules might depend on whether the
1828current assembler version supports certain ISA extensions or not. Code paths
1829that use the AES-NI, PCLMULQDQ, SSSE3, and SHA extensions are always assembled.
1830Apart from that, the minimum requirements for the assembler versions are shown
1831in the table below:
1832
1833| ISA extension | GNU as | nasm | llvm |
1834|---------------|--------|--------|---------|
1835| AVX | 2.19 | 2.09 | 3.0 |
1836| AVX2 | 2.22 | 2.10 | 3.1 |
1837| ADCX/ADOX | 2.23 | 2.10 | 3.3 |
1838| AVX512 | 2.25 | 2.11.8 | 3.6 (*) |
1839| AVX512IFMA | 2.26 | 2.11.8 | 6.0 (*) |
1840| VAES | 2.30 | 2.13.3 | 6.0 (*) |
1841
1842---
1843
1844(*) Even though AVX512 support was implemented in llvm 3.6, prior to version 7.0
1845an explicit -march flag was apparently required to compile assembly modules. But
1846then the compiler generates processor-specific code, which in turn contradicts
1847the idea of performing dispatch at run-time, which is facilitated by the special
1848variable `OPENSSL_ia32cap`. For versions older than 7.0, it is possible to work
1849around the problem by forcing the build procedure to use the following script:
1850
1851 #!/bin/sh
1852 exec clang -no-integrated-as "$@"
1853
1854instead of the real clang. In which case it doesn't matter what clang version
1855is used, as it is the version of the GNU assembler that will be checked.
1856
1857---
1858
6ede7d73
DMSP
1859<!-- Links -->
1860
1861[openssl-users]:
257e9d03 1862 <https://mta.openssl.org/mailman/listinfo/openssl-users>
6ede7d73
DMSP
1863
1864[SUPPORT]:
1865 ./SUPPORT.md
1866
1867[GitHub Issues]:
257e9d03 1868 <https://github.com/openssl/openssl/issues>
6ede7d73
DMSP
1869
1870[raise an issue]:
257e9d03 1871 <https://github.com/openssl/openssl/issues/new/choose>
6ede7d73
DMSP
1872
1873[10-main.conf]:
1874 Configurations/10-main.conf