Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@ jobs:
- { BUILDOPTIONS: '--symbols', SANITIZER: '', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: 'libtool-bin' }
# Run always with valgrind (no sanitizer, but debug info)
- { BUILDOPTIONS: '--with-cc=gcc --with-m64 --with-valgrind', SANITIZER: '', COMPILE_DEBUG: '1', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: '' }
# Alternative big-int version of mp_log(_n)
- { BUILDOPTIONS: '--with-cc=gcc --with-m64 --cflags=-DS_MP_WORD_TOO_SMALL_C="" --with-valgrind', SANITIZER: '', COMPILE_DEBUG: '1', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: '' }
# Shared library build
- { BUILDOPTIONS: '--with-cc=gcc --make-option=-f --make-option=makefile.shared', SANITIZER: '', COMPILE_DEBUG: '0', COMPILE_LTO: '1', CONV_WARNINGS: '', OTHERDEPS: 'libtool-bin' }
# GCC for the 32-bit architecture (no valgrind)
- { BUILDOPTIONS: '--with-cc=gcc --with-m32', SANITIZER: '', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: 'libc6-dev-i386 gcc-multilib' }
# Alternative big-int version of mp_log(_n) for the 32-bit architecture (no valgrind)
- { BUILDOPTIONS: '--with-cc=gcc --with-m32 --cflags=-DS_MP_WORD_TOO_SMALL_C="" ', SANITIZER: '', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: 'libc6-dev-i386 gcc-multilib' }
# clang for the 32-bit architecture (no valgrind)
- { BUILDOPTIONS: '--with-cc=clang-10 --with-m32', SANITIZER: '', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: 'clang-10 llvm-10 gcc-multilib' }
# RSA superclass with tests (no sanitizer, but debug info)
Expand Down Expand Up @@ -103,6 +107,10 @@ jobs:
# but testing all three in one run took to long and timed out.
- { BUILDOPTIONS: '--with-cc=gcc --cflags=-DMP_16BIT --limit-valgrind', SANITIZER: '1', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: '' }
- { BUILDOPTIONS: '--with-cc=gcc --cflags=-DMP_32BIT --limit-valgrind', SANITIZER: '1', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: '' }
# Alternative big-int version of mp_log(_n)
- { BUILDOPTIONS: '--with-cc=gcc --cflags=-DMP_16BIT --cflags=-DS_MP_WORD_TOO_SMALL_C="" --limit-valgrind', SANITIZER: '1', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: '' }
- { BUILDOPTIONS: '--with-cc=gcc --cflags=-DMP_32BIT --cflags=-DS_MP_WORD_TOO_SMALL_C="" --limit-valgrind', SANITIZER: '1', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: '' }

# clang for the x86-64 architecture with restricted limb sizes
- { BUILDOPTIONS: '--with-cc=clang --cflags=-DMP_16BIT --limit-valgrind', SANITIZER: '1', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: 'clang llvm' }
- { BUILDOPTIONS: '--with-cc=clang --cflags=-DMP_32BIT --limit-valgrind', SANITIZER: '1', COMPILE_DEBUG: '0', COMPILE_LTO: '0', CONV_WARNINGS: '', OTHERDEPS: 'clang llvm' }
Expand Down
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,16 @@ etc/tune
tommath.tex
libtommath.pc

# ignore files generated by bibtex/biber
83aea75e0c59d1de027747003151d53dcb2a51c9.bib
*.bbl
*.bcf
*.blg
*.loa
*.lol
*.run.xml


# ignore files generated by testme.sh
gcc_errors_*.txt
test_*.txt
Expand Down
109 changes: 97 additions & 12 deletions demo/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -1395,8 +1395,7 @@ static int test_mp_reduce_2k_l(void)
return EXIT_SUCCESS;
# endif /* LTM_DEMO_TEST_REDUCE_2K_L */
}
/* stripped down version of mp_radix_size. The faster version can be off by up t
o +3 */
/* stripped down version of mp_radix_size. The faster version can be off by up to +3 */
static mp_err s_rs(const mp_int *a, int radix, int *size)
{
mp_err res;
Expand Down Expand Up @@ -1425,13 +1424,21 @@ static mp_err s_rs(const mp_int *a, int radix, int *size)
*size = digs + 1;
return MP_OKAY;
}


