---
name: "libressl-RSA_private_encrypt"
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_private_encrypt"
---

# libressl-RSA\_private\_encrypt(3)

low level signature operations

## NAME

**RSA\_private\_encrypt**, **RSA\_public\_decrypt** – low level signature operations

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

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

*int*\

**RSA\_private\_encrypt**(*int flen*, *const unsigned char \*from*, *unsigned char \*to*, *RSA \*rsa*, *int padding*);

*int*\

**RSA\_public\_decrypt**(*int flen*, *const unsigned char \*from*, *unsigned char \*to*, *RSA \*rsa*, *int padding*);

## DESCRIPTION

These functions handle RSA signatures at a low level.

**RSA\_private\_encrypt**() signs the *flen* bytes at *from* (usually a message digest with an algorithm identifier) using the private key *rsa* and stores the signature in *to*. *to* must point to **RSA\_size**(*rsa*) bytes of memory.

*padding* denotes one of the following modes:

- RSA\_PKCS1\_PADDING

  PKCS #1 v1.5 padding. This function does not handle the **algorithmIdentifier** specified in PKCS #1. When generating or verifying PKCS #1 signatures, RSA\_sign(3) and RSA\_verify(3) should be used.

- RSA\_NO\_PADDING

  Raw RSA signature. This mode should only be used to implement cryptographically sound padding modes in the application code. Signing user data directly with RSA is insecure.

**RSA\_public\_decrypt**() recovers the message digest from the *flen* bytes long signature at *from* using the signer's public key *rsa*. *to* must point to a memory section large enough to hold the message digest (which is smaller than **RSA\_size**(*rsa*) - 11). *padding* is the padding mode that was used to sign the data.

## RETURN VALUES

**RSA\_private\_encrypt**() returns the size of the signature (i.e. **RSA\_size**(*rsa*)). **RSA\_public\_decrypt**() returns the size of the recovered message digest.

On error, -1 is returned; the error codes can be obtained by ERR\_get\_error(3).

## SEE ALSO

RSA\_meth\_set\_priv\_enc(3), RSA\_new(3), RSA\_sign(3), RSA\_verify(3)

## HISTORY

**RSA\_private\_encrypt**() and **RSA\_public\_decrypt**() appeared in SSLeay 0.4 or earlier and have been available since OpenBSD 2.4.

RSA\_NO\_PADDING is available since SSLeay 0.9.0.
