Sortix nightly manual
This manual documents Sortix nightly, a development build that has not been officially released. You can instead view this document in the latest official manual.
NAME
EVP_PKEY_keygen_init, EVP_PKEY_keygen, EVP_PKEY_paramgen_init, EVP_PKEY_paramgen, EVP_PKEY_gen_cb, EVP_PKEY_CTX_set_cb, EVP_PKEY_CTX_get_cb, EVP_PKEY_CTX_set0_keygen_info, EVP_PKEY_CTX_get_keygen_info, EVP_PKEY_CTX_set_app_data, EVP_PKEY_CTX_get_app_data — key and parameter generation functionsSYNOPSIS
#include <openssl/evp.h>EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);
EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);
EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
DESCRIPTION
The EVP_PKEY_keygen_init() function initializes a public key algorithm context using key ctx->pkey for a key generation operation.RETURN VALUES
EVP_PKEY_keygen_init(), EVP_PKEY_paramgen_init(), EVP_PKEY_keygen(), and EVP_PKEY_paramgen() 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.EXAMPLES
Generate a 2048-bit RSA key:#include <openssl/evp.h> #include <openssl/rsa.h> EVP_PKEY_CTX *ctx; EVP_PKEY *pkey = NULL; ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); if (!ctx) /* Error occurred */ if (EVP_PKEY_keygen_init(ctx) <= 0) /* Error */ if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0) /* Error */ /* Generate key */ if (EVP_PKEY_keygen(ctx, &pkey) <= 0) /* Error */
#include <openssl/evp.h> #include <openssl/rsa.h> EVP_PKEY_CTX *ctx; ENGINE *eng; EVP_PKEY *pkey = NULL, *param; /* Assumes that param and eng are already set up. */ ctx = EVP_PKEY_CTX_new(param, eng); if (!ctx) /* Error occurred */ if (EVP_PKEY_keygen_init(ctx) <= 0) /* Error */ /* Generate key */ if (EVP_PKEY_keygen(ctx, &pkey) <= 0) /* Error */
/* Application data is a BIO to output status to */ EVP_PKEY_CTX_set_app_data(ctx, status_bio); static int genpkey_cb(EVP_PKEY_CTX *ctx) { char c = '*'; BIO *b = EVP_PKEY_CTX_get_app_data(ctx); int p; p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); if (p == 0) c = '.'; if (p == 1) c = '+'; if (p == 2) c = '*'; if (p == 3) c = '\n'; BIO_write(b, &c, 1); (void)BIO_flush(b); return 1; }