diff options
Diffstat (limited to 'lib/mpi/mpi-pow.c')
-rw-r--r-- | lib/mpi/mpi-pow.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/lib/mpi/mpi-pow.c b/lib/mpi/mpi-pow.c index a5c921e6d667..d3ca55093fa5 100644 --- a/lib/mpi/mpi-pow.c +++ b/lib/mpi/mpi-pow.c | |||
@@ -37,6 +37,7 @@ | |||
37 | int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) | 37 | int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) |
38 | { | 38 | { |
39 | mpi_ptr_t mp_marker = NULL, bp_marker = NULL, ep_marker = NULL; | 39 | mpi_ptr_t mp_marker = NULL, bp_marker = NULL, ep_marker = NULL; |
40 | struct karatsuba_ctx karactx = {}; | ||
40 | mpi_ptr_t xp_marker = NULL; | 41 | mpi_ptr_t xp_marker = NULL; |
41 | mpi_ptr_t tspace = NULL; | 42 | mpi_ptr_t tspace = NULL; |
42 | mpi_ptr_t rp, ep, mp, bp; | 43 | mpi_ptr_t rp, ep, mp, bp; |
@@ -163,13 +164,11 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) | |||
163 | int c; | 164 | int c; |
164 | mpi_limb_t e; | 165 | mpi_limb_t e; |
165 | mpi_limb_t carry_limb; | 166 | mpi_limb_t carry_limb; |
166 | struct karatsuba_ctx karactx; | ||
167 | 167 | ||
168 | xp = xp_marker = mpi_alloc_limb_space(2 * (msize + 1)); | 168 | xp = xp_marker = mpi_alloc_limb_space(2 * (msize + 1)); |
169 | if (!xp) | 169 | if (!xp) |
170 | goto enomem; | 170 | goto enomem; |
171 | 171 | ||
172 | memset(&karactx, 0, sizeof karactx); | ||
173 | negative_result = (ep[0] & 1) && base->sign; | 172 | negative_result = (ep[0] & 1) && base->sign; |
174 | 173 | ||
175 | i = esize - 1; | 174 | i = esize - 1; |
@@ -294,8 +293,6 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) | |||
294 | if (mod_shift_cnt) | 293 | if (mod_shift_cnt) |
295 | mpihelp_rshift(rp, rp, rsize, mod_shift_cnt); | 294 | mpihelp_rshift(rp, rp, rsize, mod_shift_cnt); |
296 | MPN_NORMALIZE(rp, rsize); | 295 | MPN_NORMALIZE(rp, rsize); |
297 | |||
298 | mpihelp_release_karatsuba_ctx(&karactx); | ||
299 | } | 296 | } |
300 | 297 | ||
301 | if (negative_result && rsize) { | 298 | if (negative_result && rsize) { |
@@ -312,6 +309,7 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod) | |||
312 | leave: | 309 | leave: |
313 | rc = 0; | 310 | rc = 0; |
314 | enomem: | 311 | enomem: |
312 | mpihelp_release_karatsuba_ctx(&karactx); | ||
315 | if (assign_rp) | 313 | if (assign_rp) |
316 | mpi_assign_limb_space(res, rp, size); | 314 | mpi_assign_limb_space(res, rp, size); |
317 | if (mp_marker) | 315 | if (mp_marker) |