diff --git a/crypto/fipsmodule/rsa/rsa.c b/crypto/fipsmodule/rsa/rsa.c index f0144b7230..c34b0b2ff5 100644 --- a/crypto/fipsmodule/rsa/rsa.c +++ b/crypto/fipsmodule/rsa/rsa.c @@ -836,6 +836,17 @@ void RSA_blinding_off_temp_for_accp_compatibility(RSA *rsa) { } } +int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2) { + if (ctx != NULL && ctx->pmeth != NULL) { + if (ctx->pmeth->pkey_id == EVP_PKEY_RSA || + ctx->pmeth->pkey_id == EVP_PKEY_RSA_PSS) { + return EVP_PKEY_CTX_ctrl(ctx, -1, optype, cmd, p1, p2); + } + return -1; + } + return 0; +} + // ------------- KEY CHECKING FUNCTIONS ---------------- // // Performs several checks on the public component of the given RSA key. diff --git a/include/openssl/rsa.h b/include/openssl/rsa.h index 181ebc2912..894a008e5d 100644 --- a/include/openssl/rsa.h +++ b/include/openssl/rsa.h @@ -739,6 +739,16 @@ OPENSSL_EXPORT int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); // a private exponent having blinding disabled. OPENSSL_EXPORT OPENSSL_DEPRECATED void RSA_blinding_off_temp_for_accp_compatibility(RSA *rsa); +// RSA_pkey_ctx_ctrl is a vestigial OpenSSL function that has been obsoleted by +// the EVP interface. External callers should not use this. Internal callers +// should use |EVP_PKEY_CTX_ctrl| instead. +// +// This function directly calls |EVP_PKEY_CTX_ctrl| with some guards around the +// key's type. The key type must either be RSA or RSA-PSS, otherwise -1 is +// returned. +OPENSSL_EXPORT OPENSSL_DEPRECATED int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, + int p1, void *p2); + // RSA_generate_key behaves like |RSA_generate_key_ex|, which is what you // should use instead. It returns NULL on error, or a newly-allocated |RSA| on // success. This function is provided for compatibility only. The |callback|