From e2d846deb3db954217232c5c5401e137a9c148fa Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 6 Oct 2023 15:10:57 +0530 Subject: [PATCH] Provide EVP_RSA_gen on legacy OpenSSL --- src/calibre/utils/certgen.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/calibre/utils/certgen.c b/src/calibre/utils/certgen.c index f96feae09e..711274d293 100644 --- a/src/calibre/utils/certgen.c +++ b/src/calibre/utils/certgen.c @@ -41,6 +41,26 @@ static void free_rsa_keypair(PyObject *capsule) { EVP_PKEY_free(pkey); } +#if OPENSSL_VERSION_NUMBER < 0x30000000L +static EVP_PKEY * +EVP_RSA_gen(int keysize) { + EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!ctx) return NULL; + if (EVP_PKEY_keygen_init(ctx) <= 0) { EVP_PKEY_CTX_free(ctx); return NULL; } + if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, keysize) <= 0) { + EVP_PKEY_CTX_free(ctx); + return NULL; + } + EVP_PKEY *key = NULL; + if (EVP_PKEY_keygen(ctx, &key) <= 0) { + EVP_PKEY_CTX_free(ctx); + return NULL; + } + EVP_PKEY_CTX_free(ctx); + return key; +} +#endif + static PyObject* create_rsa_keypair(PyObject *self, PyObject *args) { int keysize = 0;