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 665050 : mp_ord mp_cmp_mag(const mp_int *a, const mp_int *b)
8 : {
9 : int n;
10 : const mp_digit *tmpa, *tmpb;
11 :
12 : /* compare based on # of non-zero digits */
13 665050 : if (a->used > b->used) {
14 7173 : return MP_GT;
15 : }
16 :
17 657877 : if (a->used < b->used) {
18 13907 : return MP_LT;
19 : }
20 :
21 : /* alias for a */
22 643970 : tmpa = a->dp + (a->used - 1);
23 :
24 : /* alias for b */
25 643970 : tmpb = b->dp + (a->used - 1);
26 :
27 : /* compare based on digits */
28 688920 : for (n = 0; n < a->used; ++n, --tmpa, --tmpb) {
29 688817 : if (*tmpa > *tmpb) {
30 227502 : return MP_GT;
31 : }
32 :
33 461315 : if (*tmpa < *tmpb) {
34 416365 : return MP_LT;
35 : }
36 : }
37 103 : return MP_EQ;
38 : }
39 : #endif
|