RSA_generate_key.pod 3.2 KB
Newer Older
U
Ulf Möller 已提交
1 2 3 4
=pod

=head1 NAME

P
Paul Yang 已提交
5 6
RSA_generate_key_ex, RSA_generate_key,
RSA_generate_multi_prime_key - generate RSA key pair
U
Ulf Möller 已提交
7 8 9 10 11

=head1 SYNOPSIS

 #include <openssl/rsa.h>

M
Matt Caswell 已提交
12
 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
P
Paul Yang 已提交
13
 int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb);
M
Matt Caswell 已提交
14 15 16

Deprecated:

17
 #if OPENSSL_API_COMPAT < 0x00908000L
U
Ulf Möller 已提交
18
 RSA *RSA_generate_key(int num, unsigned long e,
19
                       void (*callback)(int, int, void *), void *cb_arg);
20
 #endif
U
Ulf Möller 已提交
21 22 23

=head1 DESCRIPTION

P
Paul Yang 已提交
24 25
RSA_generate_key_ex() generates a 2-prime RSA key pair and stores it in the
B<RSA> structure provided in B<rsa>. The pseudo-random number generator must
M
Matt Caswell 已提交
26
be seeded prior to calling RSA_generate_key_ex().
U
Ulf Möller 已提交
27

P
Paul Yang 已提交
28 29 30 31 32 33 34 35 36
RSA_generate_multi_prime_key() generates a multi-prime RSA key pair and stores
it in the B<RSA> structure provided in B<rsa>. The number of primes is given by
the B<primes> parameter. The pseudo-random number generator must be seeded prior
to calling RSA_generate_multi_prime_key().

The modulus size will be of length B<bits>, the number of primes to form the
modulus will be B<primes>, and the public exponent will be B<e>. Key sizes
with B<num> E<lt> 1024 should be considered insecure. The exponent is an odd
number, typically 3, 17 or 65537.
U
Ulf Möller 已提交
37

38 39 40 41 42 43 44
In order to maintain adequate security level, the maximum number of permitted
B<primes> depends on modulus bit length:

   <1024 | >=1024 | >=4096 | >=8192
   ------+--------+--------+-------
     2   |   3    |   4    |   5

U
Ulf Möller 已提交
45
A callback function may be used to provide feedback about the
M
Matt Caswell 已提交
46 47
progress of the key generation. If B<cb> is not B<NULL>, it
will be called as follows using the BN_GENCB_call() function
R
Rich Salz 已提交
48
described on the L<BN_generate_prime(3)> page.
U
Ulf Möller 已提交
49

50 51 52 53
RSA_generate_prime() is similar to RSA_generate_prime_ex() but
expects an old-style callback function; see
L<BN_generate_prime(3)> for information on the old-style callback.

R
Rich Salz 已提交
54
=over 2
U
Ulf Möller 已提交
55 56 57 58

=item *

While a random prime number is generated, it is called as
R
Rich Salz 已提交
59
described in L<BN_generate_prime(3)>.
U
Ulf Möller 已提交
60 61 62 63

=item *

When the n-th randomly generated prime is rejected as not
M
Matt Caswell 已提交
64
suitable for the key, B<BN_GENCB_call(cb, 2, n)> is called.
U
Ulf Möller 已提交
65 66 67 68

=item *

When a random p has been found with p-1 relatively prime to B<e>,
M
Matt Caswell 已提交
69
it is called as B<BN_GENCB_call(cb, 3, 0)>.
U
Ulf Möller 已提交
70 71 72

=back

P
Paul Yang 已提交
73 74
The process is then repeated for prime q and other primes (if any)
with B<BN_GENCB_call(cb, 3, i)> where B<i> indicates the i-th prime.
M
Matt Caswell 已提交
75

76
=head1 RETURN VALUES
U
Ulf Möller 已提交
77

P
Paul Yang 已提交
78
RSA_generate_multi_prime_key() returns 1 on success or 0 on error.
R
Doc fix  
Rich Salz 已提交
79
RSA_generate_key_ex() returns 1 on success or 0 on error.
R
Rich Salz 已提交
80
The error codes can be obtained by L<ERR_get_error(3)>.
U
Ulf Möller 已提交
81

82 83 84
RSA_generate_key() returns a pointer to the RSA structure or
B<NULL> if the key generation fails.

U
Ulf Möller 已提交
85 86
=head1 BUGS

M
Matt Caswell 已提交
87
B<BN_GENCB_call(cb, 2, x)> is used with two different meanings.
U
Ulf Möller 已提交
88 89 90

=head1 SEE ALSO

91
L<ERR_get_error(3)>, L<RAND_bytes(3)>, L<BN_generate_prime(3)>
92 93 94 95 96

=head1 HISTORY

RSA_generate_key() was deprecated in OpenSSL 0.9.8; use
RSA_generate_key_ex() intsead.
U
Ulf Möller 已提交
97

R
Rich Salz 已提交
98 99
=head1 COPYRIGHT

P
Paul Yang 已提交
100
Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
R
Rich Salz 已提交
101 102 103 104 105 106 107

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut