
#use wml::openssl-macros area=docs page=RSA_generate_key

<title>Documents, RSA_generate_key(3)</title>

<h1>RSA_generate_key(3)</h1>

#use wml::imp::generic

{:
## What's this? [[s|(<STRONG>[^<].+?)</A>(</STRONG><DD>)|$1$2|sg]]
[[s|<P>\s+<P>|<P>|sg]]
[[s|<P>\s+</|</|sg]]
[[s|<DD>\s*<DT>|<DD>&nbsp;<DT>|sg]]
[[s|<DD>\s*</DL>|<DD>&nbsp;</DL>|sg]]
[[s|\[|&#91;|sg]]
[[s|\]|&#93;|sg]]

<!-- INDEX BEGIN -->

<UL>

	<LI><A HREF="#NAME">NAME</A>
	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
	<LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
	<LI><A HREF="#BUGS">BUGS</A>
	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
	<LI><A HREF="#HISTORY">HISTORY</A>
</UL>
<!-- INDEX END -->

<HR>
<P>
<HR>
<H1><A NAME="NAME">NAME</A></H1>
<P>
RSA_generate_key - generate RSA key pair

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<PRE> #include &lt;openssl/rsa.h&gt;
</PRE>
<PRE> RSA *RSA_generate_key(int num, unsigned long e,
    void (*callback)(int,int,void *), void *cb_arg);
</PRE>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
<CODE>RSA_generate_key()</CODE> generates a key pair and returns it in a
newly allocated <STRONG>RSA</STRONG> structure. The pseudo-random number generator must be seeded prior to
calling <CODE>RSA_generate_key().</CODE>

</P>
<P>
The modulus size will be <STRONG>num</STRONG> bits, and the public exponent will be
<STRONG>e</STRONG>. Key sizes with <STRONG>num</STRONG>  &lt; 1024 should be considered insecure. The exponent is an odd number,
typically 3, 17 or 65537.

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

</P>
<UL>
<LI>
<P>
While a random prime number is generated, it is called as described in <A HREF="../crypto/BN_generate_prime.html#">BN_generate_prime(3)</A>.

</P>
<LI>
<P>
When the n-th randomly generated prime is rejected as not suitable for the
key, <STRONG>callback(2, n, cb_arg)</STRONG> is called.

</P>
<LI>
<P>
When a random p has been found with p-1 relatively prime to <STRONG>e</STRONG>, it is called as <STRONG>callback(3, 0, cb_arg)</STRONG>.

</P>
</UL>
<P>
The process is then repeated for prime q with <STRONG>callback(3, 1, cb_arg)</STRONG>.

</P>
<P>
<HR>
<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
<P>
If key generation fails, <CODE>RSA_generate_key()</CODE> returns <STRONG>NULL</STRONG>; the error codes can be obtained by <A HREF="../crypto/ERR_get_error.html#">ERR_get_error(3)</A>.

</P>
<P>
<HR>
<H1><A NAME="BUGS">BUGS</A></H1>
<P>
<STRONG>callback(2, x, cb_arg)</STRONG> is used with two different meanings.

</P>
<P>
<CODE>RSA_generate_key()</CODE> goes into an infinite loop for illegal
input values.

</P>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../crypto/ERR_get_error.html#">ERR_get_error(3)</A>, <A HREF="../crypto/rand.html#">rand(3)</A>, <A HREF="../crypto/rsa.html#">rsa(3)</A>,
<A HREF="../crypto/RSA_new.html#">RSA_free(3)</A>



</P>
<P>
<HR>
<H1><A NAME="HISTORY">HISTORY</A></H1>
<P>
The <STRONG>cb_arg</STRONG> argument was added in SSLeay 0.9.0.

</P>
:}


