Skip to content

Commit 78be8b8

Browse files
committed
Add a new mp_todec_fast...
that uses Barrett reduction to speed up stringifying large integers.
1 parent 584405f commit 78be8b8

File tree

8 files changed

+261
-35
lines changed

8 files changed

+261
-35
lines changed

bn_mp_todecimal_fast.c

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
#include "tommath_private.h"
2+
#include <string.h>
3+
#ifdef BN_MP_TODECIMAL_FAST_C
4+
/* LibTomMath, multiple-precision integer library -- Tom St Denis */
5+
/* SPDX-License-Identifier: Unlicense */
6+
7+
/* store a bignum as a decimal ASCII string */
8+
mp_err mp_todecimal_fast_rec(mp_int *number, mp_int *nL, mp_int *shiftL, mp_int *mL, int index, int left, char **result) {
9+
mp_int q, nLq, r;
10+
mp_err err;
11+
12+
if (index < 0) {
13+
char *next_piece = calloc(4, sizeof(char));
14+
int s_s = snprintf(next_piece, 4, left ? "%u" : "%03u", mp_get_u32(number));
15+
int r_s = strlen(*result);
16+
(*result) = realloc(*result, r_s + s_s + 2);
17+
strcat(*result, next_piece);
18+
return MP_OKAY;
19+
}
20+
21+
if ((err = mp_init_multi(&q, &nLq, &r, NULL)) != MP_OKAY) {
22+
goto LBL_ERR;
23+
}
24+
if ((err = mp_mul(number, &mL[index], &q)) != MP_OKAY) {
25+
goto LBL_ERR;
26+
}
27+
if ((err = mp_div_2d(&q, mp_get_u32(&shiftL[index]), &q, NULL)) != MP_OKAY) {
28+
goto LBL_ERR;
29+
}
30+
31+
if ((err = mp_mul(&nL[index], &q, &nLq)) != MP_OKAY) {
32+
goto LBL_ERR;
33+
}
34+
35+
if ((err = mp_sub(number, &nLq, &r)) != MP_OKAY) {
36+
goto LBL_ERR;
37+
}
38+
39+
if (mp_isneg(&r)) {
40+
if ((err = mp_sub_d(&q, 1, &q)) != MP_OKAY) {
41+
goto LBL_ERR;
42+
}
43+
if ((err = mp_add(&r, &nL[index], &r)) != MP_OKAY) {
44+
goto LBL_ERR;
45+
}
46+
}
47+
48+
--index;
49+
if (left && mp_iszero(&q)) {
50+
if ((err = mp_todecimal_fast_rec(&r, nL, shiftL, mL, index, 1, result)) != MP_OKAY) {
51+
goto LBL_ERR;
52+
}
53+
} else {
54+
if ((err = mp_todecimal_fast_rec(&q, nL, shiftL, mL, index, left, result)) != MP_OKAY) {
55+
goto LBL_ERR;
56+
}
57+
if ((err = mp_todecimal_fast_rec(&r, nL, shiftL, mL, index, 0, result)) != MP_OKAY) {
58+
goto LBL_ERR;
59+
}
60+
}
61+
62+
err = MP_OKAY;
63+
64+
LBL_ERR:mp_clear_multi (&q, &nLq, &r, NULL);
65+
return err;
66+
}
67+
68+
mp_err mp_todecimal_fast(mp_int *number, char **result) {
69+
mp_int n, shift, M, M2, M22, M4, M44;
70+
mp_int *nL, *shiftL, *mL;
71+
mp_err err;
72+
int index = 1;
73+
74+
if ((err = mp_init_multi(&M2, &M22, &M4, &M44, NULL)) != MP_OKAY) {
75+
goto LBL_ERR;
76+
}
77+
78+
if (mp_isneg(number)) {
79+
if ((err = mp_neg(number, number)) != MP_OKAY) {
80+
goto LBL_ERR;
81+
}
82+
*result[0] = '-';
83+
}
84+
if ((err = mp_init_set(&n, 1000)) != MP_OKAY) {
85+
goto LBL_ERR;
86+
}
87+
88+
nL = malloc(20 * sizeof(mp_int));
89+
if ((err = mp_init_copy(&nL[0], &n)) != MP_OKAY) {
90+
goto LBL_ERR;
91+
}
92+
93+
if ((err = mp_init_set(&shift, 20)) != MP_OKAY) {
94+
goto LBL_ERR;
95+
}
96+
97+
shiftL = malloc(20 * sizeof(mp_int));
98+
if ((err = mp_init_copy(&shiftL[0], &shift)) != MP_OKAY) {
99+
goto LBL_ERR;
100+
}
101+
102+
/* (8 * 2**$shift) / $n rounded up */
103+
if ((err = mp_init_set(&M, 8389)) != MP_OKAY) {
104+
goto LBL_ERR;
105+
}
106+
107+
/* $M / 8, rounded up */
108+
mL = malloc(20 * sizeof(mp_int));
109+
if ((err = mp_init_set(&mL[0], 1049)) != MP_OKAY) {
110+
goto LBL_ERR;
111+
}
112+
113+
while (1) {
114+
if ((err = mp_sqr(&n, &n)) != MP_OKAY) {
115+
goto LBL_ERR;
116+
}
117+
if (mp_cmp(&n, number) == MP_GT) {
118+
break;
119+
}
120+
121+
if ((err = mp_mul_2(&shift, &shift)) != MP_OKAY) {
122+
goto LBL_ERR;
123+
}
124+
125+
/* The following is a Newton-Raphson step, to restore the invariant
126+
* that $M is (8 * 2**$shift) / $n, rounded up. */
127+
{
128+
if ((err = mp_sqr(&M, &M2)) != MP_OKAY) {
129+
goto LBL_ERR;
130+
}
131+
if ((err = mp_sqr(&M2, &M4)) != MP_OKAY) {
132+
goto LBL_ERR;
133+
}
134+
135+
if ((err = mp_mul(&M4, &n, &M4)) != MP_OKAY) {
136+
goto LBL_ERR;
137+
}
138+
if ((err = mp_div_2d(&M4, mp_get_ul(&shift) + 6, &M4, NULL)) != MP_OKAY) {
139+
goto LBL_ERR;
140+
}
141+
if ((err = mp_mul_2(&M2, &M2)) != MP_OKAY) {
142+
goto LBL_ERR;
143+
}
144+
if ((err = mp_sub(&M4, &M2, &M4)) != MP_OKAY) {
145+
goto LBL_ERR;
146+
}
147+
if ((err = mp_add_d(&M4, 1, &M4)) != MP_OKAY) {
148+
goto LBL_ERR;
149+
}
150+
if ((err = mp_div_2d(&M4, 3, &M4, NULL)) != MP_OKAY) {
151+
goto LBL_ERR;
152+
}
153+
if ((err = mp_sub_d(&M4, 1, &M4)) != MP_OKAY) {
154+
goto LBL_ERR;
155+
}
156+
if ((err = mp_neg(&M4, &M)) != MP_OKAY) {
157+
goto LBL_ERR;
158+
}
159+
}
160+
161+
if ((err = mp_init_copy(&nL[index], &n)) != MP_OKAY) {
162+
goto LBL_ERR;
163+
}
164+
if ((err = mp_init_copy(&shiftL[index], &shift)) != MP_OKAY) {
165+
goto LBL_ERR;
166+
}
167+
168+
/* Divide by 8, round up */
169+
{
170+
if ((err = mp_add_d(&M4, 1, &M4)) != MP_OKAY) {
171+
goto LBL_ERR;
172+
}
173+
if ((err = mp_div_2d(&M4, 3, &M4, NULL)) != MP_OKAY) {
174+
goto LBL_ERR;
175+
}
176+
if ((err = mp_sub_d(&M4, 1, &M4)) != MP_OKAY) {
177+
goto LBL_ERR;
178+
}
179+
if ((err = mp_neg(&M4, &M4)) != MP_OKAY) {
180+
goto LBL_ERR;
181+
}
182+
}
183+
if ((err = mp_init_copy(&mL[index], &M4)) != MP_OKAY) {
184+
goto LBL_ERR;
185+
}
186+
index++;
187+
}
188+
189+
if ((err = mp_todecimal_fast_rec(number, nL, shiftL, mL, index - 1, 1, result)) != MP_OKAY) {
190+
goto LBL_ERR;
191+
}
192+
193+
err = MP_OKAY;
194+
195+
LBL_ERR:mp_clear_multi (&n, &shift, &M, &M2, &M22, &M4, &M44, NULL);
196+
return err;
197+
}
198+
199+
#endif

