diff options
author | Cy Schubert <cy@FreeBSD.org> | 2023-06-26 22:56:52 +0000 |
---|---|---|
committer | Cy Schubert <cy@FreeBSD.org> | 2023-06-26 22:56:52 +0000 |
commit | b6a943f7197af1a5eb6bb028b9b808ec5016e30c (patch) | |
tree | cfbb91e940dd89d0e1d46095f43c228d7d079fa0 /lib/hcrypto/libtommath/bn_mp_invmod.c | |
parent | 6f4e10db3298f6d65e1e646fe52aaafc3682b788 (diff) | |
download | src-b6a943f7197af1a5eb6bb028b9b808ec5016e30c.tar.gz src-b6a943f7197af1a5eb6bb028b9b808ec5016e30c.zip |
heimdal: Vendor import f62e2f278vendor/heimdal/7.8.0-2023-06-10-f62e2f278vendor/heimdal
Heimdal 7.8.0 does not support OpenSSL 3.0. 7.9.0 will but it hasn't
been released yet. We are importing f62e2f278 for its OpenSSL 3.0
support.
Diffstat (limited to 'lib/hcrypto/libtommath/bn_mp_invmod.c')
-rw-r--r-- | lib/hcrypto/libtommath/bn_mp_invmod.c | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/lib/hcrypto/libtommath/bn_mp_invmod.c b/lib/hcrypto/libtommath/bn_mp_invmod.c index ac1a9523191c..7b35a2431905 100644 --- a/lib/hcrypto/libtommath/bn_mp_invmod.c +++ b/lib/hcrypto/libtommath/bn_mp_invmod.c @@ -1,43 +1,23 @@ -#include <tommath.h> +#include "tommath_private.h" #ifdef BN_MP_INVMOD_C -/* LibTomMath, multiple-precision integer library -- Tom St Denis - * - * LibTomMath is a library that provides multiple-precision - * integer arithmetic as well as number theoretic functionality. - * - * The library was designed directly after the MPI library by - * Michael Fromberger but has been written from scratch with - * additional optimizations in place. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtom.org - */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis */ +/* SPDX-License-Identifier: Unlicense */ /* hac 14.61, pp608 */ -int mp_invmod (mp_int * a, mp_int * b, mp_int * c) +mp_err mp_invmod(const mp_int *a, const mp_int *b, mp_int *c) { - /* b cannot be negative */ - if (b->sign == MP_NEG || mp_iszero(b) == 1) { - return MP_VAL; - } + /* b cannot be negative and has to be >1 */ + if ((b->sign == MP_NEG) || (mp_cmp_d(b, 1uL) != MP_GT)) { + return MP_VAL; + } -#ifdef BN_FAST_MP_INVMOD_C - /* if the modulus is odd we can use a faster routine instead */ - if (mp_isodd (b) == 1) { - return fast_mp_invmod (a, b, c); - } -#endif + /* if the modulus is odd we can use a faster routine instead */ + if (MP_HAS(S_MP_INVMOD_FAST) && MP_IS_ODD(b)) { + return s_mp_invmod_fast(a, b, c); + } -#ifdef BN_MP_INVMOD_SLOW_C - return mp_invmod_slow(a, b, c); -#else - return MP_VAL; -#endif + return MP_HAS(S_MP_INVMOD_SLOW) + ? s_mp_invmod_slow(a, b, c) + : MP_VAL; } #endif - -/* $Source: /cvs/libtom/libtommath/bn_mp_invmod.c,v $ */ -/* $Revision: 1.4 $ */ -/* $Date: 2006/12/28 01:25:13 $ */ |