summaryrefslogtreecommitdiff
path: root/mpi
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2020-04-17 14:50:57 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2020-04-17 14:50:57 +0900
commit469e2fefb64e3a4bd80995935f82caf416e3a4ae (patch)
treeba136d64a95de7a949404a4df5d4edb2f0c0fb2b /mpi
parent05ceac8e2f6f28f97428c005d0a318d71d7cf9d9 (diff)
downloadlibgcrypt-469e2fefb64e3a4bd80995935f82caf416e3a4ae.tar.gz
mpi: Use mpi_invm_pow2 for N=2^k.
* mpi/mpi-inv.c (mpi_invm_pow2): Fix. (_gcry_mpi_invm): Use mpi_invm_pow2. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'mpi')
-rw-r--r--mpi/mpi-inv.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/mpi/mpi-inv.c b/mpi/mpi-inv.c
index 85f95ec1..b44aeb78 100644
--- a/mpi/mpi-inv.c
+++ b/mpi/mpi-inv.c
@@ -134,7 +134,7 @@ mpi_invm_pow2 (gcry_mpi_t x, gcry_mpi_t a_orig, unsigned int k)
mpi_resize (b, usize);
mpi_resize (x, usize);
- tb = mpi_copy (tb);
+ tb = mpi_copy (b);
wp = tb->d;
up = b->d;
@@ -441,5 +441,12 @@ _gcry_mpi_invm (gcry_mpi_t x, gcry_mpi_t a, gcry_mpi_t n)
return 0; /* Inverse does not exists. */
}
else
- return mpi_invm_generic (x, a, n);
+ {
+ unsigned int count = mpi_trailing_zeros (n);
+
+ if (count == _gcry_mpi_get_nbits (n) - 1)
+ return mpi_invm_pow2 (x, a, count);
+
+ return mpi_invm_generic (x, a, n);
+ }
}