* cipher/rsa.c (check_secret_key): Rename from stronger_key_check
to be enabled with ENABLE_STRONGER_CHECK.
--
GnuPG-bug-id: 8171
Signed-off-by: NIIBE Yutaka <[email protected]>
---
cipher/rsa.c | 52 ++++++++++++++++++++++++++++++++++------------------
1 file changed, 34 insertions(+), 18 deletions(-)
diff --git a/cipher/rsa.c b/cipher/rsa.c
index a501d7d8..44a44bdc 100644
--- a/cipher/rsa.c
+++ b/cipher/rsa.c
@@ -960,6 +960,9 @@ generate_x931 (RSA_secret_key *sk, unsigned int nbits, unsigned long e_value,
}
+/* Uncomment following line to enable stronger check. */
+/* #define ENABLE_STRONGER_CHECK 1 */
+#ifndef ENABLE_STRONGER_CHECK
/****************
* Test whether the secret key is valid.
* Returns: true if this is a valid key.
@@ -975,7 +978,7 @@ check_secret_key( RSA_secret_key *sk )
mpi_free(temp);
return !rc;
}
-
+#endif
/****************
@@ -999,66 +1002,79 @@ public(gcry_mpi_t output, gcry_mpi_t input, RSA_public_key *pkey )
mpi_powm( output, input, pkey->e, pkey->n );
}
-#if 0
-static void
-stronger_key_check ( RSA_secret_key *skey )
+#ifdef ENABLE_STRONGER_CHECK
+/****************
+ * Test whether the secret key is valid.
+ * Returns: true if this is a valid key.
+ */
+static int
+check_secret_key ( RSA_secret_key *skey )
{
gcry_mpi_t t = mpi_alloc_secure ( 0 );
gcry_mpi_t t1 = mpi_alloc_secure ( 0 );
gcry_mpi_t t2 = mpi_alloc_secure ( 0 );
gcry_mpi_t phi = mpi_alloc_secure ( 0 );
+ int rc = 1;
/* check that n == p * q */
mpi_mul( t, skey->p, skey->q);
if (mpi_cmp( t, skey->n) )
- log_info ( "RSA Oops: n != p * q\n" );
+ {
+ rc = 0;
+ goto leave;
+ }
/* check that p is less than q */
if( mpi_cmp( skey->p, skey->q ) > 0 )
{
- log_info ("RSA Oops: p >= q - fixed\n");
- _gcry_mpi_swap ( skey->p, skey->q);
+ rc = 0;
+ goto leave;
}
/* check that e divides neither p-1 nor q-1 */
mpi_sub_ui(t, skey->p, 1 );
mpi_fdiv_r(t, t, skey->e );
if ( !mpi_cmp_ui( t, 0) )
- log_info ( "RSA Oops: e divides p-1\n" );
+ {
+ rc = 0;
+ goto leave;
+ }
mpi_sub_ui(t, skey->q, 1 );
mpi_fdiv_r(t, t, skey->e );
if ( !mpi_cmp_ui( t, 0) )
- log_info ( "RSA Oops: e divides q-1\n" );
+ {
+ rc = 0;
+ goto leave;
+ }
/* check that d is correct */
mpi_sub_ui( t1, skey->p, 1 );
mpi_sub_ui( t2, skey->q, 1 );
mpi_mul( phi, t1, t2 );
- gcry_mpi_gcd(t, t1, t2);
+ _gcry_mpi_gcd(t, t1, t2);
mpi_fdiv_q(t, phi, t);
mpi_invm(t, skey->e, t );
if ( mpi_cmp(t, skey->d ) )
{
- log_info ( "RSA Oops: d is wrong - fixed\n");
- mpi_set (skey->d, t);
- log_printmpi (" fixed d", skey->d);
+ rc = 0;
+ goto leave;
}
/* check for correctness of u */
mpi_invm(t, skey->p, skey->q );
if ( mpi_cmp(t, skey->u ) )
{
- log_info ( "RSA Oops: u is wrong - fixed\n");
- mpi_set (skey->u, t);
- log_printmpi (" fixed u", skey->u);
+ rc = 0;
+ goto leave;
}
- log_info ( "RSA secret key check finished\n");
-
+ leave:
mpi_free (t);
mpi_free (t1);
mpi_free (t2);
mpi_free (phi);
+
+ return rc;
}
#endif
_______________________________________________
Gcrypt-devel mailing list
[email protected]
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel