diff options
author | Steffen Jaeckel <s@jaeckel.eu> | 2020-05-26 17:36:47 +0200 |
---|---|---|
committer | Steffen Jaeckel <s@jaeckel.eu> | 2020-05-26 17:36:47 +0200 |
commit | 4f11c927dfb74496017fd1d2e2b18e3afb2a93fd (patch) | |
tree | b448865b4989998f041b159bd913b79542f8623a /libtommath/bn_mp_decr.c | |
parent | 1de4c3c6588830f9c2c4c7236596f5e0c639e588 (diff) | |
download | dropbear-4f11c927dfb74496017fd1d2e2b18e3afb2a93fd.tar.gz |
Update LibTomMath to 1.2.0 (#84)
* update C files
* update other files
* update headers
* update makefiles
* remove mp_set/get_double()
* use ltm 1.2.0 API
* update ltm_desc
* use bundled tommath if system-tommath is too old
* XMALLOC etc. were changed to MP_MALLOC etc.
Diffstat (limited to 'libtommath/bn_mp_decr.c')
-rw-r--r-- | libtommath/bn_mp_decr.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libtommath/bn_mp_decr.c b/libtommath/bn_mp_decr.c new file mode 100644 index 0000000..c6a1572 --- /dev/null +++ b/libtommath/bn_mp_decr.c @@ -0,0 +1,34 @@ +#include "tommath_private.h" +#ifdef BN_MP_DECR_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis */ +/* SPDX-License-Identifier: Unlicense */ + +/* Decrement "a" by one like "a--". Changes input! */ +mp_err mp_decr(mp_int *a) +{ + if (MP_IS_ZERO(a)) { + mp_set(a,1uL); + a->sign = MP_NEG; + return MP_OKAY; + } else if (a->sign == MP_NEG) { + mp_err err; + a->sign = MP_ZPOS; + if ((err = mp_incr(a)) != MP_OKAY) { + return err; + } + /* There is no -0 in LTM */ + if (!MP_IS_ZERO(a)) { + a->sign = MP_NEG; + } + return MP_OKAY; + } else if (a->dp[0] > 1uL) { + a->dp[0]--; + if (a->dp[0] == 0u) { + mp_zero(a); + } + return MP_OKAY; + } else { + return mp_sub_d(a, 1uL,a); + } +} +#endif |