libtommath_VS2008.vcproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,10 @@
832832
RelativePath="bn_mp_to_unsigned_bin_n.c"
833833
>
834834
</File>
835+
<File
836+
RelativePath="bn_mp_todecimal_fast.c"
837+
>
838+
</File>
835839
<File
836840
RelativePath="bn_mp_toradix.c"
837841
>

makefile

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_
4949
bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_bin_size.o \
5050
bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
5151
bn_mp_submod.o bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o \
52-
bn_mp_to_unsigned_bin_n.o bn_mp_toradix.o bn_mp_toradix_n.o bn_mp_unsigned_bin_size.o bn_mp_xor.o \
53-
bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
54-
bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
55-
bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
56-
bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
57-
bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
58-
bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
52+
bn_mp_to_unsigned_bin_n.o bn_mp_todecimal_fast.o bn_mp_toradix.o bn_mp_toradix_n.o \
53+
bn_mp_unsigned_bin_size.o bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o \
54+
bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
55+
bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o \
56+
bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o \
57+
bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o \
58+
bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
5959

6060
#END_INS
6161

makefile.mingw

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_
5252
bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_bin_size.o \
5353
bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
5454
bn_mp_submod.o bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o \
55-
bn_mp_to_unsigned_bin_n.o bn_mp_toradix.o bn_mp_toradix_n.o bn_mp_unsigned_bin_size.o bn_mp_xor.o \
56-
bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
57-
bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
58-
bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
59-
bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
60-
bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
61-
bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
55+
bn_mp_to_unsigned_bin_n.o bn_mp_todecimal_fast.o bn_mp_toradix.o bn_mp_toradix_n.o \
56+
bn_mp_unsigned_bin_size.o bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o \
57+
bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
58+
bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o \
59+
bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o \
60+
bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o \
61+
bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
6262

