xref: /openbsd-src/lib/libcrypto/man/RSA_new.3 (revision 7350f337b9e3eb4461d99580e625c7ef148d107c)
1.\"	$OpenBSD: RSA_new.3,v 1.14 2019/06/10 14:58:48 schwarze Exp $
2.\"	OpenSSL doc/man3/RSA_new.pod 99d63d46 Oct 26 13:56:48 2016 -0400
3.\"	OpenSSL doc/crypto/rsa.pod 35d2e327 Jun 3 16:19:49 2016 -0400
4.\"
5.\" This file was written by Ulf Moeller <ulf@openssl.org>.
6.\" Copyright (c) 2000, 2002, 2016 The OpenSSL Project.  All rights reserved.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\"
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\"
15.\" 2. Redistributions in binary form must reproduce the above copyright
16.\"    notice, this list of conditions and the following disclaimer in
17.\"    the documentation and/or other materials provided with the
18.\"    distribution.
19.\"
20.\" 3. All advertising materials mentioning features or use of this
21.\"    software must display the following acknowledgment:
22.\"    "This product includes software developed by the OpenSSL Project
23.\"    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
24.\"
25.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26.\"    endorse or promote products derived from this software without
27.\"    prior written permission. For written permission, please contact
28.\"    openssl-core@openssl.org.
29.\"
30.\" 5. Products derived from this software may not be called "OpenSSL"
31.\"    nor may "OpenSSL" appear in their names without prior written
32.\"    permission of the OpenSSL Project.
33.\"
34.\" 6. Redistributions of any form whatsoever must retain the following
35.\"    acknowledgment:
36.\"    "This product includes software developed by the OpenSSL Project
37.\"    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
38.\"
39.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50.\" OF THE POSSIBILITY OF SUCH DAMAGE.
51.\"
52.Dd $Mdocdate: June 10 2019 $
53.Dt RSA_NEW 3
54.Os
55.Sh NAME
56.Nm RSA_new ,
57.Nm RSA_up_ref ,
58.Nm RSA_free
59.Nd allocate and free RSA objects
60.Sh SYNOPSIS
61.In openssl/rsa.h
62.Ft RSA *
63.Fn RSA_new void
64.Ft int
65.Fo RSA_up_ref
66.Fa "RSA *rsa"
67.Fc
68.Ft void
69.Fo RSA_free
70.Fa "RSA *rsa"
71.Fc
72.Sh DESCRIPTION
73The RSA functions implement RSA public key encryption and signatures
74as defined in PKCS #1 v2.0 (RFC 2437).
75.Pp
76.Fn RSA_new
77allocates and initializes an
78.Vt RSA
79structure, setting the reference count to 1.
80It is equivalent to calling
81.Xr RSA_new_method 3
82with a
83.Dv NULL
84argument.
85.Pp
86.Fn RSA_up_ref
87increments the reference count by 1.
88.Pp
89.Fn RSA_free
90decrements the reference count by 1.
91If it reaches 0, it calls the optional
92.Fa finish
93function set up with
94.Xr RSA_meth_set_finish 3 ,
95calls
96.Xr ENGINE_finish 3
97if
98.Fa rsa
99uses an engine, and frees the
100.Vt RSA
101structure and its components.
102The key is erased before the memory is returned to the system.
103If
104.Fa rsa
105is a
106.Dv NULL
107pointer, no action occurs.
108.Pp
109The
110.Vt RSA
111structure consists of several
112.Vt BIGNUM
113components.
114It can contain public as well as private RSA keys:
115.Bd -literal
116typedef struct {
117	BIGNUM *n;		// public modulus
118	BIGNUM *e;		// public exponent
119	BIGNUM *d;		// private exponent
120	BIGNUM *p;		// secret prime factor
121	BIGNUM *q;		// secret prime factor
122	BIGNUM *dmp1;		// d mod (p-1)
123	BIGNUM *dmq1;		// d mod (q-1)
124	BIGNUM *iqmp;		// q^-1 mod p
125	// ...
126} RSA;
127.Ed
128.Pp
129In public keys, the private exponent
130.Fa d
131and the related secret values
132.Fa p , q , dmp1 , dmp2 ,
133and
134.Fa iqmp
135are
136.Dv NULL .
137.Pp
138.Fa p ,
139.Fa q ,
140.Fa dmp1 ,
141.Fa dmq1 ,
142and
143.Fa iqmp
144may be
145.Dv NULL
146in private keys, but the RSA operations are much faster when these
147values are available.
148.Pp
149Note that RSA keys may use non-standard
150.Vt RSA_METHOD
151implementations, either directly or by the use of
152.Vt ENGINE
153modules.
154In some cases (e.g. an
155.Vt ENGINE
156providing support for hardware-embedded keys), these
157.Vt BIGNUM
158values will not be used by the implementation or may be used for
159alternative data storage.
160For this reason, applications should generally avoid using
161.Vt RSA
162structure elements directly and instead use API functions to query
163or modify keys.
164.Sh RETURN VALUES
165If the allocation fails,
166.Fn RSA_new
167returns
168.Dv NULL
169and sets an error code that can be obtained by
170.Xr ERR_get_error 3 .
171Otherwise it returns a pointer to the newly allocated structure.
172.Pp
173.Fn RSA_up_ref
174returns 1 for success or 0 for failure.
175.Sh SEE ALSO
176.Xr BN_new 3 ,
177.Xr crypto 3 ,
178.Xr d2i_RSAPublicKey 3 ,
179.Xr DH_new 3 ,
180.Xr DSA_new 3 ,
181.Xr EVP_PKEY_set1_RSA 3 ,
182.Xr RSA_blinding_on 3 ,
183.Xr RSA_check_key 3 ,
184.Xr RSA_generate_key 3 ,
185.Xr RSA_get0_key 3 ,
186.Xr RSA_get_ex_new_index 3 ,
187.Xr RSA_meth_new 3 ,
188.Xr RSA_padding_add_PKCS1_type_1 3 ,
189.Xr RSA_print 3 ,
190.Xr RSA_private_encrypt 3 ,
191.Xr RSA_PSS_PARAMS_new 3 ,
192.Xr RSA_public_encrypt 3 ,
193.Xr RSA_set_method 3 ,
194.Xr RSA_sign 3 ,
195.Xr RSA_sign_ASN1_OCTET_STRING 3 ,
196.Xr RSA_size 3
197.Sh STANDARDS
198SSL, PKCS #1 v2.0
199.Pp
200RSA was covered by a US patent which expired in September 2000.
201.Sh HISTORY
202.Fn RSA_new
203and
204.Fn RSA_free
205appeared in SSLeay 0.4 or earlier and have been available since
206.Ox 2.4 .
207.Pp
208.Fn RSA_up_ref
209first appeared in OpenSSL 0.9.7 and has been available since
210.Ox 3.2 .
211