xref: /freebsd/crypto/openssl/doc/man7/migration_guide.pod (revision 44096ebd22ddd0081a357011714eff8963614b65)
1b077aed3SPierre Pronchery=pod
2b077aed3SPierre Pronchery
3b077aed3SPierre Pronchery=head1 NAME
4b077aed3SPierre Pronchery
5b077aed3SPierre Proncherymigration_guide - OpenSSL migration guide
6b077aed3SPierre Pronchery
7b077aed3SPierre Pronchery=head1 SYNOPSIS
8b077aed3SPierre Pronchery
9b077aed3SPierre ProncherySee the individual manual pages for details.
10b077aed3SPierre Pronchery
11b077aed3SPierre Pronchery=head1 DESCRIPTION
12b077aed3SPierre Pronchery
13b077aed3SPierre ProncheryThis guide details the changes required to migrate to new versions of OpenSSL.
14b077aed3SPierre ProncheryCurrently this covers OpenSSL 3.0. For earlier versions refer to
15b077aed3SPierre ProncheryL<https://github.com/openssl/openssl/blob/master/CHANGES.md>.
16b077aed3SPierre ProncheryFor an overview of some of the key concepts introduced in OpenSSL 3.0 see
17b077aed3SPierre ProncheryL<crypto(7)>.
18b077aed3SPierre Pronchery
19b077aed3SPierre Pronchery=head1 OPENSSL 3.0
20b077aed3SPierre Pronchery
21b077aed3SPierre Pronchery=head2 Main Changes from OpenSSL 1.1.1
22b077aed3SPierre Pronchery
23b077aed3SPierre Pronchery=head3 Major Release
24b077aed3SPierre Pronchery
25b077aed3SPierre ProncheryOpenSSL 3.0 is a major release and consequently any application that currently
26b077aed3SPierre Proncheryuses an older version of OpenSSL will at the very least need to be recompiled in
27b077aed3SPierre Proncheryorder to work with the new version. It is the intention that the large majority
28b077aed3SPierre Proncheryof applications will work unchanged with OpenSSL 3.0 if those applications
29b077aed3SPierre Proncherypreviously worked with OpenSSL 1.1.1. However this is not guaranteed and some
30b077aed3SPierre Proncherychanges may be required in some cases. Changes may also be required if
31b077aed3SPierre Proncheryapplications need to take advantage of some of the new features available in
32b077aed3SPierre ProncheryOpenSSL 3.0 such as the availability of the FIPS module.
33b077aed3SPierre Pronchery
34b077aed3SPierre Pronchery=head3 License Change
35b077aed3SPierre Pronchery
36b077aed3SPierre ProncheryIn previous versions, OpenSSL was licensed under the L<dual OpenSSL and SSLeay
37b077aed3SPierre Proncherylicenses|https://www.openssl.org/source/license-openssl-ssleay.txt>
38b077aed3SPierre Pronchery(both licenses apply). From OpenSSL 3.0 this is replaced by the
39b077aed3SPierre ProncheryL<Apache License v2|https://www.openssl.org/source/apache-license-2.0.txt>.
40b077aed3SPierre Pronchery
41b077aed3SPierre Pronchery=head3 Providers and FIPS support
42b077aed3SPierre Pronchery
43b077aed3SPierre ProncheryOne of the key changes from OpenSSL 1.1.1 is the introduction of the Provider
44b077aed3SPierre Proncheryconcept. Providers collect together and make available algorithm implementations.
45b077aed3SPierre ProncheryWith OpenSSL 3.0 it is possible to specify, either programmatically or via a
46b077aed3SPierre Proncheryconfig file, which providers you want to use for any given application.
47b077aed3SPierre ProncheryOpenSSL 3.0 comes with 5 different providers as standard. Over time third
48b077aed3SPierre Proncheryparties may distribute additional providers that can be plugged into OpenSSL.
49b077aed3SPierre ProncheryAll algorithm implementations available via providers are accessed through the
50b077aed3SPierre Pronchery"high level" APIs (for example those functions prefixed with C<EVP>). They cannot
51b077aed3SPierre Proncherybe accessed using the L</Low Level APIs>.
52b077aed3SPierre Pronchery
53b077aed3SPierre ProncheryOne of the standard providers available is the FIPS provider. This makes
54b077aed3SPierre Proncheryavailable FIPS validated cryptographic algorithms.
55b077aed3SPierre ProncheryThe FIPS provider is disabled by default and needs to be enabled explicitly
56b077aed3SPierre Proncheryat configuration time using the C<enable-fips> option. If it is enabled,
57b077aed3SPierre Proncherythe FIPS provider gets built and installed in addition to the other standard
58b077aed3SPierre Proncheryproviders. No separate installation procedure is necessary.
59b077aed3SPierre ProncheryThere is however a dedicated C<install_fips> make target, which serves the
60b077aed3SPierre Proncheryspecial purpose of installing only the FIPS provider into an existing
61b077aed3SPierre ProncheryOpenSSL installation.
62b077aed3SPierre Pronchery
63b077aed3SPierre ProncheryNot all algorithms may be available for the application at a particular moment.
64b077aed3SPierre ProncheryIf the application code uses any digest or cipher algorithm via the EVP interface,
65b077aed3SPierre Proncherythe application should verify the result of the L<EVP_EncryptInit(3)>,
66b077aed3SPierre ProncheryL<EVP_EncryptInit_ex(3)>, and L<EVP_DigestInit(3)> functions. In case when
67b077aed3SPierre Proncherythe requested algorithm is not available, these functions will fail.
68b077aed3SPierre Pronchery
69b077aed3SPierre ProncherySee also L</Legacy Algorithms> for information on the legacy provider.
70b077aed3SPierre Pronchery
71b077aed3SPierre ProncherySee also L</Completing the installation of the FIPS Module> and
72b077aed3SPierre ProncheryL</Using the FIPS Module in applications>.
73b077aed3SPierre Pronchery
74b077aed3SPierre Pronchery=head3 Low Level APIs
75b077aed3SPierre Pronchery
76b077aed3SPierre ProncheryOpenSSL has historically provided two sets of APIs for invoking cryptographic
77b077aed3SPierre Proncheryalgorithms: the "high level" APIs (such as the C<EVP> APIs) and the "low level"
78b077aed3SPierre ProncheryAPIs. The high level APIs are typically designed to work across all algorithm
79b077aed3SPierre Proncherytypes. The "low level" APIs are targeted at a specific algorithm implementation.
80b077aed3SPierre ProncheryFor example, the EVP APIs provide the functions L<EVP_EncryptInit_ex(3)>,
81b077aed3SPierre ProncheryL<EVP_EncryptUpdate(3)> and L<EVP_EncryptFinal(3)> to perform symmetric
82b077aed3SPierre Proncheryencryption. Those functions can be used with the algorithms AES, CHACHA, 3DES etc.
83b077aed3SPierre ProncheryOn the other hand, to do AES encryption using the low level APIs you would have
84b077aed3SPierre Proncheryto call AES specific functions such as L<AES_set_encrypt_key(3)>,
85b077aed3SPierre ProncheryL<AES_encrypt(3)>, and so on. The functions for 3DES are different.
86b077aed3SPierre ProncheryUse of the low level APIs has been informally discouraged by the OpenSSL
87b077aed3SPierre Proncherydevelopment team for a long time. However in OpenSSL 3.0 this is made more
88b077aed3SPierre Proncheryformal. All such low level APIs have been deprecated. You may still use them in
89b077aed3SPierre Proncheryyour applications, but you may start to see deprecation warnings during
90b077aed3SPierre Proncherycompilation (dependent on compiler support for this). Deprecated APIs may be
91b077aed3SPierre Proncheryremoved from future versions of OpenSSL so you are strongly encouraged to update
92b077aed3SPierre Proncheryyour code to use the high level APIs instead.
93b077aed3SPierre Pronchery
94b077aed3SPierre ProncheryThis is described in more detail in L</Deprecation of Low Level Functions>
95b077aed3SPierre Pronchery
96b077aed3SPierre Pronchery=head3 Legacy Algorithms
97b077aed3SPierre Pronchery
98b077aed3SPierre ProncherySome cryptographic algorithms such as B<MD2> and B<DES> that were available via
99b077aed3SPierre Proncherythe EVP APIs are now considered legacy and their use is strongly discouraged.
100b077aed3SPierre ProncheryThese legacy EVP algorithms are still available in OpenSSL 3.0 but not by
101b077aed3SPierre Proncherydefault. If you want to use them then you must load the legacy provider.
102b077aed3SPierre ProncheryThis can be as simple as a config file change, or can be done programmatically.
103b077aed3SPierre ProncherySee L<OSSL_PROVIDER-legacy(7)> for a complete list of algorithms.
104b077aed3SPierre ProncheryApplications using the EVP APIs to access these algorithms should instead use
105b077aed3SPierre Proncherymore modern algorithms. If that is not possible then these applications
106b077aed3SPierre Proncheryshould ensure that the legacy provider has been loaded. This can be achieved
107b077aed3SPierre Proncheryeither programmatically or via configuration. See L<crypto(7)> man page for
108b077aed3SPierre Proncherymore information about providers.
109b077aed3SPierre Pronchery
110b077aed3SPierre Pronchery=head3 Engines and "METHOD" APIs
111b077aed3SPierre Pronchery
112b077aed3SPierre ProncheryThe refactoring to support Providers conflicts internally with the APIs used to
113b077aed3SPierre Proncherysupport engines, including the ENGINE API and any function that creates or
114b077aed3SPierre Proncherymodifies custom "METHODS" (for example L<EVP_MD_meth_new(3)>,
115b077aed3SPierre ProncheryL<EVP_CIPHER_meth_new(3)>, L<EVP_PKEY_meth_new(3)>, L<RSA_meth_new(3)>,
116b077aed3SPierre ProncheryL<EC_KEY_METHOD_new(3)>, etc.). These functions are being deprecated in
117b077aed3SPierre ProncheryOpenSSL 3.0, and users of these APIs should know that their use can likely
118b077aed3SPierre Proncherybypass provider selection and configuration, with unintended consequences.
119b077aed3SPierre ProncheryThis is particularly relevant for applications written to use the OpenSSL 3.0
120b077aed3SPierre ProncheryFIPS module, as detailed below. Authors and maintainers of external engines are
121b077aed3SPierre Proncherystrongly encouraged to refactor their code transforming engines into providers
122b077aed3SPierre Proncheryusing the new Provider API and avoiding deprecated methods.
123b077aed3SPierre Pronchery
124b077aed3SPierre Pronchery=head3 Support of legacy engines
125b077aed3SPierre Pronchery
126b077aed3SPierre ProncheryIf openssl is not built without engine support or deprecated API support, engines
127b077aed3SPierre Proncherywill still work. However, their applicability will be limited.
128b077aed3SPierre Pronchery
129b077aed3SPierre ProncheryNew algorithms provided via engines will still work.
130b077aed3SPierre Pronchery
131b077aed3SPierre ProncheryEngine-backed keys can be loaded via custom B<OSSL_STORE> implementation.
132b077aed3SPierre ProncheryIn this case the B<EVP_PKEY> objects created via L<ENGINE_load_private_key(3)>
133aa795734SPierre Proncherywill be considered legacy and will continue to work.
134b077aed3SPierre Pronchery
135b077aed3SPierre ProncheryTo ensure the future compatibility, the engines should be turned to providers.
136b077aed3SPierre ProncheryTo prefer the provider-based hardware offload, you can specify the default
137b077aed3SPierre Proncheryproperties to prefer your provider.
138b077aed3SPierre Pronchery
139*44096ebdSEnji CooperSetting engine-based or application-based default low-level crypto method such
140*44096ebdSEnji Cooperas B<RSA_METHOD> or B<EC_KEY_METHOD> is still possible and keys inside the
141*44096ebdSEnji Cooperdefault provider will use the engine-based implementation for the crypto
142*44096ebdSEnji Cooperoperations. However B<EVP_PKEY>s created by decoding by using B<OSSL_DECODER>,
143*44096ebdSEnji CooperB<PEM_> or B<d2i_> APIs will be provider-based. To create a fully legacy
144*44096ebdSEnji CooperB<EVP_PKEY>s L<EVP_PKEY_set1_RSA(3)>, L<EVP_PKEY_set1_EC_KEY(3)> or similar
145*44096ebdSEnji Cooperfunctions must be used.
146*44096ebdSEnji Cooper
147b077aed3SPierre Pronchery=head3 Versioning Scheme
148b077aed3SPierre Pronchery
149b077aed3SPierre ProncheryThe OpenSSL versioning scheme has changed with the OpenSSL 3.0 release. The new
150b077aed3SPierre Proncheryversioning scheme has this format:
151b077aed3SPierre Pronchery
152b077aed3SPierre ProncheryMAJOR.MINOR.PATCH
153b077aed3SPierre Pronchery
154b077aed3SPierre ProncheryFor OpenSSL 1.1.1 and below, different patch levels were indicated by a letter
155b077aed3SPierre Proncheryat the end of the release version number. This will no longer be used and
156b077aed3SPierre Proncheryinstead the patch level is indicated by the final number in the version. A
157b077aed3SPierre Proncherychange in the second (MINOR) number indicates that new features may have been
158b077aed3SPierre Proncheryadded. OpenSSL versions with the same major number are API and ABI compatible.
159b077aed3SPierre ProncheryIf the major number changes then API and ABI compatibility is not guaranteed.
160b077aed3SPierre Pronchery
161b077aed3SPierre ProncheryFor more information, see L<OpenSSL_version(3)>.
162b077aed3SPierre Pronchery
163b077aed3SPierre Pronchery=head3 Other major new features
164b077aed3SPierre Pronchery
165b077aed3SPierre Pronchery=head4 Certificate Management Protocol (CMP, RFC 4210)
166b077aed3SPierre Pronchery
167b077aed3SPierre ProncheryThis also covers CRMF (RFC 4211) and HTTP transfer (RFC 6712)
168b077aed3SPierre ProncherySee L<openssl-cmp(1)> and L<OSSL_CMP_exec_certreq(3)> as starting points.
169b077aed3SPierre Pronchery
170b077aed3SPierre Pronchery=head4 HTTP(S) client
171b077aed3SPierre Pronchery
172b077aed3SPierre ProncheryA proper HTTP(S) client that supports GET and POST, redirection, plain and
173b077aed3SPierre ProncheryASN.1-encoded contents, proxies, and timeouts.
174b077aed3SPierre Pronchery
175b077aed3SPierre Pronchery=head4 Key Derivation Function API (EVP_KDF)
176b077aed3SPierre Pronchery
177b077aed3SPierre ProncheryThis simplifies the process of adding new KDF and PRF implementations.
178b077aed3SPierre Pronchery
179b077aed3SPierre ProncheryPreviously KDF algorithms had been shoe-horned into using the EVP_PKEY object
180b077aed3SPierre Proncherywhich was not a logical mapping.
181b077aed3SPierre ProncheryExisting applications that use KDF algorithms using EVP_PKEY
182b077aed3SPierre Pronchery(scrypt, TLS1 PRF and HKDF) may be slower as they use an EVP_KDF bridge
183b077aed3SPierre Proncheryinternally.
184b077aed3SPierre ProncheryAll new applications should use the new L<EVP_KDF(3)> interface.
185b077aed3SPierre ProncherySee also L<OSSL_PROVIDER-default(7)/Key Derivation Function (KDF)> and
186b077aed3SPierre ProncheryL<OSSL_PROVIDER-FIPS(7)/Key Derivation Function (KDF)>.
187b077aed3SPierre Pronchery
188b077aed3SPierre Pronchery=head4 Message Authentication Code API (EVP_MAC)
189b077aed3SPierre Pronchery
190b077aed3SPierre ProncheryThis simplifies the process of adding MAC implementations.
191b077aed3SPierre Pronchery
192b077aed3SPierre ProncheryThis includes a generic EVP_PKEY to EVP_MAC bridge, to facilitate the continued
193b077aed3SPierre Proncheryuse of MACs through raw private keys in functionality such as
194b077aed3SPierre ProncheryL<EVP_DigestSign(3)> and L<EVP_DigestVerify(3)>.
195b077aed3SPierre Pronchery
196b077aed3SPierre ProncheryAll new applications should use the new L<EVP_MAC(3)> interface.
197b077aed3SPierre ProncherySee also L<OSSL_PROVIDER-default(7)/Message Authentication Code (MAC)>
198b077aed3SPierre Proncheryand L<OSSL_PROVIDER-FIPS(7)/Message Authentication Code (MAC)>.
199b077aed3SPierre Pronchery
200b077aed3SPierre Pronchery=head4 Algorithm Fetching
201b077aed3SPierre Pronchery
202b077aed3SPierre ProncheryUsing calls to convenience functions such as EVP_sha256() and EVP_aes_256_gcm() may
203b077aed3SPierre Proncheryincur a performance penalty when using providers.
204b077aed3SPierre ProncheryRetrieving algorithms from providers involves searching for an algorithm by name.
205b077aed3SPierre ProncheryThis is much slower than directly accessing a method table.
206b077aed3SPierre ProncheryIt is recommended to prefetch algorithms if an algorithm is used many times.
207b077aed3SPierre ProncherySee L<crypto(7)/Performance>, L<crypto(7)/Explicit fetching> and L<crypto(7)/Implicit fetching>.
208b077aed3SPierre Pronchery
209b077aed3SPierre Pronchery=head4 Support for Linux Kernel TLS
210b077aed3SPierre Pronchery
211b077aed3SPierre ProncheryIn order to use KTLS, support for it must be compiled in using the
212b077aed3SPierre ProncheryC<enable-ktls> configuration option. It must also be enabled at run time using
213b077aed3SPierre Proncherythe B<SSL_OP_ENABLE_KTLS> option.
214b077aed3SPierre Pronchery
215b077aed3SPierre Pronchery=head4 New Algorithms
216b077aed3SPierre Pronchery
217b077aed3SPierre Pronchery=over 4
218b077aed3SPierre Pronchery
219b077aed3SPierre Pronchery=item *
220b077aed3SPierre Pronchery
221b077aed3SPierre ProncheryKDF algorithms "SINGLE STEP" and "SSH"
222b077aed3SPierre Pronchery
223b077aed3SPierre ProncherySee L<EVP_KDF-SS(7)> and L<EVP_KDF-SSHKDF(7)>
224b077aed3SPierre Pronchery
225b077aed3SPierre Pronchery=item *
226b077aed3SPierre Pronchery
227b077aed3SPierre ProncheryMAC Algorithms "GMAC" and "KMAC"
228b077aed3SPierre Pronchery
229b077aed3SPierre ProncherySee L<EVP_MAC-GMAC(7)> and L<EVP_MAC-KMAC(7)>.
230b077aed3SPierre Pronchery
231b077aed3SPierre Pronchery=item *
232b077aed3SPierre Pronchery
233b077aed3SPierre ProncheryKEM Algorithm "RSASVE"
234b077aed3SPierre Pronchery
235b077aed3SPierre ProncherySee L<EVP_KEM-RSA(7)>.
236b077aed3SPierre Pronchery
237b077aed3SPierre Pronchery=item *
238b077aed3SPierre Pronchery
239b077aed3SPierre ProncheryCipher Algorithm "AES-SIV"
240b077aed3SPierre Pronchery
241b077aed3SPierre ProncherySee L<EVP_EncryptInit(3)/SIV Mode>.
242b077aed3SPierre Pronchery
243b077aed3SPierre Pronchery=item *
244b077aed3SPierre Pronchery
245b077aed3SPierre ProncheryAES Key Wrap inverse ciphers supported by EVP layer.
246b077aed3SPierre Pronchery
247b077aed3SPierre ProncheryThe inverse ciphers use AES decryption for wrapping, and AES encryption for
248b077aed3SPierre Proncheryunwrapping. The algorithms are: "AES-128-WRAP-INV", "AES-192-WRAP-INV",
249b077aed3SPierre Pronchery"AES-256-WRAP-INV", "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" and
250b077aed3SPierre Pronchery"AES-256-WRAP-PAD-INV".
251b077aed3SPierre Pronchery
252b077aed3SPierre Pronchery=item *
253b077aed3SPierre Pronchery
254b077aed3SPierre ProncheryCTS ciphers added to EVP layer.
255b077aed3SPierre Pronchery
256b077aed3SPierre ProncheryThe algorithms are "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS",
257b077aed3SPierre Pronchery"CAMELLIA-128-CBC-CTS", "CAMELLIA-192-CBC-CTS" and "CAMELLIA-256-CBC-CTS".
258b077aed3SPierre ProncheryCS1, CS2 and CS3 variants are supported.
259b077aed3SPierre Pronchery
260b077aed3SPierre Pronchery=back
261b077aed3SPierre Pronchery
262b077aed3SPierre Pronchery=head4 CMS and PKCS#7 updates
263b077aed3SPierre Pronchery
264b077aed3SPierre Pronchery=over 4
265b077aed3SPierre Pronchery
266b077aed3SPierre Pronchery=item *
267b077aed3SPierre Pronchery
268b077aed3SPierre ProncheryAdded CAdES-BES signature verification support.
269b077aed3SPierre Pronchery
270b077aed3SPierre Pronchery=item *
271b077aed3SPierre Pronchery
272b077aed3SPierre ProncheryAdded CAdES-BES signature scheme and attributes support (RFC 5126) to CMS API.
273b077aed3SPierre Pronchery
274b077aed3SPierre Pronchery=item *
275b077aed3SPierre Pronchery
276b077aed3SPierre ProncheryAdded AuthEnvelopedData content type structure (RFC 5083) using AES_GCM
277b077aed3SPierre Pronchery
278b077aed3SPierre ProncheryThis uses the AES-GCM parameter (RFC 5084) for the Cryptographic Message Syntax.
279b077aed3SPierre ProncheryIts purpose is to support encryption and decryption of a digital envelope that
280b077aed3SPierre Proncheryis both authenticated and encrypted using AES GCM mode.
281b077aed3SPierre Pronchery
282b077aed3SPierre Pronchery=item *
283b077aed3SPierre Pronchery
284b077aed3SPierre ProncheryL<PKCS7_get_octet_string(3)> and L<PKCS7_type_is_other(3)> were made public.
285b077aed3SPierre Pronchery
286b077aed3SPierre Pronchery=back
287b077aed3SPierre Pronchery
288b077aed3SPierre Pronchery=head4 PKCS#12 API updates
289b077aed3SPierre Pronchery
290b077aed3SPierre ProncheryThe default algorithms for pkcs12 creation with the PKCS12_create() function
291b077aed3SPierre Proncherywere changed to more modern PBKDF2 and AES based algorithms. The default
292b077aed3SPierre ProncheryMAC iteration count was changed to PKCS12_DEFAULT_ITER to make it equal
293b077aed3SPierre Proncherywith the password-based encryption iteration count. The default digest
294b077aed3SPierre Proncheryalgorithm for the MAC computation was changed to SHA-256. The pkcs12
295b077aed3SPierre Proncheryapplication now supports -legacy option that restores the previous
296b077aed3SPierre Proncherydefault algorithms to support interoperability with legacy systems.
297b077aed3SPierre Pronchery
298b077aed3SPierre ProncheryAdded enhanced PKCS#12 APIs which accept a library context B<OSSL_LIB_CTX>
299b077aed3SPierre Proncheryand (where relevant) a property query. Other APIs which handle PKCS#7 and
300b077aed3SPierre ProncheryPKCS#8 objects have also been enhanced where required. This includes:
301b077aed3SPierre Pronchery
302b077aed3SPierre ProncheryL<PKCS12_add_key_ex(3)>, L<PKCS12_add_safe_ex(3)>, L<PKCS12_add_safes_ex(3)>,
303b077aed3SPierre ProncheryL<PKCS12_create_ex(3)>, L<PKCS12_decrypt_skey_ex(3)>, L<PKCS12_init_ex(3)>,
304b077aed3SPierre ProncheryL<PKCS12_item_decrypt_d2i_ex(3)>, L<PKCS12_item_i2d_encrypt_ex(3)>,
305b077aed3SPierre ProncheryL<PKCS12_key_gen_asc_ex(3)>, L<PKCS12_key_gen_uni_ex(3)>, L<PKCS12_key_gen_utf8_ex(3)>,
306b077aed3SPierre ProncheryL<PKCS12_pack_p7encdata_ex(3)>, L<PKCS12_pbe_crypt_ex(3)>, L<PKCS12_PBE_keyivgen_ex(3)>,
307b077aed3SPierre ProncheryL<PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(3)>, L<PKCS5_pbe2_set_iv_ex(3)>,
308b077aed3SPierre ProncheryL<PKCS5_pbe_set0_algor_ex(3)>, L<PKCS5_pbe_set_ex(3)>, L<PKCS5_pbkdf2_set_ex(3)>,
309b077aed3SPierre ProncheryL<PKCS5_v2_PBE_keyivgen_ex(3)>, L<PKCS5_v2_scrypt_keyivgen_ex(3)>,
310b077aed3SPierre ProncheryL<PKCS8_decrypt_ex(3)>, L<PKCS8_encrypt_ex(3)>, L<PKCS8_set0_pbe_ex(3)>.
311b077aed3SPierre Pronchery
312b077aed3SPierre ProncheryAs part of this change the EVP_PBE_xxx APIs can also accept a library
313b077aed3SPierre Proncherycontext and property query and will call an extended version of the key/IV
314b077aed3SPierre Proncheryderivation function which supports these parameters. This includes
315b077aed3SPierre ProncheryL<EVP_PBE_CipherInit_ex(3)>, L<EVP_PBE_find_ex(3)> and L<EVP_PBE_scrypt_ex(3)>.
316b077aed3SPierre Pronchery
3176f1af0d7SPierre Pronchery=head4 PKCS#12 KDF versus FIPS
3186f1af0d7SPierre Pronchery
3196f1af0d7SPierre ProncheryUnlike in 1.x.y, the PKCS12KDF algorithm used when a PKCS#12 structure
3206f1af0d7SPierre Proncheryis created with a MAC that does not work with the FIPS provider as the PKCS12KDF
3216f1af0d7SPierre Proncheryis not a FIPS approvable mechanism.
3226f1af0d7SPierre Pronchery
3236f1af0d7SPierre ProncherySee L<EVP_KDF-PKCS12KDF(7)>, L<PKCS12_create(3)>, L<openssl-pkcs12(1)>,
3246f1af0d7SPierre ProncheryL<OSSL_PROVIDER-FIPS(7)>.
3256f1af0d7SPierre Pronchery
326b077aed3SPierre Pronchery=head4 Windows thread synchronization changes
327b077aed3SPierre Pronchery
328b077aed3SPierre ProncheryWindows thread synchronization uses read/write primitives (SRWLock) when
329b077aed3SPierre Proncherysupported by the OS, otherwise CriticalSection continues to be used.
330b077aed3SPierre Pronchery
331b077aed3SPierre Pronchery=head4 Trace API
332b077aed3SPierre Pronchery
333b077aed3SPierre ProncheryA new generic trace API has been added which provides support for enabling
334b077aed3SPierre Proncheryinstrumentation through trace output. This feature is mainly intended as an aid
335b077aed3SPierre Proncheryfor developers and is disabled by default. To utilize it, OpenSSL needs to be
336b077aed3SPierre Proncheryconfigured with the C<enable-trace> option.
337b077aed3SPierre Pronchery
338b077aed3SPierre ProncheryIf the tracing API is enabled, the application can activate trace output by
339b077aed3SPierre Proncheryregistering BIOs as trace channels for a number of tracing and debugging
340b077aed3SPierre Proncherycategories. See L<OSSL_trace_enabled(3)>.
341b077aed3SPierre Pronchery
342b077aed3SPierre Pronchery=head4 Key validation updates
343b077aed3SPierre Pronchery
344b077aed3SPierre ProncheryL<EVP_PKEY_public_check(3)> and L<EVP_PKEY_param_check(3)> now work for
345b077aed3SPierre Proncherymore key types. This includes RSA, DSA, ED25519, X25519, ED448 and X448.
346b077aed3SPierre ProncheryPreviously (in 1.1.1) they would return -2. For key types that do not have
347b077aed3SPierre Proncheryparameters then L<EVP_PKEY_param_check(3)> will always return 1.
348b077aed3SPierre Pronchery
349b077aed3SPierre Pronchery=head3 Other notable deprecations and changes
350b077aed3SPierre Pronchery
351b077aed3SPierre Pronchery=head4 The function code part of an OpenSSL error code is no longer relevant
352b077aed3SPierre Pronchery
353b077aed3SPierre ProncheryThis code is now always set to zero. Related functions are deprecated.
354b077aed3SPierre Pronchery
355b077aed3SPierre Pronchery=head4 STACK and HASH macros have been cleaned up
356b077aed3SPierre Pronchery
357b077aed3SPierre ProncheryThe type-safe wrappers are declared everywhere and implemented once.
358b077aed3SPierre ProncherySee L<DEFINE_STACK_OF(3)> and L<DECLARE_LHASH_OF(3)>.
359b077aed3SPierre Pronchery
360b077aed3SPierre Pronchery=head4 The RAND_DRBG subsystem has been removed
361b077aed3SPierre Pronchery
362b077aed3SPierre ProncheryThe new L<EVP_RAND(3)> is a partial replacement: the DRBG callback framework is
363b077aed3SPierre Proncheryabsent. The RAND_DRBG API did not fit well into the new provider concept as
364b077aed3SPierre Proncheryimplemented by EVP_RAND and EVP_RAND_CTX.
365b077aed3SPierre Pronchery
366b077aed3SPierre Pronchery=head4 Removed FIPS_mode() and FIPS_mode_set()
367b077aed3SPierre Pronchery
368b077aed3SPierre ProncheryThese functions are legacy APIs that are not applicable to the new provider
369b077aed3SPierre Proncherymodel. Applications should instead use
370b077aed3SPierre ProncheryL<EVP_default_properties_is_fips_enabled(3)> and
371b077aed3SPierre ProncheryL<EVP_default_properties_enable_fips(3)>.
372b077aed3SPierre Pronchery
373b077aed3SPierre Pronchery=head4 Key generation is slower
374b077aed3SPierre Pronchery
375b077aed3SPierre ProncheryThe Miller-Rabin test now uses 64 rounds, which is used for all prime generation,
376b077aed3SPierre Proncheryincluding RSA key generation. This affects the time for larger keys sizes.
377b077aed3SPierre Pronchery
378b077aed3SPierre ProncheryThe default key generation method for the regular 2-prime RSA keys was changed
379b077aed3SPierre Proncheryto the FIPS186-4 B.3.6 method (Generation of Probable Primes with Conditions
380b077aed3SPierre ProncheryBased on Auxiliary Probable Primes). This method is slower than the original
381b077aed3SPierre Proncherymethod.
382b077aed3SPierre Pronchery
383b077aed3SPierre Pronchery=head4 Change PBKDF2 to conform to SP800-132 instead of the older PKCS5 RFC2898
384b077aed3SPierre Pronchery
385b077aed3SPierre ProncheryThis checks that the salt length is at least 128 bits, the derived key length is
386b077aed3SPierre Proncheryat least 112 bits, and that the iteration count is at least 1000.
387b077aed3SPierre ProncheryFor backwards compatibility these checks are disabled by default in the
388b077aed3SPierre Proncherydefault provider, but are enabled by default in the FIPS provider.
389b077aed3SPierre Pronchery
390b077aed3SPierre ProncheryTo enable or disable the checks see B<OSSL_KDF_PARAM_PKCS5> in
391b077aed3SPierre ProncheryL<EVP_KDF-PBKDF2(7)>. The parameter can be set using L<EVP_KDF_derive(3)>.
392b077aed3SPierre Pronchery
393b077aed3SPierre Pronchery=head4 Enforce a minimum DH modulus size of 512 bits
394b077aed3SPierre Pronchery
395b077aed3SPierre ProncherySmaller sizes now result in an error.
396b077aed3SPierre Pronchery
397b077aed3SPierre Pronchery=head4 SM2 key changes
398b077aed3SPierre Pronchery
399b077aed3SPierre ProncheryEC EVP_PKEYs with the SM2 curve have been reworked to automatically become
400b077aed3SPierre ProncheryEVP_PKEY_SM2 rather than EVP_PKEY_EC.
401b077aed3SPierre Pronchery
402b077aed3SPierre ProncheryUnlike in previous OpenSSL versions, this means that applications cannot
403b077aed3SPierre Proncherycall C<EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2)> to get SM2 computations.
404b077aed3SPierre Pronchery
405b077aed3SPierre ProncheryParameter and key generation is also reworked to make it possible
406b077aed3SPierre Proncheryto generate EVP_PKEY_SM2 parameters and keys. Applications must now generate
407b077aed3SPierre ProncherySM2 keys directly and must not create an EVP_PKEY_EC key first. It is no longer
408b077aed3SPierre Proncherypossible to import an SM2 key with domain parameters other than the SM2 elliptic
409b077aed3SPierre Proncherycurve ones.
410b077aed3SPierre Pronchery
411b077aed3SPierre ProncheryValidation of SM2 keys has been separated from the validation of regular EC
412b077aed3SPierre Proncherykeys, allowing to improve the SM2 validation process to reject loaded private
413b077aed3SPierre Proncherykeys that are not conforming to the SM2 ISO standard.
414b077aed3SPierre ProncheryIn particular, a private scalar I<k> outside the range I<< 1 <= k < n-1 >> is
415b077aed3SPierre Proncherynow correctly rejected.
416b077aed3SPierre Pronchery
417b077aed3SPierre Pronchery=head4 EVP_PKEY_set_alias_type() method has been removed
418b077aed3SPierre Pronchery
419b077aed3SPierre ProncheryThis function made a B<EVP_PKEY> object mutable after it had been set up. In
420b077aed3SPierre ProncheryOpenSSL 3.0 it was decided that a provided key should not be able to change its
421b077aed3SPierre Proncherytype, so this function has been removed.
422b077aed3SPierre Pronchery
423b077aed3SPierre Pronchery=head4 Functions that return an internal key should be treated as read only
424b077aed3SPierre Pronchery
425b077aed3SPierre ProncheryFunctions such as L<EVP_PKEY_get0_RSA(3)> behave slightly differently in
426b077aed3SPierre ProncheryOpenSSL 3.0. Previously they returned a pointer to the low-level key used
427b077aed3SPierre Proncheryinternally by libcrypto. From OpenSSL 3.0 this key may now be held in a
428b077aed3SPierre Proncheryprovider. Calling these functions will only return a handle on the internal key
429b077aed3SPierre Proncherywhere the EVP_PKEY was constructed using this key in the first place, for
430b077aed3SPierre Proncheryexample using a function or macro such as L<EVP_PKEY_assign_RSA(3)>,
431b077aed3SPierre ProncheryL<EVP_PKEY_set1_RSA(3)>, etc.
432b077aed3SPierre ProncheryWhere the EVP_PKEY holds a provider managed key, then these functions now return
433b077aed3SPierre Proncherya cached copy of the key. Changes to the internal provider key that take place
434b077aed3SPierre Proncheryafter the first time the cached key is accessed will not be reflected back in
435b077aed3SPierre Proncherythe cached copy. Similarly any changes made to the cached copy by application
436b077aed3SPierre Proncherycode will not be reflected back in the internal provider key.
437b077aed3SPierre Pronchery
438b077aed3SPierre ProncheryFor the above reasons the keys returned from these functions should typically be
439b077aed3SPierre Proncherytreated as read-only. To emphasise this the value returned from
440b077aed3SPierre ProncheryL<EVP_PKEY_get0_RSA(3)>, L<EVP_PKEY_get0_DSA(3)>, L<EVP_PKEY_get0_EC_KEY(3)> and
441b077aed3SPierre ProncheryL<EVP_PKEY_get0_DH(3)> have been made const. This may break some existing code.
442b077aed3SPierre ProncheryApplications broken by this change should be modified. The preferred solution is
443b077aed3SPierre Proncheryto refactor the code to avoid the use of these deprecated functions. Failing
444b077aed3SPierre Proncherythis the code should be modified to use a const pointer instead.
445b077aed3SPierre ProncheryThe L<EVP_PKEY_get1_RSA(3)>, L<EVP_PKEY_get1_DSA(3)>, L<EVP_PKEY_get1_EC_KEY(3)>
446b077aed3SPierre Proncheryand L<EVP_PKEY_get1_DH(3)> functions continue to return a non-const pointer to
447b077aed3SPierre Proncheryenable them to be "freed". However they should also be treated as read-only.
448b077aed3SPierre Pronchery
449b077aed3SPierre Pronchery=head4 The public key check has moved from EVP_PKEY_derive() to EVP_PKEY_derive_set_peer()
450b077aed3SPierre Pronchery
451b077aed3SPierre ProncheryThis may mean result in an error in L<EVP_PKEY_derive_set_peer(3)> rather than
452b077aed3SPierre Proncheryduring L<EVP_PKEY_derive(3)>.
453b077aed3SPierre ProncheryTo disable this check use EVP_PKEY_derive_set_peer_ex(dh, peer, 0).
454b077aed3SPierre Pronchery
455b077aed3SPierre Pronchery=head4 The print format has cosmetic changes for some functions
456b077aed3SPierre Pronchery
457b077aed3SPierre ProncheryThe output from numerous "printing" functions such as L<X509_signature_print(3)>,
458b077aed3SPierre ProncheryL<X509_print_ex(3)>, L<X509_CRL_print_ex(3)>, and other similar functions has been
459b077aed3SPierre Proncheryamended such that there may be cosmetic differences between the output
460b077aed3SPierre Proncheryobserved in 1.1.1 and 3.0. This also applies to the B<-text> output from the
461b077aed3SPierre ProncheryB<openssl x509> and B<openssl crl> applications.
462b077aed3SPierre Pronchery
463b077aed3SPierre Pronchery=head4 Interactive mode from the B<openssl> program has been removed
464b077aed3SPierre Pronchery
465b077aed3SPierre ProncheryFrom now on, running it without arguments is equivalent to B<openssl help>.
466b077aed3SPierre Pronchery
467b077aed3SPierre Pronchery=head4 The error return values from some control calls (ctrl) have changed
468b077aed3SPierre Pronchery
469b077aed3SPierre ProncheryOne significant change is that controls which used to return -2 for
470b077aed3SPierre Proncheryinvalid inputs, now return -1 indicating a generic error condition instead.
471b077aed3SPierre Pronchery
472b077aed3SPierre Pronchery=head4 DH and DHX key types have different settable parameters
473b077aed3SPierre Pronchery
474b077aed3SPierre ProncheryPreviously (in 1.1.1) these conflicting parameters were allowed, but will now
475b077aed3SPierre Proncheryresult in errors. See L<EVP_PKEY-DH(7)> for further details. This affects the
476b077aed3SPierre Proncherybehaviour of L<openssl-genpkey(1)> for DH parameter generation.
477b077aed3SPierre Pronchery
478b077aed3SPierre Pronchery=head4 EVP_CIPHER_CTX_set_flags() ordering change
479b077aed3SPierre Pronchery
480b077aed3SPierre ProncheryIf using a cipher from a provider the B<EVP_CIPH_FLAG_LENGTH_BITS> flag can only
481b077aed3SPierre Proncherybe set B<after> the cipher has been assigned to the cipher context.
482b077aed3SPierre ProncherySee L<EVP_EncryptInit(3)/FLAGS> for more information.
483b077aed3SPierre Pronchery
484b077aed3SPierre Pronchery=head4 Validation of operation context parameters
485b077aed3SPierre Pronchery
486b077aed3SPierre ProncheryDue to move of the implementation of cryptographic operations to the
487b077aed3SPierre Proncheryproviders, validation of various operation parameters can be postponed until
488b077aed3SPierre Proncherythe actual operation is executed where previously it happened immediately
489b077aed3SPierre Proncherywhen an operation parameter was set.
490b077aed3SPierre Pronchery
491b077aed3SPierre ProncheryFor example when setting an unsupported curve with
492b077aed3SPierre ProncheryEVP_PKEY_CTX_set_ec_paramgen_curve_nid() this function call will not fail
493b077aed3SPierre Proncherybut later keygen operations with the EVP_PKEY_CTX will fail.
494b077aed3SPierre Pronchery
495b077aed3SPierre Pronchery=head4 Removal of function code from the error codes
496b077aed3SPierre Pronchery
497b077aed3SPierre ProncheryThe function code part of the error code is now always set to 0. For that
498b077aed3SPierre Proncheryreason the ERR_GET_FUNC() macro was removed. Applications must resolve
499b077aed3SPierre Proncherythe error codes only using the library number and the reason code.
500b077aed3SPierre Pronchery
501b077aed3SPierre Pronchery=head4 ChaCha20-Poly1305 cipher does not allow a truncated IV length to be used
502b077aed3SPierre Pronchery
503b077aed3SPierre ProncheryIn OpenSSL 3.0 setting the IV length to any value other than 12 will result in an
504b077aed3SPierre Proncheryerror.
505b077aed3SPierre ProncheryPrior to OpenSSL 3.0 the ivlen could be smaller that the required 12 byte length,
506b077aed3SPierre Proncheryusing EVP_CIPHER_CTX_ctrl(ctx, EVP_CRTL_AEAD_SET_IVLEN, ivlen, NULL). This resulted
507b077aed3SPierre Proncheryin an IV that had leading zero padding.
508b077aed3SPierre Pronchery
509b077aed3SPierre Pronchery=head2 Installation and Compilation
510b077aed3SPierre Pronchery
511b077aed3SPierre ProncheryPlease refer to the INSTALL.md file in the top of the distribution for
512b077aed3SPierre Proncheryinstructions on how to build and install OpenSSL 3.0. Please also refer to the
513b077aed3SPierre Proncheryvarious platform specific NOTES files for your specific platform.
514b077aed3SPierre Pronchery
515b077aed3SPierre Pronchery=head2 Upgrading from OpenSSL 1.1.1
516b077aed3SPierre Pronchery
517b077aed3SPierre ProncheryUpgrading to OpenSSL 3.0 from OpenSSL 1.1.1 should be relatively straight
518b077aed3SPierre Proncheryforward in most cases. The most likely area where you will encounter problems
519b077aed3SPierre Proncheryis if you have used low level APIs in your code (as discussed above). In that
520b077aed3SPierre Proncherycase you are likely to start seeing deprecation warnings when compiling your
521b077aed3SPierre Proncheryapplication. If this happens you have 3 options:
522b077aed3SPierre Pronchery
523b077aed3SPierre Pronchery=over 4
524b077aed3SPierre Pronchery
525b077aed3SPierre Pronchery=item 1.
526b077aed3SPierre Pronchery
527b077aed3SPierre ProncheryIgnore the warnings. They are just warnings. The deprecated functions are still present and you may still use them. However be aware that they may be removed from a future version of OpenSSL.
528b077aed3SPierre Pronchery
529b077aed3SPierre Pronchery=item 2.
530b077aed3SPierre Pronchery
531b077aed3SPierre ProncherySuppress the warnings. Refer to your compiler documentation on how to do this.
532b077aed3SPierre Pronchery
533b077aed3SPierre Pronchery=item 3.
534b077aed3SPierre Pronchery
535b077aed3SPierre ProncheryRemove your usage of the low level APIs. In this case you will need to rewrite your code to use the high level APIs instead
536b077aed3SPierre Pronchery
537b077aed3SPierre Pronchery=back
538b077aed3SPierre Pronchery
539b077aed3SPierre Pronchery=head3 Error code changes
540b077aed3SPierre Pronchery
541b077aed3SPierre ProncheryAs OpenSSL 3.0 provides a brand new Encoder/Decoder mechanism for working with
542b077aed3SPierre Proncherywidely used file formats, application code that checks for particular error
543b077aed3SPierre Proncheryreason codes on key loading failures might need an update.
544b077aed3SPierre Pronchery
545b077aed3SPierre ProncheryPassword-protected keys may deserve special attention. If only some errors
546b077aed3SPierre Proncheryare treated as an indicator that the user should be asked about the password again,
547b077aed3SPierre Proncheryit's worth testing these scenarios and processing the newly relevant codes.
548b077aed3SPierre Pronchery
549b077aed3SPierre ProncheryThere may be more cases to treat specially, depending on the calling application code.
550b077aed3SPierre Pronchery
551b077aed3SPierre Pronchery=head2 Upgrading from OpenSSL 1.0.2
552b077aed3SPierre Pronchery
553b077aed3SPierre ProncheryUpgrading to OpenSSL 3.0 from OpenSSL 1.0.2 is likely to be significantly more
554b077aed3SPierre Proncherydifficult. In addition to the issues discussed above in the section about
555b077aed3SPierre ProncheryL</Upgrading from OpenSSL 1.1.1>, the main things to be aware of are:
556b077aed3SPierre Pronchery
557b077aed3SPierre Pronchery=over 4
558b077aed3SPierre Pronchery
559b077aed3SPierre Pronchery=item 1.
560b077aed3SPierre Pronchery
561b077aed3SPierre ProncheryThe build and installation procedure has changed significantly.
562b077aed3SPierre Pronchery
563b077aed3SPierre ProncheryCheck the file INSTALL.md in the top of the installation for instructions on how
564b077aed3SPierre Proncheryto build and install OpenSSL for your platform. Also read the various NOTES
565b077aed3SPierre Proncheryfiles in the same directory, as applicable for your platform.
566b077aed3SPierre Pronchery
567b077aed3SPierre Pronchery=item 2.
568b077aed3SPierre Pronchery
569b077aed3SPierre ProncheryMany structures have been made opaque in OpenSSL 3.0.
570b077aed3SPierre Pronchery
571b077aed3SPierre ProncheryThe structure definitions have been removed from the public header files and
572b077aed3SPierre Proncherymoved to internal header files. In practice this means that you can no longer
573b077aed3SPierre Proncherystack allocate some structures. Instead they must be heap allocated through some
574b077aed3SPierre Proncheryfunction call (typically those function names have a C<_new> suffix to them).
575b077aed3SPierre ProncheryAdditionally you must use "setter" or "getter" functions to access the fields
576b077aed3SPierre Proncherywithin those structures.
577b077aed3SPierre Pronchery
578b077aed3SPierre ProncheryFor example code that previously looked like this:
579b077aed3SPierre Pronchery
580b077aed3SPierre Pronchery EVP_MD_CTX md_ctx;
581b077aed3SPierre Pronchery
582b077aed3SPierre Pronchery /* This line will now generate compiler errors */
583b077aed3SPierre Pronchery EVP_MD_CTX_init(&md_ctx);
584b077aed3SPierre Pronchery
585b077aed3SPierre ProncheryThe code needs to be amended to look like this:
586b077aed3SPierre Pronchery
587b077aed3SPierre Pronchery EVP_MD_CTX *md_ctx;
588b077aed3SPierre Pronchery
589b077aed3SPierre Pronchery md_ctx = EVP_MD_CTX_new();
590b077aed3SPierre Pronchery ...
591b077aed3SPierre Pronchery ...
592b077aed3SPierre Pronchery EVP_MD_CTX_free(md_ctx);
593b077aed3SPierre Pronchery
594b077aed3SPierre Pronchery=item 3.
595b077aed3SPierre Pronchery
596b077aed3SPierre ProncherySupport for TLSv1.3 has been added.
597b077aed3SPierre Pronchery
598b077aed3SPierre ProncheryThis has a number of implications for SSL/TLS applications. See the
599b077aed3SPierre ProncheryL<TLS1.3 page|https://wiki.openssl.org/index.php/TLS1.3> for further details.
600b077aed3SPierre Pronchery
601b077aed3SPierre Pronchery=back
602b077aed3SPierre Pronchery
603b077aed3SPierre ProncheryMore details about the breaking changes between OpenSSL versions 1.0.2 and 1.1.0
604b077aed3SPierre Proncherycan be found on the
605b077aed3SPierre ProncheryL<OpenSSL 1.1.0 Changes page|https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes>.
606b077aed3SPierre Pronchery
607b077aed3SPierre Pronchery=head3 Upgrading from the OpenSSL 2.0 FIPS Object Module
608b077aed3SPierre Pronchery
609b077aed3SPierre ProncheryThe OpenSSL 2.0 FIPS Object Module was a separate download that had to be built
610b077aed3SPierre Proncheryseparately and then integrated into your main OpenSSL 1.0.2 build.
611b077aed3SPierre ProncheryIn OpenSSL 3.0 the FIPS support is fully integrated into the mainline version of
612b077aed3SPierre ProncheryOpenSSL and is no longer a separate download. For further information see
613b077aed3SPierre ProncheryL</Completing the installation of the FIPS Module>.
614b077aed3SPierre Pronchery
615b077aed3SPierre ProncheryThe function calls FIPS_mode() and FIPS_mode_set() have been removed
616b077aed3SPierre Proncheryfrom OpenSSL 3.0. You should rewrite your application to not use them.
617b077aed3SPierre ProncherySee L<fips_module(7)> and L<OSSL_PROVIDER-FIPS(7)> for details.
618b077aed3SPierre Pronchery
619b077aed3SPierre Pronchery=head2 Completing the installation of the FIPS Module
620b077aed3SPierre Pronchery
621b077aed3SPierre ProncheryThe FIPS Module will be built and installed automatically if FIPS support has
622b077aed3SPierre Proncherybeen configured. The current documentation can be found in the
623b077aed3SPierre ProncheryL<README-FIPS|https://github.com/openssl/openssl/blob/master/README-FIPS.md> file.
624b077aed3SPierre Pronchery
625b077aed3SPierre Pronchery=head2 Programming
626b077aed3SPierre Pronchery
627b077aed3SPierre ProncheryApplications written to work with OpenSSL 1.1.1 will mostly just work with
628b077aed3SPierre ProncheryOpenSSL 3.0. However changes will be required if you want to take advantage of
629b077aed3SPierre Proncherysome of the new features that OpenSSL 3.0 makes available. In order to do that
630b077aed3SPierre Proncheryyou need to understand some new concepts introduced in OpenSSL 3.0.
631b077aed3SPierre ProncheryRead L<crypto(7)/Library contexts> for further information.
632b077aed3SPierre Pronchery
633b077aed3SPierre Pronchery=head3 Library Context
634b077aed3SPierre Pronchery
635b077aed3SPierre ProncheryA library context allows different components of a complex application to each
636b077aed3SPierre Proncheryuse a different library context and have different providers loaded with
637b077aed3SPierre Proncherydifferent configuration settings.
638b077aed3SPierre ProncherySee L<crypto(7)/Library contexts> for further info.
639b077aed3SPierre Pronchery
640b077aed3SPierre ProncheryIf the user creates an B<OSSL_LIB_CTX> via L<OSSL_LIB_CTX_new(3)> then many
641b077aed3SPierre Proncheryfunctions may need to be changed to pass additional parameters to handle the
642b077aed3SPierre Proncherylibrary context.
643b077aed3SPierre Pronchery
644b077aed3SPierre Pronchery=head4 Using a Library Context - Old functions that should be changed
645b077aed3SPierre Pronchery
646b077aed3SPierre ProncheryIf a library context is needed then all EVP_* digest functions that return a
647b077aed3SPierre ProncheryB<const EVP_MD *> such as EVP_sha256() should be replaced with a call to
648b077aed3SPierre ProncheryL<EVP_MD_fetch(3)>. See L<crypto(7)/ALGORITHM FETCHING>.
649b077aed3SPierre Pronchery
650b077aed3SPierre ProncheryIf a library context is needed then all EVP_* cipher functions that return a
651b077aed3SPierre ProncheryB<const EVP_CIPHER *> such as EVP_aes_128_cbc() should be replaced vith a call to
652b077aed3SPierre ProncheryL<EVP_CIPHER_fetch(3)>. See L<crypto(7)/ALGORITHM FETCHING>.
653b077aed3SPierre Pronchery
654b077aed3SPierre ProncherySome functions can be passed an object that has already been set up with a library
655b077aed3SPierre Proncherycontext such as L<d2i_X509(3)>, L<d2i_X509_CRL(3)>, L<d2i_X509_REQ(3)> and
656b077aed3SPierre ProncheryL<d2i_X509_PUBKEY(3)>. If NULL is passed instead then the created object will be
657b077aed3SPierre Proncheryset up with the default library context. Use L<X509_new_ex(3)>,
658b077aed3SPierre ProncheryL<X509_CRL_new_ex(3)>, L<X509_REQ_new_ex(3)> and L<X509_PUBKEY_new_ex(3)> if a
659b077aed3SPierre Proncherylibrary context is required.
660b077aed3SPierre Pronchery
661aa795734SPierre ProncheryAll functions listed below with a I<NAME> have a replacement function I<NAME_ex>
662b077aed3SPierre Proncherythat takes B<OSSL_LIB_CTX> as an additional argument. Functions that have other
663b077aed3SPierre Proncherymappings are listed along with the respective name.
664b077aed3SPierre Pronchery
665b077aed3SPierre Pronchery=over 4
666b077aed3SPierre Pronchery
667b077aed3SPierre Pronchery=item *
668b077aed3SPierre Pronchery
669b077aed3SPierre ProncheryL<ASN1_item_new(3)>, L<ASN1_item_d2i(3)>, L<ASN1_item_d2i_fp(3)>,
670b077aed3SPierre ProncheryL<ASN1_item_d2i_bio(3)>, L<ASN1_item_sign(3)> and L<ASN1_item_verify(3)>
671b077aed3SPierre Pronchery
672b077aed3SPierre Pronchery=item *
673b077aed3SPierre Pronchery
674b077aed3SPierre ProncheryL<BIO_new(3)>
675b077aed3SPierre Pronchery
676b077aed3SPierre Pronchery=item *
677b077aed3SPierre Pronchery
678b077aed3SPierre Proncheryb2i_RSA_PVK_bio() and i2b_PVK_bio()
679b077aed3SPierre Pronchery
680b077aed3SPierre Pronchery=item *
681b077aed3SPierre Pronchery
682b077aed3SPierre ProncheryL<BN_CTX_new(3)> and L<BN_CTX_secure_new(3)>
683b077aed3SPierre Pronchery
684b077aed3SPierre Pronchery=item *
685b077aed3SPierre Pronchery
686b077aed3SPierre ProncheryL<CMS_AuthEnvelopedData_create(3)>, L<CMS_ContentInfo_new(3)>, L<CMS_data_create(3)>,
687b077aed3SPierre ProncheryL<CMS_digest_create(3)>, L<CMS_EncryptedData_encrypt(3)>, L<CMS_encrypt(3)>,
688b077aed3SPierre ProncheryL<CMS_EnvelopedData_create(3)>, L<CMS_ReceiptRequest_create0(3)> and L<CMS_sign(3)>
689b077aed3SPierre Pronchery
690b077aed3SPierre Pronchery=item *
691b077aed3SPierre Pronchery
692b077aed3SPierre ProncheryL<CONF_modules_load_file(3)>
693b077aed3SPierre Pronchery
694b077aed3SPierre Pronchery=item *
695b077aed3SPierre Pronchery
696b077aed3SPierre ProncheryL<CTLOG_new(3)>, L<CTLOG_new_from_base64(3)> and L<CTLOG_STORE_new(3)>
697b077aed3SPierre Pronchery
698b077aed3SPierre Pronchery=item *
699b077aed3SPierre Pronchery
700b077aed3SPierre ProncheryL<CT_POLICY_EVAL_CTX_new(3)>
701b077aed3SPierre Pronchery
702b077aed3SPierre Pronchery=item *
703b077aed3SPierre Pronchery
704b077aed3SPierre ProncheryL<d2i_AutoPrivateKey(3)>, L<d2i_PrivateKey(3)> and L<d2i_PUBKEY(3)>
705b077aed3SPierre Pronchery
706b077aed3SPierre Pronchery=item *
707b077aed3SPierre Pronchery
708b077aed3SPierre ProncheryL<d2i_PrivateKey_bio(3)> and L<d2i_PrivateKey_fp(3)>
709b077aed3SPierre Pronchery
710b077aed3SPierre ProncheryUse L<d2i_PrivateKey_ex_bio(3)> and L<d2i_PrivateKey_ex_fp(3)>
711b077aed3SPierre Pronchery
712b077aed3SPierre Pronchery=item *
713b077aed3SPierre Pronchery
714b077aed3SPierre ProncheryL<EC_GROUP_new(3)>
715b077aed3SPierre Pronchery
716b077aed3SPierre ProncheryUse L<EC_GROUP_new_by_curve_name_ex(3)> or L<EC_GROUP_new_from_params(3)>.
717b077aed3SPierre Pronchery
718b077aed3SPierre Pronchery=item *
719b077aed3SPierre Pronchery
720b077aed3SPierre ProncheryL<EVP_DigestSignInit(3)> and L<EVP_DigestVerifyInit(3)>
721b077aed3SPierre Pronchery
722b077aed3SPierre Pronchery=item *
723b077aed3SPierre Pronchery
724b077aed3SPierre ProncheryL<EVP_PBE_CipherInit(3)>, L<EVP_PBE_find(3)> and L<EVP_PBE_scrypt(3)>
725b077aed3SPierre Pronchery
726b077aed3SPierre Pronchery=item *
727b077aed3SPierre Pronchery
728b077aed3SPierre ProncheryL<PKCS5_PBE_keyivgen(3)>
729b077aed3SPierre Pronchery
730b077aed3SPierre Pronchery=item *
731b077aed3SPierre Pronchery
732b077aed3SPierre ProncheryL<EVP_PKCS82PKEY(3)>
733b077aed3SPierre Pronchery
734b077aed3SPierre Pronchery=item *
735b077aed3SPierre Pronchery
736b077aed3SPierre ProncheryL<EVP_PKEY_CTX_new_id(3)>
737b077aed3SPierre Pronchery
738b077aed3SPierre ProncheryUse L<EVP_PKEY_CTX_new_from_name(3)>
739b077aed3SPierre Pronchery
740b077aed3SPierre Pronchery=item *
741b077aed3SPierre Pronchery
742b077aed3SPierre ProncheryL<EVP_PKEY_derive_set_peer(3)>, L<EVP_PKEY_new_raw_private_key(3)>
743b077aed3SPierre Proncheryand L<EVP_PKEY_new_raw_public_key(3)>
744b077aed3SPierre Pronchery
745b077aed3SPierre Pronchery=item *
746b077aed3SPierre Pronchery
747b077aed3SPierre ProncheryL<EVP_SignFinal(3)> and L<EVP_VerifyFinal(3)>
748b077aed3SPierre Pronchery
749b077aed3SPierre Pronchery=item *
750b077aed3SPierre Pronchery
751b077aed3SPierre ProncheryL<NCONF_new(3)>
752b077aed3SPierre Pronchery
753b077aed3SPierre Pronchery=item *
754b077aed3SPierre Pronchery
755b077aed3SPierre ProncheryL<OCSP_RESPID_match(3)> and L<OCSP_RESPID_set_by_key(3)>
756b077aed3SPierre Pronchery
757b077aed3SPierre Pronchery=item *
758b077aed3SPierre Pronchery
759b077aed3SPierre ProncheryL<OPENSSL_thread_stop(3)>
760b077aed3SPierre Pronchery
761b077aed3SPierre Pronchery=item *
762b077aed3SPierre Pronchery
763b077aed3SPierre ProncheryL<OSSL_STORE_open(3)>
764b077aed3SPierre Pronchery
765b077aed3SPierre Pronchery=item *
766b077aed3SPierre Pronchery
767b077aed3SPierre ProncheryL<PEM_read_bio_Parameters(3)>, L<PEM_read_bio_PrivateKey(3)>, L<PEM_read_bio_PUBKEY(3)>,
768b077aed3SPierre ProncheryL<PEM_read_PrivateKey(3)> and L<PEM_read_PUBKEY(3)>
769b077aed3SPierre Pronchery
770b077aed3SPierre Pronchery=item *
771b077aed3SPierre Pronchery
772b077aed3SPierre ProncheryL<PEM_write_bio_PrivateKey(3)>, L<PEM_write_bio_PUBKEY(3)>, L<PEM_write_PrivateKey(3)>
773b077aed3SPierre Proncheryand L<PEM_write_PUBKEY(3)>
774b077aed3SPierre Pronchery
775b077aed3SPierre Pronchery=item *
776b077aed3SPierre Pronchery
777b077aed3SPierre ProncheryL<PEM_X509_INFO_read_bio(3)> and L<PEM_X509_INFO_read(3)>
778b077aed3SPierre Pronchery
779b077aed3SPierre Pronchery=item *
780b077aed3SPierre Pronchery
781b077aed3SPierre ProncheryL<PKCS12_add_key(3)>, L<PKCS12_add_safe(3)>, L<PKCS12_add_safes(3)>,
782b077aed3SPierre ProncheryL<PKCS12_create(3)>, L<PKCS12_decrypt_skey(3)>, L<PKCS12_init(3)>, L<PKCS12_item_decrypt_d2i(3)>,
783b077aed3SPierre ProncheryL<PKCS12_item_i2d_encrypt(3)>, L<PKCS12_key_gen_asc(3)>, L<PKCS12_key_gen_uni(3)>,
784b077aed3SPierre ProncheryL<PKCS12_key_gen_utf8(3)>, L<PKCS12_pack_p7encdata(3)>, L<PKCS12_pbe_crypt(3)>,
785b077aed3SPierre ProncheryL<PKCS12_PBE_keyivgen(3)>, L<PKCS12_SAFEBAG_create_pkcs8_encrypt(3)>
786b077aed3SPierre Pronchery
787b077aed3SPierre Pronchery=item *
788b077aed3SPierre Pronchery
789b077aed3SPierre ProncheryL<PKCS5_pbe_set0_algor(3)>, L<PKCS5_pbe_set(3)>, L<PKCS5_pbe2_set_iv(3)>,
790b077aed3SPierre ProncheryL<PKCS5_pbkdf2_set(3)> and L<PKCS5_v2_scrypt_keyivgen(3)>
791b077aed3SPierre Pronchery
792b077aed3SPierre Pronchery=item *
793b077aed3SPierre Pronchery
794b077aed3SPierre ProncheryL<PKCS7_encrypt(3)>, L<PKCS7_new(3)> and L<PKCS7_sign(3)>
795b077aed3SPierre Pronchery
796b077aed3SPierre Pronchery=item *
797b077aed3SPierre Pronchery
798b077aed3SPierre ProncheryL<PKCS8_decrypt(3)>, L<PKCS8_encrypt(3)> and L<PKCS8_set0_pbe(3)>
799b077aed3SPierre Pronchery
800b077aed3SPierre Pronchery=item *
801b077aed3SPierre Pronchery
802b077aed3SPierre ProncheryL<RAND_bytes(3)> and L<RAND_priv_bytes(3)>
803b077aed3SPierre Pronchery
804b077aed3SPierre Pronchery=item *
805b077aed3SPierre Pronchery
806b077aed3SPierre ProncheryL<SMIME_write_ASN1(3)>
807b077aed3SPierre Pronchery
808b077aed3SPierre Pronchery=item *
809b077aed3SPierre Pronchery
810b077aed3SPierre ProncheryL<SSL_load_client_CA_file(3)>
811b077aed3SPierre Pronchery
812b077aed3SPierre Pronchery=item *
813b077aed3SPierre Pronchery
814b077aed3SPierre ProncheryL<SSL_CTX_new(3)>
815b077aed3SPierre Pronchery
816b077aed3SPierre Pronchery=item *
817b077aed3SPierre Pronchery
818b077aed3SPierre ProncheryL<TS_RESP_CTX_new(3)>
819b077aed3SPierre Pronchery
820b077aed3SPierre Pronchery=item *
821b077aed3SPierre Pronchery
822b077aed3SPierre ProncheryL<X509_CRL_new(3)>
823b077aed3SPierre Pronchery
824b077aed3SPierre Pronchery=item *
825b077aed3SPierre Pronchery
826b077aed3SPierre ProncheryL<X509_load_cert_crl_file(3)> and L<X509_load_cert_file(3)>
827b077aed3SPierre Pronchery
828b077aed3SPierre Pronchery=item *
829b077aed3SPierre Pronchery
830b077aed3SPierre ProncheryL<X509_LOOKUP_by_subject(3)> and L<X509_LOOKUP_ctrl(3)>
831b077aed3SPierre Pronchery
832b077aed3SPierre Pronchery=item *
833b077aed3SPierre Pronchery
834b077aed3SPierre ProncheryL<X509_NAME_hash(3)>
835b077aed3SPierre Pronchery
836b077aed3SPierre Pronchery=item *
837b077aed3SPierre Pronchery
838b077aed3SPierre ProncheryL<X509_new(3)>
839b077aed3SPierre Pronchery
840b077aed3SPierre Pronchery=item *
841b077aed3SPierre Pronchery
842b077aed3SPierre ProncheryL<X509_REQ_new(3)> and L<X509_REQ_verify(3)>
843b077aed3SPierre Pronchery
844b077aed3SPierre Pronchery=item *
845b077aed3SPierre Pronchery
846b077aed3SPierre ProncheryL<X509_STORE_CTX_new(3)>, L<X509_STORE_set_default_paths(3)>, L<X509_STORE_load_file(3)>,
847b077aed3SPierre ProncheryL<X509_STORE_load_locations(3)> and L<X509_STORE_load_store(3)>
848b077aed3SPierre Pronchery
849b077aed3SPierre Pronchery=back
850b077aed3SPierre Pronchery
851b077aed3SPierre Pronchery=head4 New functions that use a Library context
852b077aed3SPierre Pronchery
853b077aed3SPierre ProncheryThe following functions can be passed a library context if required.
854b077aed3SPierre ProncheryPassing NULL will use the default library context.
855b077aed3SPierre Pronchery
856b077aed3SPierre Pronchery=over 4
857b077aed3SPierre Pronchery
858b077aed3SPierre Pronchery=item *
859b077aed3SPierre Pronchery
860b077aed3SPierre ProncheryL<BIO_new_from_core_bio(3)>
861b077aed3SPierre Pronchery
862b077aed3SPierre Pronchery=item *
863b077aed3SPierre Pronchery
864b077aed3SPierre ProncheryL<EVP_ASYM_CIPHER_fetch(3)> and L<EVP_ASYM_CIPHER_do_all_provided(3)>
865b077aed3SPierre Pronchery
866b077aed3SPierre Pronchery=item *
867b077aed3SPierre Pronchery
868b077aed3SPierre ProncheryL<EVP_CIPHER_fetch(3)> and L<EVP_CIPHER_do_all_provided(3)>
869b077aed3SPierre Pronchery
870b077aed3SPierre Pronchery=item *
871b077aed3SPierre Pronchery
872b077aed3SPierre ProncheryL<EVP_default_properties_enable_fips(3)> and
873b077aed3SPierre ProncheryL<EVP_default_properties_is_fips_enabled(3)>
874b077aed3SPierre Pronchery
875b077aed3SPierre Pronchery=item *
876b077aed3SPierre Pronchery
877b077aed3SPierre ProncheryL<EVP_KDF_fetch(3)> and L<EVP_KDF_do_all_provided(3)>
878b077aed3SPierre Pronchery
879b077aed3SPierre Pronchery=item *
880b077aed3SPierre Pronchery
881b077aed3SPierre ProncheryL<EVP_KEM_fetch(3)> and L<EVP_KEM_do_all_provided(3)>
882b077aed3SPierre Pronchery
883b077aed3SPierre Pronchery=item *
884b077aed3SPierre Pronchery
885b077aed3SPierre ProncheryL<EVP_KEYEXCH_fetch(3)> and L<EVP_KEYEXCH_do_all_provided(3)>
886b077aed3SPierre Pronchery
887b077aed3SPierre Pronchery=item *
888b077aed3SPierre Pronchery
889b077aed3SPierre ProncheryL<EVP_KEYMGMT_fetch(3)> and L<EVP_KEYMGMT_do_all_provided(3)>
890b077aed3SPierre Pronchery
891b077aed3SPierre Pronchery=item *
892b077aed3SPierre Pronchery
893b077aed3SPierre ProncheryL<EVP_MAC_fetch(3)> and L<EVP_MAC_do_all_provided(3)>
894b077aed3SPierre Pronchery
895b077aed3SPierre Pronchery=item *
896b077aed3SPierre Pronchery
897b077aed3SPierre ProncheryL<EVP_MD_fetch(3)> and L<EVP_MD_do_all_provided(3)>
898b077aed3SPierre Pronchery
899b077aed3SPierre Pronchery=item *
900b077aed3SPierre Pronchery
901b077aed3SPierre ProncheryL<EVP_PKEY_CTX_new_from_pkey(3)>
902b077aed3SPierre Pronchery
903b077aed3SPierre Pronchery=item *
904b077aed3SPierre Pronchery
905b077aed3SPierre ProncheryL<EVP_PKEY_Q_keygen(3)>
906b077aed3SPierre Pronchery
907b077aed3SPierre Pronchery=item *
908b077aed3SPierre Pronchery
909b077aed3SPierre ProncheryL<EVP_Q_mac(3)> and L<EVP_Q_digest(3)>
910b077aed3SPierre Pronchery
911b077aed3SPierre Pronchery=item *
912b077aed3SPierre Pronchery
913b077aed3SPierre ProncheryL<EVP_RAND(3)> and L<EVP_RAND_do_all_provided(3)>
914b077aed3SPierre Pronchery
915b077aed3SPierre Pronchery=item *
916b077aed3SPierre Pronchery
917b077aed3SPierre ProncheryL<EVP_set_default_properties(3)>
918b077aed3SPierre Pronchery
919b077aed3SPierre Pronchery=item *
920b077aed3SPierre Pronchery
921b077aed3SPierre ProncheryL<EVP_SIGNATURE_fetch(3)> and L<EVP_SIGNATURE_do_all_provided(3)>
922b077aed3SPierre Pronchery
923b077aed3SPierre Pronchery=item *
924b077aed3SPierre Pronchery
925b077aed3SPierre ProncheryL<OSSL_CMP_CTX_new(3)> and L<OSSL_CMP_SRV_CTX_new(3)>
926b077aed3SPierre Pronchery
927b077aed3SPierre Pronchery=item *
928b077aed3SPierre Pronchery
929b077aed3SPierre ProncheryL<OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(3)>
930b077aed3SPierre Pronchery
931b077aed3SPierre Pronchery=item *
932b077aed3SPierre Pronchery
933b077aed3SPierre ProncheryL<OSSL_CRMF_MSG_create_popo(3)> and L<OSSL_CRMF_MSGS_verify_popo(3)>
934b077aed3SPierre Pronchery
935b077aed3SPierre Pronchery=item *
936b077aed3SPierre Pronchery
937b077aed3SPierre ProncheryL<OSSL_CRMF_pbm_new(3)> and L<OSSL_CRMF_pbmp_new(3)>
938b077aed3SPierre Pronchery
939b077aed3SPierre Pronchery=item *
940b077aed3SPierre Pronchery
941b077aed3SPierre ProncheryL<OSSL_DECODER_CTX_add_extra(3)> and L<OSSL_DECODER_CTX_new_for_pkey(3)>
942b077aed3SPierre Pronchery
943b077aed3SPierre Pronchery=item *
944b077aed3SPierre Pronchery
945b077aed3SPierre ProncheryL<OSSL_DECODER_fetch(3)> and L<OSSL_DECODER_do_all_provided(3)>
946b077aed3SPierre Pronchery
947b077aed3SPierre Pronchery=item *
948b077aed3SPierre Pronchery
949b077aed3SPierre ProncheryL<OSSL_ENCODER_CTX_add_extra(3)>
950b077aed3SPierre Pronchery
951b077aed3SPierre Pronchery=item *
952b077aed3SPierre Pronchery
953b077aed3SPierre ProncheryL<OSSL_ENCODER_fetch(3)> and L<OSSL_ENCODER_do_all_provided(3)>
954b077aed3SPierre Pronchery
955b077aed3SPierre Pronchery=item *
956b077aed3SPierre Pronchery
957b077aed3SPierre ProncheryL<OSSL_LIB_CTX_free(3)>, L<OSSL_LIB_CTX_load_config(3)> and L<OSSL_LIB_CTX_set0_default(3)>
958b077aed3SPierre Pronchery
959b077aed3SPierre Pronchery=item *
960b077aed3SPierre Pronchery
961b077aed3SPierre ProncheryL<OSSL_PROVIDER_add_builtin(3)>, L<OSSL_PROVIDER_available(3)>,
962b077aed3SPierre ProncheryL<OSSL_PROVIDER_do_all(3)>, L<OSSL_PROVIDER_load(3)>,
963b077aed3SPierre ProncheryL<OSSL_PROVIDER_set_default_search_path(3)> and L<OSSL_PROVIDER_try_load(3)>
964b077aed3SPierre Pronchery
965b077aed3SPierre Pronchery=item *
966b077aed3SPierre Pronchery
967b077aed3SPierre ProncheryL<OSSL_SELF_TEST_get_callback(3)> and L<OSSL_SELF_TEST_set_callback(3)>
968b077aed3SPierre Pronchery
969b077aed3SPierre Pronchery=item *
970b077aed3SPierre Pronchery
971b077aed3SPierre ProncheryL<OSSL_STORE_attach(3)>
972b077aed3SPierre Pronchery
973b077aed3SPierre Pronchery=item *
974b077aed3SPierre Pronchery
975b077aed3SPierre ProncheryL<OSSL_STORE_LOADER_fetch(3)> and L<OSSL_STORE_LOADER_do_all_provided(3)>
976b077aed3SPierre Pronchery
977b077aed3SPierre Pronchery=item *
978b077aed3SPierre Pronchery
979b077aed3SPierre ProncheryL<RAND_get0_primary(3)>, L<RAND_get0_private(3)>, L<RAND_get0_public(3)>,
980b077aed3SPierre ProncheryL<RAND_set_DRBG_type(3)> and L<RAND_set_seed_source_type(3)>
981b077aed3SPierre Pronchery
982b077aed3SPierre Pronchery=back
983b077aed3SPierre Pronchery
984b077aed3SPierre Pronchery=head3 Providers
985b077aed3SPierre Pronchery
986b077aed3SPierre ProncheryProviders are described in detail here L<crypto(7)/Providers>.
987b077aed3SPierre ProncherySee also L<crypto(7)/OPENSSL PROVIDERS>.
988b077aed3SPierre Pronchery
989b077aed3SPierre Pronchery=head3 Fetching algorithms and property queries
990b077aed3SPierre Pronchery
991b077aed3SPierre ProncheryImplicit and Explicit Fetching is described in detail here
992b077aed3SPierre ProncheryL<crypto(7)/ALGORITHM FETCHING>.
993b077aed3SPierre Pronchery
994b077aed3SPierre Pronchery=head3 Mapping EVP controls and flags to provider L<OSSL_PARAM(3)> parameters
995b077aed3SPierre Pronchery
996b077aed3SPierre ProncheryThe existing functions for controls (such as L<EVP_CIPHER_CTX_ctrl(3)>) and
997b077aed3SPierre Proncherymanipulating flags (such as L<EVP_MD_CTX_set_flags(3)>)internally use
998b077aed3SPierre ProncheryB<OSSL_PARAMS> to pass information to/from provider objects.
999b077aed3SPierre ProncherySee L<OSSL_PARAM(3)> for additional information related to parameters.
1000b077aed3SPierre Pronchery
1001b077aed3SPierre ProncheryFor ciphers see L<EVP_EncryptInit(3)/CONTROLS>, L<EVP_EncryptInit(3)/FLAGS> and
1002b077aed3SPierre ProncheryL<EVP_EncryptInit(3)/PARAMETERS>.
1003b077aed3SPierre Pronchery
1004b077aed3SPierre ProncheryFor digests see L<EVP_DigestInit(3)/CONTROLS>, L<EVP_DigestInit(3)/FLAGS> and
1005b077aed3SPierre ProncheryL<EVP_DigestInit(3)/PARAMETERS>.
1006b077aed3SPierre Pronchery
1007b077aed3SPierre Pronchery=head3 Deprecation of Low Level Functions
1008b077aed3SPierre Pronchery
1009b077aed3SPierre ProncheryA significant number of APIs have been deprecated in OpenSSL 3.0.
1010b077aed3SPierre ProncheryThis section describes some common categories of deprecations.
1011b077aed3SPierre ProncherySee L</Deprecated function mappings> for the list of deprecated functions
1012b077aed3SPierre Proncherythat refer to these categories.
1013b077aed3SPierre Pronchery
1014b077aed3SPierre Pronchery=head4 Providers are a replacement for engines and low-level method overrides
1015b077aed3SPierre Pronchery
1016b077aed3SPierre ProncheryAny accessor that uses an ENGINE is deprecated (such as EVP_PKEY_set1_engine()).
1017b077aed3SPierre ProncheryApplications using engines should instead use providers.
1018b077aed3SPierre Pronchery
1019aa795734SPierre ProncheryBefore providers were added algorithms were overridden by changing the methods
1020b077aed3SPierre Proncheryused by algorithms. All these methods such as RSA_new_method() and RSA_meth_new()
1021b077aed3SPierre Proncheryare now deprecated and can be replaced by using providers instead.
1022b077aed3SPierre Pronchery
1023b077aed3SPierre Pronchery=head4 Deprecated i2d and d2i functions for low-level key types
1024b077aed3SPierre Pronchery
1025b077aed3SPierre ProncheryAny i2d and d2i functions such as d2i_DHparams() that take a low-level key type
1026b077aed3SPierre Proncheryhave been deprecated. Applications should instead use the L<OSSL_DECODER(3)> and
1027b077aed3SPierre ProncheryL<OSSL_ENCODER(3)> APIs to read and write files.
1028b077aed3SPierre ProncherySee L<d2i_RSAPrivateKey(3)/Migration> for further details.
1029b077aed3SPierre Pronchery
1030b077aed3SPierre Pronchery=head4 Deprecated low-level key object getters and setters
1031b077aed3SPierre Pronchery
1032b077aed3SPierre ProncheryApplications that set or get low-level key objects (such as EVP_PKEY_set1_DH()
1033b077aed3SPierre Proncheryor EVP_PKEY_get0()) should instead use the OSSL_ENCODER
1034b077aed3SPierre Pronchery(See L<OSSL_ENCODER_to_bio(3)>) or OSSL_DECODER (See L<OSSL_DECODER_from_bio(3)>)
1035b077aed3SPierre ProncheryAPIs, or alternatively use L<EVP_PKEY_fromdata(3)> or L<EVP_PKEY_todata(3)>.
1036b077aed3SPierre Pronchery
1037b077aed3SPierre Pronchery=head4 Deprecated low-level key parameter getters
1038b077aed3SPierre Pronchery
1039b077aed3SPierre ProncheryFunctions that access low-level objects directly such as L<RSA_get0_n(3)> are now
1040b077aed3SPierre Proncherydeprecated. Applications should use one of L<EVP_PKEY_get_bn_param(3)>,
1041b077aed3SPierre ProncheryL<EVP_PKEY_get_int_param(3)>, l<EVP_PKEY_get_size_t_param(3)>,
1042b077aed3SPierre ProncheryL<EVP_PKEY_get_utf8_string_param(3)>, L<EVP_PKEY_get_octet_string_param(3)> or
1043b077aed3SPierre ProncheryL<EVP_PKEY_get_params(3)> to access fields from an EVP_PKEY.
1044b077aed3SPierre ProncheryGettable parameters are listed in L<EVP_PKEY-RSA(7)/Common RSA parameters>,
1045b077aed3SPierre ProncheryL<EVP_PKEY-DH(7)/DH parameters>, L<EVP_PKEY-DSA(7)/DSA parameters>,
1046b077aed3SPierre ProncheryL<EVP_PKEY-FFC(7)/FFC parameters>, L<EVP_PKEY-EC(7)/Common EC parameters> and
1047b077aed3SPierre ProncheryL<EVP_PKEY-X25519(7)/Common X25519, X448, ED25519 and ED448 parameters>.
1048b077aed3SPierre ProncheryApplications may also use L<EVP_PKEY_todata(3)> to return all fields.
1049b077aed3SPierre Pronchery
1050b077aed3SPierre Pronchery=head4 Deprecated low-level key parameter setters
1051b077aed3SPierre Pronchery
1052b077aed3SPierre ProncheryFunctions that access low-level objects directly such as L<RSA_set0_crt_params(3)>
1053b077aed3SPierre Proncheryare now deprecated. Applications should use L<EVP_PKEY_fromdata(3)> to create
1054b077aed3SPierre Proncherynew keys from user provided key data. Keys should be immutable once they are
1055b077aed3SPierre Proncherycreated, so if required the user may use L<EVP_PKEY_todata(3)>, L<OSSL_PARAM_merge(3)>,
1056b077aed3SPierre Proncheryand L<EVP_PKEY_fromdata(3)> to create a modified key.
1057b077aed3SPierre ProncherySee L<EVP_PKEY-DH(7)/Examples> for more information.
1058b077aed3SPierre ProncherySee L</Deprecated low-level key generation functions> for information on
1059b077aed3SPierre Proncherygenerating a key using parameters.
1060b077aed3SPierre Pronchery
1061b077aed3SPierre Pronchery=head4 Deprecated low-level object creation
1062b077aed3SPierre Pronchery
1063b077aed3SPierre ProncheryLow-level objects were created using methods such as L<RSA_new(3)>,
1064b077aed3SPierre ProncheryL<RSA_up_ref(3)> and L<RSA_free(3)>. Applications should instead use the
1065b077aed3SPierre Proncheryhigh-level EVP_PKEY APIs, e.g. L<EVP_PKEY_new(3)>, L<EVP_PKEY_up_ref(3)> and
1066b077aed3SPierre ProncheryL<EVP_PKEY_free(3)>.
1067b077aed3SPierre ProncherySee also L<EVP_PKEY_CTX_new_from_name(3)> and L<EVP_PKEY_CTX_new_from_pkey(3)>.
1068b077aed3SPierre Pronchery
1069b077aed3SPierre ProncheryEVP_PKEYs may be created in a variety of ways:
1070b077aed3SPierre ProncherySee also L</Deprecated low-level key generation functions>,
1071b077aed3SPierre ProncheryL</Deprecated low-level key reading and writing functions> and
1072b077aed3SPierre ProncheryL</Deprecated low-level key parameter setters>.
1073b077aed3SPierre Pronchery
1074b077aed3SPierre Pronchery=head4 Deprecated low-level encryption functions
1075b077aed3SPierre Pronchery
1076b077aed3SPierre ProncheryLow-level encryption functions such as L<AES_encrypt(3)> and L<AES_decrypt(3)>
1077b077aed3SPierre Proncheryhave been informally discouraged from use for a long time. Applications should
1078b077aed3SPierre Proncheryinstead use the high level EVP APIs L<EVP_EncryptInit_ex(3)>,
1079b077aed3SPierre ProncheryL<EVP_EncryptUpdate(3)>, and L<EVP_EncryptFinal_ex(3)> or
1080b077aed3SPierre ProncheryL<EVP_DecryptInit_ex(3)>, L<EVP_DecryptUpdate(3)> and L<EVP_DecryptFinal_ex(3)>.
1081b077aed3SPierre Pronchery
1082b077aed3SPierre Pronchery=head4 Deprecated low-level digest functions
1083b077aed3SPierre Pronchery
1084b077aed3SPierre ProncheryUse of low-level digest functions such as L<SHA1_Init(3)> have been
1085b077aed3SPierre Proncheryinformally discouraged from use for a long time.  Applications should instead
1086b077aed3SPierre Proncheryuse the the high level EVP APIs L<EVP_DigestInit_ex(3)>, L<EVP_DigestUpdate(3)>
1087b077aed3SPierre Proncheryand L<EVP_DigestFinal_ex(3)>, or the quick one-shot L<EVP_Q_digest(3)>.
1088b077aed3SPierre Pronchery
1089b077aed3SPierre ProncheryNote that the functions L<SHA1(3)>, L<SHA224(3)>, L<SHA256(3)>, L<SHA384(3)>
1090b077aed3SPierre Proncheryand L<SHA512(3)> have changed to macros that use L<EVP_Q_digest(3)>.
1091b077aed3SPierre Pronchery
1092b077aed3SPierre Pronchery=head4 Deprecated low-level signing functions
1093b077aed3SPierre Pronchery
1094b077aed3SPierre ProncheryUse of low-level signing functions such as L<DSA_sign(3)> have been
1095b077aed3SPierre Proncheryinformally discouraged for a long time. Instead applications should use
1096b077aed3SPierre ProncheryL<EVP_DigestSign(3)> and L<EVP_DigestVerify(3)>.
1097b077aed3SPierre ProncherySee also L<EVP_SIGNATURE-RSA(7)>, L<EVP_SIGNATURE-DSA(7)>,
1098b077aed3SPierre ProncheryL<EVP_SIGNATURE-ECDSA(7)> and L<EVP_SIGNATURE-ED25519(7)>.
1099b077aed3SPierre Pronchery
1100b077aed3SPierre Pronchery=head4 Deprecated low-level MAC functions
1101b077aed3SPierre Pronchery
1102b077aed3SPierre ProncheryLow-level mac functions such as L<CMAC_Init(3)> are deprecated.
1103b077aed3SPierre ProncheryApplications should instead use the new L<EVP_MAC(3)> interface, using
1104b077aed3SPierre ProncheryL<EVP_MAC_CTX_new(3)>, L<EVP_MAC_CTX_free(3)>, L<EVP_MAC_init(3)>,
1105b077aed3SPierre ProncheryL<EVP_MAC_update(3)> and L<EVP_MAC_final(3)> or the single-shot MAC function
1106b077aed3SPierre ProncheryL<EVP_Q_mac(3)>.
1107b077aed3SPierre ProncherySee L<EVP_MAC(3)>, L<EVP_MAC-HMAC(7)>, L<EVP_MAC-CMAC(7)>, L<EVP_MAC-GMAC(7)>,
1108b077aed3SPierre ProncheryL<EVP_MAC-KMAC(7)>, L<EVP_MAC-BLAKE2(7)>, L<EVP_MAC-Poly1305(7)> and
1109b077aed3SPierre ProncheryL<EVP_MAC-Siphash(7)> for additional information.
1110b077aed3SPierre Pronchery
1111b077aed3SPierre ProncheryNote that the one-shot method HMAC() is still available for compatibility purposes,
1112b077aed3SPierre Proncherybut this can also be replaced by using EVP_Q_MAC if a library context is required.
1113b077aed3SPierre Pronchery
1114b077aed3SPierre Pronchery=head4 Deprecated low-level validation functions
1115b077aed3SPierre Pronchery
1116b077aed3SPierre ProncheryLow-level validation functions such as L<DH_check(3)> have been informally
1117b077aed3SPierre Proncherydiscouraged from use for a long time. Applications should instead use the high-level
1118b077aed3SPierre ProncheryEVP_PKEY APIs such as L<EVP_PKEY_check(3)>, L<EVP_PKEY_param_check(3)>,
1119b077aed3SPierre ProncheryL<EVP_PKEY_param_check_quick(3)>, L<EVP_PKEY_public_check(3)>,
1120b077aed3SPierre ProncheryL<EVP_PKEY_public_check_quick(3)>, L<EVP_PKEY_private_check(3)>,
1121b077aed3SPierre Proncheryand L<EVP_PKEY_pairwise_check(3)>.
1122b077aed3SPierre Pronchery
1123b077aed3SPierre Pronchery=head4 Deprecated low-level key exchange functions
1124b077aed3SPierre Pronchery
1125b077aed3SPierre ProncheryMany low-level functions have been informally discouraged from use for a long
1126b077aed3SPierre Proncherytime. Applications should instead use L<EVP_PKEY_derive(3)>.
1127b077aed3SPierre ProncherySee L<EVP_KEYEXCH-DH(7)>, L<EVP_KEYEXCH-ECDH(7)> and L<EVP_KEYEXCH-X25519(7)>.
1128b077aed3SPierre Pronchery
1129b077aed3SPierre Pronchery=head4 Deprecated low-level key generation functions
1130b077aed3SPierre Pronchery
1131b077aed3SPierre ProncheryMany low-level functions have been informally discouraged from use for a long
1132b077aed3SPierre Proncherytime. Applications should instead use L<EVP_PKEY_keygen_init(3)> and
1133b077aed3SPierre ProncheryL<EVP_PKEY_generate(3)> as described in L<EVP_PKEY-DSA(7)>, L<EVP_PKEY-DH(7)>,
1134b077aed3SPierre ProncheryL<EVP_PKEY-RSA(7)>, L<EVP_PKEY-EC(7)> and L<EVP_PKEY-X25519(7)>.
1135b077aed3SPierre ProncheryThe 'quick' one-shot function L<EVP_PKEY_Q_keygen(3)> and macros for the most
1136b077aed3SPierre Proncherycommon cases: <EVP_RSA_gen(3)> and L<EVP_EC_gen(3)> may also be used.
1137b077aed3SPierre Pronchery
1138b077aed3SPierre Pronchery=head4 Deprecated low-level key reading and writing functions
1139b077aed3SPierre Pronchery
1140b077aed3SPierre ProncheryUse of low-level objects (such as DSA) has been informally discouraged from use
1141b077aed3SPierre Proncheryfor a long time. Functions to read and write these low-level objects (such as
1142b077aed3SPierre ProncheryPEM_read_DSA_PUBKEY()) should be replaced. Applications should instead use
1143b077aed3SPierre ProncheryL<OSSL_ENCODER_to_bio(3)> and L<OSSL_DECODER_from_bio(3)>.
1144b077aed3SPierre Pronchery
1145b077aed3SPierre Pronchery=head4 Deprecated low-level key printing functions
1146b077aed3SPierre Pronchery
1147b077aed3SPierre ProncheryUse of low-level objects (such as DSA) has been informally discouraged from use
1148b077aed3SPierre Proncheryfor a long time. Functions to print these low-level objects such as
1149b077aed3SPierre ProncheryDSA_print() should be replaced with the equivalent EVP_PKEY functions.
1150b077aed3SPierre ProncheryApplication should use one of L<EVP_PKEY_print_public(3)>,
1151b077aed3SPierre ProncheryL<EVP_PKEY_print_private(3)>, L<EVP_PKEY_print_params(3)>,
1152b077aed3SPierre ProncheryL<EVP_PKEY_print_public_fp(3)>, L<EVP_PKEY_print_private_fp(3)> or
1153b077aed3SPierre ProncheryL<EVP_PKEY_print_params_fp(3)>. Note that internally these use
1154b077aed3SPierre ProncheryL<OSSL_ENCODER_to_bio(3)> and L<OSSL_DECODER_from_bio(3)>.
1155b077aed3SPierre Pronchery
1156b077aed3SPierre Pronchery=head3 Deprecated function mappings
1157b077aed3SPierre Pronchery
1158b077aed3SPierre ProncheryThe following functions have been deprecated in 3.0.
1159b077aed3SPierre Pronchery
1160b077aed3SPierre Pronchery=over 4
1161b077aed3SPierre Pronchery
1162b077aed3SPierre Pronchery=item *
1163b077aed3SPierre Pronchery
1164b077aed3SPierre ProncheryAES_bi_ige_encrypt() and AES_ige_encrypt()
1165b077aed3SPierre Pronchery
1166b077aed3SPierre ProncheryThere is no replacement for the IGE functions. New code should not use these modes.
1167b077aed3SPierre ProncheryThese undocumented functions were never integrated into the EVP layer.
1168b077aed3SPierre ProncheryThey implemented the AES Infinite Garble Extension (IGE) mode and AES
1169b077aed3SPierre ProncheryBi-directional IGE mode. These modes were never formally standardised and
1170b077aed3SPierre Proncheryusage of these functions is believed to be very small. In particular
1171b077aed3SPierre ProncheryAES_bi_ige_encrypt() has a known bug. It accepts 2 AES keys, but only one
1172b077aed3SPierre Proncheryis ever used. The security implications are believed to be minimal, but
1173b077aed3SPierre Proncherythis issue was never fixed for backwards compatibility reasons.
1174b077aed3SPierre Pronchery
1175b077aed3SPierre Pronchery=item *
1176b077aed3SPierre Pronchery
1177b077aed3SPierre ProncheryAES_encrypt(), AES_decrypt(), AES_set_encrypt_key(), AES_set_decrypt_key(),
1178b077aed3SPierre ProncheryAES_cbc_encrypt(), AES_cfb128_encrypt(), AES_cfb1_encrypt(), AES_cfb8_encrypt(),
1179b077aed3SPierre ProncheryAES_ecb_encrypt(), AES_ofb128_encrypt()
1180b077aed3SPierre Pronchery
1181b077aed3SPierre Pronchery=item *
1182b077aed3SPierre Pronchery
1183b077aed3SPierre ProncheryAES_unwrap_key(), AES_wrap_key()
1184b077aed3SPierre Pronchery
1185b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>
1186b077aed3SPierre Pronchery
1187b077aed3SPierre Pronchery=item *
1188b077aed3SPierre Pronchery
1189b077aed3SPierre ProncheryAES_options()
1190b077aed3SPierre Pronchery
1191b077aed3SPierre ProncheryThere is no replacement. It returned a string indicating if the AES code was unrolled.
1192b077aed3SPierre Pronchery
1193b077aed3SPierre Pronchery=item *
1194b077aed3SPierre Pronchery
1195b077aed3SPierre ProncheryASN1_digest(), ASN1_sign(), ASN1_verify()
1196b077aed3SPierre Pronchery
1197b077aed3SPierre ProncheryThere are no replacements. These old functions are not used, and could be
1198b077aed3SPierre Proncherydisabled with the macro NO_ASN1_OLD since OpenSSL 0.9.7.
1199b077aed3SPierre Pronchery
1200b077aed3SPierre Pronchery=item *
1201b077aed3SPierre Pronchery
1202b077aed3SPierre ProncheryASN1_STRING_length_set()
1203b077aed3SPierre Pronchery
1204b077aed3SPierre ProncheryUse L<ASN1_STRING_set(3)> or L<ASN1_STRING_set0(3)> instead.
1205b077aed3SPierre ProncheryThis was a potentially unsafe function that could change the bounds of a
1206b077aed3SPierre Proncherypreviously passed in pointer.
1207b077aed3SPierre Pronchery
1208b077aed3SPierre Pronchery=item *
1209b077aed3SPierre Pronchery
1210b077aed3SPierre ProncheryBF_encrypt(), BF_decrypt(), BF_set_key(), BF_cbc_encrypt(), BF_cfb64_encrypt(),
1211b077aed3SPierre ProncheryBF_ecb_encrypt(), BF_ofb64_encrypt()
1212b077aed3SPierre Pronchery
1213b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1214b077aed3SPierre ProncheryThe Blowfish algorithm has been moved to the L<Legacy Provider|/Legacy Algorithms>.
1215b077aed3SPierre Pronchery
1216b077aed3SPierre Pronchery=item *
1217b077aed3SPierre Pronchery
1218b077aed3SPierre ProncheryBF_options()
1219b077aed3SPierre Pronchery
1220b077aed3SPierre ProncheryThere is no replacement. This option returned a constant string.
1221b077aed3SPierre Pronchery
1222b077aed3SPierre Pronchery=item *
1223b077aed3SPierre Pronchery
1224b077aed3SPierre ProncheryBIO_get_callback(), BIO_set_callback(), BIO_debug_callback()
1225b077aed3SPierre Pronchery
1226b077aed3SPierre ProncheryUse the respective non-deprecated _ex() functions.
1227b077aed3SPierre Pronchery
1228b077aed3SPierre Pronchery=item *
1229b077aed3SPierre Pronchery
1230b077aed3SPierre ProncheryBN_is_prime_ex(), BN_is_prime_fasttest_ex()
1231b077aed3SPierre Pronchery
1232b077aed3SPierre ProncheryUse L<BN_check_prime(3)> which avoids possible misuse and always uses at least
1233b077aed3SPierre Pronchery64 rounds of the Miller-Rabin primality test.
1234b077aed3SPierre Pronchery
1235b077aed3SPierre Pronchery=item *
1236b077aed3SPierre Pronchery
1237b077aed3SPierre ProncheryBN_pseudo_rand(), BN_pseudo_rand_range()
1238b077aed3SPierre Pronchery
1239b077aed3SPierre ProncheryUse L<BN_rand(3)> and L<BN_rand_range(3)>.
1240b077aed3SPierre Pronchery
1241b077aed3SPierre Pronchery=item *
1242b077aed3SPierre Pronchery
1243b077aed3SPierre ProncheryBN_X931_derive_prime_ex(), BN_X931_generate_prime_ex(), BN_X931_generate_Xpq()
1244b077aed3SPierre Pronchery
1245b077aed3SPierre ProncheryThere are no replacements for these low-level functions. They were used internally
1246b077aed3SPierre Proncheryby RSA_X931_derive_ex() and RSA_X931_generate_key_ex() which are also deprecated.
1247b077aed3SPierre ProncheryUse L<EVP_PKEY_keygen(3)> instead.
1248b077aed3SPierre Pronchery
1249b077aed3SPierre Pronchery=item *
1250b077aed3SPierre Pronchery
1251b077aed3SPierre ProncheryCamellia_encrypt(), Camellia_decrypt(), Camellia_set_key(),
1252b077aed3SPierre ProncheryCamellia_cbc_encrypt(), Camellia_cfb128_encrypt(), Camellia_cfb1_encrypt(),
1253b077aed3SPierre ProncheryCamellia_cfb8_encrypt(), Camellia_ctr128_encrypt(), Camellia_ecb_encrypt(),
1254b077aed3SPierre ProncheryCamellia_ofb128_encrypt()
1255b077aed3SPierre Pronchery
1256b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1257b077aed3SPierre Pronchery
1258b077aed3SPierre Pronchery=item *
1259b077aed3SPierre Pronchery
1260b077aed3SPierre ProncheryCAST_encrypt(), CAST_decrypt(), CAST_set_key(), CAST_cbc_encrypt(),
1261b077aed3SPierre ProncheryCAST_cfb64_encrypt(), CAST_ecb_encrypt(), CAST_ofb64_encrypt()
1262b077aed3SPierre Pronchery
1263b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1264b077aed3SPierre ProncheryThe CAST algorithm has been moved to the L<Legacy Provider|/Legacy Algorithms>.
1265b077aed3SPierre Pronchery
1266b077aed3SPierre Pronchery=item *
1267b077aed3SPierre Pronchery
1268b077aed3SPierre ProncheryCMAC_CTX_new(), CMAC_CTX_cleanup(), CMAC_CTX_copy(), CMAC_CTX_free(),
1269b077aed3SPierre ProncheryCMAC_CTX_get0_cipher_ctx()
1270b077aed3SPierre Pronchery
1271b077aed3SPierre ProncherySee L</Deprecated low-level MAC functions>.
1272b077aed3SPierre Pronchery
1273b077aed3SPierre Pronchery=item *
1274b077aed3SPierre Pronchery
1275b077aed3SPierre ProncheryCMAC_Init(), CMAC_Update(), CMAC_Final(), CMAC_resume()
1276b077aed3SPierre Pronchery
1277b077aed3SPierre ProncherySee L</Deprecated low-level MAC functions>.
1278b077aed3SPierre Pronchery
1279b077aed3SPierre Pronchery=item *
1280b077aed3SPierre Pronchery
1281b077aed3SPierre ProncheryCRYPTO_mem_ctrl(), CRYPTO_mem_debug_free(), CRYPTO_mem_debug_malloc(),
1282b077aed3SPierre ProncheryCRYPTO_mem_debug_pop(), CRYPTO_mem_debug_push(), CRYPTO_mem_debug_realloc(),
1283b077aed3SPierre ProncheryCRYPTO_mem_leaks(), CRYPTO_mem_leaks_cb(), CRYPTO_mem_leaks_fp(),
1284b077aed3SPierre ProncheryCRYPTO_set_mem_debug()
1285b077aed3SPierre Pronchery
1286b077aed3SPierre ProncheryMemory-leak checking has been deprecated in favor of more modern development
1287b077aed3SPierre Proncherytools, such as compiler memory and leak sanitizers or Valgrind.
1288b077aed3SPierre Pronchery
1289b077aed3SPierre Pronchery=item *
1290b077aed3SPierre Pronchery
1291b077aed3SPierre ProncheryCRYPTO_cts128_encrypt_block(), CRYPTO_cts128_encrypt(),
1292b077aed3SPierre ProncheryCRYPTO_cts128_decrypt_block(), CRYPTO_cts128_decrypt(),
1293b077aed3SPierre ProncheryCRYPTO_nistcts128_encrypt_block(), CRYPTO_nistcts128_encrypt(),
1294b077aed3SPierre ProncheryCRYPTO_nistcts128_decrypt_block(), CRYPTO_nistcts128_decrypt()
1295b077aed3SPierre Pronchery
1296b077aed3SPierre ProncheryUse the higher level functions EVP_CipherInit_ex2(), EVP_CipherUpdate() and
1297b077aed3SPierre ProncheryEVP_CipherFinal_ex() instead.
1298b077aed3SPierre ProncherySee the "cts_mode" parameter in
1299b077aed3SPierre ProncheryL<EVP_EncryptInit(3)/Gettable and Settable EVP_CIPHER_CTX parameters>.
1300b077aed3SPierre ProncherySee L<EVP_EncryptInit(3)/EXAMPLES> for a AES-256-CBC-CTS example.
1301b077aed3SPierre Pronchery
1302b077aed3SPierre Pronchery=item *
1303b077aed3SPierre Pronchery
1304b077aed3SPierre Proncheryd2i_DHparams(), d2i_DHxparams(), d2i_DSAparams(), d2i_DSAPrivateKey(),
1305b077aed3SPierre Proncheryd2i_DSAPrivateKey_bio(), d2i_DSAPrivateKey_fp(), d2i_DSA_PUBKEY(),
1306b077aed3SPierre Proncheryd2i_DSA_PUBKEY_bio(), d2i_DSA_PUBKEY_fp(), d2i_DSAPublicKey(),
1307b077aed3SPierre Proncheryd2i_ECParameters(), d2i_ECPrivateKey(), d2i_ECPrivateKey_bio(),
1308b077aed3SPierre Proncheryd2i_ECPrivateKey_fp(), d2i_EC_PUBKEY(), d2i_EC_PUBKEY_bio(),
1309*44096ebdSEnji Cooperd2i_EC_PUBKEY_fp(), d2i_RSAPrivateKey(),
1310b077aed3SPierre Proncheryd2i_RSAPrivateKey_bio(), d2i_RSAPrivateKey_fp(), d2i_RSA_PUBKEY(),
1311b077aed3SPierre Proncheryd2i_RSA_PUBKEY_bio(), d2i_RSA_PUBKEY_fp(), d2i_RSAPublicKey(),
1312b077aed3SPierre Proncheryd2i_RSAPublicKey_bio(), d2i_RSAPublicKey_fp()
1313b077aed3SPierre Pronchery
1314b077aed3SPierre ProncherySee L</Deprecated i2d and d2i functions for low-level key types>
1315b077aed3SPierre Pronchery
1316b077aed3SPierre Pronchery=item *
1317b077aed3SPierre Pronchery
1318*44096ebdSEnji Coopero2i_ECPublicKey()
1319*44096ebdSEnji Cooper
1320*44096ebdSEnji CooperUse L<EVP_PKEY_set1_encoded_public_key(3)>.
1321*44096ebdSEnji CooperSee L</Deprecated low-level key parameter setters>
1322*44096ebdSEnji Cooper
1323*44096ebdSEnji Cooper=item *
1324*44096ebdSEnji Cooper
1325b077aed3SPierre ProncheryDES_crypt(), DES_fcrypt(), DES_encrypt1(), DES_encrypt2(), DES_encrypt3(),
1326b077aed3SPierre ProncheryDES_decrypt3(), DES_ede3_cbc_encrypt(), DES_ede3_cfb64_encrypt(),
1327b077aed3SPierre ProncheryDES_ede3_cfb_encrypt(),DES_ede3_ofb64_encrypt(),
1328b077aed3SPierre ProncheryDES_ecb_encrypt(), DES_ecb3_encrypt(), DES_ofb64_encrypt(), DES_ofb_encrypt(),
1329b077aed3SPierre ProncheryDES_cfb64_encrypt DES_cfb_encrypt(), DES_cbc_encrypt(), DES_ncbc_encrypt(),
1330b077aed3SPierre ProncheryDES_pcbc_encrypt(), DES_xcbc_encrypt(), DES_cbc_cksum(), DES_quad_cksum(),
1331b077aed3SPierre ProncheryDES_check_key_parity(), DES_is_weak_key(), DES_key_sched(), DES_options(),
1332b077aed3SPierre ProncheryDES_random_key(), DES_set_key(), DES_set_key_checked(), DES_set_key_unchecked(),
1333b077aed3SPierre ProncheryDES_set_odd_parity(), DES_string_to_2keys(), DES_string_to_key()
1334b077aed3SPierre Pronchery
1335b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1336b077aed3SPierre ProncheryAlgorithms for "DESX-CBC", "DES-ECB", "DES-CBC", "DES-OFB", "DES-CFB",
1337b077aed3SPierre Pronchery"DES-CFB1" and "DES-CFB8" have been moved to the L<Legacy Provider|/Legacy Algorithms>.
1338b077aed3SPierre Pronchery
1339b077aed3SPierre Pronchery=item *
1340b077aed3SPierre Pronchery
1341b077aed3SPierre ProncheryDH_bits(), DH_security_bits(), DH_size()
1342b077aed3SPierre Pronchery
1343b077aed3SPierre ProncheryUse L<EVP_PKEY_get_bits(3)>, L<EVP_PKEY_get_security_bits(3)> and
1344b077aed3SPierre ProncheryL<EVP_PKEY_get_size(3)>.
1345b077aed3SPierre Pronchery
1346b077aed3SPierre Pronchery=item *
1347b077aed3SPierre Pronchery
1348b077aed3SPierre ProncheryDH_check(), DH_check_ex(), DH_check_params(), DH_check_params_ex(),
1349b077aed3SPierre ProncheryDH_check_pub_key(), DH_check_pub_key_ex()
1350b077aed3SPierre Pronchery
1351b077aed3SPierre ProncherySee L</Deprecated low-level validation functions>
1352b077aed3SPierre Pronchery
1353b077aed3SPierre Pronchery=item *
1354b077aed3SPierre Pronchery
1355b077aed3SPierre ProncheryDH_clear_flags(), DH_test_flags(), DH_set_flags()
1356b077aed3SPierre Pronchery
1357b077aed3SPierre ProncheryThe B<DH_FLAG_CACHE_MONT_P> flag has been deprecated without replacement.
1358b077aed3SPierre ProncheryThe B<DH_FLAG_TYPE_DH> and B<DH_FLAG_TYPE_DHX> have been deprecated.
1359b077aed3SPierre ProncheryUse EVP_PKEY_is_a() to determine the type of a key.
1360b077aed3SPierre ProncheryThere is no replacement for setting these flags.
1361b077aed3SPierre Pronchery
1362b077aed3SPierre Pronchery=item *
1363b077aed3SPierre Pronchery
1364b077aed3SPierre ProncheryDH_compute_key() DH_compute_key_padded()
1365b077aed3SPierre Pronchery
1366b077aed3SPierre ProncherySee L</Deprecated low-level key exchange functions>.
1367b077aed3SPierre Pronchery
1368b077aed3SPierre Pronchery=item *
1369b077aed3SPierre Pronchery
1370b077aed3SPierre ProncheryDH_new(), DH_new_by_nid(), DH_free(), DH_up_ref()
1371b077aed3SPierre Pronchery
1372b077aed3SPierre ProncherySee L</Deprecated low-level object creation>
1373b077aed3SPierre Pronchery
1374b077aed3SPierre Pronchery=item *
1375b077aed3SPierre Pronchery
1376b077aed3SPierre ProncheryDH_generate_key(), DH_generate_parameters_ex()
1377b077aed3SPierre Pronchery
1378b077aed3SPierre ProncherySee L</Deprecated low-level key generation functions>.
1379b077aed3SPierre Pronchery
1380b077aed3SPierre Pronchery=item *
1381b077aed3SPierre Pronchery
1382b077aed3SPierre ProncheryDH_get0_pqg(), DH_get0_p(), DH_get0_q(), DH_get0_g(), DH_get0_key(),
1383b077aed3SPierre ProncheryDH_get0_priv_key(), DH_get0_pub_key(), DH_get_length(), DH_get_nid()
1384b077aed3SPierre Pronchery
1385b077aed3SPierre ProncherySee L</Deprecated low-level key parameter getters>
1386b077aed3SPierre Pronchery
1387b077aed3SPierre Pronchery=item *
1388b077aed3SPierre Pronchery
1389b077aed3SPierre ProncheryDH_get_1024_160(), DH_get_2048_224(), DH_get_2048_256()
1390b077aed3SPierre Pronchery
1391b077aed3SPierre ProncheryApplications should instead set the B<OSSL_PKEY_PARAM_GROUP_NAME> as specified in
1392b077aed3SPierre ProncheryL<EVP_PKEY-DH(7)/DH parameters>) to one of "dh_1024_160", "dh_2048_224" or
1393b077aed3SPierre Pronchery"dh_2048_256" when generating a DH key.
1394b077aed3SPierre Pronchery
1395b077aed3SPierre Pronchery=item *
1396b077aed3SPierre Pronchery
1397b077aed3SPierre ProncheryDH_KDF_X9_42()
1398b077aed3SPierre Pronchery
1399b077aed3SPierre ProncheryApplications should use L<EVP_PKEY_CTX_set_dh_kdf_type(3)> instead.
1400b077aed3SPierre Pronchery
1401b077aed3SPierre Pronchery=item *
1402b077aed3SPierre Pronchery
1403b077aed3SPierre ProncheryDH_get_default_method(), DH_get0_engine(), DH_meth_*(), DH_new_method(),
1404b077aed3SPierre ProncheryDH_OpenSSL(), DH_get_ex_data(), DH_set_default_method(), DH_set_method(),
1405b077aed3SPierre ProncheryDH_set_ex_data()
1406b077aed3SPierre Pronchery
1407b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>
1408b077aed3SPierre Pronchery
1409b077aed3SPierre Pronchery=item *
1410b077aed3SPierre Pronchery
1411b077aed3SPierre ProncheryDHparams_print(), DHparams_print_fp()
1412b077aed3SPierre Pronchery
1413b077aed3SPierre ProncherySee L</Deprecated low-level key printing functions>
1414b077aed3SPierre Pronchery
1415b077aed3SPierre Pronchery=item *
1416b077aed3SPierre Pronchery
1417b077aed3SPierre ProncheryDH_set0_key(), DH_set0_pqg(), DH_set_length()
1418b077aed3SPierre Pronchery
1419b077aed3SPierre ProncherySee L</Deprecated low-level key parameter setters>
1420b077aed3SPierre Pronchery
1421b077aed3SPierre Pronchery=item *
1422b077aed3SPierre Pronchery
1423b077aed3SPierre ProncheryDSA_bits(), DSA_security_bits(), DSA_size()
1424b077aed3SPierre Pronchery
1425b077aed3SPierre ProncheryUse L<EVP_PKEY_get_bits(3)>, L<EVP_PKEY_get_security_bits(3)> and
1426b077aed3SPierre ProncheryL<EVP_PKEY_get_size(3)>.
1427b077aed3SPierre Pronchery
1428b077aed3SPierre Pronchery=item *
1429b077aed3SPierre Pronchery
1430b077aed3SPierre ProncheryDHparams_dup(), DSA_dup_DH()
1431b077aed3SPierre Pronchery
1432b077aed3SPierre ProncheryThere is no direct replacement. Applications may use L<EVP_PKEY_copy_parameters(3)>
1433b077aed3SPierre Proncheryand L<EVP_PKEY_dup(3)> instead.
1434b077aed3SPierre Pronchery
1435b077aed3SPierre Pronchery=item *
1436b077aed3SPierre Pronchery
1437b077aed3SPierre ProncheryDSA_generate_key(), DSA_generate_parameters_ex()
1438b077aed3SPierre Pronchery
1439b077aed3SPierre ProncherySee L</Deprecated low-level key generation functions>.
1440b077aed3SPierre Pronchery
1441b077aed3SPierre Pronchery=item *
1442b077aed3SPierre Pronchery
1443b077aed3SPierre ProncheryDSA_get0_engine(), DSA_get_default_method(), DSA_get_ex_data(),
1444b077aed3SPierre ProncheryDSA_get_method(), DSA_meth_*(), DSA_new_method(), DSA_OpenSSL(),
1445b077aed3SPierre ProncheryDSA_set_default_method(), DSA_set_ex_data(), DSA_set_method()
1446b077aed3SPierre Pronchery
1447b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
1448b077aed3SPierre Pronchery
1449b077aed3SPierre Pronchery=item *
1450b077aed3SPierre Pronchery
1451b077aed3SPierre ProncheryDSA_get0_p(), DSA_get0_q(), DSA_get0_g(), DSA_get0_pqg(), DSA_get0_key(),
1452b077aed3SPierre ProncheryDSA_get0_priv_key(), DSA_get0_pub_key()
1453b077aed3SPierre Pronchery
1454b077aed3SPierre ProncherySee L</Deprecated low-level key parameter getters>.
1455b077aed3SPierre Pronchery
1456b077aed3SPierre Pronchery=item *
1457b077aed3SPierre Pronchery
1458b077aed3SPierre ProncheryDSA_new(), DSA_free(), DSA_up_ref()
1459b077aed3SPierre Pronchery
1460b077aed3SPierre ProncherySee L</Deprecated low-level object creation>
1461b077aed3SPierre Pronchery
1462b077aed3SPierre Pronchery=item *
1463b077aed3SPierre Pronchery
1464b077aed3SPierre ProncheryDSAparams_dup()
1465b077aed3SPierre Pronchery
1466b077aed3SPierre ProncheryThere is no direct replacement. Applications may use L<EVP_PKEY_copy_parameters(3)>
1467b077aed3SPierre Proncheryand L<EVP_PKEY_dup(3)> instead.
1468b077aed3SPierre Pronchery
1469b077aed3SPierre Pronchery=item *
1470b077aed3SPierre Pronchery
1471b077aed3SPierre ProncheryDSAparams_print(), DSAparams_print_fp(), DSA_print(), DSA_print_fp()
1472b077aed3SPierre Pronchery
1473b077aed3SPierre ProncherySee L</Deprecated low-level key printing functions>
1474b077aed3SPierre Pronchery
1475b077aed3SPierre Pronchery=item *
1476b077aed3SPierre Pronchery
1477b077aed3SPierre ProncheryDSA_set0_key(), DSA_set0_pqg()
1478b077aed3SPierre Pronchery
1479b077aed3SPierre ProncherySee L</Deprecated low-level key parameter setters>
1480b077aed3SPierre Pronchery
1481b077aed3SPierre Pronchery=item *
1482b077aed3SPierre Pronchery
1483b077aed3SPierre ProncheryDSA_set_flags(), DSA_clear_flags(), DSA_test_flags()
1484b077aed3SPierre Pronchery
1485b077aed3SPierre ProncheryThe B<DSA_FLAG_CACHE_MONT_P> flag has been deprecated without replacement.
1486b077aed3SPierre Pronchery
1487b077aed3SPierre Pronchery=item *
1488b077aed3SPierre Pronchery
1489b077aed3SPierre ProncheryDSA_sign(), DSA_do_sign(), DSA_sign_setup(), DSA_verify(), DSA_do_verify()
1490b077aed3SPierre Pronchery
1491b077aed3SPierre ProncherySee L</Deprecated low-level signing functions>.
1492b077aed3SPierre Pronchery
1493b077aed3SPierre Pronchery=item *
1494b077aed3SPierre Pronchery
1495b077aed3SPierre ProncheryECDH_compute_key()
1496b077aed3SPierre Pronchery
1497b077aed3SPierre ProncherySee L</Deprecated low-level key exchange functions>.
1498b077aed3SPierre Pronchery
1499b077aed3SPierre Pronchery=item *
1500b077aed3SPierre Pronchery
1501b077aed3SPierre ProncheryECDH_KDF_X9_62()
1502b077aed3SPierre Pronchery
1503b077aed3SPierre ProncheryApplications may either set this using the helper function
1504b077aed3SPierre ProncheryL<EVP_PKEY_CTX_set_ecdh_kdf_type(3)> or by setting an L<OSSL_PARAM(3)> using the
1505b077aed3SPierre Pronchery"kdf-type" as shown in L<EVP_KEYEXCH-ECDH(7)/EXAMPLES>
1506b077aed3SPierre Pronchery
1507b077aed3SPierre Pronchery=item *
1508b077aed3SPierre Pronchery
1509b077aed3SPierre ProncheryECDSA_sign(), ECDSA_sign_ex(), ECDSA_sign_setup(), ECDSA_do_sign(),
1510b077aed3SPierre ProncheryECDSA_do_sign_ex(), ECDSA_verify(), ECDSA_do_verify()
1511b077aed3SPierre Pronchery
1512b077aed3SPierre ProncherySee L</Deprecated low-level signing functions>.
1513b077aed3SPierre Pronchery
1514b077aed3SPierre Pronchery=item *
1515b077aed3SPierre Pronchery
1516b077aed3SPierre ProncheryECDSA_size()
1517b077aed3SPierre Pronchery
1518b077aed3SPierre ProncheryApplications should use L<EVP_PKEY_get_size(3)>.
1519b077aed3SPierre Pronchery
1520b077aed3SPierre Pronchery=item *
1521b077aed3SPierre Pronchery
1522b077aed3SPierre ProncheryEC_GF2m_simple_method(), EC_GFp_mont_method(), EC_GFp_nist_method(),
1523b077aed3SPierre ProncheryEC_GFp_nistp224_method(), EC_GFp_nistp256_method(), EC_GFp_nistp521_method(),
1524b077aed3SPierre ProncheryEC_GFp_simple_method()
1525b077aed3SPierre Pronchery
1526b077aed3SPierre ProncheryThere are no replacements for these functions. Applications should rely on the
1527b077aed3SPierre Proncherylibrary automatically assigning a suitable method internally when an EC_GROUP
1528b077aed3SPierre Proncheryis constructed.
1529b077aed3SPierre Pronchery
1530b077aed3SPierre Pronchery=item *
1531b077aed3SPierre Pronchery
1532b077aed3SPierre ProncheryEC_GROUP_clear_free()
1533b077aed3SPierre Pronchery
1534b077aed3SPierre ProncheryUse L<EC_GROUP_free(3)> instead.
1535b077aed3SPierre Pronchery
1536b077aed3SPierre Pronchery=item *
1537b077aed3SPierre Pronchery
1538b077aed3SPierre ProncheryEC_GROUP_get_curve_GF2m(), EC_GROUP_get_curve_GFp(), EC_GROUP_set_curve_GF2m(),
1539b077aed3SPierre ProncheryEC_GROUP_set_curve_GFp()
1540b077aed3SPierre Pronchery
1541b077aed3SPierre ProncheryApplications should use L<EC_GROUP_get_curve(3)> and L<EC_GROUP_set_curve(3)>.
1542b077aed3SPierre Pronchery
1543b077aed3SPierre Pronchery=item *
1544b077aed3SPierre Pronchery
1545b077aed3SPierre ProncheryEC_GROUP_have_precompute_mult(), EC_GROUP_precompute_mult(),
1546b077aed3SPierre ProncheryEC_KEY_precompute_mult()
1547b077aed3SPierre Pronchery
1548b077aed3SPierre ProncheryThese functions are not widely used. Applications should instead switch to
1549b077aed3SPierre Proncherynamed curves which OpenSSL has hardcoded lookup tables for.
1550b077aed3SPierre Pronchery
1551b077aed3SPierre Pronchery=item *
1552b077aed3SPierre Pronchery
1553b077aed3SPierre ProncheryEC_GROUP_new(), EC_GROUP_method_of(), EC_POINT_method_of()
1554b077aed3SPierre Pronchery
1555b077aed3SPierre ProncheryEC_METHOD is now an internal-only concept and a suitable EC_METHOD is assigned
1556b077aed3SPierre Proncheryinternally without application intervention.
1557b077aed3SPierre ProncheryUsers of EC_GROUP_new() should switch to a different suitable constructor.
1558b077aed3SPierre Pronchery
1559b077aed3SPierre Pronchery=item *
1560b077aed3SPierre Pronchery
1561b077aed3SPierre ProncheryEC_KEY_can_sign()
1562b077aed3SPierre Pronchery
1563b077aed3SPierre ProncheryApplications should use L<EVP_PKEY_can_sign(3)> instead.
1564b077aed3SPierre Pronchery
1565b077aed3SPierre Pronchery=item *
1566b077aed3SPierre Pronchery
1567b077aed3SPierre ProncheryEC_KEY_check_key()
1568b077aed3SPierre Pronchery
1569b077aed3SPierre ProncherySee L</Deprecated low-level validation functions>
1570b077aed3SPierre Pronchery
1571b077aed3SPierre Pronchery=item *
1572b077aed3SPierre Pronchery
1573b077aed3SPierre ProncheryEC_KEY_set_flags(), EC_KEY_get_flags(), EC_KEY_clear_flags()
1574b077aed3SPierre Pronchery
1575aa795734SPierre ProncherySee L<EVP_PKEY-EC(7)/Common EC parameters> which handles flags as separate
1576b077aed3SPierre Proncheryparameters for B<OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT>,
1577b077aed3SPierre ProncheryB<OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE>, B<OSSL_PKEY_PARAM_EC_ENCODING>,
1578b077aed3SPierre ProncheryB<OSSL_PKEY_PARAM_USE_COFACTOR_ECDH> and
1579b077aed3SPierre ProncheryB<OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC>.
1580b077aed3SPierre ProncherySee also L<EVP_PKEY-EC(7)/EXAMPLES>
1581b077aed3SPierre Pronchery
1582b077aed3SPierre Pronchery=item *
1583b077aed3SPierre Pronchery
1584b077aed3SPierre ProncheryEC_KEY_dup(), EC_KEY_copy()
1585b077aed3SPierre Pronchery
1586b077aed3SPierre ProncheryThere is no direct replacement. Applications may use L<EVP_PKEY_copy_parameters(3)>
1587b077aed3SPierre Proncheryand L<EVP_PKEY_dup(3)> instead.
1588b077aed3SPierre Pronchery
1589b077aed3SPierre Pronchery=item *
1590b077aed3SPierre Pronchery
1591b077aed3SPierre ProncheryEC_KEY_decoded_from_explicit_params()
1592b077aed3SPierre Pronchery
1593b077aed3SPierre ProncheryThere is no replacement.
1594b077aed3SPierre Pronchery
1595b077aed3SPierre Pronchery=item *
1596b077aed3SPierre Pronchery
1597b077aed3SPierre ProncheryEC_KEY_generate_key()
1598b077aed3SPierre Pronchery
1599b077aed3SPierre ProncherySee L</Deprecated low-level key generation functions>.
1600b077aed3SPierre Pronchery
1601b077aed3SPierre Pronchery=item *
1602b077aed3SPierre Pronchery
1603b077aed3SPierre ProncheryEC_KEY_get0_group(), EC_KEY_get0_private_key(), EC_KEY_get0_public_key(),
1604b077aed3SPierre ProncheryEC_KEY_get_conv_form(), EC_KEY_get_enc_flags()
1605b077aed3SPierre Pronchery
1606b077aed3SPierre ProncherySee L</Deprecated low-level key parameter getters>.
1607b077aed3SPierre Pronchery
1608b077aed3SPierre Pronchery=item *
1609b077aed3SPierre Pronchery
1610b077aed3SPierre ProncheryEC_KEY_get0_engine(), EC_KEY_get_default_method(), EC_KEY_get_method(),
1611b077aed3SPierre ProncheryEC_KEY_new_method(), EC_KEY_get_ex_data(), EC_KEY_OpenSSL(),
1612b077aed3SPierre ProncheryEC_KEY_set_ex_data(), EC_KEY_set_default_method(), EC_KEY_METHOD_*(),
1613b077aed3SPierre ProncheryEC_KEY_set_method()
1614b077aed3SPierre Pronchery
1615b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>
1616b077aed3SPierre Pronchery
1617b077aed3SPierre Pronchery=item *
1618b077aed3SPierre Pronchery
1619b077aed3SPierre ProncheryEC_METHOD_get_field_type()
1620b077aed3SPierre Pronchery
1621b077aed3SPierre ProncheryUse L<EC_GROUP_get_field_type(3)> instead.
1622b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>
1623b077aed3SPierre Pronchery
1624b077aed3SPierre Pronchery=item *
1625b077aed3SPierre Pronchery
1626b077aed3SPierre ProncheryEC_KEY_key2buf(), EC_KEY_oct2key(), EC_KEY_oct2priv(), EC_KEY_priv2buf(),
1627b077aed3SPierre ProncheryEC_KEY_priv2oct()
1628b077aed3SPierre Pronchery
1629b077aed3SPierre ProncheryThere are no replacements for these.
1630b077aed3SPierre Pronchery
1631b077aed3SPierre Pronchery=item *
1632b077aed3SPierre Pronchery
1633b077aed3SPierre ProncheryEC_KEY_new(), EC_KEY_new_by_curve_name(), EC_KEY_free(), EC_KEY_up_ref()
1634b077aed3SPierre Pronchery
1635b077aed3SPierre ProncherySee L</Deprecated low-level object creation>
1636b077aed3SPierre Pronchery
1637b077aed3SPierre Pronchery=item *
1638b077aed3SPierre Pronchery
1639b077aed3SPierre ProncheryEC_KEY_print(), EC_KEY_print_fp()
1640b077aed3SPierre Pronchery
1641b077aed3SPierre ProncherySee L</Deprecated low-level key printing functions>
1642b077aed3SPierre Pronchery
1643b077aed3SPierre Pronchery=item *
1644b077aed3SPierre Pronchery
1645b077aed3SPierre ProncheryEC_KEY_set_asn1_flag(), EC_KEY_set_conv_form(), EC_KEY_set_enc_flags()
1646b077aed3SPierre Pronchery
1647b077aed3SPierre ProncherySee L</Deprecated low-level key parameter setters>.
1648b077aed3SPierre Pronchery
1649b077aed3SPierre Pronchery=item *
1650b077aed3SPierre Pronchery
1651b077aed3SPierre ProncheryEC_KEY_set_group(), EC_KEY_set_private_key(), EC_KEY_set_public_key(),
1652b077aed3SPierre ProncheryEC_KEY_set_public_key_affine_coordinates()
1653b077aed3SPierre Pronchery
1654b077aed3SPierre ProncherySee L</Deprecated low-level key parameter setters>.
1655b077aed3SPierre Pronchery
1656b077aed3SPierre Pronchery=item *
1657b077aed3SPierre Pronchery
1658b077aed3SPierre ProncheryECParameters_print(), ECParameters_print_fp(), ECPKParameters_print(),
1659b077aed3SPierre ProncheryECPKParameters_print_fp()
1660b077aed3SPierre Pronchery
1661b077aed3SPierre ProncherySee L</Deprecated low-level key printing functions>
1662b077aed3SPierre Pronchery
1663b077aed3SPierre Pronchery=item *
1664b077aed3SPierre Pronchery
1665b077aed3SPierre ProncheryEC_POINT_bn2point(), EC_POINT_point2bn()
1666b077aed3SPierre Pronchery
1667b077aed3SPierre ProncheryThese functions were not particularly useful, since EC point serialization
1668b077aed3SPierre Proncheryformats are not individual big-endian integers.
1669b077aed3SPierre Pronchery
1670b077aed3SPierre Pronchery=item *
1671b077aed3SPierre Pronchery
1672b077aed3SPierre ProncheryEC_POINT_get_affine_coordinates_GF2m(), EC_POINT_get_affine_coordinates_GFp(),
1673b077aed3SPierre ProncheryEC_POINT_set_affine_coordinates_GF2m(), EC_POINT_set_affine_coordinates_GFp()
1674b077aed3SPierre Pronchery
1675b077aed3SPierre ProncheryApplications should use L<EC_POINT_get_affine_coordinates(3)> and
1676b077aed3SPierre ProncheryL<EC_POINT_set_affine_coordinates(3)> instead.
1677b077aed3SPierre Pronchery
1678b077aed3SPierre Pronchery=item *
1679b077aed3SPierre Pronchery
1680b077aed3SPierre ProncheryEC_POINT_get_Jprojective_coordinates_GFp(), EC_POINT_set_Jprojective_coordinates_GFp()
1681b077aed3SPierre Pronchery
1682b077aed3SPierre ProncheryThese functions are not widely used. Applications should instead use the
1683b077aed3SPierre ProncheryL<EC_POINT_set_affine_coordinates(3)> and L<EC_POINT_get_affine_coordinates(3)>
1684b077aed3SPierre Proncheryfunctions.
1685b077aed3SPierre Pronchery
1686b077aed3SPierre Pronchery=item *
1687b077aed3SPierre Pronchery
1688b077aed3SPierre ProncheryEC_POINT_make_affine(), EC_POINTs_make_affine()
1689b077aed3SPierre Pronchery
1690b077aed3SPierre ProncheryThere is no replacement. These functions were not widely used, and OpenSSL
1691b077aed3SPierre Proncheryautomatically performs this conversion when needed.
1692b077aed3SPierre Pronchery
1693b077aed3SPierre Pronchery=item *
1694b077aed3SPierre Pronchery
1695b077aed3SPierre ProncheryEC_POINT_set_compressed_coordinates_GF2m(), EC_POINT_set_compressed_coordinates_GFp()
1696b077aed3SPierre Pronchery
1697b077aed3SPierre ProncheryApplications should use L<EC_POINT_set_compressed_coordinates(3)> instead.
1698b077aed3SPierre Pronchery
1699b077aed3SPierre Pronchery=item *
1700b077aed3SPierre Pronchery
1701b077aed3SPierre ProncheryEC_POINTs_mul()
1702b077aed3SPierre Pronchery
1703b077aed3SPierre ProncheryThis function is not widely used. Applications should instead use the
1704b077aed3SPierre ProncheryL<EC_POINT_mul(3)> function.
1705b077aed3SPierre Pronchery
1706b077aed3SPierre Pronchery=item *
1707b077aed3SPierre Pronchery
1708b077aed3SPierre ProncheryB<ENGINE_*()>
1709b077aed3SPierre Pronchery
1710b077aed3SPierre ProncheryAll engine functions are deprecated. An engine should be rewritten as a provider.
1711b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
1712b077aed3SPierre Pronchery
1713b077aed3SPierre Pronchery=item *
1714b077aed3SPierre Pronchery
1715b077aed3SPierre ProncheryB<ERR_load_*()>, ERR_func_error_string(), ERR_get_error_line(),
1716b077aed3SPierre ProncheryERR_get_error_line_data(), ERR_get_state()
1717b077aed3SPierre Pronchery
1718b077aed3SPierre ProncheryOpenSSL now loads error strings automatically so these functions are not needed.
1719b077aed3SPierre Pronchery
1720b077aed3SPierre Pronchery=item *
1721b077aed3SPierre Pronchery
1722b077aed3SPierre ProncheryERR_peek_error_line_data(), ERR_peek_last_error_line_data()
1723b077aed3SPierre Pronchery
1724b077aed3SPierre ProncheryThe new functions are L<ERR_peek_error_func(3)>, L<ERR_peek_last_error_func(3)>,
1725b077aed3SPierre ProncheryL<ERR_peek_error_data(3)>, L<ERR_peek_last_error_data(3)>, L<ERR_get_error_all(3)>,
1726b077aed3SPierre ProncheryL<ERR_peek_error_all(3)> and L<ERR_peek_last_error_all(3)>.
1727b077aed3SPierre ProncheryApplications should use L<ERR_get_error_all(3)>, or pick information
1728b077aed3SPierre Proncherywith ERR_peek functions and finish off with getting the error code by using
1729b077aed3SPierre ProncheryL<ERR_get_error(3)>.
1730b077aed3SPierre Pronchery
1731b077aed3SPierre Pronchery=item *
1732b077aed3SPierre Pronchery
1733b077aed3SPierre ProncheryEVP_CIPHER_CTX_iv(), EVP_CIPHER_CTX_iv_noconst(), EVP_CIPHER_CTX_original_iv()
1734b077aed3SPierre Pronchery
1735b077aed3SPierre ProncheryApplications should instead use L<EVP_CIPHER_CTX_get_updated_iv(3)>,
1736b077aed3SPierre ProncheryL<EVP_CIPHER_CTX_get_updated_iv(3)> and L<EVP_CIPHER_CTX_get_original_iv(3)>
1737b077aed3SPierre Proncheryrespectively.
1738b077aed3SPierre ProncherySee L<EVP_CIPHER_CTX_get_original_iv(3)> for further information.
1739b077aed3SPierre Pronchery
1740b077aed3SPierre Pronchery=item *
1741b077aed3SPierre Pronchery
1742b077aed3SPierre ProncheryB<EVP_CIPHER_meth_*()>, EVP_MD_CTX_set_update_fn(), EVP_MD_CTX_update_fn(),
1743b077aed3SPierre ProncheryB<EVP_MD_meth_*()>
1744b077aed3SPierre Pronchery
1745b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
1746b077aed3SPierre Pronchery
1747b077aed3SPierre Pronchery=item *
1748b077aed3SPierre Pronchery
1749b077aed3SPierre ProncheryEVP_PKEY_CTRL_PKCS7_ENCRYPT(), EVP_PKEY_CTRL_PKCS7_DECRYPT(),
1750b077aed3SPierre ProncheryEVP_PKEY_CTRL_PKCS7_SIGN(), EVP_PKEY_CTRL_CMS_ENCRYPT(),
1751b077aed3SPierre ProncheryEVP_PKEY_CTRL_CMS_DECRYPT(), and EVP_PKEY_CTRL_CMS_SIGN()
1752b077aed3SPierre Pronchery
1753b077aed3SPierre ProncheryThese control operations are not invoked by the OpenSSL library anymore and
1754b077aed3SPierre Proncheryare replaced by direct checks of the key operation against the key type
1755b077aed3SPierre Proncherywhen the operation is initialized.
1756b077aed3SPierre Pronchery
1757b077aed3SPierre Pronchery=item *
1758b077aed3SPierre Pronchery
1759b077aed3SPierre ProncheryEVP_PKEY_CTX_get0_dh_kdf_ukm(), EVP_PKEY_CTX_get0_ecdh_kdf_ukm()
1760b077aed3SPierre Pronchery
1761b077aed3SPierre ProncherySee the "kdf-ukm" item in L<EVP_KEYEXCH-DH(7)/DH key exchange parameters> and
1762b077aed3SPierre ProncheryL<EVP_KEYEXCH-ECDH(7)/ECDH Key Exchange parameters>.
1763b077aed3SPierre ProncheryThese functions are obsolete and should not be required.
1764b077aed3SPierre Pronchery
1765b077aed3SPierre Pronchery=item *
1766b077aed3SPierre Pronchery
1767b077aed3SPierre ProncheryEVP_PKEY_CTX_set_rsa_keygen_pubexp()
1768b077aed3SPierre Pronchery
1769b077aed3SPierre ProncheryApplications should use L<EVP_PKEY_CTX_set1_rsa_keygen_pubexp(3)> instead.
1770b077aed3SPierre Pronchery
1771b077aed3SPierre Pronchery=item *
1772b077aed3SPierre Pronchery
1773b077aed3SPierre ProncheryEVP_PKEY_cmp(), EVP_PKEY_cmp_parameters()
1774b077aed3SPierre Pronchery
1775b077aed3SPierre ProncheryApplications should use L<EVP_PKEY_eq(3)> and L<EVP_PKEY_parameters_eq(3)> instead.
1776b077aed3SPierre ProncherySee L<EVP_PKEY_copy_parameters(3)> for further details.
1777b077aed3SPierre Pronchery
1778b077aed3SPierre Pronchery=item *
1779b077aed3SPierre Pronchery
1780b077aed3SPierre ProncheryEVP_PKEY_encrypt_old(), EVP_PKEY_decrypt_old(),
1781b077aed3SPierre Pronchery
1782b077aed3SPierre ProncheryApplications should use L<EVP_PKEY_encrypt_init(3)> and L<EVP_PKEY_encrypt(3)> or
1783b077aed3SPierre ProncheryL<EVP_PKEY_decrypt_init(3)> and L<EVP_PKEY_decrypt(3)> instead.
1784b077aed3SPierre Pronchery
1785b077aed3SPierre Pronchery=item *
1786b077aed3SPierre Pronchery
1787b077aed3SPierre ProncheryEVP_PKEY_get0()
1788b077aed3SPierre Pronchery
1789b077aed3SPierre ProncheryThis function returns NULL if the key comes from a provider.
1790b077aed3SPierre Pronchery
1791b077aed3SPierre Pronchery=item *
1792b077aed3SPierre Pronchery
1793b077aed3SPierre ProncheryEVP_PKEY_get0_DH(), EVP_PKEY_get0_DSA(), EVP_PKEY_get0_EC_KEY(), EVP_PKEY_get0_RSA(),
1794b077aed3SPierre ProncheryEVP_PKEY_get1_DH(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_EC_KEY and EVP_PKEY_get1_RSA(),
1795b077aed3SPierre ProncheryEVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305(), EVP_PKEY_get0_siphash()
1796b077aed3SPierre Pronchery
1797b077aed3SPierre ProncherySee L</Functions that return an internal key should be treated as read only>.
1798b077aed3SPierre Pronchery
1799b077aed3SPierre Pronchery=item *
1800b077aed3SPierre Pronchery
1801b077aed3SPierre ProncheryB<EVP_PKEY_meth_*()>
1802b077aed3SPierre Pronchery
1803b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
1804b077aed3SPierre Pronchery
1805b077aed3SPierre Pronchery=item *
1806b077aed3SPierre Pronchery
1807b077aed3SPierre ProncheryEVP_PKEY_new_CMAC_key()
1808b077aed3SPierre Pronchery
1809b077aed3SPierre ProncherySee L</Deprecated low-level MAC functions>.
1810b077aed3SPierre Pronchery
1811b077aed3SPierre Pronchery=item *
1812b077aed3SPierre Pronchery
1813b077aed3SPierre ProncheryEVP_PKEY_assign(), EVP_PKEY_set1_DH(), EVP_PKEY_set1_DSA(),
1814b077aed3SPierre ProncheryEVP_PKEY_set1_EC_KEY(), EVP_PKEY_set1_RSA()
1815b077aed3SPierre Pronchery
1816b077aed3SPierre ProncherySee L</Deprecated low-level key object getters and setters>
1817b077aed3SPierre Pronchery
1818b077aed3SPierre Pronchery=item *
1819b077aed3SPierre Pronchery
1820b077aed3SPierre ProncheryEVP_PKEY_set1_tls_encodedpoint() EVP_PKEY_get1_tls_encodedpoint()
1821b077aed3SPierre Pronchery
1822b077aed3SPierre ProncheryThese functions were previously used by libssl to set or get an encoded public
1823b077aed3SPierre Proncherykey into/from an EVP_PKEY object. With OpenSSL 3.0 these are replaced by the more
1824b077aed3SPierre Proncherygeneric functions L<EVP_PKEY_set1_encoded_public_key(3)> and
1825b077aed3SPierre ProncheryL<EVP_PKEY_get1_encoded_public_key(3)>.
1826b077aed3SPierre ProncheryThe old versions have been converted to deprecated macros that just call the
1827b077aed3SPierre Proncherynew functions.
1828b077aed3SPierre Pronchery
1829b077aed3SPierre Pronchery=item *
1830b077aed3SPierre Pronchery
1831b077aed3SPierre ProncheryEVP_PKEY_set1_engine(), EVP_PKEY_get0_engine()
1832b077aed3SPierre Pronchery
1833b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
1834b077aed3SPierre Pronchery
1835b077aed3SPierre Pronchery=item *
1836b077aed3SPierre Pronchery
1837b077aed3SPierre ProncheryEVP_PKEY_set_alias_type()
1838b077aed3SPierre Pronchery
1839b077aed3SPierre ProncheryThis function has been removed. There is no replacement.
1840b077aed3SPierre ProncherySee L</EVP_PKEY_set_alias_type() method has been removed>
1841b077aed3SPierre Pronchery
1842b077aed3SPierre Pronchery=item *
1843b077aed3SPierre Pronchery
1844b077aed3SPierre ProncheryHMAC_Init_ex(), HMAC_Update(), HMAC_Final(), HMAC_size()
1845b077aed3SPierre Pronchery
1846b077aed3SPierre ProncherySee L</Deprecated low-level MAC functions>.
1847b077aed3SPierre Pronchery
1848b077aed3SPierre Pronchery=item *
1849b077aed3SPierre Pronchery
1850b077aed3SPierre ProncheryHMAC_CTX_new(), HMAC_CTX_free(), HMAC_CTX_copy(), HMAC_CTX_reset(),
1851b077aed3SPierre ProncheryHMAC_CTX_set_flags(), HMAC_CTX_get_md()
1852b077aed3SPierre Pronchery
1853b077aed3SPierre ProncherySee L</Deprecated low-level MAC functions>.
1854b077aed3SPierre Pronchery
1855b077aed3SPierre Pronchery=item *
1856b077aed3SPierre Pronchery
1857b077aed3SPierre Proncheryi2d_DHparams(), i2d_DHxparams()
1858b077aed3SPierre Pronchery
1859b077aed3SPierre ProncherySee L</Deprecated low-level key reading and writing functions>
1860b077aed3SPierre Proncheryand L<d2i_RSAPrivateKey(3)/Migration>
1861b077aed3SPierre Pronchery
1862b077aed3SPierre Pronchery=item *
1863b077aed3SPierre Pronchery
1864b077aed3SPierre Proncheryi2d_DSAparams(), i2d_DSAPrivateKey(), i2d_DSAPrivateKey_bio(),
1865b077aed3SPierre Proncheryi2d_DSAPrivateKey_fp(), i2d_DSA_PUBKEY(), i2d_DSA_PUBKEY_bio(),
1866b077aed3SPierre Proncheryi2d_DSA_PUBKEY_fp(), i2d_DSAPublicKey()
1867b077aed3SPierre Pronchery
1868b077aed3SPierre ProncherySee L</Deprecated low-level key reading and writing functions>
1869b077aed3SPierre Proncheryand L<d2i_RSAPrivateKey(3)/Migration>
1870b077aed3SPierre Pronchery
1871b077aed3SPierre Pronchery=item *
1872b077aed3SPierre Pronchery
1873b077aed3SPierre Proncheryi2d_ECParameters(), i2d_ECPrivateKey(), i2d_ECPrivateKey_bio(),
1874b077aed3SPierre Proncheryi2d_ECPrivateKey_fp(), i2d_EC_PUBKEY(), i2d_EC_PUBKEY_bio(),
1875*44096ebdSEnji Cooperi2d_EC_PUBKEY_fp()
1876b077aed3SPierre Pronchery
1877b077aed3SPierre ProncherySee L</Deprecated low-level key reading and writing functions>
1878b077aed3SPierre Proncheryand L<d2i_RSAPrivateKey(3)/Migration>
1879b077aed3SPierre Pronchery
1880b077aed3SPierre Pronchery=item *
1881b077aed3SPierre Pronchery
1882*44096ebdSEnji Cooperi2o_ECPublicKey()
1883*44096ebdSEnji Cooper
1884*44096ebdSEnji CooperUse L<EVP_PKEY_get1_encoded_public_key(3)>.
1885*44096ebdSEnji CooperSee L</Deprecated low-level key parameter getters>
1886*44096ebdSEnji Cooper
1887*44096ebdSEnji Cooper=item *
1888*44096ebdSEnji Cooper
1889b077aed3SPierre Proncheryi2d_RSAPrivateKey(), i2d_RSAPrivateKey_bio(), i2d_RSAPrivateKey_fp(),
1890b077aed3SPierre Proncheryi2d_RSA_PUBKEY(), i2d_RSA_PUBKEY_bio(), i2d_RSA_PUBKEY_fp(),
1891b077aed3SPierre Proncheryi2d_RSAPublicKey(), i2d_RSAPublicKey_bio(), i2d_RSAPublicKey_fp()
1892b077aed3SPierre Pronchery
1893b077aed3SPierre ProncherySee L</Deprecated low-level key reading and writing functions>
1894b077aed3SPierre Proncheryand L<d2i_RSAPrivateKey(3)/Migration>
1895b077aed3SPierre Pronchery
1896b077aed3SPierre Pronchery=item *
1897b077aed3SPierre Pronchery
1898b077aed3SPierre ProncheryIDEA_encrypt(), IDEA_set_decrypt_key(), IDEA_set_encrypt_key(),
1899b077aed3SPierre ProncheryIDEA_cbc_encrypt(), IDEA_cfb64_encrypt(), IDEA_ecb_encrypt(),
1900b077aed3SPierre ProncheryIDEA_ofb64_encrypt()
1901b077aed3SPierre Pronchery
1902b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1903b077aed3SPierre ProncheryIDEA has been moved to the L<Legacy Provider|/Legacy Algorithms>.
1904b077aed3SPierre Pronchery
1905b077aed3SPierre Pronchery=item *
1906b077aed3SPierre Pronchery
1907b077aed3SPierre ProncheryIDEA_options()
1908b077aed3SPierre Pronchery
1909b077aed3SPierre ProncheryThere is no replacement. This function returned a constant string.
1910b077aed3SPierre Pronchery
1911b077aed3SPierre Pronchery=item *
1912b077aed3SPierre Pronchery
1913b077aed3SPierre ProncheryMD2(), MD2_Init(), MD2_Update(), MD2_Final()
1914b077aed3SPierre Pronchery
1915b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1916b077aed3SPierre ProncheryMD2 has been moved to the L<Legacy Provider|/Legacy Algorithms>.
1917b077aed3SPierre Pronchery
1918b077aed3SPierre Pronchery=item *
1919b077aed3SPierre Pronchery
1920b077aed3SPierre ProncheryMD2_options()
1921b077aed3SPierre Pronchery
1922b077aed3SPierre ProncheryThere is no replacement. This function returned a constant string.
1923b077aed3SPierre Pronchery
1924b077aed3SPierre Pronchery=item *
1925b077aed3SPierre Pronchery
1926b077aed3SPierre ProncheryMD4(), MD4_Init(), MD4_Update(), MD4_Final(), MD4_Transform()
1927b077aed3SPierre Pronchery
1928b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1929b077aed3SPierre ProncheryMD4 has been moved to the L<Legacy Provider|/Legacy Algorithms>.
1930b077aed3SPierre Pronchery
1931b077aed3SPierre Pronchery=item *
1932b077aed3SPierre Pronchery
1933b077aed3SPierre ProncheryMDC2(), MDC2_Init(), MDC2_Update(), MDC2_Final()
1934b077aed3SPierre Pronchery
1935b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1936b077aed3SPierre ProncheryMDC2 has been moved to the L<Legacy Provider|/Legacy Algorithms>.
1937b077aed3SPierre Pronchery
1938b077aed3SPierre Pronchery=item *
1939b077aed3SPierre Pronchery
1940b077aed3SPierre ProncheryMD5(), MD5_Init(), MD5_Update(), MD5_Final(), MD5_Transform()
1941b077aed3SPierre Pronchery
1942b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
1943b077aed3SPierre Pronchery
1944b077aed3SPierre Pronchery=item *
1945b077aed3SPierre Pronchery
1946b077aed3SPierre ProncheryNCONF_WIN32()
1947b077aed3SPierre Pronchery
1948b077aed3SPierre ProncheryThis undocumented function has no replacement.
1949b077aed3SPierre ProncherySee L<config(5)/HISTORY> for more details.
1950b077aed3SPierre Pronchery
1951b077aed3SPierre Pronchery=item *
1952b077aed3SPierre Pronchery
1953b077aed3SPierre ProncheryOCSP_parse_url()
1954b077aed3SPierre Pronchery
1955b077aed3SPierre ProncheryUse L<OSSL_HTTP_parse_url(3)> instead.
1956b077aed3SPierre Pronchery
1957b077aed3SPierre Pronchery=item *
1958b077aed3SPierre Pronchery
1959b077aed3SPierre ProncheryB<OCSP_REQ_CTX> type and B<OCSP_REQ_CTX_*()> functions
1960b077aed3SPierre Pronchery
1961b077aed3SPierre ProncheryThese methods were used to collect all necessary data to form a HTTP request,
1962b077aed3SPierre Proncheryand to perform the HTTP transfer with that request.  With OpenSSL 3.0, the
1963b077aed3SPierre Proncherytype is B<OSSL_HTTP_REQ_CTX>, and the deprecated functions are replaced
1964b077aed3SPierre Proncherywith B<OSSL_HTTP_REQ_CTX_*()>. See L<OSSL_HTTP_REQ_CTX(3)> for additional
1965b077aed3SPierre Proncherydetails.
1966b077aed3SPierre Pronchery
1967b077aed3SPierre Pronchery=item *
1968b077aed3SPierre Pronchery
1969b077aed3SPierre ProncheryOPENSSL_fork_child(), OPENSSL_fork_parent(), OPENSSL_fork_prepare()
1970b077aed3SPierre Pronchery
1971b077aed3SPierre ProncheryThere is no replacement for these functions. These pthread fork support methods
1972b077aed3SPierre Proncherywere unused by OpenSSL.
1973b077aed3SPierre Pronchery
1974b077aed3SPierre Pronchery=item *
1975b077aed3SPierre Pronchery
1976b077aed3SPierre ProncheryOSSL_STORE_ctrl(), OSSL_STORE_do_all_loaders(), OSSL_STORE_LOADER_get0_engine(),
1977b077aed3SPierre ProncheryOSSL_STORE_LOADER_get0_scheme(), OSSL_STORE_LOADER_new(),
1978b077aed3SPierre ProncheryOSSL_STORE_LOADER_set_attach(), OSSL_STORE_LOADER_set_close(),
1979b077aed3SPierre ProncheryOSSL_STORE_LOADER_set_ctrl(), OSSL_STORE_LOADER_set_eof(),
1980b077aed3SPierre ProncheryOSSL_STORE_LOADER_set_error(), OSSL_STORE_LOADER_set_expect(),
1981b077aed3SPierre ProncheryOSSL_STORE_LOADER_set_find(), OSSL_STORE_LOADER_set_load(),
1982b077aed3SPierre ProncheryOSSL_STORE_LOADER_set_open(), OSSL_STORE_LOADER_set_open_ex(),
1983b077aed3SPierre ProncheryOSSL_STORE_register_loader(), OSSL_STORE_unregister_loader(),
1984b077aed3SPierre ProncheryOSSL_STORE_vctrl()
1985b077aed3SPierre Pronchery
1986b077aed3SPierre ProncheryThese functions helped applications and engines create loaders for
1987b077aed3SPierre Proncheryschemes they supported.  These are all deprecated and discouraged in favour of
1988b077aed3SPierre Proncheryprovider implementations, see L<provider-storemgmt(7)>.
1989b077aed3SPierre Pronchery
1990b077aed3SPierre Pronchery=item *
1991b077aed3SPierre Pronchery
1992b077aed3SPierre ProncheryPEM_read_DHparams(), PEM_read_bio_DHparams(),
1993b077aed3SPierre ProncheryPEM_read_DSAparams(), PEM_read_bio_DSAparams(),
1994b077aed3SPierre ProncheryPEM_read_DSAPrivateKey(), PEM_read_DSA_PUBKEY(),
1995b077aed3SPierre ProncheryPEM_read_bio_DSAPrivateKey and PEM_read_bio_DSA_PUBKEY(),
1996b077aed3SPierre ProncheryPEM_read_ECPKParameters(), PEM_read_ECPrivateKey(), PEM_read_EC_PUBKEY(),
1997b077aed3SPierre ProncheryPEM_read_bio_ECPKParameters(), PEM_read_bio_ECPrivateKey(), PEM_read_bio_EC_PUBKEY(),
1998b077aed3SPierre ProncheryPEM_read_RSAPrivateKey(), PEM_read_RSA_PUBKEY(), PEM_read_RSAPublicKey(),
1999b077aed3SPierre ProncheryPEM_read_bio_RSAPrivateKey(), PEM_read_bio_RSA_PUBKEY(), PEM_read_bio_RSAPublicKey(),
2000b077aed3SPierre ProncheryPEM_write_bio_DHparams(), PEM_write_bio_DHxparams(), PEM_write_DHparams(), PEM_write_DHxparams(),
2001b077aed3SPierre ProncheryPEM_write_DSAparams(), PEM_write_DSAPrivateKey(), PEM_write_DSA_PUBKEY(),
2002b077aed3SPierre ProncheryPEM_write_bio_DSAparams(), PEM_write_bio_DSAPrivateKey(), PEM_write_bio_DSA_PUBKEY(),
2003b077aed3SPierre ProncheryPEM_write_ECPKParameters(), PEM_write_ECPrivateKey(), PEM_write_EC_PUBKEY(),
2004b077aed3SPierre ProncheryPEM_write_bio_ECPKParameters(), PEM_write_bio_ECPrivateKey(), PEM_write_bio_EC_PUBKEY(),
2005b077aed3SPierre ProncheryPEM_write_RSAPrivateKey(), PEM_write_RSA_PUBKEY(), PEM_write_RSAPublicKey(),
2006b077aed3SPierre ProncheryPEM_write_bio_RSAPrivateKey(), PEM_write_bio_RSA_PUBKEY(),
2007b077aed3SPierre ProncheryPEM_write_bio_RSAPublicKey(),
2008b077aed3SPierre Pronchery
2009b077aed3SPierre ProncherySee L</Deprecated low-level key reading and writing functions>
2010b077aed3SPierre Pronchery
2011b077aed3SPierre Pronchery=item *
2012b077aed3SPierre Pronchery
2013b077aed3SPierre ProncheryPKCS1_MGF1()
2014b077aed3SPierre Pronchery
2015b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
2016b077aed3SPierre Pronchery
2017b077aed3SPierre Pronchery=item *
2018b077aed3SPierre Pronchery
2019b077aed3SPierre ProncheryRAND_get_rand_method(), RAND_set_rand_method(), RAND_OpenSSL(),
2020b077aed3SPierre ProncheryRAND_set_rand_engine()
2021b077aed3SPierre Pronchery
2022b077aed3SPierre ProncheryApplications should instead use L<RAND_set_DRBG_type(3)>,
2023b077aed3SPierre ProncheryL<EVP_RAND(3)> and L<EVP_RAND(7)>.
2024b077aed3SPierre ProncherySee L<RAND_set_rand_method(3)> for more details.
2025b077aed3SPierre Pronchery
2026b077aed3SPierre Pronchery=item *
2027b077aed3SPierre Pronchery
2028b077aed3SPierre ProncheryRC2_encrypt(), RC2_decrypt(), RC2_set_key(), RC2_cbc_encrypt(), RC2_cfb64_encrypt(),
2029b077aed3SPierre ProncheryRC2_ecb_encrypt(), RC2_ofb64_encrypt(),
2030b077aed3SPierre ProncheryRC4(), RC4_set_key(), RC4_options(),
2031b077aed3SPierre ProncheryRC5_32_encrypt(), RC5_32_set_key(), RC5_32_decrypt(), RC5_32_cbc_encrypt(),
2032b077aed3SPierre ProncheryRC5_32_cfb64_encrypt(), RC5_32_ecb_encrypt(), RC5_32_ofb64_encrypt()
2033b077aed3SPierre Pronchery
2034b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
2035b077aed3SPierre ProncheryThe Algorithms "RC2", "RC4" and "RC5" have been moved to the L<Legacy Provider|/Legacy Algorithms>.
2036b077aed3SPierre Pronchery
2037b077aed3SPierre Pronchery=item *
2038b077aed3SPierre Pronchery
2039b077aed3SPierre ProncheryRIPEMD160(), RIPEMD160_Init(), RIPEMD160_Update(), RIPEMD160_Final(),
2040b077aed3SPierre ProncheryRIPEMD160_Transform()
2041b077aed3SPierre Pronchery
2042b077aed3SPierre ProncherySee L</Deprecated low-level digest functions>.
2043b077aed3SPierre ProncheryThe RIPE algorithm has been moved to the L<Legacy Provider|/Legacy Algorithms>.
2044b077aed3SPierre Pronchery
2045b077aed3SPierre Pronchery=item *
2046b077aed3SPierre Pronchery
2047b077aed3SPierre ProncheryRSA_bits(), RSA_security_bits(), RSA_size()
2048b077aed3SPierre Pronchery
2049b077aed3SPierre ProncheryUse L<EVP_PKEY_get_bits(3)>, L<EVP_PKEY_get_security_bits(3)> and
2050b077aed3SPierre ProncheryL<EVP_PKEY_get_size(3)>.
2051b077aed3SPierre Pronchery
2052b077aed3SPierre Pronchery=item *
2053b077aed3SPierre Pronchery
2054b077aed3SPierre ProncheryRSA_check_key(), RSA_check_key_ex()
2055b077aed3SPierre Pronchery
2056b077aed3SPierre ProncherySee L</Deprecated low-level validation functions>
2057b077aed3SPierre Pronchery
2058b077aed3SPierre Pronchery=item *
2059b077aed3SPierre Pronchery
2060b077aed3SPierre ProncheryRSA_clear_flags(), RSA_flags(), RSA_set_flags(), RSA_test_flags(),
2061b077aed3SPierre ProncheryRSA_setup_blinding(), RSA_blinding_off(), RSA_blinding_on()
2062b077aed3SPierre Pronchery
2063b077aed3SPierre ProncheryAll of these RSA flags have been deprecated without replacement:
2064b077aed3SPierre Pronchery
2065b077aed3SPierre ProncheryB<RSA_FLAG_BLINDING>, B<RSA_FLAG_CACHE_PRIVATE>, B<RSA_FLAG_CACHE_PUBLIC>,
2066b077aed3SPierre ProncheryB<RSA_FLAG_EXT_PKEY>, B<RSA_FLAG_NO_BLINDING>, B<RSA_FLAG_THREAD_SAFE>
2067b077aed3SPierre ProncheryB<RSA_METHOD_FLAG_NO_CHECK>
2068b077aed3SPierre Pronchery
2069b077aed3SPierre Pronchery=item *
2070b077aed3SPierre Pronchery
2071b077aed3SPierre ProncheryRSA_generate_key_ex(), RSA_generate_multi_prime_key()
2072b077aed3SPierre Pronchery
2073b077aed3SPierre ProncherySee L</Deprecated low-level key generation functions>.
2074b077aed3SPierre Pronchery
2075b077aed3SPierre Pronchery=item *
2076b077aed3SPierre Pronchery
2077b077aed3SPierre ProncheryRSA_get0_engine()
2078b077aed3SPierre Pronchery
2079b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>
2080b077aed3SPierre Pronchery
2081b077aed3SPierre Pronchery=item *
2082b077aed3SPierre Pronchery
2083b077aed3SPierre ProncheryRSA_get0_crt_params(), RSA_get0_d(), RSA_get0_dmp1(), RSA_get0_dmq1(),
2084b077aed3SPierre ProncheryRSA_get0_e(), RSA_get0_factors(), RSA_get0_iqmp(), RSA_get0_key(),
2085b077aed3SPierre ProncheryRSA_get0_multi_prime_crt_params(), RSA_get0_multi_prime_factors(), RSA_get0_n(),
2086b077aed3SPierre ProncheryRSA_get0_p(), RSA_get0_pss_params(), RSA_get0_q(),
2087b077aed3SPierre ProncheryRSA_get_multi_prime_extra_count()
2088b077aed3SPierre Pronchery
2089b077aed3SPierre ProncherySee L</Deprecated low-level key parameter getters>
2090b077aed3SPierre Pronchery
2091b077aed3SPierre Pronchery=item *
2092b077aed3SPierre Pronchery
2093b077aed3SPierre ProncheryRSA_new(), RSA_free(), RSA_up_ref()
2094b077aed3SPierre Pronchery
2095b077aed3SPierre ProncherySee L</Deprecated low-level object creation>.
2096b077aed3SPierre Pronchery
2097b077aed3SPierre Pronchery=item *
2098b077aed3SPierre Pronchery
2099b077aed3SPierre ProncheryRSA_get_default_method(), RSA_get_ex_data and RSA_get_method()
2100b077aed3SPierre Pronchery
2101b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
2102b077aed3SPierre Pronchery
2103b077aed3SPierre Pronchery=item *
2104b077aed3SPierre Pronchery
2105b077aed3SPierre ProncheryRSA_get_version()
2106b077aed3SPierre Pronchery
2107b077aed3SPierre ProncheryThere is no replacement.
2108b077aed3SPierre Pronchery
2109b077aed3SPierre Pronchery=item *
2110b077aed3SPierre Pronchery
2111b077aed3SPierre ProncheryB<RSA_meth_*()>, RSA_new_method(), RSA_null_method and RSA_PKCS1_OpenSSL()
2112b077aed3SPierre Pronchery
2113b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>.
2114b077aed3SPierre Pronchery
2115b077aed3SPierre Pronchery=item *
2116b077aed3SPierre Pronchery
2117b077aed3SPierre ProncheryB<RSA_padding_add_*()>, B<RSA_padding_check_*()>
2118b077aed3SPierre Pronchery
2119b077aed3SPierre ProncherySee L</Deprecated low-level signing functions> and
2120b077aed3SPierre ProncheryL</Deprecated low-level encryption functions>.
2121b077aed3SPierre Pronchery
2122b077aed3SPierre Pronchery=item *
2123b077aed3SPierre Pronchery
2124b077aed3SPierre ProncheryRSA_print(), RSA_print_fp()
2125b077aed3SPierre Pronchery
2126b077aed3SPierre ProncherySee L</Deprecated low-level key printing functions>
2127b077aed3SPierre Pronchery
2128b077aed3SPierre Pronchery=item *
2129b077aed3SPierre Pronchery
2130b077aed3SPierre ProncheryRSA_public_encrypt(), RSA_private_decrypt()
2131b077aed3SPierre Pronchery
2132b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>
2133b077aed3SPierre Pronchery
2134b077aed3SPierre Pronchery=item *
2135b077aed3SPierre Pronchery
2136b077aed3SPierre ProncheryRSA_private_encrypt(), RSA_public_decrypt()
2137b077aed3SPierre Pronchery
2138b077aed3SPierre ProncheryThis is equivalent to doing sign and verify recover operations (with a padding
2139b077aed3SPierre Proncherymode of none). See L</Deprecated low-level signing functions>.
2140b077aed3SPierre Pronchery
2141b077aed3SPierre Pronchery=item *
2142b077aed3SPierre Pronchery
2143b077aed3SPierre ProncheryRSAPrivateKey_dup(), RSAPublicKey_dup()
2144b077aed3SPierre Pronchery
2145b077aed3SPierre ProncheryThere is no direct replacement. Applications may use L<EVP_PKEY_dup(3)>.
2146b077aed3SPierre Pronchery
2147b077aed3SPierre Pronchery=item *
2148b077aed3SPierre Pronchery
2149b077aed3SPierre ProncheryRSAPublicKey_it(), RSAPrivateKey_it()
2150b077aed3SPierre Pronchery
2151b077aed3SPierre ProncherySee L</Deprecated low-level key reading and writing functions>
2152b077aed3SPierre Pronchery
2153b077aed3SPierre Pronchery=item *
2154b077aed3SPierre Pronchery
2155b077aed3SPierre ProncheryRSA_set0_crt_params(), RSA_set0_factors(), RSA_set0_key(),
2156b077aed3SPierre ProncheryRSA_set0_multi_prime_params()
2157b077aed3SPierre Pronchery
2158b077aed3SPierre ProncherySee L</Deprecated low-level key parameter setters>.
2159b077aed3SPierre Pronchery
2160b077aed3SPierre Pronchery=item *
2161b077aed3SPierre Pronchery
2162b077aed3SPierre ProncheryRSA_set_default_method(), RSA_set_method(), RSA_set_ex_data()
2163b077aed3SPierre Pronchery
2164b077aed3SPierre ProncherySee L</Providers are a replacement for engines and low-level method overrides>
2165b077aed3SPierre Pronchery
2166b077aed3SPierre Pronchery=item *
2167b077aed3SPierre Pronchery
2168b077aed3SPierre ProncheryRSA_sign(), RSA_sign_ASN1_OCTET_STRING(), RSA_verify(),
2169b077aed3SPierre ProncheryRSA_verify_ASN1_OCTET_STRING(), RSA_verify_PKCS1_PSS(),
2170b077aed3SPierre ProncheryRSA_verify_PKCS1_PSS_mgf1()
2171b077aed3SPierre Pronchery
2172b077aed3SPierre ProncherySee L</Deprecated low-level signing functions>.
2173b077aed3SPierre Pronchery
2174b077aed3SPierre Pronchery=item *
2175b077aed3SPierre Pronchery
2176b077aed3SPierre ProncheryRSA_X931_derive_ex(), RSA_X931_generate_key_ex(), RSA_X931_hash_id()
2177b077aed3SPierre Pronchery
2178b077aed3SPierre ProncheryThere are no replacements for these functions.
2179b077aed3SPierre ProncheryX931 padding can be set using L<EVP_SIGNATURE-RSA(7)/Signature Parameters>.
2180b077aed3SPierre ProncherySee B<OSSL_SIGNATURE_PARAM_PAD_MODE>.
2181b077aed3SPierre Pronchery
2182b077aed3SPierre Pronchery=item *
2183b077aed3SPierre Pronchery
2184b077aed3SPierre ProncherySEED_encrypt(), SEED_decrypt(), SEED_set_key(), SEED_cbc_encrypt(),
2185b077aed3SPierre ProncherySEED_cfb128_encrypt(), SEED_ecb_encrypt(), SEED_ofb128_encrypt()
2186b077aed3SPierre Pronchery
2187b077aed3SPierre ProncherySee L</Deprecated low-level encryption functions>.
2188b077aed3SPierre ProncheryThe SEED algorithm has been moved to the L<Legacy Provider|/Legacy Algorithms>.
2189b077aed3SPierre Pronchery
2190b077aed3SPierre Pronchery=item *
2191b077aed3SPierre Pronchery
2192b077aed3SPierre ProncherySHA1_Init(), SHA1_Update(), SHA1_Final(), SHA1_Transform(),
2193b077aed3SPierre ProncherySHA224_Init(), SHA224_Update(), SHA224_Final(),
2194b077aed3SPierre ProncherySHA256_Init(), SHA256_Update(), SHA256_Final(), SHA256_Transform(),
2195b077aed3SPierre ProncherySHA384_Init(), SHA384_Update(), SHA384_Final(),
2196b077aed3SPierre ProncherySHA512_Init(), SHA512_Update(), SHA512_Final(), SHA512_Transform()
2197b077aed3SPierre Pronchery
2198b077aed3SPierre ProncherySee L</Deprecated low-level digest functions>.
2199b077aed3SPierre Pronchery
2200b077aed3SPierre Pronchery=item *
2201b077aed3SPierre Pronchery
2202b077aed3SPierre ProncherySRP_Calc_A(), SRP_Calc_B(), SRP_Calc_client_key(), SRP_Calc_server_key(),
2203b077aed3SPierre ProncherySRP_Calc_u(), SRP_Calc_x(), SRP_check_known_gN_param(), SRP_create_verifier(),
2204b077aed3SPierre ProncherySRP_create_verifier_BN(), SRP_get_default_gN(), SRP_user_pwd_free(), SRP_user_pwd_new(),
2205b077aed3SPierre ProncherySRP_user_pwd_set0_sv(), SRP_user_pwd_set1_ids(), SRP_user_pwd_set_gN(),
2206b077aed3SPierre ProncherySRP_VBASE_add0_user(), SRP_VBASE_free(), SRP_VBASE_get1_by_user(), SRP_VBASE_init(),
2207b077aed3SPierre ProncherySRP_VBASE_new(), SRP_Verify_A_mod_N(), SRP_Verify_B_mod_N()
2208b077aed3SPierre Pronchery
2209b077aed3SPierre ProncheryThere are no replacements for the SRP functions.
2210b077aed3SPierre Pronchery
2211b077aed3SPierre Pronchery=item *
2212b077aed3SPierre Pronchery
2213b077aed3SPierre ProncherySSL_CTX_set_tmp_dh_callback(), SSL_set_tmp_dh_callback(),
2214b077aed3SPierre ProncherySSL_CTX_set_tmp_dh(), SSL_set_tmp_dh()
2215b077aed3SPierre Pronchery
2216b077aed3SPierre ProncheryThese are used to set the Diffie-Hellman (DH) parameters that are to be used by
2217b077aed3SPierre Proncheryservers requiring ephemeral DH keys. Instead applications should consider using
2218b077aed3SPierre Proncherythe built-in DH parameters that are available by calling L<SSL_CTX_set_dh_auto(3)>
2219b077aed3SPierre Proncheryor L<SSL_set_dh_auto(3)>. If custom parameters are necessary then applications can
2220b077aed3SPierre Proncheryuse the alternative functions L<SSL_CTX_set0_tmp_dh_pkey(3)> and
2221b077aed3SPierre ProncheryL<SSL_set0_tmp_dh_pkey(3)>. There is no direct replacement for the "callback"
2222b077aed3SPierre Proncheryfunctions. The callback was originally useful in order to have different
2223b077aed3SPierre Proncheryparameters for export and non-export ciphersuites. Export ciphersuites are no
2224b077aed3SPierre Proncherylonger supported by OpenSSL. Use of the callback functions should be replaced
2225b077aed3SPierre Proncheryby one of the other methods described above.
2226b077aed3SPierre Pronchery
2227b077aed3SPierre Pronchery=item *
2228b077aed3SPierre Pronchery
2229b077aed3SPierre ProncherySSL_CTX_set_tlsext_ticket_key_cb()
2230b077aed3SPierre Pronchery
2231b077aed3SPierre ProncheryUse the new L<SSL_CTX_set_tlsext_ticket_key_evp_cb(3)> function instead.
2232b077aed3SPierre Pronchery
2233b077aed3SPierre Pronchery=item *
2234b077aed3SPierre Pronchery
2235b077aed3SPierre ProncheryWHIRLPOOL(), WHIRLPOOL_Init(), WHIRLPOOL_Update(), WHIRLPOOL_Final(),
2236b077aed3SPierre ProncheryWHIRLPOOL_BitUpdate()
2237b077aed3SPierre Pronchery
2238b077aed3SPierre ProncherySee L</Deprecated low-level digest functions>.
2239b077aed3SPierre ProncheryThe Whirlpool algorithm has been moved to the L<Legacy Provider|/Legacy Algorithms>.
2240b077aed3SPierre Pronchery
2241b077aed3SPierre Pronchery=item *
2242b077aed3SPierre Pronchery
2243b077aed3SPierre ProncheryX509_certificate_type()
2244b077aed3SPierre Pronchery
2245b077aed3SPierre ProncheryThis was an undocumented function. Applications can use L<X509_get0_pubkey(3)>
2246b077aed3SPierre Proncheryand L<X509_get0_signature(3)> instead.
2247b077aed3SPierre Pronchery
2248b077aed3SPierre Pronchery=item *
2249b077aed3SPierre Pronchery
2250b077aed3SPierre ProncheryX509_http_nbio(), X509_CRL_http_nbio()
2251b077aed3SPierre Pronchery
2252b077aed3SPierre ProncheryUse L<X509_load_http(3)> and L<X509_CRL_load_http(3)> instead.
2253b077aed3SPierre Pronchery
2254b077aed3SPierre Pronchery=back
2255b077aed3SPierre Pronchery
2256b077aed3SPierre Pronchery=head3 NID handling for provided keys and algorithms
2257b077aed3SPierre Pronchery
2258b077aed3SPierre ProncheryThe following functions for NID (numeric id) handling have changed semantics.
2259b077aed3SPierre Pronchery
2260b077aed3SPierre Pronchery=over 4
2261b077aed3SPierre Pronchery
2262b077aed3SPierre Pronchery=item *
2263b077aed3SPierre Pronchery
2264b077aed3SPierre ProncheryEVP_PKEY_id(), EVP_PKEY_get_id()
2265b077aed3SPierre Pronchery
2266b077aed3SPierre ProncheryThis function was previously used to reliably return the NID of
2267b077aed3SPierre Proncheryan EVP_PKEY object, e.g., to look up the name of the algorithm of
2268b077aed3SPierre Proncherysuch EVP_PKEY by calling L<OBJ_nid2sn(3)>. With the introduction
2269b077aed3SPierre Proncheryof L<provider(7)>s EVP_PKEY_id() or its new equivalent
2270b077aed3SPierre ProncheryL<EVP_PKEY_get_id(3)> might now also return the value -1
2271b077aed3SPierre Pronchery(B<EVP_PKEY_KEYMGMT>) indicating the use of a provider to
2272b077aed3SPierre Proncheryimplement the EVP_PKEY object. Therefore, the use of
2273b077aed3SPierre ProncheryL<EVP_PKEY_get0_type_name(3)> is recommended for retrieving
2274b077aed3SPierre Proncherythe name of the EVP_PKEY algorithm.
2275b077aed3SPierre Pronchery
2276b077aed3SPierre Pronchery=back
2277b077aed3SPierre Pronchery
2278b077aed3SPierre Pronchery=head2 Using the FIPS Module in applications
2279b077aed3SPierre Pronchery
2280b077aed3SPierre ProncherySee L<fips_module(7)> and L<OSSL_PROVIDER-FIPS(7)> for details.
2281b077aed3SPierre Pronchery
2282b077aed3SPierre Pronchery=head2 OpenSSL command line application changes
2283b077aed3SPierre Pronchery
2284b077aed3SPierre Pronchery=head3 New applications
2285b077aed3SPierre Pronchery
2286b077aed3SPierre ProncheryL<B<openssl kdf>|openssl-kdf(1)> uses the new L<EVP_KDF(3)> API.
2287b077aed3SPierre ProncheryL<B<openssl kdf>|openssl-mac(1)> uses the new L<EVP_MAC(3)> API.
2288b077aed3SPierre Pronchery
2289b077aed3SPierre Pronchery=head3 Added options
2290b077aed3SPierre Pronchery
2291b077aed3SPierre ProncheryB<-provider_path> and B<-provider> are available to all apps and can be used
2292b077aed3SPierre Proncherymultiple times to load any providers, such as the 'legacy' provider or third
2293b077aed3SPierre Proncheryparty providers. If used then the 'default' provider would also need to be
2294b077aed3SPierre Proncheryspecified if required. The B<-provider_path> must be specified before the
2295b077aed3SPierre ProncheryB<-provider> option.
2296b077aed3SPierre Pronchery
2297b077aed3SPierre ProncheryThe B<list> app has many new options. See L<openssl-list(1)> for more
2298b077aed3SPierre Proncheryinformation.
2299b077aed3SPierre Pronchery
2300b077aed3SPierre ProncheryB<-crl_lastupdate> and B<-crl_nextupdate> used by B<openssl ca> allows
2301b077aed3SPierre Proncheryexplicit setting of fields in the generated CRL.
2302b077aed3SPierre Pronchery
2303b077aed3SPierre Pronchery=head3 Removed options
2304b077aed3SPierre Pronchery
2305b077aed3SPierre ProncheryInteractive mode is not longer available.
2306b077aed3SPierre Pronchery
2307b077aed3SPierre ProncheryThe B<-crypt> option used by B<openssl passwd>.
2308b077aed3SPierre ProncheryThe B<-c> option used by B<openssl x509>, B<openssl dhparam>,
2309b077aed3SPierre ProncheryB<openssl dsaparam>, and B<openssl ecparam>.
2310b077aed3SPierre Pronchery
2311b077aed3SPierre Pronchery=head3 Other Changes
2312b077aed3SPierre Pronchery
2313b077aed3SPierre ProncheryThe output of Command line applications may have minor changes.
2314b077aed3SPierre ProncheryThese are primarily changes in capitalisation and white space.  However, in some
2315b077aed3SPierre Proncherycases, there are additional differences.
2316b077aed3SPierre ProncheryFor example, the DH parameters output from B<openssl dhparam> now lists 'P',
2317b077aed3SPierre Pronchery'Q', 'G' and 'pcounter' instead of 'prime', 'generator', 'subgroup order' and
2318b077aed3SPierre Pronchery'counter' respectively.
2319b077aed3SPierre Pronchery
2320b077aed3SPierre ProncheryThe B<openssl> commands that read keys, certificates, and CRLs now
2321b077aed3SPierre Proncheryautomatically detect the PEM or DER format of the input files so it is not
2322b077aed3SPierre Proncherynecessary to explicitly specify the input format anymore. However if the
2323b077aed3SPierre Proncheryinput format option is used the specified format will be required.
2324b077aed3SPierre Pronchery
2325b077aed3SPierre ProncheryB<openssl speed> no longer uses low-level API calls.
2326b077aed3SPierre ProncheryThis implies some of the performance numbers might not be comparable with the
2327b077aed3SPierre Proncheryprevious releases due to higher overhead. This applies particularly to
2328b077aed3SPierre Proncherymeasuring performance on smaller data chunks.
2329b077aed3SPierre Pronchery
2330b077aed3SPierre Proncheryb<openssl dhparam>, B<openssl dsa>, B<openssl gendsa>, B<openssl dsaparam>,
2331b077aed3SPierre ProncheryB<openssl genrsa> and B<openssl rsa> have been modified to use PKEY APIs.
2332b077aed3SPierre ProncheryB<openssl genrsa> and B<openssl rsa> now write PKCS #8 keys by default.
2333b077aed3SPierre Pronchery
2334b077aed3SPierre Pronchery=head3 Default settings
2335b077aed3SPierre Pronchery
2336b077aed3SPierre Pronchery"SHA256" is now the default digest for TS query used by B<openssl ts>.
2337b077aed3SPierre Pronchery
2338b077aed3SPierre Pronchery=head3 Deprecated apps
2339b077aed3SPierre Pronchery
2340b077aed3SPierre ProncheryB<openssl rsautl> is deprecated, use B<openssl pkeyutl> instead.
2341b077aed3SPierre ProncheryB<openssl dhparam>, B<openssl dsa>, B<openssl gendsa>, B<openssl dsaparam>,
2342b077aed3SPierre ProncheryB<openssl genrsa>, B<openssl rsa>, B<openssl genrsa> and B<openssl rsa> are
2343b077aed3SPierre Proncherynow in maintenance mode and no new features will be added to them.
2344b077aed3SPierre Pronchery
2345b077aed3SPierre Pronchery=head2 TLS Changes
2346b077aed3SPierre Pronchery
2347b077aed3SPierre Pronchery=over 4
2348b077aed3SPierre Pronchery
2349b077aed3SPierre Pronchery=item *
2350b077aed3SPierre Pronchery
2351b077aed3SPierre ProncheryTLS 1.3 FFDHE key exchange support added
2352b077aed3SPierre Pronchery
2353b077aed3SPierre ProncheryThis uses DH safe prime named groups.
2354b077aed3SPierre Pronchery
2355b077aed3SPierre Pronchery=item *
2356b077aed3SPierre Pronchery
2357b077aed3SPierre ProncherySupport for fully "pluggable" TLSv1.3 groups.
2358b077aed3SPierre Pronchery
2359b077aed3SPierre ProncheryThis means that providers may supply their own group implementations (using
2360b077aed3SPierre Proncheryeither the "key exchange" or the "key encapsulation" methods) which will
2361b077aed3SPierre Proncheryautomatically be detected and used by libssl.
2362b077aed3SPierre Pronchery
2363b077aed3SPierre Pronchery=item *
2364b077aed3SPierre Pronchery
2365b077aed3SPierre ProncherySSL and SSL_CTX options are now 64 bit instead of 32 bit.
2366b077aed3SPierre Pronchery
2367b077aed3SPierre ProncheryThe signatures of the functions to get and set options on SSL and
2368b077aed3SPierre ProncherySSL_CTX objects changed from "unsigned long" to "uint64_t" type.
2369b077aed3SPierre Pronchery
2370b077aed3SPierre ProncheryThis may require source code changes. For example it is no longer possible
2371b077aed3SPierre Proncheryto use the B<SSL_OP_> macro values in preprocessor C<#if> conditions.
2372b077aed3SPierre ProncheryHowever it is still possible to test whether these macros are defined or not.
2373b077aed3SPierre Pronchery
2374b077aed3SPierre ProncherySee L<SSL_CTX_get_options(3)>, L<SSL_CTX_set_options(3)>,
2375b077aed3SPierre ProncheryL<SSL_get_options(3)> and L<SSL_set_options(3)>.
2376b077aed3SPierre Pronchery
2377b077aed3SPierre Pronchery=item *
2378b077aed3SPierre Pronchery
2379b077aed3SPierre ProncherySSL_set1_host() and SSL_add1_host() Changes
2380b077aed3SPierre Pronchery
2381b077aed3SPierre ProncheryThese functions now take IP literal addresses as well as actual hostnames.
2382b077aed3SPierre Pronchery
2383b077aed3SPierre Pronchery=item *
2384b077aed3SPierre Pronchery
2385b077aed3SPierre ProncheryAdded SSL option SSL_OP_CLEANSE_PLAINTEXT
2386b077aed3SPierre Pronchery
2387b077aed3SPierre ProncheryIf the option is set, openssl cleanses (zeroizes) plaintext bytes from
2388b077aed3SPierre Proncheryinternal buffers after delivering them to the application. Note,
2389b077aed3SPierre Proncherythe application is still responsible for cleansing other copies
2390b077aed3SPierre Pronchery(e.g.: data received by L<SSL_read(3)>).
2391b077aed3SPierre Pronchery
2392b077aed3SPierre Pronchery=item *
2393b077aed3SPierre Pronchery
2394b077aed3SPierre ProncheryClient-initiated renegotiation is disabled by default.
2395b077aed3SPierre Pronchery
2396b077aed3SPierre ProncheryTo allow it, use the B<-client_renegotiation> option,
2397b077aed3SPierre Proncherythe B<SSL_OP_ALLOW_CLIENT_RENEGOTIATION> flag, or the C<ClientRenegotiation>
2398b077aed3SPierre Proncheryconfig parameter as appropriate.
2399b077aed3SPierre Pronchery
2400b077aed3SPierre Pronchery=item *
2401b077aed3SPierre Pronchery
2402b077aed3SPierre ProncherySecure renegotiation is now required by default for TLS connections
2403b077aed3SPierre Pronchery
2404b077aed3SPierre ProncherySupport for RFC 5746 secure renegotiation is now required by default for
2405b077aed3SPierre ProncherySSL or TLS connections to succeed.  Applications that require the ability
2406b077aed3SPierre Proncheryto connect to legacy peers will need to explicitly set
2407b077aed3SPierre ProncherySSL_OP_LEGACY_SERVER_CONNECT.  Accordingly, SSL_OP_LEGACY_SERVER_CONNECT
2408b077aed3SPierre Proncheryis no longer set as part of SSL_OP_ALL.
2409b077aed3SPierre Pronchery
2410b077aed3SPierre Pronchery=item *
2411b077aed3SPierre Pronchery
2412b077aed3SPierre ProncheryCombining the Configure options no-ec and no-dh no longer disables TLSv1.3
2413b077aed3SPierre Pronchery
2414b077aed3SPierre ProncheryTypically if OpenSSL has no EC or DH algorithms then it cannot support
2415b077aed3SPierre Proncheryconnections with TLSv1.3. However OpenSSL now supports "pluggable" groups
2416b077aed3SPierre Proncherythrough providers. Therefore third party providers may supply group
2417b077aed3SPierre Proncheryimplementations even where there are no built-in ones. Attempting to create
2418b077aed3SPierre ProncheryTLS connections in such a build without also disabling TLSv1.3 at run time or
2419b077aed3SPierre Proncheryusing third party provider groups may result in handshake failures. TLSv1.3
2420b077aed3SPierre Proncherycan be disabled at compile time using the "no-tls1_3" Configure option.
2421b077aed3SPierre Pronchery
2422b077aed3SPierre Pronchery=item *
2423b077aed3SPierre Pronchery
2424b077aed3SPierre ProncherySSL_CTX_set_ciphersuites() and SSL_set_ciphersuites() changes.
2425b077aed3SPierre Pronchery
2426b077aed3SPierre ProncheryThe methods now ignore unknown ciphers.
2427b077aed3SPierre Pronchery
2428b077aed3SPierre Pronchery=item *
2429b077aed3SPierre Pronchery
2430b077aed3SPierre ProncherySecurity callback change.
2431b077aed3SPierre Pronchery
2432b077aed3SPierre ProncheryThe security callback, which can be customised by application code, supports
2433b077aed3SPierre Proncherythe security operation SSL_SECOP_TMP_DH. This is defined to take an EVP_PKEY
2434b077aed3SPierre Proncheryin the "other" parameter. In most places this is what is passed. All these
2435b077aed3SPierre Proncheryplaces occur server side. However there was one client side call of this
2436b077aed3SPierre Proncherysecurity operation and it passed a DH object instead. This is incorrect
2437b077aed3SPierre Proncheryaccording to the definition of SSL_SECOP_TMP_DH, and is inconsistent with all
2438b077aed3SPierre Proncheryof the other locations. Therefore this client side call has been changed to
2439b077aed3SPierre Proncherypass an EVP_PKEY instead.
2440b077aed3SPierre Pronchery
2441b077aed3SPierre Pronchery=item *
2442b077aed3SPierre Pronchery
2443b077aed3SPierre ProncheryNew SSL option SSL_OP_IGNORE_UNEXPECTED_EOF
2444b077aed3SPierre Pronchery
2445b077aed3SPierre ProncheryThe SSL option SSL_OP_IGNORE_UNEXPECTED_EOF is introduced. If that option
2446b077aed3SPierre Proncheryis set, an unexpected EOF is ignored, it pretends a close notify was received
2447b077aed3SPierre Proncheryinstead and so the returned error becomes SSL_ERROR_ZERO_RETURN.
2448b077aed3SPierre Pronchery
2449b077aed3SPierre Pronchery=item *
2450b077aed3SPierre Pronchery
2451b077aed3SPierre ProncheryThe security strength of SHA1 and MD5 based signatures in TLS has been reduced.
2452b077aed3SPierre Pronchery
2453b077aed3SPierre ProncheryThis results in SSL 3, TLS 1.0, TLS 1.1 and DTLS 1.0 no longer
2454b077aed3SPierre Proncheryworking at the default security level of 1 and instead requires security
2455b077aed3SPierre Proncherylevel 0. The security level can be changed either using the cipher string
2456b077aed3SPierre Proncherywith C<@SECLEVEL>, or calling L<SSL_CTX_set_security_level(3)>. This also means
2457b077aed3SPierre Proncherythat where the signature algorithms extension is missing from a ClientHello
2458b077aed3SPierre Proncherythen the handshake will fail in TLS 1.2 at security level 1. This is because,
2459b077aed3SPierre Proncheryalthough this extension is optional, failing to provide one means that
2460b077aed3SPierre ProncheryOpenSSL will fallback to a default set of signature algorithms. This default
2461b077aed3SPierre Proncheryset requires the availability of SHA1.
2462b077aed3SPierre Pronchery
2463b077aed3SPierre Pronchery=item *
2464b077aed3SPierre Pronchery
2465b077aed3SPierre ProncheryX509 certificates signed using SHA1 are no longer allowed at security level 1 and above.
2466b077aed3SPierre Pronchery
2467b077aed3SPierre ProncheryIn TLS/SSL the default security level is 1. It can be set either using the cipher
2468b077aed3SPierre Proncherystring with C<@SECLEVEL>, or calling L<SSL_CTX_set_security_level(3)>. If the
2469b077aed3SPierre Proncheryleaf certificate is signed with SHA-1, a call to L<SSL_CTX_use_certificate(3)>
2470b077aed3SPierre Proncherywill fail if the security level is not lowered first.
2471b077aed3SPierre ProncheryOutside TLS/SSL, the default security level is -1 (effectively 0). It can
2472b077aed3SPierre Proncherybe set using L<X509_VERIFY_PARAM_set_auth_level(3)> or using the B<-auth_level>
2473b077aed3SPierre Proncheryoptions of the commands.
2474b077aed3SPierre Pronchery
2475b077aed3SPierre Pronchery=back
2476b077aed3SPierre Pronchery
2477b077aed3SPierre Pronchery=head1 SEE ALSO
2478b077aed3SPierre Pronchery
2479b077aed3SPierre ProncheryL<fips_module(7)>
2480b077aed3SPierre Pronchery
2481b077aed3SPierre Pronchery=head1 HISTORY
2482b077aed3SPierre Pronchery
2483b077aed3SPierre ProncheryThe migration guide was created for OpenSSL 3.0.
2484b077aed3SPierre Pronchery
2485b077aed3SPierre Pronchery=head1 COPYRIGHT
2486b077aed3SPierre Pronchery
2487*44096ebdSEnji CooperCopyright 2021-2024 The OpenSSL Project Authors. All Rights Reserved.
2488b077aed3SPierre Pronchery
2489b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
2490b077aed3SPierre Proncherythis file except in compliance with the License.  You can obtain a copy
2491b077aed3SPierre Proncheryin the file LICENSE in the source distribution or at
2492b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>.
2493b077aed3SPierre Pronchery
2494b077aed3SPierre Pronchery=cut
2495