6363
HEADERS_PUB=tommath.h
6464
HEADERS=tommath_private.h tommath_class.h tommath_superclass.h $(HEADERS_PUB)

makefile.msvc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ bn_mp_set.obj bn_mp_set_double.obj bn_mp_set_i32.obj bn_mp_set_i64.obj bn_mp_set
4444
bn_mp_set_u32.obj bn_mp_set_u64.obj bn_mp_set_ul.obj bn_mp_set_ull.obj bn_mp_shrink.obj bn_mp_signed_bin_size.obj \
4545
bn_mp_signed_rsh.obj bn_mp_sqr.obj bn_mp_sqrmod.obj bn_mp_sqrt.obj bn_mp_sqrtmod_prime.obj bn_mp_sub.obj bn_mp_sub_d.obj \
4646
bn_mp_submod.obj bn_mp_to_signed_bin.obj bn_mp_to_signed_bin_n.obj bn_mp_to_unsigned_bin.obj \
47-
bn_mp_to_unsigned_bin_n.obj bn_mp_toradix.obj bn_mp_toradix_n.obj bn_mp_unsigned_bin_size.obj bn_mp_xor.obj \
48-
bn_mp_zero.obj bn_prime_tab.obj bn_s_mp_add.obj bn_s_mp_balance_mul.obj bn_s_mp_exptmod.obj bn_s_mp_exptmod_fast.obj \
49-
bn_s_mp_get_bit.obj bn_s_mp_invmod_fast.obj bn_s_mp_invmod_slow.obj bn_s_mp_karatsuba_mul.obj \
50-
bn_s_mp_karatsuba_sqr.obj bn_s_mp_montgomery_reduce_fast.obj bn_s_mp_mul_digs.obj bn_s_mp_mul_digs_fast.obj \
51-
bn_s_mp_mul_high_digs.obj bn_s_mp_mul_high_digs_fast.obj bn_s_mp_prime_is_divisible.obj \
52-
bn_s_mp_rand_jenkins.obj bn_s_mp_rand_platform.obj bn_s_mp_reverse.obj bn_s_mp_sqr.obj bn_s_mp_sqr_fast.obj \
53-
bn_s_mp_sub.obj bn_s_mp_toom_mul.obj bn_s_mp_toom_sqr.obj
47+
bn_mp_to_unsigned_bin_n.obj bn_mp_todecimal_fast.obj bn_mp_toradix.obj bn_mp_toradix_n.obj \
48+
bn_mp_unsigned_bin_size.obj bn_mp_xor.obj bn_mp_zero.obj bn_prime_tab.obj bn_s_mp_add.obj bn_s_mp_balance_mul.obj \
49+
bn_s_mp_exptmod.obj bn_s_mp_exptmod_fast.obj bn_s_mp_get_bit.obj bn_s_mp_invmod_fast.obj bn_s_mp_invmod_slow.obj \
50+
bn_s_mp_karatsuba_mul.obj bn_s_mp_karatsuba_sqr.obj bn_s_mp_montgomery_reduce_fast.obj bn_s_mp_mul_digs.obj \
51+
bn_s_mp_mul_digs_fast.obj bn_s_mp_mul_high_digs.obj bn_s_mp_mul_high_digs_fast.obj \
52+
bn_s_mp_prime_is_divisible.obj bn_s_mp_rand_jenkins.obj bn_s_mp_rand_platform.obj bn_s_mp_reverse.obj \
53+
bn_s_mp_sqr.obj bn_s_mp_sqr_fast.obj bn_s_mp_sub.obj bn_s_mp_toom_mul.obj bn_s_mp_toom_sqr.obj
5454

