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

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

<h1>EVP_PKEY_encrypt(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="#NOTES">NOTES</A>
	<LI><A HREF="#RETURN_VALUES">RETURN VALUES</A>
	<LI><A HREF="#EXAMPLE">EXAMPLE</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>
EVP_PKEY_encrypt_init, EVP_PKEY_encrypt - encrypt using a public key
algorithm

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<PRE> #include &lt;openssl/evp.h&gt;
</PRE>
<PRE> int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
 int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
                        unsigned char *out, size_t *outlen,
                        const unsigned char *in, size_t inlen);
</PRE>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
The <CODE>EVP_PKEY_encrypt_init()</CODE> function initializes a public key
algorithm context using key <STRONG>pkey</STRONG> for an encryption operation.

</P>
<P>
The <CODE>EVP_PKEY_encrypt()</CODE> function performs a public key
encryption operation using <STRONG>ctx</STRONG>. The data to be encrypted is specified using the <STRONG>in</STRONG> and
<STRONG>inlen</STRONG> parameters. If <STRONG>out</STRONG> is <STRONG>NULL</STRONG> then the maximum size of the output buffer is written to the <STRONG>outlen</STRONG> parameter. If <STRONG>out</STRONG> is not <STRONG>NULL</STRONG> then before the call the <STRONG>outlen</STRONG> parameter should contain the length of the
<STRONG>out</STRONG> buffer, if the call is successful the encrypted data is written to
<STRONG>out</STRONG> and the amount of data written to <STRONG>outlen</STRONG>.

</P>
<P>
<HR>
<H1><A NAME="NOTES">NOTES</A></H1>
<P>
After the call to <CODE>EVP_PKEY_encrypt_init()</CODE> algorithm specific
control operations can be performed to set any appropriate parameters for
the operation.

</P>
<P>
The function <CODE>EVP_PKEY_encrypt()</CODE> can be called more than once
on the same context if several operations are performed using the same
parameters.

</P>
<P>
<HR>
<H1><A NAME="RETURN_VALUES">RETURN VALUES</A></H1>
<P>
<CODE>EVP_PKEY_encrypt_init()</CODE> and <CODE>EVP_PKEY_encrypt()</CODE>
return 1 for success and 0 or a negative value for failure. In particular a
return value of -2 indicates the operation is not supported by the public
key algorithm.

</P>
<P>
<HR>
<H1><A NAME="EXAMPLE">EXAMPLE</A></H1>
<P>
Encrypt data using OAEP (for RSA keys):

</P>
<PRE> #include &lt;openssl/evp.h&gt;
 \#include &lt;openssl/rsa.h&gt;
</PRE>
<PRE> EVP_PKEY_CTX *ctx;
 unsigned char *out, *in;
 size_t outlen, inlen; 
 EVP_PKEY *key;
 /* NB: assumes key in, inlen are already set up
  * and that key is an RSA public key
  */
 ctx = EVP_PKEY_CTX_new(key);
 if (!ctx)
        /* Error occurred */
 if (EVP_PKEY_encrypt_init(ctx) &lt;= 0)
        /* Error */
 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) &lt;= 0)
        /* Error */
</PRE>
<PRE> /* Determine buffer length */
 if (EVP_PKEY_encrypt(ctx, NULL, &amp;outlen, in, inlen) &lt;= 0)
        /* Error */
</PRE>
<PRE> out = OPENSSL_malloc(outlen);
</PRE>
<PRE> if (!out)
        /* malloc failure */
 
 if (EVP_PKEY_encrypt(ctx, out, &amp;outlen, in, inlen) &lt;= 0)
        /* Error */
</PRE>
<PRE> /* Encrypted data is outlen bytes written to buffer out */
</PRE>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../crypto/EVP_PKEY_CTX_new.html#">EVP_PKEY_CTX_new(3)</A>,
<A HREF="../crypto/EVP_PKEY_decrypt.html#">EVP_PKEY_decrypt(3)</A>,
<A HREF="../crypto/EVP_PKEY_sign.html#">EVP_PKEY_sign(3)</A>,
<A HREF="../crypto/EVP_PKEY_verify.html#">EVP_PKEY_verify(3)</A>,
<A HREF="../crypto/EVP_PKEY_verifyrecover.html#">EVP_PKEY_verifyrecover(3)</A>,
<A HREF="../crypto/EVP_PKEY_derive.html#">EVP_PKEY_derive(3)</A> 

 

</P>
<P>
<HR>
<H1><A NAME="HISTORY">HISTORY</A></H1>
<P>
These functions were first added to OpenSSL 1.0.0.

</P>
:}


