Index: openssl-1.1.0c/crypto/rsa/rsa_gen.c =================================================================== --- openssl-1.1.0c.orig/crypto/rsa/rsa_gen.c 2016-12-08 17:55:15.968669184 +0100 +++ openssl-1.1.0c/crypto/rsa/rsa_gen.c 2016-12-08 17:55:15.976669308 +0100 @@ -173,6 +173,12 @@ static int fips_rsa_builtin_keygen(RSA * goto err; } + BN_copy(rsa->e, e_value); + + if (!BN_is_zero(rsa->p) && !BN_is_zero(rsa->q)) + test = 1; + +retry: /* prepare approximate minimum p and q */ if (!BN_set_word(r0, 0xB504F334)) goto err; @@ -185,12 +191,6 @@ static int fips_rsa_builtin_keygen(RSA * if (!BN_lshift(r3, r3, pbits - 100)) goto err; - BN_copy(rsa->e, e_value); - - if (!BN_is_zero(rsa->p) && !BN_is_zero(rsa->q)) - test = 1; - - retry: /* generate p and q */ for (i = 0; i < 5 * pbits; i++) { ploop: @@ -323,6 +323,8 @@ static int fips_rsa_builtin_keygen(RSA * BN_free(pr0); } + /* test 2^(bits/2) < d < LCM((p-1)*(q-1)) */ + /* the LCM part is covered due to the generation by modulo above */ if (BN_num_bits(rsa->d) < pbits) goto retry; /* d is too small */