---
name: "libressl-RSA_padding_add_PKCS1_type_1"
section: "3"
platform: "linux"
package: "libressl"
version: "4.4.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libressl-RSA_padding_add_PKCS1_type_1"
---

# libressl-RSA\_padding\_add\_PKCS1\_type\_1(3)

asymmetric encryption padding

## NAME

**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\_none**, **RSA\_padding\_check\_none** – asymmetric encryption padding

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

**#include \<openssl/rsa.h\>**

*int*\

**RSA\_padding\_add\_PKCS1\_type\_1**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*);

*int*\

**RSA\_padding\_check\_PKCS1\_type\_1**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*, *int rsa\_len*);

*int*\

**RSA\_padding\_add\_PKCS1\_type\_2**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*);

*int*\

**RSA\_padding\_check\_PKCS1\_type\_2**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*, *int rsa\_len*);

*int*\

**RSA\_padding\_add\_PKCS1\_OAEP**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*, *unsigned char \*p*, *int pl*);

*int*\

**RSA\_padding\_check\_PKCS1\_OAEP**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*, *int rsa\_len*, *unsigned char \*p*, *int pl*);

*int*\

**RSA\_padding\_add\_none**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*);

*int*\

**RSA\_padding\_check\_none**(*unsigned char \*to*, *int tlen*, *unsigned char \*f*, *int fl*, *int rsa\_len*);

## DESCRIPTION

These functions are called from the RSA encrypt, decrypt, sign, and verify functions. Normally they should not be called from application programs.

However, they can also be called directly to implement padding for other asymmetric ciphers. **RSA\_padding\_add\_PKCS1\_OAEP**() and **RSA\_padding\_check\_PKCS1\_OAEP**() may be used in an application combined with RSA\_NO\_PADDING in order to implement OAEP with an encoding parameter.

**RSA\_padding\_add\_\***() encodes *fl* bytes from *f* so as to fit into *tlen* bytes and stores the result at *to*. An error occurs if *fl* does not meet the size requirements of the encoding method.

The following encoding methods are implemented:

- PKCS1\_type\_1

  PKCS #1 v2.0 EMSA-PKCS1-v1\_5 (PKCS #1 v1.5 block type 1); used for signatures

- PKCS1\_type\_2

  PKCS #1 v2.0 EME-PKCS1-v1\_5 (PKCS #1 v1.5 block type 2)

- PKCS1\_OAEP

  PKCS #1 v2.0 EME-OAEP

- none

  simply copy the data

**RSA\_padding\_check\_\***() verifies that the *fl* bytes at *f* contain a valid encoding for a *rsa\_len* byte RSA key in the respective encoding method and stores the recovered data of at most *tlen* bytes (for RSA\_NO\_PADDING: of size *tlen*) at *to*.

For **RSA\_padding\_\*\_OAEP**(), *p* points to the encoding parameter of length *pl*. *p* may be NULL if *pl* is 0.

## RETURN VALUES

The **RSA\_padding\_add\_\***() functions return 1 on success or 0 on error. The **RSA\_padding\_check\_\***() functions return the length of the recovered data or -1 on error. Error codes can be obtained by calling ERR\_get\_error(3).

## SEE ALSO

RSA\_new(3), RSA\_private\_decrypt(3), RSA\_public\_encrypt(3), RSA\_sign(3), RSA\_verify(3)

## HISTORY

**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\_none**(), and **RSA\_padding\_check\_none**() first appeared in SSLeay 0.9.0 and have been available since OpenBSD 2.4.

**RSA\_padding\_add\_PKCS1\_OAEP**() and **RSA\_padding\_check\_PKCS1\_OAEP**() first appeared in OpenSSL 0.9.2b and have been available since OpenBSD 2.6.

## BUGS

The **RSA\_padding\_check\_PKCS1\_type\_2**() padding check leaks timing information which can potentially be used to mount a Bleichenbacher padding oracle attack. This is an inherent weakness in the PKCS #1 v1.5 padding design. Prefer PKCS1\_OAEP padding.
