Coverage Report

Created: 2023-03-20 06:28

/src/dropbear/libtommath/bn_mp_add.c
Line
Count
Source
1
#include "tommath_private.h"
2
#ifdef BN_MP_ADD_C
3
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
4
/* SPDX-License-Identifier: Unlicense */
5
6
/* high level addition (handles signs) */
7
mp_err mp_add(const mp_int *a, const mp_int *b, mp_int *c)
8
1.02M
{
9
1.02M
   mp_sign sa, sb;
10
1.02M
   mp_err err;
11
12
   /* get sign of both inputs */
13
1.02M
   sa = a->sign;
14
1.02M
   sb = b->sign;
15
16
   /* handle two cases, not four */
17
1.02M
   if (sa == sb) {
18
      /* both positive or both negative */
19
      /* add their magnitudes, copy the sign */
20
666k
      c->sign = sa;
21
666k
      err = s_mp_add(a, b, c);
22
666k
   } else {
23
      /* one positive, the other negative */
24
      /* subtract the one with the greater magnitude from */
25
      /* the one of the lesser magnitude.  The result gets */
26
      /* the sign of the one with the greater magnitude. */
27
353k
      if (mp_cmp_mag(a, b) == MP_LT) {
28
352k
         c->sign = sb;
29
352k
         err = s_mp_sub(b, a, c);
30
352k
      } else {
31
1.57k
         c->sign = sa;
32
1.57k
         err = s_mp_sub(a, b, c);
33
1.57k
      }
34
353k
   }
35
1.02M
   return err;
36
1.02M
}
37
38
#endif