From 525a988a1dce13f29afe5efdaadb9391e0aa1861 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sat, 21 Jul 2007 07:26:14 +0000 Subject: [PATCH] Optimized prime checking. --- lib/silcmath/silcmath.h | 5 ++--- lib/silcmath/silcprimegen.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/silcmath/silcmath.h b/lib/silcmath/silcmath.h index 08a08c0c..c3e09b47 100644 --- a/lib/silcmath/silcmath.h +++ b/lib/silcmath/silcmath.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2005 Pekka Riikonen + Copyright (C) 1997 - 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -43,8 +43,7 @@ * * Find appropriate prime. It generates a number by taking random bytes. * It then tests the number that it's not divisible by any of the small - * primes and then it performs Fermat's prime test. I thank Rieks Joosten - * (r.joosten@pijnenburg.nl) for such a good help with prime tests. + * primes and then it performs Fermat's prime test. * * If argument verbose is TRUE this will display some status information * about the progress of generation. If the `rng' is NULL then global diff --git a/lib/silcmath/silcprimegen.c b/lib/silcmath/silcprimegen.c index 1b56acd8..b2fe429d 100644 --- a/lib/silcmath/silcprimegen.c +++ b/lib/silcmath/silcprimegen.c @@ -341,8 +341,13 @@ SilcBool silc_math_prime_test(SilcMPInt *p) silc_mp_mod_ui(&tmp, p, primetable[i]); /* If mod is 0, the number is composite */ - if (silc_mp_cmp_ui(&tmp, 0) == 0) - ret = -1; + if (silc_mp_cmp_ui(&tmp, 0) == 0) { + SILC_LOG_DEBUG(("Number is not prime")); + silc_mp_uninit(&r); + silc_mp_uninit(&tmp); + silc_mp_uninit(&base); + return FALSE; + } } /* Does the prime pass the Fermat's prime test. @@ -356,8 +361,10 @@ SilcBool silc_math_prime_test(SilcMPInt *p) silc_mp_uninit(&tmp); silc_mp_uninit(&base); - if (ret) + if (ret) { + SILC_LOG_DEBUG(("Number is not prime")); return FALSE; + } /* Number is probably a prime */ return TRUE; -- 2.24.0