xref: /openbsd-src/lib/libcrypto/man/EVP_PKEY_encrypt.3 (revision f1c41952defc4168d000b336cecabdeb1a7edc96)
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