EVP_PKEY_KEYGEN(3ssl) OpenSSL EVP_PKEY_KEYGEN(3ssl) EVP_PKEY_Q_keygen, EVP_PKEY_keygen_init, EVP_PKEY_paramgen_init, EVP_PKEY_generate, EVP_PKEY_CTX_set_cb, EVP_PKEY_CTX_get_cb, EVP_PKEY_CTX_get_keygen_info, EVP_PKEY_CTX_set_app_data, EVP_PKEY_CTX_get_app_data, EVP_PKEY_gen_cb, EVP_PKEY_paramgen, EVP_PKEY_keygen - #include EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, const char *type, ...); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); . . . . EVP_PKEY_CTX_new(3) . EVP_PKEY_keygen_init() ctx . EVP_PKEY_paramgen_init() EVP_PKEY_keygen_init() . EVP_PKEY_CTX_ctrl(3) EVP_PKEY_CTX_set_params(3) . EVP_PKEY_generate() *ppkey. *ppkey NULL EVP_PKEY_free(3). EVP_PKEY_paramgen() EVP_PKEY_keygen() EVP_PKEY_generate() EVP_PKEY_paramgen_init() EVP_PKEY_keygen_init() ctx. . EVP_PKEY_generate() . EVP_PKEY_set_cb() cb. EVP_PKEY_CTX_get_cb() . EVP_PKEY_CTX_get_keygen_info() . idx -1 . . EVP_PKEY_CTX_gen_keygen_info() idx . 0 . "". EVP_PKEY_CTX_set_app_data() EVP_PKEY_CTX_get_app_data() EVP_PKEY_CTX. . EVP_PKEY_CTX . EVP_PKEY_Q_keygen() EVP_PKEY_CTX "" . . libctx propq . type "RSA" size_t RSA. type "EC" EC. type : "ED25519", "ED448", "SM2", "X25519", "X448", "ML-DSA-44", "ML-DSA-65", "ML-DSA-87", "ML-KEM-512", "ML-KEM-768", "ML-KEM-1024" . . EVP_PKEY_Q_keygen() . EVP_PKEY_keygen_init(), EVP_PKEY_paramgen_init(), EVP_PKEY_keygen() EVP_PKEY_paramgen() 1 0 . -2 . EVP_PKEY_Q_keygen() EVP_PKEY NULL . EVP_PKEY_keygen_init() EVP_PKEY_paramgen_init() . EVP_PKEY_keygen() EVP_PKEY_paramgen() . . . . . ( EC ) "" EVP_PKEY . OpenSSL EVP_PKEY ( ). OpenSSL " ". . RSA 2048 : #include #include 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 #include EVP_PKEY_CTX *ctx; ENGINE *eng; EVP_PKEY *pkey = NULL, *param; /* Assumed param, eng are set up already */ 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 */ OpenSSL: /* 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 = 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; } EVP_RSA_gen(3), EVP_EC_gen(3), EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_verify_recover(3), EVP_PKEY_derive(3) EVP_PKEY_keygen_init(), int EVP_PKEY_paramgen_init(), EVP_PKEY_keygen(), EVP_PKEY_paramgen(), EVP_PKEY_gen_cb(), EVP_PKEY_CTX_set_cb(), EVP_PKEY_CTX_get_cb(), EVP_PKEY_CTX_get_keygen_info(), EVP_PKEY_CTX_set_app_data() EVP_PKEY_CTX_get_app_data() OpenSSL 1.0.0. EVP_PKEY_Q_keygen() EVP_PKEY_generate() OpenSSL 3.0. 2006-2026 OpenSSL. . Apache 2.0 ( ""). . LICENSE . 3 . . : . 3.6.2 7 2026 EVP_PKEY_KEYGEN(3ssl)