Line data Source code
1 : #include "tommath_private.h" 2 : #ifdef BN_MP_CMP_MAG_C 3 : /* LibTomMath, multiple-precision integer library -- Tom St Denis */ 4 : /* SPDX-License-Identifier: Unlicense */ 5 : 6 : /* compare maginitude of two ints (unsigned) */ 7 2111266 : mp_ord mp_cmp_mag(const mp_int *a, const mp_int *b) 8 : { 9 119626 : int n; 10 119626 : const mp_digit *tmpa, *tmpb; 11 : 12 : /* compare based on # of non-zero digits */ 13 2111266 : if (a->used > b->used) { 14 21597 : return MP_GT; 15 : } 16 : 17 2088089 : if (a->used < b->used) { 18 40814 : return MP_LT; 19 : } 20 : 21 : /* alias for a */ 22 2046616 : tmpa = a->dp + (a->used - 1); 23 : 24 : /* alias for b */ 25 2046616 : tmpb = b->dp + (a->used - 1); 26 : 27 : /* compare based on digits */ 28 2231958 : for (n = 0; n < a->used; ++n, --tmpa, --tmpb) { 29 2231582 : if (*tmpa > *tmpb) { 30 702672 : return MP_GT; 31 : } 32 : 33 1481010 : if (*tmpa < *tmpb) { 34 1226202 : return MP_LT; 35 : } 36 : } 37 355 : return MP_EQ; 38 : } 39 : #endif