summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tclExecute.c3
-rw-r--r--generic/tclStubInit.c21
-rw-r--r--generic/tclTomMath.decls2
-rw-r--r--generic/tclTomMathDecls.h33
4 files changed, 36 insertions, 23 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 94de5f2..89668a5 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -8504,7 +8504,8 @@ ExecuteExtendedBinaryMathOp(
Tcl_TakeBignumFromObj(NULL, valuePtr, &big1);
err = mp_init(&bigResult);
if (err == MP_OKAY) {
- err = mp_expt_u32(&big1, (unsigned int)w2, &bigResult);
+ /* Don't use "mp_expt_n" directly here, it doesn't exist in libtommath 1.2 */
+ err = TclBN_mp_expt_n(&big1, (int)w2, &bigResult);
}
if (err != MP_OKAY) {
return OUT_OF_MEMORY;
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index e35a401..e7dc543 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -246,17 +246,18 @@ int TclParseArgsObjv(Tcl_Interp *interp,
#define TclBN_mp_xor mp_xor
#define TclBN_mp_zero mp_zero
#define TclBN_s_mp_add s_mp_add
-#define TclBN_mp_balance_mul s_mp_balance_mul
-#define TclBN_mp_karatsuba_mul s_mp_karatsuba_mul
-#define TclBN_mp_karatsuba_sqr s_mp_karatsuba_sqr
+#define TclBN_s_mp_balance_mul s_mp_balance_mul
+#define TclBN_s_mp_div_3 s_mp_div_3
+#define TclBN_s_mp_karatsuba_mul s_mp_karatsuba_mul
+#define TclBN_s_mp_karatsuba_sqr s_mp_karatsuba_sqr
#define TclBN_s_mp_mul_digs s_mp_mul_digs
#define TclBN_s_mp_mul_digs_fast s_mp_mul_digs_fast
#define TclBN_s_mp_reverse s_mp_reverse
#define TclBN_s_mp_sqr s_mp_sqr
#define TclBN_s_mp_sqr_fast s_mp_sqr_fast
#define TclBN_s_mp_sub s_mp_sub
-#define TclBN_mp_toom_mul s_mp_toom_mul
-#define TclBN_mp_toom_sqr s_mp_toom_sqr
+#define TclBN_s_mp_toom_mul s_mp_toom_mul
+#define TclBN_s_mp_toom_sqr s_mp_toom_sqr
#ifndef MAC_OSX_TCL /* On UNIX, fill with other stub entries */
# define Tcl_MacOSXOpenVersionedBundleResources 0
@@ -382,6 +383,14 @@ MODULE_SCOPE const TclTomMathStubs tclTomMathStubs;
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
+#if TCL_WITH_EXTERNAL_TOMMATH
+/* If Tcl is linked with an external libtommath 1.2.x, then mp_expt_n doesn't
+ * exist (since that was introduced in libtommath 1.3.0. Provide it here.) */
+mp_err MP_WUR TclBN_mp_expt_n(const mp_int *a, int b, mp_int *c) {
+ return mp_expt_u32(a, (uint32_t)b, c);;
+}
+#endif /* TCL_WITH_EXTERNAL_TOMMATH */
+
/* !BEGIN!: Do not edit below this line. */
static const TclIntStubs tclIntStubs = {
@@ -718,7 +727,7 @@ const TclTomMathStubs tclTomMathStubs = {
TclBN_mp_div_2d, /* 16 */
0, /* 17 */
TclBN_mp_exch, /* 18 */
- TclBN_mp_expt_u32, /* 19 */
+ TclBN_mp_expt_n, /* 19 */
TclBN_mp_grow, /* 20 */
TclBN_mp_init, /* 21 */
TclBN_mp_init_copy, /* 22 */
diff --git a/generic/tclTomMath.decls b/generic/tclTomMath.decls
index dad35b3..a6e48e9 100644
--- a/generic/tclTomMath.decls
+++ b/generic/tclTomMath.decls
@@ -77,7 +77,7 @@ declare 18 {
void TclBN_mp_exch(mp_int *a, mp_int *b)
}
declare 19 {
- mp_err MP_WUR TclBN_mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c)
+ mp_err MP_WUR TclBN_mp_expt_n(const mp_int *a, int b, mp_int *c)
}
declare 20 {
mp_err MP_WUR TclBN_mp_grow(mp_int *a, int size)
diff --git a/generic/tclTomMathDecls.h b/generic/tclTomMathDecls.h
index 35eb9f8..e62c90e 100644
--- a/generic/tclTomMathDecls.h
+++ b/generic/tclTomMathDecls.h
@@ -65,11 +65,13 @@ extern "C" {
#endif
MODULE_SCOPE mp_err TclBN_mp_sqr(const mp_int *a, mp_int *b);
MODULE_SCOPE mp_err TclBN_mp_div_3(const mp_int *a, mp_int *q, mp_digit *r);
-MODULE_SCOPE mp_err TclBN_mp_balance_mul(const mp_int *a, const mp_int *b, mp_int *c);
-MODULE_SCOPE mp_err TclBN_mp_karatsuba_mul(const mp_int *a, const mp_int *b, mp_int *c);
-MODULE_SCOPE mp_err TclBN_mp_karatsuba_sqr(const mp_int *a, mp_int *b);
-MODULE_SCOPE mp_err TclBN_mp_toom_mul(const mp_int *a, const mp_int *b, mp_int *c);
-MODULE_SCOPE mp_err TclBN_mp_toom_sqr(const mp_int *a, mp_int *b);
+MODULE_SCOPE mp_err TclBN_mp_expt_n(const mp_int *a, int b, mp_int *c);
+MODULE_SCOPE mp_err TclBN_s_mp_balance_mul(const mp_int *a, const mp_int *b, mp_int *c);
+MODULE_SCOPE mp_err TclBN_s_mp_div_3(const mp_int *a, mp_int *c, mp_digit *d);
+MODULE_SCOPE mp_err TclBN_s_mp_karatsuba_mul(const mp_int *a, const mp_int *b, mp_int *c);
+MODULE_SCOPE mp_err TclBN_s_mp_karatsuba_sqr(const mp_int *a, mp_int *b);
+MODULE_SCOPE mp_err TclBN_s_mp_toom_mul(const mp_int *a, const mp_int *b, mp_int *c);
+MODULE_SCOPE mp_err TclBN_s_mp_toom_sqr(const mp_int *a, mp_int *b);
MODULE_SCOPE mp_err TclBN_s_mp_add(const mp_int *a, const mp_int *b, mp_int *c);
MODULE_SCOPE mp_err TclBN_s_mp_mul_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs);
MODULE_SCOPE mp_err TclBN_s_mp_mul_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs);
@@ -110,6 +112,7 @@ MODULE_SCOPE mp_err TclBN_mp_set_int(mp_int *a, unsigned long b);
#define mp_expt_d TclBN_mp_expt_d
#define mp_expt_d_ex TclBN_mp_expt_d_ex
#define mp_expt_u32 TclBN_mp_expt_u32
+#define mp_expt_n TclBN_mp_expt_n
#define mp_get_mag_u64 TclBN_mp_get_mag_u64
#define mp_grow TclBN_mp_grow
#define mp_init TclBN_mp_init
@@ -159,17 +162,18 @@ MODULE_SCOPE mp_err TclBN_mp_set_int(mp_int *a, unsigned long b);
#define mp_xor TclBN_mp_xor
#define mp_zero TclBN_mp_zero
#define s_mp_add TclBN_s_mp_add
-#define s_mp_balance_mul TclBN_mp_balance_mul
-#define s_mp_karatsuba_mul TclBN_mp_karatsuba_mul
-#define s_mp_karatsuba_sqr TclBN_mp_karatsuba_sqr
+#define s_mp_balance_mul TclBN_s_mp_balance_mul
+#define s_mp_div_3 TclBN_s_mp_div_3
+#define s_mp_karatsuba_mul TclBN_s_mp_karatsuba_mul
+#define s_mp_karatsuba_sqr TclBN_s_mp_karatsuba_sqr
#define s_mp_mul_digs TclBN_s_mp_mul_digs
#define s_mp_mul_digs_fast TclBN_s_mp_mul_digs_fast
#define s_mp_reverse TclBN_s_mp_reverse
#define s_mp_sqr TclBN_s_mp_sqr
#define s_mp_sqr_fast TclBN_s_mp_sqr_fast
#define s_mp_sub TclBN_s_mp_sub
-#define s_mp_toom_mul TclBN_mp_toom_mul
-#define s_mp_toom_sqr TclBN_mp_toom_sqr
+#define s_mp_toom_mul TclBN_s_mp_toom_mul
+#define s_mp_toom_sqr TclBN_s_mp_toom_sqr
#endif /* !TCL_WITH_EXTERNAL_TOMMATH */
#undef TCL_STORAGE_CLASS
@@ -243,8 +247,7 @@ EXTERN mp_err TclBN_mp_div_2d(const mp_int *a, int b, mp_int *q,
/* 18 */
EXTERN void TclBN_mp_exch(mp_int *a, mp_int *b);
/* 19 */
-EXTERN mp_err TclBN_mp_expt_u32(const mp_int *a, uint32_t b,
- mp_int *c) MP_WUR;
+EXTERN mp_err TclBN_mp_expt_n(const mp_int *a, int b, mp_int *c) MP_WUR;
/* 20 */
EXTERN mp_err TclBN_mp_grow(mp_int *a, int size) MP_WUR;
/* 21 */
@@ -386,7 +389,7 @@ typedef struct TclTomMathStubs {
mp_err (*tclBN_mp_div_2d) (const mp_int *a, int b, mp_int *q, mp_int *r) MP_WUR; /* 16 */
void (*reserved17)(void);
void (*tclBN_mp_exch) (mp_int *a, mp_int *b); /* 18 */
- mp_err (*tclBN_mp_expt_u32) (const mp_int *a, uint32_t b, mp_int *c) MP_WUR; /* 19 */
+ mp_err (*tclBN_mp_expt_n) (const mp_int *a, int b, mp_int *c) MP_WUR; /* 19 */
mp_err (*tclBN_mp_grow) (mp_int *a, int size) MP_WUR; /* 20 */
mp_err (*tclBN_mp_init) (mp_int *a) MP_WUR; /* 21 */
mp_err (*tclBN_mp_init_copy) (mp_int *a, const mp_int *b) MP_WUR; /* 22 */
@@ -499,8 +502,8 @@ extern const TclTomMathStubs *tclTomMathStubsPtr;
/* Slot 17 is reserved */
#define TclBN_mp_exch \
(tclTomMathStubsPtr->tclBN_mp_exch) /* 18 */
-#define TclBN_mp_expt_u32 \
- (tclTomMathStubsPtr->tclBN_mp_expt_u32) /* 19 */
+#define TclBN_mp_expt_n \
+ (tclTomMathStubsPtr->tclBN_mp_expt_n) /* 19 */
#define TclBN_mp_grow \
(tclTomMathStubsPtr->tclBN_mp_grow) /* 20 */
#define TclBN_mp_init \