-.\" $OpenBSD: EVP_PKEY_keygen.3,v 1.11 2023/04/25 16:50:33 tb Exp $
-.\" full merge up to: OpenSSL e9b77246 Jan 20 19:58:49 2017 +0100
-.\" selective merge up to: OpenSSL 48e5119a Jan 19 10:49:22 2018 +0100
+.\" $OpenBSD: EVP_PKEY_keygen.3,v 1.12 2023/09/09 14:31:38 schwarze Exp $
+.\" full merge up to: OpenSSL 24a535ea Sep 22 13:14:20 2020 +0100
.\"
-.\" This file was written by Dr. Stephen Henson <steve@openssl.org>.
+.\" This file is a derived work.
+.\" The changes are covered by the following Copyright and license:
+.\"
+.\" Copyright (c) 2023 Ingo Schwarze <schwarze@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\" The original file was written by Dr. Stephen Henson <steve@openssl.org>.
.\" Copyright (c) 2006, 2009, 2013, 2015, 2016, 2018 The OpenSSL Project.
.\" All rights reserved.
.\"
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
.\" OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd $Mdocdate: April 25 2023 $
+.Dd $Mdocdate: September 9 2023 $
.Dt EVP_PKEY_KEYGEN 3
.Os
.Sh NAME
.Nm EVP_PKEY_gen_cb ,
.Nm EVP_PKEY_CTX_set_cb ,
.Nm EVP_PKEY_CTX_get_cb ,
+.Nm EVP_PKEY_CTX_set0_keygen_info ,
.Nm EVP_PKEY_CTX_get_keygen_info ,
.Nm EVP_PKEY_CTX_set_app_data ,
.Nm EVP_PKEY_CTX_get_app_data
.Fo EVP_PKEY_CTX_get_cb
.Fa "EVP_PKEY_CTX *ctx"
.Fc
+.Ft void
+.Fo EVP_PKEY_CTX_set0_keygen_info
+.Fa "EVP_PKEY_CTX *ctx"
+.Fa "int *dat"
+.Fa "int datlen"
+.Fc
.Ft int
.Fo EVP_PKEY_CTX_get_keygen_info
.Fa "EVP_PKEY_CTX *ctx"
.Fn EVP_PKEY_paramgen
are similar except parameters are generated.
.Pp
-The function
+The functions
.Fn EVP_PKEY_CTX_set_cb
-sets the key or parameter generation callback to
-.Fa cb .
-The function
+and
.Fn EVP_PKEY_CTX_get_cb
-returns the key or parameter generation callback.
+set and retrieve the key or parameter generation callback, respectively.
+.Pp
+The function
+.Fn EVP_PKEY_CTX_set0_keygen_info
+sets the parameters associated with the generation operation to the array
+.Fa dat
+containing
+.Ft datlen
+integer parameters.
+The caller retains ownership of the
+.Fa dat
+array; it will never be freed by the library.
.Pp
The function
.Fn EVP_PKEY_CTX_get_keygen_info
return 1 for success and 0 or a negative value for failure.
In particular, a return value of -2 indicates the operation is not
supported by the public key algorithm.
+.Pp
+Callback functions of the type
+.Fn EVP_PKEY_gen_cb
+are supposed to return 1 on success or 0 on error.
+.Pp
+.Fn EVP_PKEY_CTX_get_cb
+returns a function pointer to the currently installed callback function or
+.Dv NULL
+if no callback function is installed.
+.Pp
+.Fn EVP_PKEY_CTX_get_keygen_info
+retuns the number of available parameters if
+.Fa idx
+is \-1, one of these parameters if
+.Fa idx
+is greater than or equal to zero but less than the number
+of available parameters, or 0 otherwise.
.Sh EXAMPLES
Generate a 2048-bit RSA key:
.Bd -literal -offset indent