Coverage Report

Created: 2023-03-20 06:28

/src/dropbear/libtommath/bn_mp_add.c
Line
Count
Source (jump to first uncovered line)
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
0
{
9
0
   mp_sign sa, sb;
10
0
   mp_err err;
11
12
   /* get sign of both inputs */
13
0
   sa = a->sign;
14
0
   sb = b->sign;
15
16
   /* handle two cases, not four */
17
0
   if (sa == sb) {
18
      /* both positive or both negative */
19
      /* add their magnitudes, copy the sign */
20
0
      c->sign = sa;
21
0
      err = s_mp_add(a, b, c);
22
0
   } 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
0
      if (mp_cmp_mag(a, b) == MP_LT) {
28
0
         c->sign = sb;
29
0
         err = s_mp_sub(b, a, c);
30
0
      } else {
31
0
         c->sign = sa;
32
0
         err = s_mp_sub(a, b, c);
33
0
      }
34
0
   }
35
0
   return err;
36
0
}
37
38
#endif