Merge pull request #142 from fperrad/20181228_macros

refactor around macros
This commit is contained in:
Steffen Jaeckel 2019-02-10 23:29:10 +01:00 committed by GitHub
commit adb8d8bd0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 215 additions and 174 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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 */

View File

@ -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;
}

View File

@ -19,10 +19,10 @@ 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;
return (a->sign == MP_NEG) ? -d : d;
}
#endif

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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 */

View File

@ -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;
}

24
bn_mp_iseven.c Normal file
View File

@ -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$ */

24
bn_mp_isodd.c Normal file
View File

@ -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$ */

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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 {

View File

@ -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;

View File

@ -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;
}

View File

@ -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 */

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -41,8 +41,8 @@ int mp_set_double(mp_int *a, double b)
return res;
}
if (((cast.bits >> 63) != 0ULL) && (mp_iszero(a) == MP_NO)) {
SIGN(a) = MP_NEG;
if (((cast.bits >> 63) != 0ULL) && !IS_ZERO(a)) {
a->sign = MP_NEG;
}
return MP_OKAY;

View File

@ -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;
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -536,6 +536,14 @@
RelativePath="bn_mp_is_square.c"
>
</File>
<File
RelativePath="bn_mp_iseven.c"
>
</File>
<File
RelativePath="bn_mp_isodd.c"
>
</File>
<File
RelativePath="bn_mp_jacobi.c"
>

View File

@ -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 \

View File

@ -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 \

View File

@ -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 \

View File

@ -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 \

View File

@ -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 \

View File

@ -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 */

View File

@ -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
@ -163,14 +165,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 +258,6 @@
#endif
#if defined(BN_MP_CNT_LSB_C)
# define BN_MP_ISZERO_C
#endif
#if defined(BN_MP_COMPLEMENT_C)
@ -275,7 +273,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 +318,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 +372,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 +400,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 +423,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,11 +435,9 @@
#endif
#if defined(BN_MP_GET_BIT_C)
# define BN_MP_ISZERO_C
#endif
#if defined(BN_MP_GET_DOUBLE_C)
# define BN_MP_ISNEG_C
#endif
#if defined(BN_MP_GET_INT_C)
@ -498,20 +489,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
@ -532,9 +519,14 @@
# 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_ISNEG_C
# define BN_MP_CMP_D_C
#endif
@ -561,8 +553,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
@ -582,7 +572,6 @@
#endif
#if defined(BN_MP_LSHD_C)
# define BN_MP_ISZERO_C
# define BN_MP_GROW_C
# define BN_MP_RSHD_C
#endif
@ -591,7 +580,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
@ -679,7 +667,6 @@
#if defined(BN_MP_NEG_C)
# define BN_MP_COPY_C
# define BN_MP_ISZERO_C
#endif
#if defined(BN_MP_OR_C)
@ -716,7 +703,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
@ -726,7 +712,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
@ -759,7 +744,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
@ -803,15 +787,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
@ -837,7 +818,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)
@ -933,7 +913,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)
@ -971,7 +950,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
@ -994,7 +972,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
@ -1022,7 +999,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 +1010,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 +1027,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
@ -1075,7 +1048,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
@ -1120,7 +1092,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
@ -1128,7 +1099,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

View File

@ -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);