]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Dont require CRT params on ossl_rsa_set0_all_params
authorNeil Horman <nhorman@openssl.org>
Tue, 10 Oct 2023 15:06:44 +0000 (11:06 -0400)
committerTomas Mraz <tomas@openssl.org>
Wed, 18 Oct 2023 16:08:56 +0000 (18:08 +0200)
Its not required that crt params be available in an RSA key, so don't
perform an error check on them

Fixes #29135

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22334)

(cherry picked from commit 2647726bd3ca63dc5f07ae3f10e16dff35d95626)

crypto/rsa/rsa_lib.c

index 6db837d04d14865cec4ca5d7d76da1a09b4a0fe5..271dae9d0060db79358a1d75cdacaef212a83707 100644 (file)
@@ -753,18 +753,22 @@ int ossl_rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes,
         return 0;
 
     pnum = sk_BIGNUM_num(primes);
-    if (pnum < 2
-        || pnum != sk_BIGNUM_num(exps)
-        || pnum != sk_BIGNUM_num(coeffs) + 1)
+    if (pnum < 2)
         return 0;
 
     if (!RSA_set0_factors(r, sk_BIGNUM_value(primes, 0),
-                          sk_BIGNUM_value(primes, 1))
-        || !RSA_set0_crt_params(r, sk_BIGNUM_value(exps, 0),
-                                sk_BIGNUM_value(exps, 1),
-                                sk_BIGNUM_value(coeffs, 0)))
+                          sk_BIGNUM_value(primes, 1)))
         return 0;
 
+    if (pnum == sk_BIGNUM_num(exps)
+        && pnum == sk_BIGNUM_num(coeffs) + 1) {
+
+        if (!RSA_set0_crt_params(r, sk_BIGNUM_value(exps, 0),
+                                 sk_BIGNUM_value(exps, 1),
+                                 sk_BIGNUM_value(coeffs, 0)))
+        return 0;
+    }
+
 #ifndef FIPS_MODULE
     old_infos = r->prime_infos;
 #endif