Blame doc/man3/EVP_PKEY_encrypt.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
EVP_PKEY_encrypt_init, EVP_PKEY_encrypt - encrypt using a public key algorithm
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
Packit c4476c
 int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
Packit c4476c
 int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
Packit c4476c
                      unsigned char *out, size_t *outlen,
Packit c4476c
                      const unsigned char *in, size_t inlen);
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The EVP_PKEY_encrypt_init() function initializes a public key algorithm
Packit c4476c
context using key B<pkey> for an encryption operation.
Packit c4476c
Packit c4476c
The EVP_PKEY_encrypt() function performs a public key encryption operation
Packit c4476c
using B<ctx>. The data to be encrypted is specified using the B<in> and
Packit c4476c
B<inlen> parameters. If B<out> is B<NULL> then the maximum size of the output
Packit c4476c
buffer is written to the B<outlen> parameter. If B<out> is not B<NULL> then
Packit c4476c
before the call the B<outlen> parameter should contain the length of the
Packit c4476c
B<out> buffer, if the call is successful the encrypted data is written to
Packit c4476c
B<out> and the amount of data written to B<outlen>.
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
After the call to EVP_PKEY_encrypt_init() algorithm specific control
Packit c4476c
operations can be performed to set any appropriate parameters for the
Packit c4476c
operation.
Packit c4476c
Packit c4476c
The function EVP_PKEY_encrypt() can be called more than once on the same
Packit c4476c
context if several operations are performed using the same parameters.
Packit c4476c
Packit c4476c
=head1 RETURN VALUES
Packit c4476c
Packit c4476c
EVP_PKEY_encrypt_init() and EVP_PKEY_encrypt() return 1 for success and 0
Packit c4476c
or a negative value for failure. In particular a return value of -2
Packit c4476c
indicates the operation is not supported by the public key algorithm.
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
Encrypt data using OAEP (for RSA keys). See also L<PEM_read_PUBKEY(3)> or
Packit c4476c
L<d2i_X509(3)> for means to load a public key. You may also simply
Packit c4476c
set 'eng = NULL;' to start with the default OpenSSL RSA implementation:
Packit c4476c
Packit c4476c
 #include <openssl/evp.h>
Packit c4476c
 #include <openssl/rsa.h>
Packit c4476c
 #include <openssl/engine.h>
Packit c4476c
Packit c4476c
 EVP_PKEY_CTX *ctx;
Packit c4476c
 ENGINE *eng;
Packit c4476c
 unsigned char *out, *in;
Packit c4476c
 size_t outlen, inlen;
Packit c4476c
 EVP_PKEY *key;
Packit c4476c
Packit c4476c
 /*
Packit c4476c
  * NB: assumes eng, key, in, inlen are already set up,
Packit c4476c
  * and that key is an RSA public key
Packit c4476c
  */
Packit c4476c
 ctx = EVP_PKEY_CTX_new(key, eng);
Packit c4476c
 if (!ctx)
Packit c4476c
     /* Error occurred */
Packit c4476c
 if (EVP_PKEY_encrypt_init(ctx) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
Packit c4476c
 /* Determine buffer length */
Packit c4476c
 if (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
Packit c4476c
 out = OPENSSL_malloc(outlen);
Packit c4476c
Packit c4476c
 if (!out)
Packit c4476c
     /* malloc failure */
Packit c4476c
Packit c4476c
 if (EVP_PKEY_encrypt(ctx, out, &outlen, in, inlen) <= 0)
Packit c4476c
     /* Error */
Packit c4476c
Packit c4476c
 /* Encrypted data is outlen bytes written to buffer out */
Packit c4476c
Packit c4476c
=head1 SEE ALSO
Packit c4476c
Packit c4476c
L<d2i_X509(3)>,
Packit c4476c
L<ENGINE_by_id(3)>,
Packit c4476c
L<EVP_PKEY_CTX_new(3)>,
Packit c4476c
L<EVP_PKEY_decrypt(3)>,
Packit c4476c
L<EVP_PKEY_sign(3)>,
Packit c4476c
L<EVP_PKEY_verify(3)>,
Packit c4476c
L<EVP_PKEY_verify_recover(3)>,
Packit c4476c
L<EVP_PKEY_derive(3)>
Packit c4476c
Packit c4476c
=head1 HISTORY
Packit c4476c
Packit c4476c
These functions were added in OpenSSL 1.0.0.
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut