## NAME

RSA_generate_key — generate RSA key pair

## Synopsis

`#include <openssl/rsa.h> `

RSA
*RSA_generate_key(int num, unsigned long e, void (*callback)(int,int,void
*), void *cb_arg);

## DESCRIPTION

RSA_generate_key() generates a key pair and returns it in
a newly allocated *RSA* structure. The pseudo-random
number generator must be seeded prior to calling RSA_generate_key().

The modulus size will be *num* bits, and
the public exponent will be *e*. Key sizes with *num* < 1024
should be considered insecure. The exponent is an odd number, typically
3, 17 or 65537.

A callback function may be used to provide feedback about
the progress of the key generation. If *callback* is not *NULL*,
it will be called as follows:

While a random prime number is generated,
it is called as described in *BN_generate_prime*(3).

When the n-th randomly generated prime is rejected
as not suitable for the key, *callback(2, n, cb_arg)* is called.

When a random p has been found with p-1 relatively
prime to *e*, it is called as *callback(3,
0, cb_arg)*.

The process is then repeated for prime q with *callback(3,
1, cb_arg)*.

## RETURN VALUE

If key generation fails, RSA_generate_key() returns *NULL*;
the error codes can be obtained by *ERR_get_error*(3).

## Restrictions

*callback(2, x, cb_arg)* is used with two
different meanings.

RSA_generate_key() goes into an infinite loop for illegal
input values.

## SEE ALSO

*ERR_get_error*(3), *rand*(3), *rsa*(3), *RSA_free*(3)

## HISTORY

The *cb_arg* argument was added in SSLeay
0.9.0.