]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Use rsa_compute_root_tr also in rsa_decrypt_tr.
authorNiels Möller <nisse@lysator.liu.se>
Sun, 15 Nov 2015 20:23:42 +0000 (21:23 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sun, 15 Nov 2015 20:23:42 +0000 (21:23 +0100)
ChangeLog
rsa-decrypt-tr.c
testsuite/rsa-encrypt-test.c

index 5c45072f4c304710d7c3893827739fc65d0b7b69..2ff02f5c9907ceba1a70b550cf4c760628724fe5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2015-09-14  Niels Möller  <nisse@lysator.liu.se>
 
+       * rsa-decrypt-tr.c (rsa_decrypt_tr): Use rsa_compute_root_tr.
+       Mainly for simplicity and consistency, I'm not aware of any CRT
+       fault attacks on RSA decryption.
+
+       * testsuite/rsa-encrypt-test.c (test_main): Added test with
+       invalid private key.
+
        * rsa-sign-tr.c (rsa_compute_root_tr): New file and function.
        * rsa.h: Declare it.
        * rsa-pkcs1-sign-tr.c (rsa_pkcs1_sign_tr): Use rsa_compute_root_tr.
index e28bee796f6d53a0fdc2ca32f52d03242545c49c..e4fbc5fef3a5eeb522618a0b367f7d04a2fcf6e6 100644 (file)
@@ -48,18 +48,14 @@ rsa_decrypt_tr(const struct rsa_public_key *pub,
               size_t *length, uint8_t *message,
               const mpz_t gibberish)
 {
-  mpz_t m, ri;
+  mpz_t m;
   int res;
 
   mpz_init_set(m, gibberish);
-  mpz_init (ri);
 
-  _rsa_blind (pub, random_ctx, random, m, ri);
-  rsa_compute_root(key, m, m);
-  _rsa_unblind (pub, m, ri);
-  mpz_clear (ri);
+  res = (rsa_compute_root_tr (pub, key, random_ctx, random, m, gibberish)
+        && pkcs1_decrypt (key->size, m, length, message));
 
-  res = pkcs1_decrypt (key->size, m, length, message);
   mpz_clear(m);
   return res;
 }
index 7104e24bfbb3e14501ffa66b5653db5f0f42cc71..ecdbdb6b3b48c0c3ec58bb585079c8aba9bef080 100644 (file)
@@ -78,6 +78,13 @@ test_main(void)
   ASSERT(MEMEQ(msg_length, msg, decrypted));
   ASSERT(decrypted[msg_length] == after);
 
+  /* Test invalid key. */
+  mpz_add_ui (key.q, key.q, 2);
+  decrypted_length = key.size;
+  ASSERT(!rsa_decrypt_tr(&pub, &key,
+                        &lfib, (nettle_random_func *) knuth_lfib_random,
+                        &decrypted_length, decrypted, gibberish));
+
   rsa_private_key_clear(&key);
   rsa_public_key_clear(&pub);
   mpz_clear(gibberish);