author Bodo Möller Mon, 9 Apr 2001 09:28:24 +0000 (09:28 +0000) committer Bodo Möller Mon, 9 Apr 2001 09:28:24 +0000 (09:28 +0000)
Ultra-Sparcs (both 32-bit and 64-bit compilations)

 CHANGES patch | blob | history crypto/bn/bn_gcd.c patch | blob | history

diff --git a/CHANGES b/CHANGES
index 2437b19..bdf42ab 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,9 +6,12 @@

*) Implement binary inversion algorithm for BN_mod_inverse in addition
to the algorithm using long divison.  The binary algorithm can be
-     used only if the modulus is odd.  It is faster only for relatively
-     small moduli (roughly 20% for 128-bit moduli, roughly 5% for 256-bit
-     moduli), so we use it only for moduli up to 400 bits.
+     used only if the modulus is odd.  On 32-bit systems, it is faster
+     only for relatively small moduli (roughly 20-30% for 128-bit moduli,
+     roughly 5-15% for 256-bit moduli), so we use it only for moduli
+     up to 450 bits.  In 64-bit environments, the binary algorithm
+     appears to be advantageous for much longer moduli; here we use it
+     for moduli up to 2048 bits.
[Bodo Moeller]

*) Change bctest again: '-x' expressions are not available in all
index 7496dbc..7649f63 100644 (file)
@@ -244,11 +244,12 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
*      sign*Y*a  ==  A   (mod |n|).
*/

-       if (BN_is_odd(n) && (BN_num_bits(n) <= 400))
+       if (BN_is_odd(n) && (BN_num_bits(n) <= (BN_BITS <= 32 ? 450 : 2048)))
{
/* Binary inversion algorithm; requires odd modulus.
* This is faster than the general algorithm if the modulus
-                * is sufficiently small. */
+                * is sufficiently small (about 400 .. 500 bits on 32-bit
+                * sytems, but much more on 64-bit systems) */
int shift;

while (!BN_is_zero(B))