From 208e4fd87b7123289717f2a292a056da196f3665 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 7 Nov 2019 14:56:58 +0000 Subject: Make mp_mul(a,a,c) equivalent to mp_sqr(a,c). Optimization backported from libtommath. --- libtommath/bn_mp_mul.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libtommath/bn_mp_mul.c b/libtommath/bn_mp_mul.c index 561913a..b00334d 100644 --- a/libtommath/bn_mp_mul.c +++ b/libtommath/bn_mp_mul.c @@ -12,7 +12,9 @@ mp_err mp_mul(const mp_int *a, const mp_int *b, mp_int *c) digs = a->used + b->used + 1; mp_sign neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; - if (MP_HAS(S_MP_BALANCE_MUL) && + if (a == b) { + return mp_sqr(a,c); + } else if (MP_HAS(S_MP_BALANCE_MUL) && /* Check sizes. The smaller one needs to be larger than the Karatsuba cut-off. * The bigger one needs to be at least about one MP_KARATSUBA_MUL_CUTOFF bigger * to make some sense, but it depends on architecture, OS, position of the -- cgit v0.12