summaryrefslogtreecommitdiff
path: root/mpi
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2013-08-05 18:58:41 +0200
committerWerner Koch <wk@gnupg.org>2013-08-05 18:58:41 +0200
commitd8e99a04dba6a606e879464cd11deee760d1e000 (patch)
treebd5b967887f40e6860561058c34756372c04684e /mpi
parent10dfa41b43a906031bc674ea41cd3073701011f3 (diff)
downloadlibgcrypt-d8e99a04dba6a606e879464cd11deee760d1e000.tar.gz
mpi: Improve gcry_mpi_invm to detect bad input.
* mpi/mpi-inv.c (gcry_mpi_invm): Return 0 for bad input. -- Without this patch the function may enter and endless loop. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'mpi')
-rw-r--r--mpi/mpi-inv.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/mpi/mpi-inv.c b/mpi/mpi-inv.c
index 5d269466..15fa58ff 100644
--- a/mpi/mpi-inv.c
+++ b/mpi/mpi-inv.c
@@ -165,6 +165,11 @@ gcry_mpi_invm( gcry_mpi_t x, gcry_mpi_t a, gcry_mpi_t n )
int sign;
int odd ;
+ if (!mpi_cmp_ui (a, 0))
+ return 0; /* Inverse does not exists. */
+ if (!mpi_cmp_ui (n, 1))
+ return 0; /* Inverse does not exists. */
+
u = mpi_copy(a);
v = mpi_copy(n);