[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

symbol catenation and montgomery

From: Niels Möller
Subject: symbol catenation and montgomery
Date: 27 Sep 2000 10:06:58 +0200


I have a few more questions about gmp-3.1. First, the symbol
catenation in gmp.h:

: #ifndef __MPN
: /* Really use `defined (__STDC__)' here; we want it to be true for Sun C */
: #if defined (__STDC__) || defined (__cplusplus)
: #define __MPN(x) __gmpn_##x
: #else
: #define __MPN(x) __gmpn_/**/x
: #endif
: #endif

According to Henrik Grubbström (address@hidden), there are a few
compilers that define __STDC__ only in strict ansi mode. I can see two
ways to fix that, either do some autoconf test and insert a symbol in
gmp.h depending on the result, or doing a test using only cpp,
something like

: #define A     1
: #define B     +1
: #define AB    0
: #define TOKCAT(x,y)   x/**/y
: #if TOKCAT(A,B)
: #else
: K&R
: #endif

Secondly, someone told me that gmp's modular exponentiation is slow,
because it doesn't use montgomery style multiplication. I've had a
look at mpz/powm.c, but I can't really tell if that is true. To me,
the mpz_redc resembles montgomery reduction a little, but on the other
hand it is used only for small moduli, so I guess it is something
different. What is the status, and do you have any plans for a more
optimized powm function? The tasks.html file doesn't say much about

BTW, I think a macro

  #define MUL_RED(c, a, b, m, invm) \
  do { if (use_redc) mpz_redc(c, a, b, m, invm) \
       else { mpz_mul(c, a, b); mpz_mod(c, c, m); } \
  } while(0)

would make the code a little easier to read, at least for me.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]