static int test_mp_log_n(void)
{
mp_int a;
mp_digit d;
int base, lb, size;
int base, lb, size, i;
const int max_base = MP_MIN(INT_MAX, MP_DIGIT_MAX);

if (MP_HAS(S_MP_WORD_TOO_SMALL)) {
fprintf(stderr, "Testing mp_log_n with restricted size of mp_word.\n");
} else {
fprintf(stderr, "Testing mp_log_n with normal size of mp_word.\n");
}

DOR(mp_init(&a));

/*
Expand Down Expand Up @@ -1484,25 +1491,32 @@ static int test_mp_log_n(void)
DO(mp_rand(&a, 10));
for (base = 2; base < 65; base++) {
DO(mp_log_n(&a, base, &lb));
DO(s_rs(&a,(int)base, &size));
DO(s_rs(&a,base, &size));
/* radix_size includes the memory needed for '\0', too*/
size -= 2;
EXPECT(lb == size);
}

/*
bases 2..64 with "a" a random small constant to
test the part of mp_ilogb that uses native types.
bases 2..64 with "a" a small constant and a small exponent "n" to test
in the range a^n - 10 .. a^n + 10. That will check the correction loops
and the test for perfect power.
For simplicity a = base and n = 23 (64^23 == 2^138 > 2^128)
*/
DO(mp_rand(&a, 1));
for (base = 2; base < 65; base++) {
DO(mp_log_n(&a, base, &lb));
DO(s_rs(&a,(int)base, &size));
size -= 2;
EXPECT(lb == size);
mp_set(&a,(mp_digit)base);
DO(mp_expt_n(&a, 23, &a));
DO(mp_sub_d(&a, 10u, &a));
for (i = 0; i < 20; i++) {
DO(mp_log_n(&a, base, &lb));
DO(s_rs(&a, base, &size));
size -= 2;
EXPECT(lb == size);
DO(mp_add_d(&a, 1u, &a));
}
}

/*Test upper edgecase with base UINT32_MAX and number (UINT32_MAX/2)*UINT32_MAX^10 */
/*Test base upper edgecase with base = UINT32_MAX and number = (UINT32_MAX/2)*UINT32_MAX^10 */
mp_set(&a, max_base);
DO(mp_expt_n(&a, 10uL, &a));
DO(mp_add_d(&a, max_base / 2, &a));
Expand All @@ -1516,6 +1530,76 @@ static int test_mp_log_n(void)
return EXIT_FAILURE;
}

static int test_mp_log(void)
{
mp_int a, base, bn, t;
int lb, lb2, i, j;

if (MP_HAS(S_MP_WORD_TOO_SMALL)) {
fprintf(stdout, "Testing mp_log with restricted size of mp_word.\n");
} else {
fprintf(stdout, "Testing mp_log with normal size of mp_word.\n");
}

DOR(mp_init_multi(&a, &base, &bn, &t, NULL));

/*
The small values got tested above for mp_log_n already, leaving the big stuff
with bases larger than INT_MAX.
*/

/* Edgecases a^b and -1+a^b (floor(log_2(256^129)) = 1032) */
for (i = 2; i < 256; i++) {
mp_set_i32(&a,i);
for (j = 2; j < ((i/2)+1); j++) {
DO(mp_expt_n(&a, j, &bn));
mp_set_i32(&base,j);
/* i^j a perfect power */
DO(mp_log(&bn, &a, &lb));
DO(mp_expt_n(&a, lb, &t));
if (mp_cmp(&t, &bn) != MP_EQ) {
fprintf(stderr,"FAILURE mp_log for perf. power at i = %d, j = %d\n", i, j);
goto LBL_ERR;
}
/* -1 + i^j */
DO(mp_decr(&bn));
DO(mp_log(&bn, &a, &lb2));
if (lb != (lb2+1)) {
fprintf(stderr,"FAILURE mp_log for -1 + i^j at i = %d, j = %d\n", i, j);
goto LBL_ERR;
}
}
}

/* Random a, base */
for (i = 1; i < 256; i++) {
DO(mp_rand(&a, i));
for (j = 1; j < ((i/2)+1); j++) {
DO(mp_rand(&base, j));
DO(mp_log(&a, &base, &lb));
DO(mp_expt_n(&base, lb, &bn));
/* "bn" must be smaller than or equal to "a" at this point. */
if (mp_cmp(&bn, &a) == MP_GT) {
fprintf(stderr,"FAILURE mp_log random in GT check");
goto LBL_ERR;
}
DO(mp_mul(&bn, &base, &bn));
/* "bn" must be bigger than "a" at this point. */
if (mp_cmp(&bn, &a) != MP_GT) {
fprintf(stderr,"FAILURE mp_log random in NOT GT check");
goto LBL_ERR;
}
}
}

mp_clear_multi(&a, &base, &bn, &t, NULL);
return EXIT_SUCCESS;
LBL_ERR:
mp_clear_multi(&a, &base, &bn, &t, NULL);
return EXIT_FAILURE;
}


