math: change get_digit() return value

unsigned long is 32bit wide when compiling with the compiler flag "-mx32"
but the digit size of the math libraries is still 64 bit which lead to
the buggy ecc code.

Therefore define a new type ltc_mp_digit with the correct width and use
that as return value of get_digit()

Has been tested with all three math providers
This commit is contained in:
Steffen Jaeckel 2014-09-10 16:15:35 +02:00
parent 1793072c67
commit f597f29ece
7 changed files with 11 additions and 6 deletions

View File

@ -122,6 +122,11 @@ typedef ulong32 __attribute__((__may_alias__)) LTC_FAST_TYPE;
#endif
#endif
#ifdef ENDIAN_64BITWORD
typedef ulong64 ltc_mp_digit;
#else
typedef ulong32 ltc_mp_digit;
#endif
#ifdef LTC_NO_FAST
#ifdef LTC_FAST

View File

@ -80,7 +80,7 @@ typedef struct {
@param n The number of the digit to fetch
@return The bits_per_digit sized n'th digit of a
*/
unsigned long (*get_digit)(void *a, int n);
ltc_mp_digit (*get_digit)(void *a, int n);
/** Get the number of digits that represent the number
@param a The number to count

View File

@ -74,7 +74,7 @@ static unsigned long get_int(void *a)
return mpz_get_ui(a);
}
static unsigned long get_digit(void *a, int n)
static ltc_mp_digit get_digit(void *a, int n)
{
LTC_ARGCHK(a != NULL);
return mpz_getlimbn(a, n);

View File

@ -100,7 +100,7 @@ static unsigned long get_int(void *a)
return mp_get_int(a);
}
static unsigned long get_digit(void *a, int n)
static ltc_mp_digit get_digit(void *a, int n)
{
mp_int *A;
LTC_ARGCHK(a != NULL);

View File

@ -99,7 +99,7 @@ static unsigned long get_int(void *a)
return A->used > 0 ? A->dp[0] : 0;
}
static unsigned long get_digit(void *a, int n)
static ltc_mp_digit get_digit(void *a, int n)
{
fp_int *A;
LTC_ARGCHK(a != NULL);

View File

@ -41,7 +41,7 @@ int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map)
ecc_point *tG, *M[8];
int i, j, err;
void *mu, *mp;
unsigned long buf;
ltc_mp_digit buf;
int first, bitbuf, bitcpy, bitcnt, mode, digidx;
LTC_ARGCHK(k != NULL);

View File

@ -39,7 +39,7 @@ int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map)
ecc_point *tG, *M[3];
int i, j, err;
void *mu, *mp;
unsigned long buf;
ltc_mp_digit buf;
int bitcnt, mode, digidx;
LTC_ARGCHK(k != NULL);