From 64298b9a91911b8b60c21de0ff0e197216c433db Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Thu, 27 Dec 2018 18:04:25 +0100 Subject: [PATCH 1/6] refactor without macro SIGN --- bn_mp_set_double.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bn_mp_set_double.c b/bn_mp_set_double.c index 76f6293..2a34a0f 100644 --- a/bn_mp_set_double.c +++ b/bn_mp_set_double.c @@ -42,7 +42,7 @@ int mp_set_double(mp_int *a, double b) } if (((cast.bits >> 63) != 0ULL) && (mp_iszero(a) == MP_NO)) { - SIGN(a) = MP_NEG; + a->sign = MP_NEG; } return MP_OKAY; From 015c231888bf5fb695440deeca4ec143a1c478ed Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Fri, 28 Dec 2018 08:51:46 +0100 Subject: [PATCH 2/6] refactor without macro USED --- bn_mp_get_double.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bn_mp_get_double.c b/bn_mp_get_double.c index 3ed5a71..3286a6a 100644 --- a/bn_mp_get_double.c +++ b/bn_mp_get_double.c @@ -19,7 +19,7 @@ double mp_get_double(const mp_int *a) for (i = 0; i < DIGIT_BIT; ++i) { fac *= 2.0; } - for (i = USED(a); i --> 0;) { + for (i = a->used; i --> 0;) { d = (d * fac) + (double)DIGIT(a, i); } return (mp_isneg(a) != MP_NO) ? -d : d; From 487cbba03ca7f538534b1a4e54966084a3b5fb7e Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Fri, 28 Dec 2018 09:34:02 +0100 Subject: [PATCH 3/6] refactor without macro mp_isneg --- bn_mp_get_double.c | 2 +- bn_mp_jacobi.c | 2 +- bn_mp_tc_and.c | 10 +++++----- bn_mp_tc_div_2d.c | 2 +- bn_mp_tc_or.c | 10 +++++----- bn_mp_tc_xor.c | 10 +++++----- tommath_class.h | 6 ------ 7 files changed, 18 insertions(+), 24 deletions(-) diff --git a/bn_mp_get_double.c b/bn_mp_get_double.c index 3286a6a..6a4f2a5 100644 --- a/bn_mp_get_double.c +++ b/bn_mp_get_double.c @@ -22,7 +22,7 @@ double mp_get_double(const mp_int *a) for (i = a->used; i --> 0;) { d = (d * fac) + (double)DIGIT(a, i); } - return (mp_isneg(a) != MP_NO) ? -d : d; + return (a->sign == MP_NEG) ? -d : d; } #endif diff --git a/bn_mp_jacobi.c b/bn_mp_jacobi.c index 1eb3dd4..59eacd0 100644 --- a/bn_mp_jacobi.c +++ b/bn_mp_jacobi.c @@ -18,7 +18,7 @@ int mp_jacobi(const mp_int *a, const mp_int *n, int *c) { /* if a < 0 return MP_VAL */ - if (mp_isneg(a) == MP_YES) { + if (a->sign == MP_NEG) { return MP_VAL; } diff --git a/bn_mp_tc_and.c b/bn_mp_tc_and.c index 9834dc6..d94a973 100644 --- a/bn_mp_tc_and.c +++ b/bn_mp_tc_and.c @@ -16,10 +16,10 @@ int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c) { int res = MP_OKAY, bits, abits, bbits; - int as = mp_isneg(a), bs = mp_isneg(b); + int sa = a->sign, sb = b->sign; mp_int *mx = NULL, _mx, acpy, bcpy; - if ((as != MP_NO) || (bs != MP_NO)) { + if ((sa == MP_NEG) || (sb == MP_NEG)) { abits = mp_count_bits(a); bbits = mp_count_bits(b); bits = MAX(abits, bbits); @@ -34,7 +34,7 @@ int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c) goto end; } - if (as != MP_NO) { + if (sa == MP_NEG) { res = mp_init(&acpy); if (res != MP_OKAY) { goto end; @@ -47,7 +47,7 @@ int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c) } a = &acpy; } - if (bs != MP_NO) { + if (sb == MP_NEG) { res = mp_init(&bcpy); if (res != MP_OKAY) { goto end; @@ -64,7 +64,7 @@ int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c) res = mp_and(a, b, c); - if ((as != MP_NO) && (bs != MP_NO) && (res == MP_OKAY)) { + if ((sa == MP_NEG) && (sb == MP_NEG) && (res == MP_OKAY)) { res = mp_sub(c, mx, c); } diff --git a/bn_mp_tc_div_2d.c b/bn_mp_tc_div_2d.c index 4ff0acf..d324013 100644 --- a/bn_mp_tc_div_2d.c +++ b/bn_mp_tc_div_2d.c @@ -16,7 +16,7 @@ int mp_tc_div_2d(const mp_int *a, int b, mp_int *c) { int res; - if (mp_isneg(a) == MP_NO) { + if (a->sign == MP_ZPOS) { return mp_div_2d(a, b, c, NULL); } diff --git a/bn_mp_tc_or.c b/bn_mp_tc_or.c index 0941468..f86e42f 100644 --- a/bn_mp_tc_or.c +++ b/bn_mp_tc_or.c @@ -16,10 +16,10 @@ int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c) { int res = MP_OKAY, bits, abits, bbits; - int as = mp_isneg(a), bs = mp_isneg(b); + int sa = a->sign, sb = b->sign; mp_int *mx = NULL, _mx, acpy, bcpy; - if ((as != MP_NO) || (bs != MP_NO)) { + if ((sa == MP_NEG) || (sb == MP_NEG)) { abits = mp_count_bits(a); bbits = mp_count_bits(b); bits = MAX(abits, bbits); @@ -34,7 +34,7 @@ int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c) goto end; } - if (as != MP_NO) { + if (sa == MP_NEG) { res = mp_init(&acpy); if (res != MP_OKAY) { goto end; @@ -47,7 +47,7 @@ int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c) } a = &acpy; } - if (bs != MP_NO) { + if (sb == MP_NEG) { res = mp_init(&bcpy); if (res != MP_OKAY) { goto end; @@ -64,7 +64,7 @@ int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c) res = mp_or(a, b, c); - if (((as != MP_NO) || (bs != MP_NO)) && (res == MP_OKAY)) { + if (((sa == MP_NEG) || (sb == MP_NEG)) && (res == MP_OKAY)) { res = mp_sub(c, mx, c); } diff --git a/bn_mp_tc_xor.c b/bn_mp_tc_xor.c index cdb1d40..79a02cb 100644 --- a/bn_mp_tc_xor.c +++ b/bn_mp_tc_xor.c @@ -16,10 +16,10 @@ int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c) { int res = MP_OKAY, bits, abits, bbits; - int as = mp_isneg(a), bs = mp_isneg(b); + int sa = a->sign, sb = b->sign; mp_int *mx = NULL, _mx, acpy, bcpy; - if ((as != MP_NO) || (bs != MP_NO)) { + if ((sa == MP_NEG) || (sb == MP_NEG)) { abits = mp_count_bits(a); bbits = mp_count_bits(b); bits = MAX(abits, bbits); @@ -34,7 +34,7 @@ int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c) goto end; } - if (as != MP_NO) { + if (sa == MP_NEG) { res = mp_init(&acpy); if (res != MP_OKAY) { goto end; @@ -47,7 +47,7 @@ int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c) } a = &acpy; } - if (bs != MP_NO) { + if (sb == MP_NEG) { res = mp_init(&bcpy); if (res != MP_OKAY) { goto end; @@ -64,7 +64,7 @@ int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c) res = mp_xor(a, b, c); - if ((as != bs) && (res == MP_OKAY)) { + if ((sa != sb) && (res == MP_OKAY)) { res = mp_sub(c, mx, c); } diff --git a/tommath_class.h b/tommath_class.h index 6363042..8918d79 100644 --- a/tommath_class.h +++ b/tommath_class.h @@ -446,7 +446,6 @@ #endif #if defined(BN_MP_GET_DOUBLE_C) -# define BN_MP_ISNEG_C #endif #if defined(BN_MP_GET_INT_C) @@ -534,7 +533,6 @@ #if defined(BN_MP_JACOBI_C) # define BN_MP_KRONECKER_C -# define BN_MP_ISNEG_C # define BN_MP_CMP_D_C #endif @@ -1022,7 +1020,6 @@ #endif #if defined(BN_MP_TC_AND_C) -# define BN_MP_ISNEG_C # define BN_MP_COUNT_BITS_C # define BN_MP_INIT_SET_INT_C # define BN_MP_MUL_2D_C @@ -1034,14 +1031,12 @@ #endif #if defined(BN_MP_TC_DIV_2D_C) -# define BN_MP_ISNEG_C # define BN_MP_DIV_2D_C # define BN_MP_ADD_D_C # define BN_MP_SUB_D_C #endif #if defined(BN_MP_TC_OR_C) -# define BN_MP_ISNEG_C # define BN_MP_COUNT_BITS_C # define BN_MP_INIT_SET_INT_C # define BN_MP_MUL_2D_C @@ -1053,7 +1048,6 @@ #endif #if defined(BN_MP_TC_XOR_C) -# define BN_MP_ISNEG_C # define BN_MP_COUNT_BITS_C # define BN_MP_INIT_SET_INT_C # define BN_MP_MUL_2D_C From de19b264ca15b82bfde1d7c186cbb4fc9bbab20a Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Fri, 28 Dec 2018 09:01:01 +0100 Subject: [PATCH 4/6] introduce new private macros --- tommath_private.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tommath_private.h b/tommath_private.h index 3546370..8feb1ad 100644 --- a/tommath_private.h +++ b/tommath_private.h @@ -51,6 +51,11 @@ extern void *XCALLOC(size_t n, size_t s); extern void XFREE(void *p); #endif +/* ---> Basic Manipulations <--- */ +#define IS_ZERO(a) ((a)->used == 0) +#define IS_EVEN(a) (((a)->used == 0) || (((a)->dp[0] & 1u) == 0u)) +#define IS_ODD(a) (((a)->used > 0) && (((a)->dp[0] & 1u) == 1u)) + /* lowlevel functions, do not call! */ int s_mp_add(const mp_int *a, const mp_int *b, mp_int *c); int s_mp_sub(const mp_int *a, const mp_int *b, mp_int *c); From b879bd495a1c234b4b38bcad825af308fd179e41 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Mon, 31 Dec 2018 12:15:44 +0100 Subject: [PATCH 5/6] refactor with new macros IS_* --- bn_fast_mp_invmod.c | 14 ++++++------ bn_mp_cnt_lsb.c | 2 +- bn_mp_count_bits.c | 2 +- bn_mp_div.c | 8 +++---- bn_mp_div_d.c | 2 +- bn_mp_exptmod.c | 2 +- bn_mp_exteuclid.c | 2 +- bn_mp_gcd.c | 6 +++--- bn_mp_get_bit.c | 2 +- bn_mp_get_int.c | 2 +- bn_mp_get_long.c | 2 +- bn_mp_get_long_long.c | 2 +- bn_mp_invmod.c | 2 +- bn_mp_invmod_slow.c | 14 ++++++------ bn_mp_is_square.c | 3 +-- bn_mp_kronecker.c | 6 +++--- bn_mp_lshd.c | 2 +- bn_mp_mod.c | 2 +- bn_mp_neg.c | 2 +- bn_mp_prime_frobenius_underwood.c | 2 +- bn_mp_prime_is_prime.c | 2 +- bn_mp_prime_next_prime.c | 2 +- bn_mp_prime_strong_lucas_selfridge.c | 12 +++++------ bn_mp_radix_size.c | 4 ++-- bn_mp_read_radix.c | 2 +- bn_mp_set_double.c | 2 +- bn_mp_sqrt.c | 2 +- bn_mp_sqrtmod_prime.c | 2 +- bn_mp_to_unsigned_bin.c | 2 +- bn_mp_toradix.c | 4 ++-- bn_mp_toradix_n.c | 4 ++-- tommath_class.h | 32 ---------------------------- 32 files changed, 58 insertions(+), 91 deletions(-) diff --git a/bn_fast_mp_invmod.c b/bn_fast_mp_invmod.c index 3c8088f..71975e1 100644 --- a/bn_fast_mp_invmod.c +++ b/bn_fast_mp_invmod.c @@ -24,7 +24,7 @@ int fast_mp_invmod(const mp_int *a, const mp_int *b, mp_int *c) int res, neg; /* 2. [modified] b must be odd */ - if (mp_iseven(b) == MP_YES) { + if (IS_EVEN(b)) { return MP_VAL; } @@ -44,7 +44,7 @@ int fast_mp_invmod(const mp_int *a, const mp_int *b, mp_int *c) } /* if one of x,y is zero return an error! */ - if ((mp_iszero(&x) == MP_YES) || (mp_iszero(&y) == MP_YES)) { + if (IS_ZERO(&x) || IS_ZERO(&y)) { res = MP_VAL; goto LBL_ERR; } @@ -60,13 +60,13 @@ int fast_mp_invmod(const mp_int *a, const mp_int *b, mp_int *c) top: /* 4. while u is even do */ - while (mp_iseven(&u) == MP_YES) { + while (IS_EVEN(&u)) { /* 4.1 u = u/2 */ if ((res = mp_div_2(&u, &u)) != MP_OKAY) { goto LBL_ERR; } /* 4.2 if B is odd then */ - if (mp_isodd(&B) == MP_YES) { + if (IS_ODD(&B)) { if ((res = mp_sub(&B, &x, &B)) != MP_OKAY) { goto LBL_ERR; } @@ -78,13 +78,13 @@ top: } /* 5. while v is even do */ - while (mp_iseven(&v) == MP_YES) { + while (IS_EVEN(&v)) { /* 5.1 v = v/2 */ if ((res = mp_div_2(&v, &v)) != MP_OKAY) { goto LBL_ERR; } /* 5.2 if D is odd then */ - if (mp_isodd(&D) == MP_YES) { + if (IS_ODD(&D)) { /* D = (D-x)/2 */ if ((res = mp_sub(&D, &x, &D)) != MP_OKAY) { goto LBL_ERR; @@ -118,7 +118,7 @@ top: } /* if not zero goto step 4 */ - if (mp_iszero(&u) == MP_NO) { + if (!IS_ZERO(&u)) { goto top; } diff --git a/bn_mp_cnt_lsb.c b/bn_mp_cnt_lsb.c index 5d9b327..d4f1017 100644 --- a/bn_mp_cnt_lsb.c +++ b/bn_mp_cnt_lsb.c @@ -23,7 +23,7 @@ int mp_cnt_lsb(const mp_int *a) mp_digit q, qq; /* easy out */ - if (mp_iszero(a) == MP_YES) { + if (IS_ZERO(a)) { return 0; } diff --git a/bn_mp_count_bits.c b/bn_mp_count_bits.c index f7a05df..ed46e62 100644 --- a/bn_mp_count_bits.c +++ b/bn_mp_count_bits.c @@ -19,7 +19,7 @@ int mp_count_bits(const mp_int *a) mp_digit q; /* shortcut */ - if (a->used == 0) { + if (IS_ZERO(a)) { return 0; } diff --git a/bn_mp_div.c b/bn_mp_div.c index 44e3cb9..42fdd93 100644 --- a/bn_mp_div.c +++ b/bn_mp_div.c @@ -21,7 +21,7 @@ int mp_div(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d) int res, n, n2; /* is divisor zero ? */ - if (mp_iszero(b) == MP_YES) { + if (IS_ZERO(b)) { return MP_VAL; } @@ -71,11 +71,11 @@ int mp_div(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d) n2 = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; if (c != NULL) { mp_exch(c, &q); - c->sign = (mp_iszero(c) == MP_YES) ? MP_ZPOS : n2; + c->sign = IS_ZERO(c) ? MP_ZPOS : n2; } if (d != NULL) { mp_exch(d, &ta); - d->sign = (mp_iszero(d) == MP_YES) ? MP_ZPOS : n; + d->sign = IS_ZERO(d) ? MP_ZPOS : n; } LBL_ERR: mp_clear_multi(&ta, &tb, &tq, &q, NULL); @@ -103,7 +103,7 @@ int mp_div(const mp_int *a, const mp_int *b, mp_int *c, mp_int *d) int res, n, t, i, norm, neg; /* is divisor zero ? */ - if (mp_iszero(b) == MP_YES) { + if (IS_ZERO(b)) { return MP_VAL; } diff --git a/bn_mp_div_d.c b/bn_mp_div_d.c index d30ce33..0aebc71 100644 --- a/bn_mp_div_d.c +++ b/bn_mp_div_d.c @@ -44,7 +44,7 @@ int mp_div_d(const mp_int *a, mp_digit b, mp_int *c, mp_digit *d) } /* quick outs */ - if ((b == 1u) || (mp_iszero(a) == MP_YES)) { + if ((b == 1u) || IS_ZERO(a)) { if (d != NULL) { *d = 0; } diff --git a/bn_mp_exptmod.c b/bn_mp_exptmod.c index c400b7e..89c13a8 100644 --- a/bn_mp_exptmod.c +++ b/bn_mp_exptmod.c @@ -86,7 +86,7 @@ int mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y) /* if the modulus is odd or dr != 0 use the montgomery method */ #ifdef BN_MP_EXPTMOD_FAST_C - if ((mp_isodd(P) == MP_YES) || (dr != 0)) { + if (IS_ODD(P) || (dr != 0)) { return mp_exptmod_fast(G, X, P, Y, dr); } else { #endif diff --git a/bn_mp_exteuclid.c b/bn_mp_exteuclid.c index c23a6c1..093e227 100644 --- a/bn_mp_exteuclid.c +++ b/bn_mp_exteuclid.c @@ -37,7 +37,7 @@ int mp_exteuclid(const mp_int *a, const mp_int *b, mp_int *U1, mp_int *U2, mp_in } /* loop while v3 != 0 */ - while (mp_iszero(&v3) == MP_NO) { + while (!IS_ZERO(&v3)) { /* q = u3/v3 */ if ((err = mp_div(&u3, &v3, &q, NULL)) != MP_OKAY) { goto LBL_ERR; diff --git a/bn_mp_gcd.c b/bn_mp_gcd.c index 05030c2..a39fe2d 100644 --- a/bn_mp_gcd.c +++ b/bn_mp_gcd.c @@ -19,10 +19,10 @@ int mp_gcd(const mp_int *a, const mp_int *b, mp_int *c) int k, u_lsb, v_lsb, res; /* either zero than gcd is the largest */ - if (mp_iszero(a) == MP_YES) { + if (IS_ZERO(a)) { return mp_abs(b, c); } - if (mp_iszero(b) == MP_YES) { + if (IS_ZERO(b)) { return mp_abs(a, c); } @@ -67,7 +67,7 @@ int mp_gcd(const mp_int *a, const mp_int *b, mp_int *c) } } - while (mp_iszero(&v) == MP_NO) { + while (!IS_ZERO(&v)) { /* make sure v is the largest */ if (mp_cmp_mag(&u, &v) == MP_GT) { /* swap u and v to make sure v is >= u */ diff --git a/bn_mp_get_bit.c b/bn_mp_get_bit.c index ab732c4..cfce3b1 100644 --- a/bn_mp_get_bit.c +++ b/bn_mp_get_bit.c @@ -33,7 +33,7 @@ int mp_get_bit(const mp_int *a, int b) * otherwise (limb >= a->used) would be true for a = 0 */ - if (mp_iszero(a) != MP_NO) { + if (IS_ZERO(a)) { return MP_NO; } diff --git a/bn_mp_get_int.c b/bn_mp_get_int.c index 13eddbf..0997495 100644 --- a/bn_mp_get_int.c +++ b/bn_mp_get_int.c @@ -18,7 +18,7 @@ unsigned long mp_get_int(const mp_int *a) int i; mp_min_u32 res; - if (a->used == 0) { + if (IS_ZERO(a)) { return 0; } diff --git a/bn_mp_get_long.c b/bn_mp_get_long.c index a4d05d6..134043b 100644 --- a/bn_mp_get_long.c +++ b/bn_mp_get_long.c @@ -18,7 +18,7 @@ unsigned long mp_get_long(const mp_int *a) int i; unsigned long res; - if (a->used == 0) { + if (IS_ZERO(a)) { return 0; } diff --git a/bn_mp_get_long_long.c b/bn_mp_get_long_long.c index 4201b4d..75767df 100644 --- a/bn_mp_get_long_long.c +++ b/bn_mp_get_long_long.c @@ -18,7 +18,7 @@ unsigned long long mp_get_long_long(const mp_int *a) int i; unsigned long long res; - if (a->used == 0) { + if (IS_ZERO(a)) { return 0; } diff --git a/bn_mp_invmod.c b/bn_mp_invmod.c index f1a482d..594627d 100644 --- a/bn_mp_invmod.c +++ b/bn_mp_invmod.c @@ -22,7 +22,7 @@ int mp_invmod(const mp_int *a, const mp_int *b, mp_int *c) #ifdef BN_FAST_MP_INVMOD_C /* if the modulus is odd we can use a faster routine instead */ - if ((mp_isodd(b) == MP_YES)) { + if (IS_ODD(b)) { return fast_mp_invmod(a, b, c); } #endif diff --git a/bn_mp_invmod_slow.c b/bn_mp_invmod_slow.c index e60cf04..b12819b 100644 --- a/bn_mp_invmod_slow.c +++ b/bn_mp_invmod_slow.c @@ -19,7 +19,7 @@ int mp_invmod_slow(const mp_int *a, const mp_int *b, mp_int *c) int res; /* b cannot be negative */ - if ((b->sign == MP_NEG) || (mp_iszero(b) == MP_YES)) { + if ((b->sign == MP_NEG) || IS_ZERO(b)) { return MP_VAL; } @@ -38,7 +38,7 @@ int mp_invmod_slow(const mp_int *a, const mp_int *b, mp_int *c) } /* 2. [modified] if x,y are both even then return an error! */ - if ((mp_iseven(&x) == MP_YES) && (mp_iseven(&y) == MP_YES)) { + if (IS_EVEN(&x) && IS_EVEN(&y)) { res = MP_VAL; goto LBL_ERR; } @@ -55,13 +55,13 @@ int mp_invmod_slow(const mp_int *a, const mp_int *b, mp_int *c) top: /* 4. while u is even do */ - while (mp_iseven(&u) == MP_YES) { + while (IS_EVEN(&u)) { /* 4.1 u = u/2 */ if ((res = mp_div_2(&u, &u)) != MP_OKAY) { goto LBL_ERR; } /* 4.2 if A or B is odd then */ - if ((mp_isodd(&A) == MP_YES) || (mp_isodd(&B) == MP_YES)) { + if (IS_ODD(&A) || IS_ODD(&B)) { /* A = (A+y)/2, B = (B-x)/2 */ if ((res = mp_add(&A, &y, &A)) != MP_OKAY) { goto LBL_ERR; @@ -80,13 +80,13 @@ top: } /* 5. while v is even do */ - while (mp_iseven(&v) == MP_YES) { + while (IS_EVEN(&v)) { /* 5.1 v = v/2 */ if ((res = mp_div_2(&v, &v)) != MP_OKAY) { goto LBL_ERR; } /* 5.2 if C or D is odd then */ - if ((mp_isodd(&C) == MP_YES) || (mp_isodd(&D) == MP_YES)) { + if (IS_ODD(&C) || IS_ODD(&D)) { /* C = (C+y)/2, D = (D-x)/2 */ if ((res = mp_add(&C, &y, &C)) != MP_OKAY) { goto LBL_ERR; @@ -134,7 +134,7 @@ top: } /* if not zero goto step 4 */ - if (mp_iszero(&u) == MP_NO) + if (!IS_ZERO(&u)) goto top; /* now a = C, b = D, gcd == g*v */ diff --git a/bn_mp_is_square.c b/bn_mp_is_square.c index 5363a47..c3c3872 100644 --- a/bn_mp_is_square.c +++ b/bn_mp_is_square.c @@ -49,8 +49,7 @@ int mp_is_square(const mp_int *arg, int *ret) return MP_VAL; } - /* digits used? (TSD) */ - if (arg->used == 0) { + if (IS_ZERO(arg)) { return MP_OKAY; } diff --git a/bn_mp_kronecker.c b/bn_mp_kronecker.c index a20fa74..3366037 100644 --- a/bn_mp_kronecker.c +++ b/bn_mp_kronecker.c @@ -35,7 +35,7 @@ int mp_kronecker(const mp_int *a, const mp_int *p, int *c) static const int table[8] = {0, 1, 0, -1, 0, -1, 0, 1}; - if (mp_iszero(p) != MP_NO) { + if (IS_ZERO(p)) { if ((a->used == 1) && (a->dp[0] == 1u)) { *c = 1; return e; @@ -45,7 +45,7 @@ int mp_kronecker(const mp_int *a, const mp_int *p, int *c) } } - if ((mp_iseven(a) != MP_NO) && (mp_iseven(p) != MP_NO)) { + if (IS_EVEN(a) && IS_EVEN(p)) { *c = 0; return e; } @@ -80,7 +80,7 @@ int mp_kronecker(const mp_int *a, const mp_int *p, int *c) } for (;;) { - if (mp_iszero(&a1) != MP_NO) { + if (IS_ZERO(&a1)) { if (mp_cmp_d(&p1, 1uL) == MP_EQ) { *c = k; goto LBL_KRON; diff --git a/bn_mp_lshd.c b/bn_mp_lshd.c index 6762a10..284711f 100644 --- a/bn_mp_lshd.c +++ b/bn_mp_lshd.c @@ -22,7 +22,7 @@ int mp_lshd(mp_int *a, int b) return MP_OKAY; } /* no need to shift 0 around */ - if (mp_iszero(a) == MP_YES) { + if (IS_ZERO(a)) { return MP_OKAY; } diff --git a/bn_mp_mod.c b/bn_mp_mod.c index fa022a7..50937ce 100644 --- a/bn_mp_mod.c +++ b/bn_mp_mod.c @@ -27,7 +27,7 @@ int mp_mod(const mp_int *a, const mp_int *b, mp_int *c) return res; } - if ((mp_iszero(&t) != MP_NO) || (t.sign == b->sign)) { + if (IS_ZERO(&t) || (t.sign == b->sign)) { res = MP_OKAY; mp_exch(&t, c); } else { diff --git a/bn_mp_neg.c b/bn_mp_neg.c index 9020525..7e07eb1 100644 --- a/bn_mp_neg.c +++ b/bn_mp_neg.c @@ -22,7 +22,7 @@ int mp_neg(const mp_int *a, mp_int *b) } } - if (mp_iszero(b) != MP_YES) { + if (!IS_ZERO(b)) { b->sign = (a->sign == MP_ZPOS) ? MP_NEG : MP_ZPOS; } else { b->sign = MP_ZPOS; diff --git a/bn_mp_prime_frobenius_underwood.c b/bn_mp_prime_frobenius_underwood.c index 4ceb51e..9cb1cf3 100644 --- a/bn_mp_prime_frobenius_underwood.c +++ b/bn_mp_prime_frobenius_underwood.c @@ -180,7 +180,7 @@ int mp_prime_frobenius_underwood(const mp_int *N, int *result) if ((e = mp_mod(&T1z, N, &T1z)) != MP_OKAY) { goto LBL_FU_ERR; } - if ((mp_iszero(&sz) != MP_NO) && (mp_cmp(&tz, &T1z) == MP_EQ)) { + if (IS_ZERO(&sz) && (mp_cmp(&tz, &T1z) == MP_EQ)) { *result = MP_YES; goto LBL_FU_ERR; } diff --git a/bn_mp_prime_is_prime.c b/bn_mp_prime_is_prime.c index 15637c8..ebca3c6 100644 --- a/bn_mp_prime_is_prime.c +++ b/bn_mp_prime_is_prime.c @@ -51,7 +51,7 @@ int mp_prime_is_prime(const mp_int *a, int t, int *result) } /* N must be odd */ - if (mp_iseven(a) == MP_YES) { + if (IS_EVEN(a)) { return MP_OKAY; } /* N is not a perfect square: floor(sqrt(N))^2 != N */ diff --git a/bn_mp_prime_next_prime.c b/bn_mp_prime_next_prime.c index 28256ca..11fffbd 100644 --- a/bn_mp_prime_next_prime.c +++ b/bn_mp_prime_next_prime.c @@ -78,7 +78,7 @@ int mp_prime_next_prime(mp_int *a, int t, int bbs_style) }; } } else { - if (mp_iseven(a) == MP_YES) { + if (IS_EVEN(a)) { /* force odd */ if ((err = mp_sub_d(a, 1uL, a)) != MP_OKAY) { return err; diff --git a/bn_mp_prime_strong_lucas_selfridge.c b/bn_mp_prime_strong_lucas_selfridge.c index 5a94f8e..4c0bf14 100644 --- a/bn_mp_prime_strong_lucas_selfridge.c +++ b/bn_mp_prime_strong_lucas_selfridge.c @@ -296,7 +296,7 @@ int mp_prime_strong_lucas_selfridge(const mp_int *a, int *result) if ((e = mp_add(&T1z, &T2z, &Uz)) != MP_OKAY) { goto LBL_LS_ERR; } - if (mp_isodd(&Uz) != MP_NO) { + if (IS_ODD(&Uz)) { if ((e = mp_add(&Uz, a, &Uz)) != MP_OKAY) { goto LBL_LS_ERR; } @@ -306,7 +306,7 @@ int mp_prime_strong_lucas_selfridge(const mp_int *a, int *result) * Thomas R. Nicely used GMP's mpz_fdiv_q_2exp(). * But mp_div_2() does not do so, it is truncating instead. */ - oddness = mp_isodd(&Uz); + oddness = IS_ODD(&Uz) ? MP_YES : MP_NO; if ((e = mp_div_2(&Uz, &Uz)) != MP_OKAY) { goto LBL_LS_ERR; } @@ -318,12 +318,12 @@ int mp_prime_strong_lucas_selfridge(const mp_int *a, int *result) if ((e = mp_add(&T3z, &T4z, &Vz)) != MP_OKAY) { goto LBL_LS_ERR; } - if (mp_isodd(&Vz) != MP_NO) { + if (IS_ODD(&Vz)) { if ((e = mp_add(&Vz, a, &Vz)) != MP_OKAY) { goto LBL_LS_ERR; } } - oddness = mp_isodd(&Vz); + oddness = IS_ODD(&Vz) ? MP_YES : MP_NO; if ((e = mp_div_2(&Vz, &Vz)) != MP_OKAY) { goto LBL_LS_ERR; } @@ -350,7 +350,7 @@ int mp_prime_strong_lucas_selfridge(const mp_int *a, int *result) /* If U_d or V_d is congruent to 0 mod N, then N is a prime or a strong Lucas pseudoprime. */ - if ((mp_iszero(&Uz) != MP_NO) || (mp_iszero(&Vz) != MP_NO)) { + if (IS_ZERO(&Uz) || IS_ZERO(&Vz)) { *result = MP_YES; goto LBL_LS_ERR; } @@ -381,7 +381,7 @@ int mp_prime_strong_lucas_selfridge(const mp_int *a, int *result) if ((e = mp_mod(&Vz, a, &Vz)) != MP_OKAY) { goto LBL_LS_ERR; } - if (mp_iszero(&Vz) != MP_NO) { + if (IS_ZERO(&Vz)) { *result = MP_YES; goto LBL_LS_ERR; } diff --git a/bn_mp_radix_size.c b/bn_mp_radix_size.c index 8583faa..4dc06eb 100644 --- a/bn_mp_radix_size.c +++ b/bn_mp_radix_size.c @@ -26,7 +26,7 @@ int mp_radix_size(const mp_int *a, int radix, int *size) return MP_VAL; } - if (mp_iszero(a) == MP_YES) { + if (IS_ZERO(a)) { *size = 2; return MP_OKAY; } @@ -54,7 +54,7 @@ int mp_radix_size(const mp_int *a, int radix, int *size) t.sign = MP_ZPOS; /* fetch out all of the digits */ - while (mp_iszero(&t) == MP_NO) { + while (!IS_ZERO(&t)) { if ((res = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) { mp_clear(&t); return res; diff --git a/bn_mp_read_radix.c b/bn_mp_read_radix.c index 200601e..1179b7b 100644 --- a/bn_mp_read_radix.c +++ b/bn_mp_read_radix.c @@ -76,7 +76,7 @@ int mp_read_radix(mp_int *a, const char *str, int radix) } /* set the sign only if a != 0 */ - if (mp_iszero(a) != MP_YES) { + if (!IS_ZERO(a)) { a->sign = neg; } return MP_OKAY; diff --git a/bn_mp_set_double.c b/bn_mp_set_double.c index 2a34a0f..c96a3b3 100644 --- a/bn_mp_set_double.c +++ b/bn_mp_set_double.c @@ -41,7 +41,7 @@ int mp_set_double(mp_int *a, double b) return res; } - if (((cast.bits >> 63) != 0ULL) && (mp_iszero(a) == MP_NO)) { + if (((cast.bits >> 63) != 0ULL) && !IS_ZERO(a)) { a->sign = MP_NEG; } diff --git a/bn_mp_sqrt.c b/bn_mp_sqrt.c index 55b5c79..212e066 100644 --- a/bn_mp_sqrt.c +++ b/bn_mp_sqrt.c @@ -24,7 +24,7 @@ int mp_sqrt(const mp_int *arg, mp_int *ret) } /* easy out */ - if (mp_iszero(arg) == MP_YES) { + if (IS_ZERO(arg)) { mp_zero(ret); return MP_OKAY; } diff --git a/bn_mp_sqrtmod_prime.c b/bn_mp_sqrtmod_prime.c index cc4da3b..529f1d1 100644 --- a/bn_mp_sqrtmod_prime.c +++ b/bn_mp_sqrtmod_prime.c @@ -59,7 +59,7 @@ int mp_sqrtmod_prime(const mp_int *n, const mp_int *prime, mp_int *ret) /* Q = prime - 1 */ mp_zero(&S); /* S = 0 */ - while (mp_iseven(&Q) != MP_NO) { + while (IS_EVEN(&Q)) { if ((res = mp_div_2(&Q, &Q)) != MP_OKAY) goto cleanup; /* Q = Q / 2 */ if ((res = mp_add_d(&S, 1uL, &S)) != MP_OKAY) goto cleanup; diff --git a/bn_mp_to_unsigned_bin.c b/bn_mp_to_unsigned_bin.c index ab57514..021f924 100644 --- a/bn_mp_to_unsigned_bin.c +++ b/bn_mp_to_unsigned_bin.c @@ -23,7 +23,7 @@ int mp_to_unsigned_bin(const mp_int *a, unsigned char *b) } x = 0; - while (mp_iszero(&t) == MP_NO) { + while (!IS_ZERO(&t)) { #ifndef MP_8BIT b[x++] = (unsigned char)(t.dp[0] & 255u); #else diff --git a/bn_mp_toradix.c b/bn_mp_toradix.c index c6e1c65..26923ea 100644 --- a/bn_mp_toradix.c +++ b/bn_mp_toradix.c @@ -26,7 +26,7 @@ int mp_toradix(const mp_int *a, char *str, int radix) } /* quick out if its zero */ - if (mp_iszero(a) == MP_YES) { + if (IS_ZERO(a)) { *str++ = '0'; *str = '\0'; return MP_OKAY; @@ -44,7 +44,7 @@ int mp_toradix(const mp_int *a, char *str, int radix) } digs = 0; - while (mp_iszero(&t) == MP_NO) { + while (!IS_ZERO(&t)) { if ((res = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) { mp_clear(&t); return res; diff --git a/bn_mp_toradix_n.c b/bn_mp_toradix_n.c index 84431f2..b0470ea 100644 --- a/bn_mp_toradix_n.c +++ b/bn_mp_toradix_n.c @@ -29,7 +29,7 @@ int mp_toradix_n(const mp_int *a, char *str, int radix, int maxlen) } /* quick out if its zero */ - if (mp_iszero(a) == MP_YES) { + if (IS_ZERO(a)) { *str++ = '0'; *str = '\0'; return MP_OKAY; @@ -53,7 +53,7 @@ int mp_toradix_n(const mp_int *a, char *str, int radix, int maxlen) } digs = 0; - while (mp_iszero(&t) == MP_NO) { + while (!IS_ZERO(&t)) { if (--maxlen < 1) { /* no more room */ break; diff --git a/tommath_class.h b/tommath_class.h index 8918d79..2dc028c 100644 --- a/tommath_class.h +++ b/tommath_class.h @@ -163,14 +163,11 @@ #endif #if defined(BN_FAST_MP_INVMOD_C) -# define BN_MP_ISEVEN_C # define BN_MP_INIT_MULTI_C # define BN_MP_COPY_C # define BN_MP_MOD_C -# define BN_MP_ISZERO_C # define BN_MP_SET_C # define BN_MP_DIV_2_C -# define BN_MP_ISODD_C # define BN_MP_SUB_C # define BN_MP_CMP_C # define BN_MP_CMP_D_C @@ -259,7 +256,6 @@ #endif #if defined(BN_MP_CNT_LSB_C) -# define BN_MP_ISZERO_C #endif #if defined(BN_MP_COMPLEMENT_C) @@ -275,7 +271,6 @@ #endif #if defined(BN_MP_DIV_C) -# define BN_MP_ISZERO_C # define BN_MP_CMP_MAG_C # define BN_MP_COPY_C # define BN_MP_ZERO_C @@ -321,7 +316,6 @@ #endif #if defined(BN_MP_DIV_D_C) -# define BN_MP_ISZERO_C # define BN_MP_COPY_C # define BN_MP_DIV_2D_C # define BN_MP_DIV_3_C @@ -376,7 +370,6 @@ # define BN_S_MP_EXPTMOD_C # define BN_MP_DR_IS_MODULUS_C # define BN_MP_REDUCE_IS_2K_C -# define BN_MP_ISODD_C # define BN_MP_EXPTMOD_FAST_C #endif @@ -405,7 +398,6 @@ # define BN_MP_INIT_MULTI_C # define BN_MP_SET_C # define BN_MP_COPY_C -# define BN_MP_ISZERO_C # define BN_MP_DIV_C # define BN_MP_MUL_C # define BN_MP_SUB_C @@ -429,7 +421,6 @@ #endif #if defined(BN_MP_GCD_C) -# define BN_MP_ISZERO_C # define BN_MP_ABS_C # define BN_MP_INIT_COPY_C # define BN_MP_CNT_LSB_C @@ -442,7 +433,6 @@ #endif #if defined(BN_MP_GET_BIT_C) -# define BN_MP_ISZERO_C #endif #if defined(BN_MP_GET_DOUBLE_C) @@ -497,20 +487,16 @@ #if defined(BN_MP_INVMOD_C) # define BN_MP_CMP_D_C -# define BN_MP_ISODD_C # define BN_FAST_MP_INVMOD_C # define BN_MP_INVMOD_SLOW_C #endif #if defined(BN_MP_INVMOD_SLOW_C) -# define BN_MP_ISZERO_C # define BN_MP_INIT_MULTI_C # define BN_MP_MOD_C # define BN_MP_COPY_C -# define BN_MP_ISEVEN_C # define BN_MP_SET_C # define BN_MP_DIV_2_C -# define BN_MP_ISODD_C # define BN_MP_ADD_C # define BN_MP_SUB_C # define BN_MP_CMP_C @@ -559,8 +545,6 @@ #endif #if defined(BN_MP_KRONECKER_C) -# define BN_MP_ISZERO_C -# define BN_MP_ISEVEN_C # define BN_MP_INIT_COPY_C # define BN_MP_CNT_LSB_C # define BN_MP_DIV_2D_C @@ -580,7 +564,6 @@ #endif #if defined(BN_MP_LSHD_C) -# define BN_MP_ISZERO_C # define BN_MP_GROW_C # define BN_MP_RSHD_C #endif @@ -589,7 +572,6 @@ # define BN_MP_INIT_SIZE_C # define BN_MP_DIV_C # define BN_MP_CLEAR_C -# define BN_MP_ISZERO_C # define BN_MP_EXCH_C # define BN_MP_ADD_C #endif @@ -677,7 +659,6 @@ #if defined(BN_MP_NEG_C) # define BN_MP_COPY_C -# define BN_MP_ISZERO_C #endif #if defined(BN_MP_OR_C) @@ -714,7 +695,6 @@ # define BN_MP_MOD_C # define BN_MP_GET_BIT_C # define BN_MP_EXCH_C -# define BN_MP_ISZERO_C # define BN_MP_CMP_C # define BN_MP_CLEAR_MULTI_C #endif @@ -724,7 +704,6 @@ #endif #if defined(BN_MP_PRIME_IS_PRIME_C) -# define BN_MP_ISEVEN_C # define BN_MP_IS_SQUARE_C # define BN_MP_CMP_D_C # define BN_MP_PRIME_IS_DIVISIBLE_C @@ -757,7 +736,6 @@ # define BN_MP_CMP_D_C # define BN_MP_SET_C # define BN_MP_SUB_D_C -# define BN_MP_ISEVEN_C # define BN_MP_MOD_D_C # define BN_MP_INIT_C # define BN_MP_ADD_D_C @@ -801,15 +779,12 @@ # define BN_MP_SUB_C # define BN_MP_GET_BIT_C # define BN_MP_ADD_C -# define BN_MP_ISODD_C # define BN_MP_DIV_2_C # define BN_MP_SUB_D_C -# define BN_MP_ISZERO_C # define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_MP_RADIX_SIZE_C) -# define BN_MP_ISZERO_C # define BN_MP_COUNT_BITS_C # define BN_MP_INIT_COPY_C # define BN_MP_DIV_D_C @@ -835,7 +810,6 @@ # define BN_MP_S_RMAP_REVERSE_C # define BN_MP_MUL_D_C # define BN_MP_ADD_D_C -# define BN_MP_ISZERO_C #endif #if defined(BN_MP_READ_SIGNED_BIN_C) @@ -931,7 +905,6 @@ # define BN_MP_SET_LONG_LONG_C # define BN_MP_DIV_2D_C # define BN_MP_MUL_2D_C -# define BN_MP_ISZERO_C #endif #if defined(BN_MP_SET_INT_C) @@ -969,7 +942,6 @@ #if defined(BN_MP_SQRT_C) # define BN_MP_N_ROOT_C -# define BN_MP_ISZERO_C # define BN_MP_ZERO_C # define BN_MP_INIT_COPY_C # define BN_MP_RSHD_C @@ -992,7 +964,6 @@ # define BN_MP_EXPTMOD_C # define BN_MP_COPY_C # define BN_MP_SUB_D_C -# define BN_MP_ISEVEN_C # define BN_MP_SET_INT_C # define BN_MP_SQRMOD_C # define BN_MP_MULMOD_C @@ -1069,7 +1040,6 @@ #if defined(BN_MP_TO_UNSIGNED_BIN_C) # define BN_MP_INIT_COPY_C -# define BN_MP_ISZERO_C # define BN_MP_DIV_2D_C # define BN_MP_CLEAR_C #endif @@ -1114,7 +1084,6 @@ #endif #if defined(BN_MP_TORADIX_C) -# define BN_MP_ISZERO_C # define BN_MP_INIT_COPY_C # define BN_MP_DIV_D_C # define BN_MP_CLEAR_C @@ -1122,7 +1091,6 @@ #endif #if defined(BN_MP_TORADIX_N_C) -# define BN_MP_ISZERO_C # define BN_MP_INIT_COPY_C # define BN_MP_DIV_D_C # define BN_MP_CLEAR_C From 6ce271c4db14e3d75a3b5f69e2bc8033640d1eec Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Fri, 28 Dec 2018 09:41:54 +0100 Subject: [PATCH 6/6] mp_iseven & mp_isodd becomes C functions --- bn_mp_iseven.c | 24 ++++++++++++++++++++++++ bn_mp_isodd.c | 24 ++++++++++++++++++++++++ callgraph.txt | 6 ++++++ libtommath_VS2008.vcproj | 8 ++++++++ makefile | 23 ++++++++++++----------- makefile.mingw | 23 ++++++++++++----------- makefile.msvc | 23 ++++++++++++----------- makefile.shared | 23 ++++++++++++----------- makefile.unix | 23 ++++++++++++----------- tommath.h | 4 ++-- tommath_class.h | 8 ++++++++ 11 files changed, 132 insertions(+), 57 deletions(-) create mode 100644 bn_mp_iseven.c create mode 100644 bn_mp_isodd.c diff --git a/bn_mp_iseven.c b/bn_mp_iseven.c new file mode 100644 index 0000000..4dc72a4 --- /dev/null +++ b/bn_mp_iseven.c @@ -0,0 +1,24 @@ +#include "tommath_private.h" +#ifdef BN_MP_ISEVEN_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +int mp_iseven(const mp_int *a) +{ + return IS_EVEN(a) ? MP_YES : MP_NO; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/bn_mp_isodd.c b/bn_mp_isodd.c new file mode 100644 index 0000000..4a3942c --- /dev/null +++ b/bn_mp_isodd.c @@ -0,0 +1,24 @@ +#include "tommath_private.h" +#ifdef BN_MP_ISODD_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +int mp_isodd(const mp_int *a) +{ + return IS_ODD(a) ? MP_YES : MP_NO; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/callgraph.txt b/callgraph.txt index 83ca1c1..565a4ea 100644 --- a/callgraph.txt +++ b/callgraph.txt @@ -2682,6 +2682,12 @@ BN_MP_INVMOD_SLOW_C | +--->BN_MP_CLEAR_C +BN_MP_ISEVEN_C + + +BN_MP_ISODD_C + + BN_MP_IS_SQUARE_C +--->BN_MP_MOD_D_C | +--->BN_MP_DIV_D_C diff --git a/libtommath_VS2008.vcproj b/libtommath_VS2008.vcproj index 5b2637b..060dd59 100644 --- a/libtommath_VS2008.vcproj +++ b/libtommath_VS2008.vcproj @@ -536,6 +536,14 @@ RelativePath="bn_mp_is_square.c" > + + + + diff --git a/makefile b/makefile index a07c274..d2c86cc 100644 --- a/makefile +++ b/makefile @@ -35,17 +35,18 @@ bn_mp_dr_setup.o bn_mp_exch.o bn_mp_export.o bn_mp_expt_d.o bn_mp_expt_d_ex.o bn bn_mp_exptmod_fast.o bn_mp_exteuclid.o bn_mp_fread.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_bit.o \ bn_mp_get_double.o bn_mp_get_int.o bn_mp_get_long.o bn_mp_get_long_long.o bn_mp_grow.o bn_mp_import.o \ bn_mp_init.o bn_mp_init_copy.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_set_int.o bn_mp_init_size.o \ -bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_jacobi.o bn_mp_karatsuba_mul.o \ -bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o \ -bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o \ -bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o \ -bn_mp_or.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o \ -bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \ -bn_mp_prime_rabin_miller_trials.o bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o \ -bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o \ -bn_mp_read_unsigned_bin.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \ -bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o \ -bn_mp_set.o bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ +bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_jacobi.o \ +bn_mp_karatsuba_mul.o bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o \ +bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \ +bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o \ +bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o bn_mp_or.o bn_mp_prime_fermat.o \ +bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o bn_mp_prime_is_prime.o \ +bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o \ +bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o \ +bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o bn_mp_read_unsigned_bin.o bn_mp_reduce.o \ +bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o \ +bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o bn_mp_set.o \ +bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ bn_mp_signed_bin_size.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o \ bn_mp_sub_d.o bn_mp_submod.o bn_mp_tc_and.o bn_mp_tc_div_2d.o bn_mp_tc_or.o bn_mp_tc_xor.o \ bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o bn_mp_to_unsigned_bin_n.o \ diff --git a/makefile.mingw b/makefile.mingw index ec0de2b..1a96894 100644 --- a/makefile.mingw +++ b/makefile.mingw @@ -38,17 +38,18 @@ bn_mp_dr_setup.o bn_mp_exch.o bn_mp_export.o bn_mp_expt_d.o bn_mp_expt_d_ex.o bn bn_mp_exptmod_fast.o bn_mp_exteuclid.o bn_mp_fread.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_bit.o \ bn_mp_get_double.o bn_mp_get_int.o bn_mp_get_long.o bn_mp_get_long_long.o bn_mp_grow.o bn_mp_import.o \ bn_mp_init.o bn_mp_init_copy.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_set_int.o bn_mp_init_size.o \ -bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_jacobi.o bn_mp_karatsuba_mul.o \ -bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o \ -bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o \ -bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o \ -bn_mp_or.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o \ -bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \ -bn_mp_prime_rabin_miller_trials.o bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o \ -bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o \ -bn_mp_read_unsigned_bin.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \ -bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o \ -bn_mp_set.o bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ +bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_jacobi.o \ +bn_mp_karatsuba_mul.o bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o \ +bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \ +bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o \ +bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o bn_mp_or.o bn_mp_prime_fermat.o \ +bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o bn_mp_prime_is_prime.o \ +bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o \ +bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o \ +bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o bn_mp_read_unsigned_bin.o bn_mp_reduce.o \ +bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o \ +bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o bn_mp_set.o \ +bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ bn_mp_signed_bin_size.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o \ bn_mp_sub_d.o bn_mp_submod.o bn_mp_tc_and.o bn_mp_tc_div_2d.o bn_mp_tc_or.o bn_mp_tc_xor.o \ bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o bn_mp_to_unsigned_bin_n.o \ diff --git a/makefile.msvc b/makefile.msvc index 50db449..08ece30 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -30,17 +30,18 @@ bn_mp_dr_setup.obj bn_mp_exch.obj bn_mp_export.obj bn_mp_expt_d.obj bn_mp_expt_d bn_mp_exptmod_fast.obj bn_mp_exteuclid.obj bn_mp_fread.obj bn_mp_fwrite.obj bn_mp_gcd.obj bn_mp_get_bit.obj \ bn_mp_get_double.obj bn_mp_get_int.obj bn_mp_get_long.obj bn_mp_get_long_long.obj bn_mp_grow.obj bn_mp_import.obj \ bn_mp_init.obj bn_mp_init_copy.obj bn_mp_init_multi.obj bn_mp_init_set.obj bn_mp_init_set_int.obj bn_mp_init_size.obj \ -bn_mp_invmod.obj bn_mp_invmod_slow.obj bn_mp_is_square.obj bn_mp_jacobi.obj bn_mp_karatsuba_mul.obj \ -bn_mp_karatsuba_sqr.obj bn_mp_kronecker.obj bn_mp_lcm.obj bn_mp_lshd.obj bn_mp_mod.obj bn_mp_mod_2d.obj bn_mp_mod_d.obj \ -bn_mp_montgomery_calc_normalization.obj bn_mp_montgomery_reduce.obj bn_mp_montgomery_setup.obj bn_mp_mul.obj \ -bn_mp_mul_2.obj bn_mp_mul_2d.obj bn_mp_mul_d.obj bn_mp_mulmod.obj bn_mp_n_root.obj bn_mp_n_root_ex.obj bn_mp_neg.obj \ -bn_mp_or.obj bn_mp_prime_fermat.obj bn_mp_prime_frobenius_underwood.obj bn_mp_prime_is_divisible.obj \ -bn_mp_prime_is_prime.obj bn_mp_prime_miller_rabin.obj bn_mp_prime_next_prime.obj \ -bn_mp_prime_rabin_miller_trials.obj bn_mp_prime_random_ex.obj bn_mp_prime_strong_lucas_selfridge.obj \ -bn_mp_radix_size.obj bn_mp_radix_smap.obj bn_mp_rand.obj bn_mp_read_radix.obj bn_mp_read_signed_bin.obj \ -bn_mp_read_unsigned_bin.obj bn_mp_reduce.obj bn_mp_reduce_2k.obj bn_mp_reduce_2k_l.obj bn_mp_reduce_2k_setup.obj \ -bn_mp_reduce_2k_setup_l.obj bn_mp_reduce_is_2k.obj bn_mp_reduce_is_2k_l.obj bn_mp_reduce_setup.obj bn_mp_rshd.obj \ -bn_mp_set.obj bn_mp_set_double.obj bn_mp_set_int.obj bn_mp_set_long.obj bn_mp_set_long_long.obj bn_mp_shrink.obj \ +bn_mp_invmod.obj bn_mp_invmod_slow.obj bn_mp_is_square.obj bn_mp_iseven.obj bn_mp_isodd.obj bn_mp_jacobi.obj \ +bn_mp_karatsuba_mul.obj bn_mp_karatsuba_sqr.obj bn_mp_kronecker.obj bn_mp_lcm.obj bn_mp_lshd.obj bn_mp_mod.obj \ +bn_mp_mod_2d.obj bn_mp_mod_d.obj bn_mp_montgomery_calc_normalization.obj bn_mp_montgomery_reduce.obj \ +bn_mp_montgomery_setup.obj bn_mp_mul.obj bn_mp_mul_2.obj bn_mp_mul_2d.obj bn_mp_mul_d.obj bn_mp_mulmod.obj \ +bn_mp_n_root.obj bn_mp_n_root_ex.obj bn_mp_neg.obj bn_mp_or.obj bn_mp_prime_fermat.obj \ +bn_mp_prime_frobenius_underwood.obj bn_mp_prime_is_divisible.obj bn_mp_prime_is_prime.obj \ +bn_mp_prime_miller_rabin.obj bn_mp_prime_next_prime.obj bn_mp_prime_rabin_miller_trials.obj \ +bn_mp_prime_random_ex.obj bn_mp_prime_strong_lucas_selfridge.obj bn_mp_radix_size.obj bn_mp_radix_smap.obj \ +bn_mp_rand.obj bn_mp_read_radix.obj bn_mp_read_signed_bin.obj bn_mp_read_unsigned_bin.obj bn_mp_reduce.obj \ +bn_mp_reduce_2k.obj bn_mp_reduce_2k_l.obj bn_mp_reduce_2k_setup.obj bn_mp_reduce_2k_setup_l.obj \ +bn_mp_reduce_is_2k.obj bn_mp_reduce_is_2k_l.obj bn_mp_reduce_setup.obj bn_mp_rshd.obj bn_mp_set.obj \ +bn_mp_set_double.obj bn_mp_set_int.obj bn_mp_set_long.obj bn_mp_set_long_long.obj bn_mp_shrink.obj \ bn_mp_signed_bin_size.obj bn_mp_sqr.obj bn_mp_sqrmod.obj bn_mp_sqrt.obj bn_mp_sqrtmod_prime.obj bn_mp_sub.obj \ bn_mp_sub_d.obj bn_mp_submod.obj bn_mp_tc_and.obj bn_mp_tc_div_2d.obj bn_mp_tc_or.obj bn_mp_tc_xor.obj \ bn_mp_to_signed_bin.obj bn_mp_to_signed_bin_n.obj bn_mp_to_unsigned_bin.obj bn_mp_to_unsigned_bin_n.obj \ diff --git a/makefile.shared b/makefile.shared index 870b18d..78b383a 100644 --- a/makefile.shared +++ b/makefile.shared @@ -32,17 +32,18 @@ bn_mp_dr_setup.o bn_mp_exch.o bn_mp_export.o bn_mp_expt_d.o bn_mp_expt_d_ex.o bn bn_mp_exptmod_fast.o bn_mp_exteuclid.o bn_mp_fread.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_bit.o \ bn_mp_get_double.o bn_mp_get_int.o bn_mp_get_long.o bn_mp_get_long_long.o bn_mp_grow.o bn_mp_import.o \ bn_mp_init.o bn_mp_init_copy.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_set_int.o bn_mp_init_size.o \ -bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_jacobi.o bn_mp_karatsuba_mul.o \ -bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o \ -bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o \ -bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o \ -bn_mp_or.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o \ -bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \ -bn_mp_prime_rabin_miller_trials.o bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o \ -bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o \ -bn_mp_read_unsigned_bin.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \ -bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o \ -bn_mp_set.o bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ +bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_jacobi.o \ +bn_mp_karatsuba_mul.o bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o \ +bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \ +bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o \ +bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o bn_mp_or.o bn_mp_prime_fermat.o \ +bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o bn_mp_prime_is_prime.o \ +bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o \ +bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o \ +bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o bn_mp_read_unsigned_bin.o bn_mp_reduce.o \ +bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o \ +bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o bn_mp_set.o \ +bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ bn_mp_signed_bin_size.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o \ bn_mp_sub_d.o bn_mp_submod.o bn_mp_tc_and.o bn_mp_tc_div_2d.o bn_mp_tc_or.o bn_mp_tc_xor.o \ bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o bn_mp_to_unsigned_bin_n.o \ diff --git a/makefile.unix b/makefile.unix index b89cf47..17cabcf 100644 --- a/makefile.unix +++ b/makefile.unix @@ -39,17 +39,18 @@ bn_mp_dr_setup.o bn_mp_exch.o bn_mp_export.o bn_mp_expt_d.o bn_mp_expt_d_ex.o bn bn_mp_exptmod_fast.o bn_mp_exteuclid.o bn_mp_fread.o bn_mp_fwrite.o bn_mp_gcd.o bn_mp_get_bit.o \ bn_mp_get_double.o bn_mp_get_int.o bn_mp_get_long.o bn_mp_get_long_long.o bn_mp_grow.o bn_mp_import.o \ bn_mp_init.o bn_mp_init_copy.o bn_mp_init_multi.o bn_mp_init_set.o bn_mp_init_set_int.o bn_mp_init_size.o \ -bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_jacobi.o bn_mp_karatsuba_mul.o \ -bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mod_d.o \ -bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o bn_mp_montgomery_setup.o bn_mp_mul.o \ -bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o \ -bn_mp_or.o bn_mp_prime_fermat.o bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o \ -bn_mp_prime_is_prime.o bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o \ -bn_mp_prime_rabin_miller_trials.o bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o \ -bn_mp_radix_size.o bn_mp_radix_smap.o bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o \ -bn_mp_read_unsigned_bin.o bn_mp_reduce.o bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o \ -bn_mp_reduce_2k_setup_l.o bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o \ -bn_mp_set.o bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ +bn_mp_invmod.o bn_mp_invmod_slow.o bn_mp_is_square.o bn_mp_iseven.o bn_mp_isodd.o bn_mp_jacobi.o \ +bn_mp_karatsuba_mul.o bn_mp_karatsuba_sqr.o bn_mp_kronecker.o bn_mp_lcm.o bn_mp_lshd.o bn_mp_mod.o \ +bn_mp_mod_2d.o bn_mp_mod_d.o bn_mp_montgomery_calc_normalization.o bn_mp_montgomery_reduce.o \ +bn_mp_montgomery_setup.o bn_mp_mul.o bn_mp_mul_2.o bn_mp_mul_2d.o bn_mp_mul_d.o bn_mp_mulmod.o \ +bn_mp_n_root.o bn_mp_n_root_ex.o bn_mp_neg.o bn_mp_or.o bn_mp_prime_fermat.o \ +bn_mp_prime_frobenius_underwood.o bn_mp_prime_is_divisible.o bn_mp_prime_is_prime.o \ +bn_mp_prime_miller_rabin.o bn_mp_prime_next_prime.o bn_mp_prime_rabin_miller_trials.o \ +bn_mp_prime_random_ex.o bn_mp_prime_strong_lucas_selfridge.o bn_mp_radix_size.o bn_mp_radix_smap.o \ +bn_mp_rand.o bn_mp_read_radix.o bn_mp_read_signed_bin.o bn_mp_read_unsigned_bin.o bn_mp_reduce.o \ +bn_mp_reduce_2k.o bn_mp_reduce_2k_l.o bn_mp_reduce_2k_setup.o bn_mp_reduce_2k_setup_l.o \ +bn_mp_reduce_is_2k.o bn_mp_reduce_is_2k_l.o bn_mp_reduce_setup.o bn_mp_rshd.o bn_mp_set.o \ +bn_mp_set_double.o bn_mp_set_int.o bn_mp_set_long.o bn_mp_set_long_long.o bn_mp_shrink.o \ bn_mp_signed_bin_size.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o \ bn_mp_sub_d.o bn_mp_submod.o bn_mp_tc_and.o bn_mp_tc_div_2d.o bn_mp_tc_or.o bn_mp_tc_xor.o \ bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o bn_mp_to_unsigned_bin_n.o \ diff --git a/tommath.h b/tommath.h index ee5da86..e0eb259 100644 --- a/tommath.h +++ b/tommath.h @@ -191,8 +191,8 @@ int mp_init_size(mp_int *a, int size); /* ---> Basic Manipulations <--- */ #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO) -#define mp_iseven(a) ((((a)->used == 0) || (((a)->dp[0] & 1u) == 0u)) ? MP_YES : MP_NO) -#define mp_isodd(a) ((((a)->used > 0) && (((a)->dp[0] & 1u) == 1u)) ? MP_YES : MP_NO) +int mp_iseven(const mp_int *a); +int mp_isodd(const mp_int *a); #define mp_isneg(a) (((a)->sign != MP_ZPOS) ? MP_YES : MP_NO) /* set to zero */ diff --git a/tommath_class.h b/tommath_class.h index 2dc028c..2702c1c 100644 --- a/tommath_class.h +++ b/tommath_class.h @@ -74,6 +74,8 @@ # define BN_MP_INVMOD_C # define BN_MP_INVMOD_SLOW_C # define BN_MP_IS_SQUARE_C +# define BN_MP_ISEVEN_C +# define BN_MP_ISODD_C # define BN_MP_JACOBI_C # define BN_MP_KARATSUBA_MUL_C # define BN_MP_KARATSUBA_SQR_C @@ -517,6 +519,12 @@ # define BN_MP_CLEAR_C #endif +#if defined(BN_MP_ISEVEN_C) +#endif + +#if defined(BN_MP_ISODD_C) +#endif + #if defined(BN_MP_JACOBI_C) # define BN_MP_KRONECKER_C # define BN_MP_CMP_D_C