5555
HEADERS_PUB=tommath.h
5656
HEADERS=tommath_private.h tommath_class.h tommath_superclass.h $(HEADERS_PUB)

makefile.shared

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_
4646
bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_bin_size.o \
4747
bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
4848
bn_mp_submod.o bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o \
49-
bn_mp_to_unsigned_bin_n.o bn_mp_toradix.o bn_mp_toradix_n.o bn_mp_unsigned_bin_size.o bn_mp_xor.o \
50-
bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
51-
bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
52-
bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
53-
bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
54-
bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
55-
bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
49+
bn_mp_to_unsigned_bin_n.o bn_mp_todecimal_fast.o bn_mp_toradix.o bn_mp_toradix_n.o \
50+
bn_mp_unsigned_bin_size.o bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o \
51+
bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
52+
bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o \
53+
bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o \
54+
bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o \
55+
bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
5656

5757
#END_INS
5858

makefile.unix

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ bn_mp_set.o bn_mp_set_double.o bn_mp_set_i32.o bn_mp_set_i64.o bn_mp_set_l.o bn_
5353
bn_mp_set_u32.o bn_mp_set_u64.o bn_mp_set_ul.o bn_mp_set_ull.o bn_mp_shrink.o bn_mp_signed_bin_size.o \
5454
bn_mp_signed_rsh.o bn_mp_sqr.o bn_mp_sqrmod.o bn_mp_sqrt.o bn_mp_sqrtmod_prime.o bn_mp_sub.o bn_mp_sub_d.o \
5555
bn_mp_submod.o bn_mp_to_signed_bin.o bn_mp_to_signed_bin_n.o bn_mp_to_unsigned_bin.o \
56-
bn_mp_to_unsigned_bin_n.o bn_mp_toradix.o bn_mp_toradix_n.o bn_mp_unsigned_bin_size.o bn_mp_xor.o \
57-
bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o \
58-
bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o bn_s_mp_karatsuba_mul.o \
59-
bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o bn_s_mp_mul_digs_fast.o \
60-
bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o bn_s_mp_prime_is_divisible.o \
61-
bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o bn_s_mp_sqr.o bn_s_mp_sqr_fast.o \
62-
bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
56+
bn_mp_to_unsigned_bin_n.o bn_mp_todecimal_fast.o bn_mp_toradix.o bn_mp_toradix_n.o \
57+
bn_mp_unsigned_bin_size.o bn_mp_xor.o bn_mp_zero.o bn_prime_tab.o bn_s_mp_add.o bn_s_mp_balance_mul.o \
58+
bn_s_mp_exptmod.o bn_s_mp_exptmod_fast.o bn_s_mp_get_bit.o bn_s_mp_invmod_fast.o bn_s_mp_invmod_slow.o \
59+
bn_s_mp_karatsuba_mul.o bn_s_mp_karatsuba_sqr.o bn_s_mp_montgomery_reduce_fast.o bn_s_mp_mul_digs.o \
60+
bn_s_mp_mul_digs_fast.o bn_s_mp_mul_high_digs.o bn_s_mp_mul_high_digs_fast.o \
61+
bn_s_mp_prime_is_divisible.o bn_s_mp_rand_jenkins.o bn_s_mp_rand_platform.o bn_s_mp_reverse.o \
62+
bn_s_mp_sqr.o bn_s_mp_sqr_fast.o bn_s_mp_sub.o bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o
6363

