summaryrefslogtreecommitdiffstats
path: root/crypto/rsa
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2017-11-21 22:34:50 +0100
committerAndy Polyakov <appro@openssl.org>2017-11-23 21:08:07 +0100
commite44480cc26c9bdf4227d963d84ae271a1efaccd9 (patch)
tree6dde116df6c458e8d563b7c9201ee2f167ff89fd /crypto/rsa
parent88ac224cdaf65c3c3a08beddccb694706a311336 (diff)
rsa/rsa_gen.c: ensure backward compatibility with external rsa->meth.
Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4770)
Diffstat (limited to 'crypto/rsa')
-rw-r--r--crypto/rsa/rsa_gen.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/crypto/rsa/rsa_gen.c b/crypto/rsa/rsa_gen.c
index f7f60754ad..b092bbab43 100644
--- a/crypto/rsa/rsa_gen.c
+++ b/crypto/rsa/rsa_gen.c
@@ -42,9 +42,22 @@ int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes,
BIGNUM *e_value, BN_GENCB *cb)
{
/* multi-prime is only supported with the builtin key generation */
- if (rsa->meth->rsa_multi_prime_keygen != NULL)
+ if (rsa->meth->rsa_multi_prime_keygen != NULL) {
return rsa->meth->rsa_multi_prime_keygen(rsa, bits, primes,
e_value, cb);
+ } else if (rsa->meth->rsa_keygen != NULL) {
+ /*
+ * However, if rsa->meth implements only rsa_keygen, then we
+ * have to honour it in 2-prime case and assume that it wouldn't
+ * know what to do with multi-prime key generated by builtin
+ * subroutine...
+ */
+ if (primes == 2)
+ return rsa->meth->rsa_keygen(rsa, bits, e_value, cb);
+ else
+ return 0;
+ }
+
return rsa_builtin_keygen(rsa, bits, primes, e_value, cb);
}