LCOV - code coverage report
Current view: top level - source4/heimdal/lib/hcrypto/libtommath - bn_mp_sub.c (source / functions) Hit Total Coverage
Test: coverage report for abartlet/fix-coverage dd10fb34 Lines: 12 12 100.0 %
Date: 2021-09-23 10:06:22 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #include <tommath.h>
       2             : #ifdef BN_MP_SUB_C
       3             : /* LibTomMath, multiple-precision integer library -- Tom St Denis
       4             :  *
       5             :  * LibTomMath is a library that provides multiple-precision
       6             :  * integer arithmetic as well as number theoretic functionality.
       7             :  *
       8             :  * The library was designed directly after the MPI library by
       9             :  * Michael Fromberger but has been written from scratch with
      10             :  * additional optimizations in place.
      11             :  *
      12             :  * The library is free for all purposes without any express
      13             :  * guarantee it works.
      14             :  *
      15             :  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
      16             :  */
      17             : 
      18             : /* high level subtraction (handles signs) */
      19             : int
      20     1112278 : mp_sub (mp_int * a, mp_int * b, mp_int * c)
      21             : {
      22             :   int     sa, sb, res;
      23             : 
      24     1112278 :   sa = a->sign;
      25     1112278 :   sb = b->sign;
      26             : 
      27     1112278 :   if (sa != sb) {
      28             :     /* subtract a negative from a positive, OR */
      29             :     /* subtract a positive from a negative. */
      30             :     /* In either case, ADD their magnitudes, */
      31             :     /* and use the sign of the first number. */
      32      337536 :     c->sign = sa;
      33      337536 :     res = s_mp_add (a, b, c);
      34             :   } else {
      35             :     /* subtract a positive from a positive, OR */
      36             :     /* subtract a negative from a negative. */
      37             :     /* First, take the difference between their */
      38             :     /* magnitudes, then... */
      39      774742 :     if (mp_cmp_mag (a, b) != MP_LT) {
      40             :       /* Copy the sign from the first */
      41      541025 :       c->sign = sa;
      42             :       /* The first has a larger or equal magnitude */
      43      541025 :       res = s_mp_sub (a, b, c);
      44             :     } else {
      45             :       /* The result has the *opposite* sign from */
      46             :       /* the first number. */
      47      233717 :       c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS;
      48             :       /* The second has a larger magnitude */
      49      233717 :       res = s_mp_sub (b, a, c);
      50             :     }
      51             :   }
      52     1112278 :   return res;
      53             : }
      54             : 
      55             : #endif
      56             : 
      57             : /* $Source: /cvs/libtom/libtommath/bn_mp_sub.c,v $ */
      58             : /* $Revision: 1.4 $ */
      59             : /* $Date: 2006/12/28 01:25:13 $ */

Generated by: LCOV version 1.13