static int test_mp_incr(void)
{
mp_int a, b;
Expand Down Expand Up @@ -2373,6 +2457,7 @@ static int unit_tests(int argc, char **argv)
T1(mp_get_u64, MP_GET_I64),
T1(mp_get_ul, MP_GET_L),
T1(mp_log_n, MP_LOG_N),
T1(mp_log, MP_LOG),
T1(mp_incr, MP_ADD_D),
T1(mp_invmod, MP_INVMOD),
T1(mp_is_square, MP_IS_SQUARE),
Expand Down
30 changes: 17 additions & 13 deletions doc/bn.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1946,18 +1946,24 @@ \section{Root Finding}
\begin{alltt}
mp_err mp_sqrt(const mp_int *arg, mp_int *ret)
\end{alltt}

\chapter{Logarithm}
\section{Integer Logarithm}
A logarithm function for positive integer input \texttt{a, base} computing $\floor{\log_bx}$ such
that $(\log_b x)^b \le x$.
that $(\log_b x)^b \le x$. The function \texttt{mp\_log\_n} is just a wrapper that converts \texttt{base}
to a bigint and calls \texttt{mp\_log}.

\index{mp\_log}
\begin{alltt}
mp_err mp_log(const mp_int *a, const mp_int *base, int *c)
\end{alltt}

\index{mp\_log\_n}
\begin{alltt}
mp_err mp_log_n(const mp_int *a, int base, int *c)
\end{alltt}

\subsection{Example}
Example given for \texttt{mp\_log\_n} only because the single difference is the type of \texttt{base}.
\begin{small}
\begin{alltt}
#include <stdlib.h>
Expand All @@ -1968,15 +1974,15 @@ \subsection{Example}

int main(int argc, char **argv)
{
mp_int x, output;
int base;
mp_int x;
int base, output;
mp_err e;

if (argc != 3) {
fprintf(stderr,"Usage %s base x\textbackslash{}n", argv[0]);
exit(EXIT_FAILURE);
}
if ((e = mp_init_multi(&x, &output, NULL)) != MP_OKAY) {
if ((e = mp_init(&x)) != MP_OKAY) {
fprintf(stderr,"mp_init failed: \textbackslash{}"%s\textbackslash{}"\textbackslash{}n",
mp_error_to_string(e));
exit(EXIT_FAILURE);
Expand All @@ -1998,20 +2004,18 @@ \subsection{Example}
mp_error_to_string(e));
exit(EXIT_FAILURE);
}
printf("%d\n",output);

if ((e = mp_fwrite(&output, 10, stdout)) != MP_OKAY) {
fprintf(stderr,"mp_fwrite failed: \textbackslash{}"%s\textbackslash{}"\textbackslash{}n",
mp_error_to_string(e));
exit(EXIT_FAILURE);
}
putchar('\textbackslash{}n');

mp_clear_multi(&x, &output, NULL);
mp_clear(&x);
exit(EXIT_SUCCESS);
}
\end{alltt}
\end{small}





\chapter{Prime Numbers}

\section{Fermat Test}
Expand Down
16 changes: 10 additions & 6 deletions libtommath_VS2008.vcproj
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,10 @@
RelativePath="mp_lcm.c"
>
</File>
<File
RelativePath="mp_log.c"
>
</File>
<File
RelativePath="mp_log_n.c"
>
Expand Down Expand Up @@ -829,27 +833,27 @@
>
</File>
<File
RelativePath="s_mp_get_bit.c"
RelativePath="s_mp_fp_log.c"
>
</File>
<File
RelativePath="s_mp_invmod.c"
RelativePath="s_mp_fp_log_d.c"
>
</File>
<File
RelativePath="s_mp_invmod_odd.c"
RelativePath="s_mp_get_bit.c"
>
</File>
<File
RelativePath="s_mp_log.c"
RelativePath="s_mp_invmod.c"
>
</File>
<File
RelativePath="s_mp_log_2expt.c"
RelativePath="s_mp_invmod_odd.c"
>
</File>
<File
RelativePath="s_mp_log_d.c"
RelativePath="s_mp_log_2expt.c"
>
</File>
<File
Expand Down
6 changes: 3 additions & 3 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ mp_error_to_string.o mp_exch.o mp_expt_n.o mp_exptmod.o mp_exteuclid.o mp_fread.
mp_from_ubin.o mp_fwrite.o mp_gcd.o mp_get_double.o mp_get_i32.o mp_get_i64.o mp_get_l.o mp_get_mag_u32.o \
mp_get_mag_u64.o mp_get_mag_ul.o mp_grow.o mp_hash.o mp_init.o mp_init_copy.o mp_init_i32.o mp_init_i64.o \
mp_init_l.o mp_init_multi.o mp_init_set.o mp_init_size.o mp_init_u32.o mp_init_u64.o mp_init_ul.o \
mp_invmod.o mp_is_square.o mp_kronecker.o mp_lcm.o mp_log_n.o mp_lshd.o mp_mod.o mp_mod_2d.o \
mp_invmod.o mp_is_square.o mp_kronecker.o mp_lcm.o mp_log.o mp_log_n.o mp_lshd.o mp_mod.o mp_mod_2d.o \
mp_montgomery_calc_normalization.o mp_montgomery_reduce.o mp_montgomery_setup.o mp_mul.o mp_mul_2.o \
mp_mul_2d.o mp_mul_d.o mp_mulmod.o mp_neg.o mp_or.o mp_pack.o mp_pack_count.o mp_prime_fermat.o \
mp_prime_frobenius_underwood.o mp_prime_is_prime.o mp_prime_miller_rabin.o mp_prime_next_prime.o \
Expand All @@ -44,8 +44,8 @@ mp_reduce_setup.o mp_root_n.o mp_rshd.o mp_sbin_size.o mp_set.o mp_set_double.o
mp_set_l.o mp_set_u32.o mp_set_u64.o mp_set_ul.o mp_shrink.o mp_signed_rsh.o mp_sqrmod.o mp_sqrt.o \
mp_sqrtmod_prime.o mp_sub.o mp_sub_d.o mp_submod.o mp_to_radix.o mp_to_sbin.o mp_to_ubin.o mp_ubin_size.o \
mp_unpack.o mp_xor.o mp_zero.o s_mp_add.o s_mp_copy_digs.o s_mp_div_3.o s_mp_div_recursive.o \
s_mp_div_school.o s_mp_div_small.o s_mp_exptmod.o s_mp_exptmod_fast.o s_mp_get_bit.o s_mp_invmod.o \
s_mp_invmod_odd.o s_mp_log.o s_mp_log_2expt.o s_mp_log_d.o s_mp_montgomery_reduce_comba.o s_mp_mul.o \
s_mp_div_school.o s_mp_div_small.o s_mp_exptmod.o s_mp_exptmod_fast.o s_mp_fp_log.o s_mp_fp_log_d.o \
s_mp_get_bit.o s_mp_invmod.o s_mp_invmod_odd.o s_mp_log_2expt.o s_mp_montgomery_reduce_comba.o s_mp_mul.o \
s_mp_mul_balance.o s_mp_mul_comba.o s_mp_mul_high.o s_mp_mul_high_comba.o s_mp_mul_karatsuba.o \
s_mp_mul_toom.o s_mp_prime_is_divisible.o s_mp_prime_tab.o s_mp_radix_map.o \
s_mp_radix_size_overestimate.o s_mp_rand_platform.o s_mp_sqr.o s_mp_sqr_comba.o s_mp_sqr_karatsuba.o \
Expand Down
6 changes: 3 additions & 3 deletions makefile.mingw
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ mp_error_to_string.o mp_exch.o mp_expt_n.o mp_exptmod.o mp_exteuclid.o mp_fread.
mp_from_ubin.o mp_fwrite.o mp_gcd.o mp_get_double.o mp_get_i32.o mp_get_i64.o mp_get_l.o mp_get_mag_u32.o \
mp_get_mag_u64.o mp_get_mag_ul.o mp_grow.o mp_hash.o mp_init.o mp_init_copy.o mp_init_i32.o mp_init_i64.o \
mp_init_l.o mp_init_multi.o mp_init_set.o mp_init_size.o mp_init_u32.o mp_init_u64.o mp_init_ul.o \
mp_invmod.o mp_is_square.o mp_kronecker.o mp_lcm.o mp_log_n.o mp_lshd.o mp_mod.o mp_mod_2d.o \
mp_invmod.o mp_is_square.o mp_kronecker.o mp_lcm.o mp_log.o mp_log_n.o mp_lshd.o mp_mod.o mp_mod_2d.o \
mp_montgomery_calc_normalization.o mp_montgomery_reduce.o mp_montgomery_setup.o mp_mul.o mp_mul_2.o \
mp_mul_2d.o mp_mul_d.o mp_mulmod.o mp_neg.o mp_or.o mp_pack.o mp_pack_count.o mp_prime_fermat.o \
mp_prime_frobenius_underwood.o mp_prime_is_prime.o mp_prime_miller_rabin.o mp_prime_next_prime.o \
Expand All @@ -46,8 +46,8 @@ mp_reduce_setup.o mp_root_n.o mp_rshd.o mp_sbin_size.o mp_set.o mp_set_double.o
mp_set_l.o mp_set_u32.o mp_set_u64.o mp_set_ul.o mp_shrink.o mp_signed_rsh.o mp_sqrmod.o mp_sqrt.o \
mp_sqrtmod_prime.o mp_sub.o mp_sub_d.o mp_submod.o mp_to_radix.o mp_to_sbin.o mp_to_ubin.o mp_ubin_size.o \
mp_unpack.o mp_xor.o mp_zero.o s_mp_add.o s_mp_copy_digs.o s_mp_div_3.o s_mp_div_recursive.o \
s_mp_div_school.o s_mp_div_small.o s_mp_exptmod.o s_mp_exptmod_fast.o s_mp_get_bit.o s_mp_invmod.o \
s_mp_invmod_odd.o s_mp_log.o s_mp_log_2expt.o s_mp_log_d.o s_mp_montgomery_reduce_comba.o s_mp_mul.o \
s_mp_div_school.o s_mp_div_small.o s_mp_exptmod.o s_mp_exptmod_fast.o s_mp_fp_log.o s_mp_fp_log_d.o \
s_mp_get_bit.o s_mp_invmod.o s_mp_invmod_odd.o s_mp_log_2expt.o s_mp_montgomery_reduce_comba.o s_mp_mul.o \
s_mp_mul_balance.o s_mp_mul_comba.o s_mp_mul_high.o s_mp_mul_high_comba.o s_mp_mul_karatsuba.o \
s_mp_mul_toom.o s_mp_prime_is_divisible.o s_mp_prime_tab.o s_mp_radix_map.o \
s_mp_radix_size_overestimate.o s_mp_rand_platform.o s_mp_sqr.o s_mp_sqr_comba.o s_mp_sqr_karatsuba.o \
Expand Down
6 changes: 3 additions & 3 deletions makefile.msvc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ mp_error_to_string.obj mp_exch.obj mp_expt_n.obj mp_exptmod.obj mp_exteuclid.obj
mp_from_ubin.obj mp_fwrite.obj mp_gcd.obj mp_get_double.obj mp_get_i32.obj mp_get_i64.obj mp_get_l.obj mp_get_mag_u32.obj \
mp_get_mag_u64.obj mp_get_mag_ul.obj mp_grow.obj mp_hash.obj mp_init.obj mp_init_copy.obj mp_init_i32.obj mp_init_i64.obj \
mp_init_l.obj mp_init_multi.obj mp_init_set.obj mp_init_size.obj mp_init_u32.obj mp_init_u64.obj mp_init_ul.obj \
mp_invmod.obj mp_is_square.obj mp_kronecker.obj mp_lcm.obj mp_log_n.obj mp_lshd.obj mp_mod.obj mp_mod_2d.obj \
mp_invmod.obj mp_is_square.obj mp_kronecker.obj mp_lcm.obj mp_log.obj mp_log_n.obj mp_lshd.obj mp_mod.obj mp_mod_2d.obj \
mp_montgomery_calc_normalization.obj mp_montgomery_reduce.obj mp_montgomery_setup.obj mp_mul.obj mp_mul_2.obj \
mp_mul_2d.obj mp_mul_d.obj mp_mulmod.obj mp_neg.obj mp_or.obj mp_pack.obj mp_pack_count.obj mp_prime_fermat.obj \
mp_prime_frobenius_underwood.obj mp_prime_is_prime.obj mp_prime_miller_rabin.obj mp_prime_next_prime.obj \
Expand All @@ -42,8 +42,8 @@ mp_reduce_setup.obj mp_root_n.obj mp_rshd.obj mp_sbin_size.obj mp_set.obj mp_set
mp_set_l.obj mp_set_u32.obj mp_set_u64.obj mp_set_ul.obj mp_shrink.obj mp_signed_rsh.obj mp_sqrmod.obj mp_sqrt.obj \
mp_sqrtmod_prime.obj mp_sub.obj mp_sub_d.obj mp_submod.obj mp_to_radix.obj mp_to_sbin.obj mp_to_ubin.obj mp_ubin_size.obj \
mp_unpack.obj mp_xor.obj mp_zero.obj s_mp_add.obj s_mp_copy_digs.obj s_mp_div_3.obj s_mp_div_recursive.obj \
s_mp_div_school.obj s_mp_div_small.obj s_mp_exptmod.obj s_mp_exptmod_fast.obj s_mp_get_bit.obj s_mp_invmod.obj \
s_mp_invmod_odd.obj s_mp_log.obj s_mp_log_2expt.obj s_mp_log_d.obj s_mp_montgomery_reduce_comba.obj s_mp_mul.obj \
s_mp_div_school.obj s_mp_div_small.obj s_mp_exptmod.obj s_mp_exptmod_fast.obj s_mp_fp_log.obj s_mp_fp_log_d.obj \
s_mp_get_bit.obj s_mp_invmod.obj s_mp_invmod_odd.obj s_mp_log_2expt.obj s_mp_montgomery_reduce_comba.obj s_mp_mul.obj \
s_mp_mul_balance.obj s_mp_mul_comba.obj s_mp_mul_high.obj s_mp_mul_high_comba.obj s_mp_mul_karatsuba.obj \
s_mp_mul_toom.obj s_mp_prime_is_divisible.obj s_mp_prime_tab.obj s_mp_radix_map.obj \
s_mp_radix_size_overestimate.obj s_mp_rand_platform.obj s_mp_sqr.obj s_mp_sqr_comba.obj s_mp_sqr_karatsuba.obj \
Expand Down
Loading