46 #define MAX(a, b) ((a) > (b) ? (a) : (b))
48 #if NETTLE_USE_MINI_GMP
71 mpz_powm_sec(r, r, pub->
e, pub->
n);
112 rsa_blind (pub, random_ctx, random, mb, ri, m);
116 mpz_powm_sec(t, xb, pub->
e, pub->
n);
120 rsa_unblind (pub,
x, ri, xb);
178 itch = mpn_sec_powm_itch(nn, ebn, nn);
179 i2 = mpn_sec_mul_itch(nn, nn);
180 itch =
MAX(itch, i2);
181 i2 = mpn_sec_div_r_itch(2*nn, nn);
182 itch =
MAX(itch, i2);
183 i2 = mpn_sec_invert_itch(nn);
184 itch =
MAX(itch, i2);
192 random(random_ctx, nn *
sizeof(
mp_limb_t), (uint8_t *)r);
197 while (!mpn_sec_invert (ri,
tp, np, nn, 2 * nn * GMP_NUMB_BITS, scratch));
199 mpn_sec_powm (c,
rp, nn, ep, ebn, np, nn, scratch);
200 mpn_sec_mul (
tp, c, nn, m, nn, scratch);
201 mpn_sec_div_r (
tp, 2*nn, np, nn, scratch);
222 itch = mpn_sec_mul_itch(nn, nn);
223 i2 = mpn_sec_div_r_itch(nn + nn, nn);
224 itch =
MAX(itch, i2);
227 scratch =
tp + nn + nn;
229 mpn_sec_mul (
tp, c, nn, ri, nn, scratch);
230 mpn_sec_div_r (
tp, nn + nn, np, nn, scratch);
242 for (
i = 0;
i < limbs;
i++)
266 itch = mpn_sec_powm_itch (nn, ebn, nn);
270 mpn_sec_powm(
tp,
x, nn, ep, ebn, np, nn, scratch);
305 size_t key_limb_size;
321 assert(
mpz_size(pub->
n) == key_limb_size);
void nettle_mpz_random(mpz_t x, void *ctx, nettle_random_func *random, const mpz_t n)
#define TMP_GMP_DECL(name, type)
#define TMP_GMP_FREE(name)
#define TMP_GMP_ALLOC(name, size)
void mpn_copyi(mp_ptr d, mp_srcptr s, mp_size_t n)
void mpz_limbs_finish(mpz_t x, mp_size_t xs)
mp_srcptr mpz_limbs_read(mpz_srcptr x)
size_t mpz_sizeinbase(const mpz_t u, int base)
int mpz_invert(mpz_t r, const mpz_t u, const mpz_t m)
mpz_srcptr mpz_roinit_n(mpz_t x, mp_srcptr xp, mp_size_t xs)
void mpz_mul(mpz_t r, const mpz_t u, const mpz_t v)
void mpz_fdiv_r(mpz_t r, const mpz_t n, const mpz_t d)
void mpn_zero(mp_ptr rp, mp_size_t n)
size_t mpz_size(const mpz_t u)
mp_ptr mpz_limbs_write(mpz_t x, mp_size_t n)
int mpz_cmp(const mpz_t a, const mpz_t b)
unsigned long mp_bitcnt_t
void nettle_random_func(void *ctx, size_t length, uint8_t *dst)
#define _rsa_sec_compute_root_itch
#define _rsa_sec_compute_root_tr
#define _rsa_sec_compute_root
static void rsa_sec_blind(const struct rsa_public_key *pub, void *random_ctx, nettle_random_func *random, mp_limb_t *c, mp_limb_t *ri, const mp_limb_t *m)
static void rsa_sec_unblind(const struct rsa_public_key *pub, mp_limb_t *x, mp_limb_t *ri, const mp_limb_t *c)
static int sec_equal(const mp_limb_t *a, const mp_limb_t *b, size_t limbs)
static void cnd_mpn_zero(int cnd, volatile mp_ptr rp, mp_size_t n)
static int rsa_sec_check_root(const struct rsa_public_key *pub, const mp_limb_t *x, const mp_limb_t *m)
#define rsa_compute_root_tr