1*f1c41952Sschwarze.\" $OpenBSD: EVP_PKEY_encrypt.3,v 1.10 2024/12/06 14:27:49 schwarze Exp $ 20f34efa9Sschwarze.\" OpenSSL b97fdb57 Nov 11 09:33:09 2016 +0100 38974101aSjmc.\" 40f34efa9Sschwarze.\" This file was written by Dr. Stephen Henson <steve@openssl.org>. 50f34efa9Sschwarze.\" Copyright (c) 2006, 2009, 2013, 2014, 2016 The OpenSSL Project. 60f34efa9Sschwarze.\" All rights reserved. 70f34efa9Sschwarze.\" 80f34efa9Sschwarze.\" Redistribution and use in source and binary forms, with or without 90f34efa9Sschwarze.\" modification, are permitted provided that the following conditions 100f34efa9Sschwarze.\" are met: 110f34efa9Sschwarze.\" 120f34efa9Sschwarze.\" 1. Redistributions of source code must retain the above copyright 130f34efa9Sschwarze.\" notice, this list of conditions and the following disclaimer. 140f34efa9Sschwarze.\" 150f34efa9Sschwarze.\" 2. Redistributions in binary form must reproduce the above copyright 160f34efa9Sschwarze.\" notice, this list of conditions and the following disclaimer in 170f34efa9Sschwarze.\" the documentation and/or other materials provided with the 180f34efa9Sschwarze.\" distribution. 190f34efa9Sschwarze.\" 200f34efa9Sschwarze.\" 3. All advertising materials mentioning features or use of this 210f34efa9Sschwarze.\" software must display the following acknowledgment: 220f34efa9Sschwarze.\" "This product includes software developed by the OpenSSL Project 230f34efa9Sschwarze.\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)" 240f34efa9Sschwarze.\" 250f34efa9Sschwarze.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 260f34efa9Sschwarze.\" endorse or promote products derived from this software without 270f34efa9Sschwarze.\" prior written permission. For written permission, please contact 280f34efa9Sschwarze.\" openssl-core@openssl.org. 290f34efa9Sschwarze.\" 300f34efa9Sschwarze.\" 5. Products derived from this software may not be called "OpenSSL" 310f34efa9Sschwarze.\" nor may "OpenSSL" appear in their names without prior written 320f34efa9Sschwarze.\" permission of the OpenSSL Project. 330f34efa9Sschwarze.\" 340f34efa9Sschwarze.\" 6. Redistributions of any form whatsoever must retain the following 350f34efa9Sschwarze.\" acknowledgment: 360f34efa9Sschwarze.\" "This product includes software developed by the OpenSSL Project 370f34efa9Sschwarze.\" for use in the OpenSSL Toolkit (http://www.openssl.org/)" 380f34efa9Sschwarze.\" 390f34efa9Sschwarze.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 400f34efa9Sschwarze.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 410f34efa9Sschwarze.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 420f34efa9Sschwarze.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 430f34efa9Sschwarze.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 440f34efa9Sschwarze.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 450f34efa9Sschwarze.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 460f34efa9Sschwarze.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 470f34efa9Sschwarze.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 480f34efa9Sschwarze.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 490f34efa9Sschwarze.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 500f34efa9Sschwarze.\" OF THE POSSIBILITY OF SUCH DAMAGE. 510f34efa9Sschwarze.\" 52*f1c41952Sschwarze.Dd $Mdocdate: December 6 2024 $ 53d5c51cd3Sschwarze.Dt EVP_PKEY_ENCRYPT 3 54d5c51cd3Sschwarze.Os 55d5c51cd3Sschwarze.Sh NAME 56d5c51cd3Sschwarze.Nm EVP_PKEY_encrypt_init , 57d5c51cd3Sschwarze.Nm EVP_PKEY_encrypt 58d5c51cd3Sschwarze.Nd encrypt using a public key algorithm 59d5c51cd3Sschwarze.Sh SYNOPSIS 60d5c51cd3Sschwarze.In openssl/evp.h 61d5c51cd3Sschwarze.Ft int 62d5c51cd3Sschwarze.Fo EVP_PKEY_encrypt_init 63d5c51cd3Sschwarze.Fa "EVP_PKEY_CTX *ctx" 64d5c51cd3Sschwarze.Fc 65d5c51cd3Sschwarze.Ft int 66d5c51cd3Sschwarze.Fo EVP_PKEY_encrypt 67d5c51cd3Sschwarze.Fa "EVP_PKEY_CTX *ctx" 68d5c51cd3Sschwarze.Fa "unsigned char *out" 69d5c51cd3Sschwarze.Fa "size_t *outlen" 70d5c51cd3Sschwarze.Fa "const unsigned char *in" 71d5c51cd3Sschwarze.Fa "size_t inlen" 72d5c51cd3Sschwarze.Fc 73d5c51cd3Sschwarze.Sh DESCRIPTION 74d5c51cd3SschwarzeThe 75d5c51cd3Sschwarze.Fn EVP_PKEY_encrypt_init 76d5c51cd3Sschwarzefunction initializes a public key algorithm context using key 77d5c51cd3Sschwarze.Fa ctx->pkey 78d5c51cd3Sschwarzefor an encryption operation. 79d5c51cd3Sschwarze.Pp 80d5c51cd3SschwarzeThe 81d5c51cd3Sschwarze.Fn EVP_PKEY_encrypt 82d5c51cd3Sschwarzefunction performs a public key encryption operation using 83d5c51cd3Sschwarze.Fa ctx . 84d5c51cd3SschwarzeThe data to be encrypted is specified using the 85d5c51cd3Sschwarze.Fa in 86d5c51cd3Sschwarzeand 87d5c51cd3Sschwarze.Fa inlen 88d5c51cd3Sschwarzeparameters. 89d5c51cd3SschwarzeIf 90d5c51cd3Sschwarze.Fa out 91d5c51cd3Sschwarzeis 92d5c51cd3Sschwarze.Dv NULL , 93d5c51cd3Sschwarzethen the maximum size of the output buffer is written to the 94d5c51cd3Sschwarze.Fa outlen 95d5c51cd3Sschwarzeparameter. 96d5c51cd3SschwarzeIf 97d5c51cd3Sschwarze.Fa out 98d5c51cd3Sschwarzeis not 99d5c51cd3Sschwarze.Dv NULL , 100d5c51cd3Sschwarzethen before the call the 101d5c51cd3Sschwarze.Fa outlen 102d5c51cd3Sschwarzeparameter should contain the length of the 103d5c51cd3Sschwarze.Fa out 10484a81591Sjmcbuffer. 10541ce3b17SnaddyIf the call is successful, the encrypted data is written to 106d5c51cd3Sschwarze.Fa out 107d5c51cd3Sschwarzeand the amount of data written to 108d5c51cd3Sschwarze.Fa outlen . 109d5c51cd3Sschwarze.Pp 110d5c51cd3SschwarzeAfter the call to 111d5c51cd3Sschwarze.Fn EVP_PKEY_encrypt_init , 112d5c51cd3Sschwarzealgorithm specific control operations can be performed to set any 113d5c51cd3Sschwarzeappropriate parameters for the operation. 114d5c51cd3Sschwarze.Pp 115d5c51cd3SschwarzeThe function 116d5c51cd3Sschwarze.Fn EVP_PKEY_encrypt 117d5c51cd3Sschwarzecan be called more than once on the same context if several operations 118d5c51cd3Sschwarzeare performed using the same parameters. 119d5c51cd3Sschwarze.Sh RETURN VALUES 120d5c51cd3Sschwarze.Fn EVP_PKEY_encrypt_init 121d5c51cd3Sschwarzeand 122d5c51cd3Sschwarze.Fn EVP_PKEY_encrypt 123d5c51cd3Sschwarzereturn 1 for success and 0 or a negative value for failure. 124d5c51cd3SschwarzeIn particular, a return value of -2 indicates the operation is not 125d5c51cd3Sschwarzesupported by the public key algorithm. 126d5c51cd3Sschwarze.Sh EXAMPLES 1270f34efa9SschwarzeEncrypt data using OAEP (for RSA keys). 1280f34efa9SschwarzeSee also 1290f34efa9Sschwarze.Xr PEM_read_PUBKEY 3 1300f34efa9Sschwarzeand 1310f34efa9Sschwarze.Xr d2i_X509 3 1320f34efa9Sschwarzefor means to load a public key. 1330f34efa9SschwarzeYou may also simply set 13450f025f4Stb.Dq eng 13550f025f4Stbto 13650f025f4Stb.Dv NULL 1370f34efa9Sschwarzeto start with the default OpenSSL RSA implementation: 13884a81591Sjmc.Bd -literal -offset indent 139d5c51cd3Sschwarze#include <openssl/evp.h> 140d5c51cd3Sschwarze#include <openssl/rsa.h> 141d5c51cd3Sschwarze 142d5c51cd3SschwarzeEVP_PKEY_CTX *ctx; 143d5c51cd3Sschwarzeunsigned char *out, *in; 144d5c51cd3Sschwarzesize_t outlen, inlen; 145d5c51cd3SschwarzeEVP_PKEY *key; 1469a2973baStb/* NB: assumes that key, in, inlen are already set up 147d5c51cd3Sschwarze * and that key is an RSA public key 148d5c51cd3Sschwarze */ 1499a2973baStbctx = EVP_PKEY_CTX_new(key, NULL); 150d5c51cd3Sschwarzeif (!ctx) 151d5c51cd3Sschwarze /* Error occurred */ 152d5c51cd3Sschwarzeif (EVP_PKEY_encrypt_init(ctx) <= 0) 153d5c51cd3Sschwarze /* Error */ 154d5c51cd3Sschwarzeif (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0) 155d5c51cd3Sschwarze /* Error */ 156d5c51cd3Sschwarze 157d5c51cd3Sschwarze/* Determine buffer length */ 158d5c51cd3Sschwarzeif (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0) 159d5c51cd3Sschwarze /* Error */ 160d5c51cd3Sschwarze 161d5c51cd3Sschwarzeout = malloc(outlen); 162d5c51cd3Sschwarze 163d5c51cd3Sschwarzeif (!out) 164d5c51cd3Sschwarze /* malloc failure */ 165d5c51cd3Sschwarze 166d5c51cd3Sschwarzeif (EVP_PKEY_encrypt(ctx, out, &outlen, in, inlen) <= 0) 167d5c51cd3Sschwarze /* Error */ 168d5c51cd3Sschwarze 169d5c51cd3Sschwarze/* Encrypted data is outlen bytes written to buffer out */ 170d5c51cd3Sschwarze.Ed 171d5c51cd3Sschwarze.Sh SEE ALSO 172d5c51cd3Sschwarze.Xr EVP_PKEY_CTX_new 3 , 173d5c51cd3Sschwarze.Xr EVP_PKEY_decrypt 3 , 174d5c51cd3Sschwarze.Xr EVP_PKEY_derive 3 , 175d5c51cd3Sschwarze.Xr EVP_PKEY_sign 3 , 176d5c51cd3Sschwarze.Xr EVP_PKEY_verify 3 , 177d5c51cd3Sschwarze.Xr EVP_PKEY_verify_recover 3 178d5c51cd3Sschwarze.Sh HISTORY 17956929f71Sschwarze.Fn EVP_PKEY_encrypt_init 18056929f71Sschwarzeand 18156929f71Sschwarze.Fn EVP_PKEY_encrypt 18256929f71Sschwarzefirst appeared in OpenSSL 1.0.0 and have been available since 18356929f71Sschwarze.Ox 4.9 . 184