6464
HEADERS_PUB=tommath.h
6565
HEADERS=tommath_private.h tommath_class.h tommath_superclass.h $(HEADERS_PUB)

tommath_class.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
# define BN_MP_TO_SIGNED_BIN_N_C
142142
# define BN_MP_TO_UNSIGNED_BIN_C
143143
# define BN_MP_TO_UNSIGNED_BIN_N_C
144+
# define BN_MP_TODECIMAL_FAST_C
144145
# define BN_MP_TORADIX_C
145146
# define BN_MP_TORADIX_N_C
146147
# define BN_MP_UNSIGNED_BIN_SIZE_C
@@ -1070,6 +1071,28 @@
10701071
# define BN_MP_UNSIGNED_BIN_SIZE_C
10711072
#endif
10721073

1074+
#if defined(BN_MP_TODECIMAL_FAST_C)
1075+
# define BN_MP_2EXPT_C
1076+
# define BN_MP_ADD_C
1077+
# define BN_MP_ADD_D_C
1078+
# define BN_MP_BARRETT_TODECIMAL_C
1079+
# define BN_MP_BARRETT_TODECIMAL_REC_C
1080+
# define BN_MP_CMP_C
1081+
# define BN_MP_DIV_2D_C
1082+
# define BN_MP_GET_INT_C
1083+
# define BN_MP_GET_LONG_C
1084+
# define BN_MP_INIT_C
1085+
# define BN_MP_INIT_COPY_C
1086+
# define BN_MP_INIT_MULTI_C
1087+
# define BN_MP_INIT_SET_C
1088+
# define BN_MP_MUL_2_C
1089+
# define BN_MP_MUL_C
1090+
# define BN_MP_NEG_C
1091+
# define BN_MP_SQR_C
1092+
# define BN_MP_SUB_C
1093+
# define BN_MP_SUB_D_C
1094+
#endif
1095+
10731096
#if defined(BN_MP_TORADIX_C)
10741097
# define BN_MP_CLEAR_C
10751098
# define BN_MP_DIV_D_C

0 commit comments

Comments
 (0)