Lines Matching +full:tp +full:- +full:sensitive +full:- +full:adjust
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* mpi-pow.c - MPI functions
11 * to avoid revealing of sensitive data due to paging etc.
18 #include "mpi-internal.h"
39 int rc = -ENOMEM; in mpi_powm()
41 esize = exp->nlimbs; in mpi_powm()
42 msize = mod->nlimbs; in mpi_powm()
44 msign = mod->sign; in mpi_powm()
46 rp = res->d; in mpi_powm()
47 ep = exp->d; in mpi_powm()
50 return -EINVAL; in mpi_powm()
55 res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1; in mpi_powm()
56 if (res->nlimbs) { in mpi_powm()
59 rp = res->d; in mpi_powm()
62 res->sign = 0; in mpi_powm()
73 mod_shift_cnt = count_leading_zeros(mod->d[msize - 1]); in mpi_powm()
75 mpihelp_lshift(mp, mod->d, msize, mod_shift_cnt); in mpi_powm()
77 MPN_COPY(mp, mod->d, msize); in mpi_powm()
79 bsize = base->nlimbs; in mpi_powm()
80 bsign = base->sign; in mpi_powm()
83 * (The quotient is (bsize - msize + 1) limbs.) */ in mpi_powm()
87 MPN_COPY(bp, base->d, bsize); in mpi_powm()
96 bp = base->d; in mpi_powm()
99 res->nlimbs = 0; in mpi_powm()
100 res->sign = 0; in mpi_powm()
104 if (res->alloced < size) { in mpi_powm()
116 rp = res->d; in mpi_powm()
159 negative_result = (ep[0] & 1) && base->sign; in mpi_powm()
161 i = esize - 1; in mpi_powm()
165 c = BITS_PER_MPI_LIMB - 1 - c; in mpi_powm()
173 * by RP (==RES->d), and with 50% probability in the area originally in mpi_powm()
179 mpi_ptr_t tp; in mpi_powm() local
210 tp = rp; in mpi_powm()
212 xp = tp; in mpi_powm()
238 tp = rp; in mpi_powm()
240 xp = tp; in mpi_powm()
244 c--; in mpi_powm()
248 i--; in mpi_powm()
256 * steps. Adjust the result by reducing it with the original MOD. in mpi_powm()
258 * Also make sure the result is put in RES->d (where it already in mpi_powm()
263 mpihelp_lshift(res->d, rp, rsize, mod_shift_cnt); in mpi_powm()
264 rp = res->d; in mpi_powm()
270 MPN_COPY(res->d, rp, rsize); in mpi_powm()
271 rp = res->d; in mpi_powm()
293 res->nlimbs = rsize; in mpi_powm()
294 res->sign = rsign; in mpi_powm()