34 uint64_t result[64] = {0};
35 fp_mult_32x32(result,
a, b);
36 fp_word_redc(c, result);
60 fp_word_redc(b, result);
66#if defined(P5119m46l244) || defined(P6143m59l262) || defined(P8191m78l338) || defined(P9215m85l389)
68void fp_mont_it_redc(
fp a,
const uint64_t b[2 * NUMBER_OF_WORDS])
70 uint64_t r0[2 * NUMBER_OF_WORDS] = {0};
71 uint64_t r1[2 * NUMBER_OF_WORDS] = {0};
75 add_redc(r0, &b[E2], r0);
79 add_redc_final(
a, &r0[E2], r1);
104 uint64_t A[2 * NUMBER_OF_WORDS + 1] = {0x0};
106 uint64_t tmp_1[NUMBER_OF_WORDS + 1] = {0x0};
109 mpn_copyd(A, b, 2 * NUMBER_OF_WORDS);
111 for (
int i = 0;
i < NUMBER_OF_WORDS;
i++)
118 mpn_sec_mul(tmp_1,
p, NUMBER_OF_WORDS, &A[
i], 1, tp);
121 mpn_add(A +
i, A +
i, 2 * NUMBER_OF_WORDS + 1 -
i, tmp_1, NUMBER_OF_WORDS + 1);
126 mpn_copyd(
a, A + NUMBER_OF_WORDS, NUMBER_OF_WORDS);
129 mpn_cnd_sub_n(mpn_cmp(
a,
p, NUMBER_OF_WORDS) > 0,
a,
a,
p, NUMBER_OF_WORDS);
137#if defined(P2047m1l226)
177#if defined(P4095m27l262)
179void fp_mont_4k(
fp a,
const uint64_t b[2 * NUMBER_OF_WORDS])
183 uint64_t
A[2 * NUMBER_OF_WORDS + 1] = {0x0};
185 uint64_t tmp_1[NUMBER_OF_WORDS + 1] = {0x0};
188 mpn_copyd(A, b, 2 * NUMBER_OF_WORDS);
190 for (
int i = 0;
i < NUMBER_OF_WORDS;
i++)
196 memset(tmp_1, 0,
sizeof(tmp_1));
202 mpn_sub(A, A, 1, A, 1);
204 mpn_copyd(A, A + 1, NUMBER_OF_WORDS -
i);
207 mpn_add(A, A, 2 * NUMBER_OF_WORDS + 1 -
i, tmp_1, 38);
212 mpn_copyd(
a, A, NUMBER_OF_WORDS);
215 mpn_cnd_sub_n(mpn_cmp(
a,
p, NUMBER_OF_WORDS) > 0,
a,
a,
p, NUMBER_OF_WORDS);
uint64_t fp[NUMBER_OF_WORDS]
void fp_mont_redc(fp a, const uint64_t b[2 *NUMBER_OF_WORDS])