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

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

<h1>RSA_padding_add_PKCS1_type_1(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_VALUES">RETURN VALUES</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_padding_add_PKCS1_type_1, RSA_padding_check_PKCS1_type_1,
RSA_padding_add_PKCS1_type_2, RSA_padding_check_PKCS1_type_2,
RSA_padding_add_PKCS1_OAEP, RSA_padding_check_PKCS1_OAEP,
RSA_padding_add_SSLv23, RSA_padding_check_SSLv23, RSA_padding_add_none,
RSA_padding_check_none - asymmetric encryption padding

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<PRE> #include &lt;openssl/rsa.h&gt;
</PRE>
<PRE> int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,
    unsigned char *f, int fl);
</PRE>
<PRE> int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
</PRE>
<PRE> int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,
    unsigned char *f, int fl);
</PRE>
<PRE> int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
</PRE>
<PRE> int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
    unsigned char *f, int fl, unsigned char *p, int pl);
</PRE>
<PRE> int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len, unsigned char *p, int pl);
</PRE>
<PRE> int RSA_padding_add_SSLv23(unsigned char *to, int tlen,
    unsigned char *f, int fl);
</PRE>
<PRE> int RSA_padding_check_SSLv23(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
</PRE>
<PRE> int RSA_padding_add_none(unsigned char *to, int tlen,
    unsigned char *f, int fl);
</PRE>
<PRE> int RSA_padding_check_none(unsigned char *to, int tlen,
    unsigned char *f, int fl, int rsa_len);
</PRE>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
The <CODE>RSA_padding_xxx_xxx()</CODE> functions are called from the RSA
encrypt, decrypt, sign and verify functions. Normally they should not be
called from application programs.

</P>
<P>
However, they can also be called directly to implement padding for other
asymmetric ciphers. <CODE>RSA_padding_add_PKCS1_OAEP()</CODE> and
<CODE>RSA_padding_check_PKCS1_OAEP()</CODE> may be used in an application
combined with <STRONG>RSA_NO_PADDING</STRONG> in order to implement OAEP with an encoding parameter.

</P>
<P>
<CODE>RSA_padding_add_xxx()</CODE> encodes <STRONG>fl</STRONG> bytes from <STRONG>f</STRONG> so as to fit into
<STRONG>tlen</STRONG> bytes and stores the result at <STRONG>to</STRONG>. An error occurs if <STRONG>fl</STRONG>
does not meet the size requirements of the encoding method.

</P>
<P>
The following encoding methods are implemented:

</P>
<DL>
<DT><STRONG><A NAME="item_PKCS1_type_1">PKCS1_type_1</A></STRONG><DD>
<P>
PKCS #1 v2.0 EMSA-PKCS1-v1_5 (PKCS #1 v1.5 block type 1); used for
signatures

</P>
<DT><STRONG><A NAME="item_PKCS1_type_2">PKCS1_type_2</A></STRONG><DD>
<P>
PKCS #1 v2.0 EME-PKCS1-v1_5 (PKCS #1 v1.5 block type 2)

</P>
<DT><STRONG><A NAME="item_PKCS1_OAEP">PKCS1_OAEP</A></STRONG><DD>
<P>
PKCS #1 v2.0 EME-OAEP

</P>
<DT><STRONG><A NAME="item_SSLv23">SSLv23</A></STRONG><DD>
<P>
PKCS #1 EME-PKCS1-v1_5 with SSL-specific modification

</P>
<DT><STRONG><A NAME="item_none">none</A></STRONG><DD>
<P>
simply copy the data

</P>
</DL>
<P>
The random number generator must be seeded prior to calling
<CODE>RSA_padding_add_xxx().</CODE>

</P>
<P>
<CODE>RSA_padding_check_xxx()</CODE> verifies that the <STRONG>fl</STRONG> bytes at <STRONG>f</STRONG> contain a valid encoding for a <STRONG>rsa_len</STRONG> byte RSA key in the respective encoding method and stores the recovered
data of at most <STRONG>tlen</STRONG> bytes (for <STRONG>RSA_NO_PADDING</STRONG>: of size <STRONG>tlen</STRONG>) at <STRONG>to</STRONG>.

</P>
<P>
For <CODE>RSA_padding_xxx_OAEP(),</CODE> <STRONG>p</STRONG> points to the encoding parameter of length <STRONG>pl</STRONG>. <STRONG>p</STRONG> may be <STRONG>NULL</STRONG> if <STRONG>pl</STRONG> is 0.

</P>
<P>
<HR>
<H1><A NAME="RETURN_VALUES">RETURN VALUES</A></H1>
<P>
The <CODE>RSA_padding_add_xxx()</CODE> functions return 1 on success, 0 on
error. The <CODE>RSA_padding_check_xxx()</CODE> functions return the length
of the recovered data, -1 on error. Error codes can be obtained by calling
<A HREF="../crypto/ERR_get_error.html#">ERR_get_error(3)</A>.

</P>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../crypto/RSA_public_encrypt.html#">RSA_public_encrypt(3)</A>,
<A HREF="../crypto/RSA_public_encrypt.html#">RSA_private_decrypt(3)</A>,
<A HREF="../crypto/RSA_sign.html#">RSA_sign(3)</A>, <A HREF="../crypto/RSA_sign.html#">RSA_verify(3)</A>



</P>
<P>
<HR>
<H1><A NAME="HISTORY">HISTORY</A></H1>
<P>
<CODE>RSA_padding_add_PKCS1_type_1(),</CODE>
<CODE>RSA_padding_check_PKCS1_type_1(),</CODE>
<CODE>RSA_padding_add_PKCS1_type_2(),</CODE>
<CODE>RSA_padding_check_PKCS1_type_2(),</CODE>
<CODE>RSA_padding_add_SSLv23(),</CODE>
<CODE>RSA_padding_check_SSLv23(),</CODE>
<CODE>RSA_padding_add_none()</CODE> and
<CODE>RSA_padding_check_none()</CODE> appeared in SSLeay 0.9.0.

</P>
<P>
<CODE>RSA_padding_add_PKCS1_OAEP()</CODE> and
<CODE>RSA_padding_check_PKCS1_OAEP()</CODE> were added in OpenSSL 0.9.2b.

</P>
:}

