]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/EVP_PKEY_set1_RSA.pod
Update copyright year
[thirdparty/openssl.git] / doc / man3 / EVP_PKEY_set1_RSA.pod
CommitLineData
d30e4c5b
DSH
1=pod
2
3=head1 NAME
4
5EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY,
6EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY,
2872dbe1 7EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY,
8e826a33 8EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH,
ffd89124
AS
9EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH,
10EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash,
896dcda1
DB
11EVP_PKEY_get0, EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id,
12EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine, EVP_PKEY_get0_engine -
13EVP_PKEY assignment functions
d30e4c5b
DSH
14
15=head1 SYNOPSIS
16
17 #include <openssl/evp.h>
18
8e53d94d
MC
19 int EVP_PKEY_id(const EVP_PKEY *pkey);
20 int EVP_PKEY_base_id(const EVP_PKEY *pkey);
21 int EVP_PKEY_type(int type);
22
23Deprecated since OpenSSL 3.0, can be hidden entirely by defining
24B<OPENSSL_API_COMPAT> with a suitable version value, see
25L<openssl_user_macros(7)>:
26
27 int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type);
28
aebb9aac
RS
29 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
30 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
31 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key);
32 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
d30e4c5b
DSH
33
34 RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
35 DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
36 DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
37 EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
38
ebad0b0b 39 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
ffd89124
AS
40 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
41 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
7bc0fdd3
MC
42 const RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
43 const DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
44 const DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
45 const EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
896dcda1 46 void *EVP_PKEY_get0(const EVP_PKEY *pkey);
2872dbe1 47
aebb9aac
RS
48 int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
49 int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
50 int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
51 int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
ffd89124
AS
52 int EVP_PKEY_assign_POLY1305(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
53 int EVP_PKEY_assign_SIPHASH(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
d30e4c5b 54
770dfe8d 55 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey);
8e826a33
DSH
56 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *engine);
57
d30e4c5b
DSH
58=head1 DESCRIPTION
59
4f76d62f 60EVP_PKEY_base_id() returns the type of I<pkey>. For example
b36a2efd
DSH
61an RSA key will return B<EVP_PKEY_RSA>.
62
4f76d62f 63EVP_PKEY_id() returns the actual OID associated with I<pkey>. Historically keys
b36a2efd
DSH
64using the same algorithm could use different OIDs. For example an RSA key could
65use the OIDs corresponding to the NIDs B<NID_rsaEncryption> (equivalent to
d1beebdf 66B<EVP_PKEY_RSA>) or B<NID_rsa> (equivalent to B<EVP_PKEY_RSA2>). The use of
b36a2efd
DSH
67alternative non-standard OIDs is now rare so B<EVP_PKEY_RSA2> et al are not
68often seen in practice.
69
4f76d62f 70EVP_PKEY_type() returns the underlying type of the NID I<type>. For example
b36a2efd 71EVP_PKEY_type(EVP_PKEY_RSA2) will return B<EVP_PKEY_RSA>.
d30e4c5b 72
8e53d94d
MC
73EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() and
74EVP_PKEY_set1_EC_KEY() set the key referenced by I<pkey> to I<key>. These
75functions are deprecated. Applications should instead use
76L<EVP_PKEY_fromdata(3)>.
77
78EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
79EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305() and
80EVP_PKEY_assign_SIPHASH() set the referenced key to I<key> however these use
81the supplied I<key> internally and so I<key> will be freed when the parent
82I<pkey> is freed. These macros are deprecated. Applications should instead read
83an EVP_PKEY directly using the OSSL_DECODER APIs (see
84L<OSSL_DECODER_CTX_new_for_pkey(3)>), or construct an EVP_PKEY from data using
85L<EVP_PKEY_fromdata(3)>.
86
87EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
88EVP_PKEY_get1_EC_KEY() return the referenced key in I<pkey> or NULL if the
cc57dc96 89key is not of the correct type. The returned key must be freed after use.
8e53d94d
MC
90These functions are deprecated. Applications should instead use the EVP_PKEY
91directly where possible. If access to the low level key parameters is required
92then applications should use L<EVP_PKEY_get_params(3)> and other similar
93functions. To write an EVP_PKEY out use the OSSL_ENCODER APIs (see
94L<OSSL_ENCODER_CTX_new_for_pkey(3)>).
95
96EVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305(), EVP_PKEY_get0_siphash(),
97EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), EVP_PKEY_get0_DH() and
98EVP_PKEY_get0_EC_KEY() return the referenced key in I<pkey> or NULL if the
cc57dc96
MC
99key is not of the correct type. The reference count of the returned key is
100B<not> incremented and so the key must not be freed after use. These functions
101are deprecated. Applications should instead use the EVP_PKEY directly where
8e53d94d
MC
102possible. If access to the low level key parameters is required then
103applications should use L<EVP_PKEY_get_params(3)> and other similar functions.
104To write an EVP_PKEY out use the OSSL_ENCODER APIs (see
896dcda1
DB
105L<OSSL_ENCODER_CTX_new_for_pkey(3)>). EVP_PKEY_get0() returns a pointer to the
106legacy key or NULL if the key is not legacy.
8e53d94d 107
cc57dc96
MC
108Note that if an EVP_PKEY was not constructed using one of the deprecated
109functions such as EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH()
110or EVP_PKEY_set1_EC_KEY(), or via the similarly named B<EVP_PKEY_assign> macros
111described above then the internal key will be managed by a provider (see
112L<provider(7)>). In that case the key returned by EVP_PKEY_get1_RSA(),
113EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH(), EVP_PKEY_get1_EC_KEY(),
114EVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305(), EVP_PKEY_get0_siphash(),
115EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), EVP_PKEY_get0_DH() or
116EVP_PKEY_get0_EC_KEY() will be a cached copy of the provider's key. Subsequent
117updates to the provider's key will not be reflected back in the cached copy, and
118updates made by an application to the returned key will not be reflected back in
119the provider's key. Subsequent calls to EVP_PKEY_get1_RSA(),
120EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and EVP_PKEY_get1_EC_KEY() will always
121return the cached copy returned by the first call.
122
8e53d94d
MC
123EVP_PKEY_get0_engine() returns a reference to the ENGINE handling I<pkey>. This
124function is deprecated. Applications should use providers instead of engines
125(see L<provider(7)> for details).
770dfe8d 126
4f76d62f 127EVP_PKEY_set1_engine() sets the ENGINE handling I<pkey> to I<engine>. It
8e826a33 128must be called after the key algorithm and components are set up.
4f76d62f 129If I<engine> does not include an B<EVP_PKEY_METHOD> for I<pkey> an
8e53d94d
MC
130error occurs. This function is deprecated. Applications should use providers
131instead of engines (see L<provider(7)> for details).
8e826a33 132
8e53d94d
MC
133EVP_PKEY_set_alias_type() allows modifying an EVP_PKEY to use a
134different set of algorithms than the default. This function is deprecated and
135was previously needed as a workaround to recognise SM2 keys. From OpenSSL 3.0,
136this key type is internally recognised so the workaround is no longer needed.
137Functionality is still retained as it is, but will only work with EVP_PKEYs
138with a legacy internal key.
2f2e6b62 139
4f76d62f
RL
140=head1 WARNINGS
141
142The following functions are only reliable with B<EVP_PKEY>s that have
143been assigned an internal key with EVP_PKEY_assign_*():
144
145EVP_PKEY_id(), EVP_PKEY_base_id(), EVP_PKEY_type(), EVP_PKEY_set_alias_type()
146
147For EVP_PKEY key type checking purposes, L<EVP_PKEY_is_a(3)> is more generic.
148
7bc0fdd3
MC
149The keys returned from the functions EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(),
150EVP_PKEY_get0_DH() and EVP_PKEY_get0_EC_KEY() were changed to have a "const"
151return type in OpenSSL 3.0. As described above the keys returned may be cached
152copies of the key held in a provider. Due to this, and unlike in earlier
153versions of OpenSSL, they should be considered read-only copies of the key.
154Updates to these keys will not be reflected back in the provider side key. The
155EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
156EVP_PKEY_get1_EC_KEY() functions were not changed to have a "const" return type
157in order that applications can "free" the return value. However applications
158should still consider them as read-only copies.
159
d30e4c5b
DSH
160=head1 NOTES
161
162In accordance with the OpenSSL naming convention the key obtained
4f76d62f
RL
163from or assigned to the I<pkey> using the B<1> functions must be
164freed as well as I<pkey>.
d30e4c5b 165
ffd89124
AS
166EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
167EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305()
168and EVP_PKEY_assign_SIPHASH() are implemented as macros.
d30e4c5b 169
f4e4382c
RL
170EVP_PKEY_assign_EC_KEY() looks at the curve name id to determine if
171the passed B<EC_KEY> is an L<SM2(7)> key, and will set the B<EVP_PKEY>
172type to B<EVP_PKEY_SM2> in that case, instead of B<EVP_PKEY_EC>.
173
174It's possible to switch back and forth between the types B<EVP_PKEY_EC>
175and B<EVP_PKEY_SM2> with a call to EVP_PKEY_set_alias_type() on keys
176assigned with this macro if it's desirable to do a normal EC
177computations with the SM2 curve instead of the special SM2
178computations, and vice versa.
179
b36a2efd
DSH
180Most applications wishing to know a key type will simply call
181EVP_PKEY_base_id() and will not care about the actual type:
182which will be identical in almost all cases.
183
184Previous versions of this document suggested using EVP_PKEY_type(pkey->type)
185to determine the type of a key. Since B<EVP_PKEY> is now opaque this
186is no longer possible: the equivalent is EVP_PKEY_base_id(pkey).
187
8e826a33
DSH
188EVP_PKEY_set1_engine() is typically used by an ENGINE returning an HSM
189key as part of its routine to load a private key.
190
d30e4c5b
DSH
191=head1 RETURN VALUES
192
193EVP_PKEY_set1_RSA(), EVP_PKEY_set1_DSA(), EVP_PKEY_set1_DH() and
194EVP_PKEY_set1_EC_KEY() return 1 for success or 0 for failure.
195
196EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
4f76d62f 197EVP_PKEY_get1_EC_KEY() return the referenced key or NULL if
d30e4c5b
DSH
198an error occurred.
199
ffd89124
AS
200EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
201EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305()
202and EVP_PKEY_assign_SIPHASH() return 1 for success and 0 for failure.
d30e4c5b 203
b36a2efd
DSH
204EVP_PKEY_base_id(), EVP_PKEY_id() and EVP_PKEY_type() return a key
205type or B<NID_undef> (equivalently B<EVP_PKEY_NONE>) on error.
206
8e826a33
DSH
207EVP_PKEY_set1_engine() returns 1 for success and 0 for failure.
208
2f2e6b62
JL
209EVP_PKEY_set_alias_type() returns 1 for success and 0 for error.
210
4564e77a
PY
211=head1 EXAMPLES
212
213After loading an ECC key, it is possible to convert it to using SM2
214algorithms with EVP_PKEY_set_alias_type:
215
216 EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2);
217
d30e4c5b
DSH
218=head1 SEE ALSO
219
f4e4382c 220L<EVP_PKEY_new(3)>, L<SM2(7)>
d30e4c5b 221
14711fff
RL
222=head1 HISTORY
223
8e53d94d
MC
224EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY,
225EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY,
226EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY,
227EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH,
228EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH,
229EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash,
230EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine and EVP_PKEY_get0_engine were
231deprecated in OpenSSL 3.0.
14711fff 232
7bc0fdd3
MC
233The return value from EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH,
234EVP_PKEY_get0_EC_KEY were made const in OpenSSL 3.0.
235
e2f92610
RS
236=head1 COPYRIGHT
237
8020d79b 238Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 239
4746f25a 240Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
241this file except in compliance with the License. You can obtain a copy
242in the file LICENSE in the source distribution or at
243L<https://www.openssl.org/source/license.html>.
244
245=cut