Skip to content

Commit

Permalink
Implement DEPRECATED RSA_pkey_ctx_ctrl (#1575)
Browse files Browse the repository at this point in the history
[AWS-LC][3] and [OpenSSL 3][4] implement various RSA control functions
as concrete functions, but OpenSSL 1.1.1 [implements][1] them as macros
calling `RSA_pkey_ctx_ctrl`. This commit provides an implementation of
`RSA_pkey_ctx_ctrl` [directly cribbed][1] from OpenSSL 1.1.1, and
identical to OpenSSL 3's implementation [today][2].

[1]:
openssl/openssl@e5e04ee
[2]:
https://github.com/openssl/openssl/blob/067fbc01b9e867b31c71091d62f0f9012dc9e41a/crypto/rsa/rsa_lib.c#L734
[3]:
https://github.com/aws/aws-lc/blob/2c03113451b5f84f61c8ed283b289a6db87b3397/include/openssl/evp.h#L796
[4]:
https://github.com/openssl/openssl/blob/067fbc01b9e867b31c71091d62f0f9012dc9e41a/include/openssl/rsa.h#L125
  • Loading branch information
WillChilds-Klein authored May 3, 2024
1 parent 2c03113 commit 33637ff
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
11 changes: 11 additions & 0 deletions crypto/fipsmodule/rsa/rsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
10 changes: 10 additions & 0 deletions include/openssl/rsa.h
Original file line number Diff line number Diff line change
Expand Up @@ -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|
Expand Down

0 comments on commit 33637ff

Please sign in to comment.