diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2020-04-17 14:50:57 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2020-04-17 14:50:57 +0900 |
commit | 469e2fefb64e3a4bd80995935f82caf416e3a4ae (patch) | |
tree | ba136d64a95de7a949404a4df5d4edb2f0c0fb2b /mpi | |
parent | 05ceac8e2f6f28f97428c005d0a318d71d7cf9d9 (diff) | |
download | libgcrypt-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.c | 11 |
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); + } } |