Skip to content

#311 with macros #313

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Jun 12, 2019
Prev Previous commit
Next Next commit
change macros to contain types
  • Loading branch information
sjaeckel committed Jun 7, 2019
commit a36374578f855a26c3075c875cbf7bd9fc558b9a
2 changes: 1 addition & 1 deletion bn_mp_get_i32.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_GET_SIGNED(mp_get_i32, mp_get_mag32, 32)
MP_GET_SIGNED(int32_t, mp_get_i32, mp_get_mag32)
#endif
2 changes: 1 addition & 1 deletion bn_mp_get_i64.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_GET_SIGNED(mp_get_i64, mp_get_mag64, 64)
MP_GET_SIGNED(int64_t, mp_get_i64, mp_get_mag64)
#endif
2 changes: 1 addition & 1 deletion bn_mp_get_mag32.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_GET_MAG(mp_get_mag32, 32)
MP_GET_MAG(uint32_t, mp_get_mag32)
#endif
2 changes: 1 addition & 1 deletion bn_mp_get_mag64.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_GET_MAG(mp_get_mag64, 64)
MP_GET_MAG(uint64_t, mp_get_mag64)
#endif
2 changes: 1 addition & 1 deletion bn_mp_init_i64.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_INIT_INT(mp_init_u64, mp_set_u64, uint64_t)
MP_INIT_INT(mp_init_i64, mp_set_i64, int64_t)
#endif
2 changes: 1 addition & 1 deletion bn_mp_set_i32.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_SET_SIGNED(mp_set_i32, mp_set_u32, 32)
MP_SET_SIGNED(mp_set_i32, mp_set_u32, int32_t)
#endif
2 changes: 1 addition & 1 deletion bn_mp_set_i64.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_SET_SIGNED(mp_set_i64, mp_set_u64, 64)
MP_SET_SIGNED(mp_set_i64, mp_set_u64, int64_t)
#endif
2 changes: 1 addition & 1 deletion bn_mp_set_u32.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_SET_UNSIGNED(mp_set_u32, 32)
MP_SET_UNSIGNED(mp_set_u32, uint32_t)
#endif
2 changes: 1 addition & 1 deletion bn_mp_set_u64.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */

MP_SET_UNSIGNED(mp_set_u64, 64)
MP_SET_UNSIGNED(mp_set_u64, uint64_t)
#endif
72 changes: 38 additions & 34 deletions tommath_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,26 +232,28 @@ MP_DEPRECATED(s_mp_toom_sqr) mp_err mp_toom_sqr(const mp_int *a, mp_int *b);
MP_DEPRECATED(s_mp_reverse) void bn_reverse(unsigned char *s, int len);

/* code-generating macros */
#define MP_SET_UNSIGNED(name, w) \
void name(mp_int * a, uint##w##_t b) \
{ \
int i = 0; \
while (b != 0u) { \
a->dp[i++] = ((mp_digit)b & MP_MASK); \
if (w <= MP_DIGIT_BIT) { break; } \
b >>= ((w <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
} \
a->used = i; \
a->sign = MP_ZPOS; \
MP_ZERO_DIGITS(a->dp + a->used, a->alloc - a->used); \
#define MP_SET_UNSIGNED(name, type) \
void name(mp_int * a, type b) \
{ \
int i = 0; \
while (b != 0u) { \
a->dp[i++] = ((mp_digit)b & MP_MASK); \
if ((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) { break; } \
b >>= (((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
} \
a->used = i; \
a->sign = MP_ZPOS; \
MP_ZERO_DIGITS(a->dp + a->used, a->alloc - a->used); \
}
#define MP_SET_SIGNED(name, uname, w) \
void name(mp_int * a, int##w##_t b) \
{ \
uname(a, (b < 0) ? -(uint##w##_t)b : (uint##w##_t)b); \
if (b < 0) { a->sign = MP_NEG; } \

#define MP_SET_SIGNED(name, uname, type) \
void name(mp_int * a, type b) \
{ \
uname(a, (b < 0) ? -(u##type)b : (u##type)b); \
if (b < 0) { a->sign = MP_NEG; } \
}
#define MP_INIT_INT(name , set, type) \

#define MP_INIT_INT(name , set, type) \
mp_err name(mp_int * a, type b) \
{ \
mp_err err; \
Expand All @@ -261,23 +263,25 @@ MP_DEPRECATED(s_mp_reverse) void bn_reverse(unsigned char *s, int len);
set(a, b); \
return MP_OKAY; \
}
#define MP_GET_MAG(name, w) \
uint##w##_t name(const mp_int* a) \
{ \
unsigned i = MP_MIN((unsigned)a->used, (unsigned)((w + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT)); \
uint##w##_t res = 0u; \
while (i --> 0u) { \
res <<= ((w <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
res |= (uint##w##_t)a->dp[i]; \
if (w <= MP_DIGIT_BIT) { break; } \
} \
return res; \

#define MP_GET_MAG(type, name) \
type name(const mp_int* a) \
{ \
unsigned i = MP_MIN((unsigned)a->used, (unsigned)(((sizeof(type) * CHAR_BIT) + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT)); \
type res = 0u; \
while (i --> 0u) { \
res <<= (((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) ? 0 : MP_DIGIT_BIT); \
res |= (type)a->dp[i]; \
if ((sizeof(type) * CHAR_BIT) <= MP_DIGIT_BIT) { break; } \
} \
return res; \
}
#define MP_GET_SIGNED(name, mag, w) \
int##w##_t name(const mp_int* a) \
{ \
uint64_t res = mag(a); \
return (a->sign == MP_NEG) ? (int##w##_t)-res : (int##w##_t)res;\

#define MP_GET_SIGNED(type, name, mag) \
type name(const mp_int* a) \
{ \
uint64_t res = mag(a); \
return (a->sign == MP_NEG) ? (type)-res : (type)res; \
}

#endif