8 #include <botan/internal/mp_monty.h>
9 #include <botan/internal/mp_core.h>
10 #include <botan/internal/mp_asmi.h>
11 #include <botan/internal/ct_utils.h>
17 word w2 = 0, w1 = 0, w0 = 0;
21 w0 = w1; w1 = w2; w2 = 0;
26 w0 = w1; w1 = w2; w2 = 0;
32 w0 = w1; w1 = w2; w2 = 0;
39 w0 = w1; w1 = w2; w2 = 0;
45 w0 = w1; w1 = w2; w2 = 0;
50 w0 = w1; w1 = w2; w2 = 0;
54 w0 = w1; w1 = w2; w2 = 0;
57 w0 = w1; w1 = w2; w2 = 0;
62 ws[5] =
word_sub(ws[0], p[0], &borrow);
63 ws[6] =
word_sub(ws[1], p[1], &borrow);
64 ws[7] =
word_sub(ws[2], p[2], &borrow);
65 ws[8] =
word_sub(ws[3], p[3], &borrow);
73 word w2 = 0, w1 = 0, w0 = 0;
77 w0 = w1; w1 = w2; w2 = 0;
82 w0 = w1; w1 = w2; w2 = 0;
88 w0 = w1; w1 = w2; w2 = 0;
95 w0 = w1; w1 = w2; w2 = 0;
103 w0 = w1; w1 = w2; w2 = 0;
112 w0 = w1; w1 = w2; w2 = 0;
120 w0 = w1; w1 = w2; w2 = 0;
127 w0 = w1; w1 = w2; w2 = 0;
133 w0 = w1; w1 = w2; w2 = 0;
138 w0 = w1; w1 = w2; w2 = 0;
142 w0 = w1; w1 = w2; w2 = 0;
145 w0 = w1; w1 = w2; w2 = 0;
150 ws[7] =
word_sub(ws[0], p[0], &borrow);
151 ws[8] =
word_sub(ws[1], p[1], &borrow);
152 ws[9] =
word_sub(ws[2], p[2], &borrow);
153 ws[10] =
word_sub(ws[3], p[3], &borrow);
154 ws[11] =
word_sub(ws[4], p[4], &borrow);
155 ws[12] =
word_sub(ws[5], p[5], &borrow);
156 ws[13] =
word_sub(ws[6], 0, &borrow);
163 word w2 = 0, w1 = 0, w0 = 0;
167 w0 = w1; w1 = w2; w2 = 0;
172 w0 = w1; w1 = w2; w2 = 0;
178 w0 = w1; w1 = w2; w2 = 0;
185 w0 = w1; w1 = w2; w2 = 0;
193 w0 = w1; w1 = w2; w2 = 0;
202 w0 = w1; w1 = w2; w2 = 0;
212 w0 = w1; w1 = w2; w2 = 0;
223 w0 = w1; w1 = w2; w2 = 0;
233 w0 = w1; w1 = w2; w2 = 0;
242 w0 = w1; w1 = w2; w2 = 0;
250 w0 = w1; w1 = w2; w2 = 0;
257 w0 = w1; w1 = w2; w2 = 0;
263 w0 = w1; w1 = w2; w2 = 0;
268 w0 = w1; w1 = w2; w2 = 0;
272 w0 = w1; w1 = w2; w2 = 0;
275 w0 = w1; w1 = w2; w2 = 0;
280 ws[9] =
word_sub(ws[0], p[0], &borrow);
281 ws[10] =
word_sub(ws[1], p[1], &borrow);
282 ws[11] =
word_sub(ws[2], p[2], &borrow);
283 ws[12] =
word_sub(ws[3], p[3], &borrow);
284 ws[13] =
word_sub(ws[4], p[4], &borrow);
285 ws[14] =
word_sub(ws[5], p[5], &borrow);
286 ws[15] =
word_sub(ws[6], p[6], &borrow);
287 ws[16] =
word_sub(ws[7], p[7], &borrow);
288 ws[17] =
word_sub(ws[8], 0, &borrow);
295 word w2 = 0, w1 = 0, w0 = 0;
299 w0 = w1; w1 = w2; w2 = 0;
304 w0 = w1; w1 = w2; w2 = 0;
310 w0 = w1; w1 = w2; w2 = 0;
317 w0 = w1; w1 = w2; w2 = 0;
325 w0 = w1; w1 = w2; w2 = 0;
334 w0 = w1; w1 = w2; w2 = 0;
344 w0 = w1; w1 = w2; w2 = 0;
355 w0 = w1; w1 = w2; w2 = 0;
367 w0 = w1; w1 = w2; w2 = 0;
380 w0 = w1; w1 = w2; w2 = 0;
392 ws[10] = w0 * p_dash;
394 w0 = w1; w1 = w2; w2 = 0;
407 ws[11] = w0 * p_dash;
409 w0 = w1; w1 = w2; w2 = 0;
423 ws[12] = w0 * p_dash;
425 w0 = w1; w1 = w2; w2 = 0;
440 ws[13] = w0 * p_dash;
442 w0 = w1; w1 = w2; w2 = 0;
458 ws[14] = w0 * p_dash;
460 w0 = w1; w1 = w2; w2 = 0;
477 ws[15] = w0 * p_dash;
479 w0 = w1; w1 = w2; w2 = 0;
497 w0 = w1; w1 = w2; w2 = 0;
514 w0 = w1; w1 = w2; w2 = 0;
530 w0 = w1; w1 = w2; w2 = 0;
545 w0 = w1; w1 = w2; w2 = 0;
559 w0 = w1; w1 = w2; w2 = 0;
572 w0 = w1; w1 = w2; w2 = 0;
584 w0 = w1; w1 = w2; w2 = 0;
595 w0 = w1; w1 = w2; w2 = 0;
605 w0 = w1; w1 = w2; w2 = 0;
614 w0 = w1; w1 = w2; w2 = 0;
622 w0 = w1; w1 = w2; w2 = 0;
629 w0 = w1; w1 = w2; w2 = 0;
635 w0 = w1; w1 = w2; w2 = 0;
640 w0 = w1; w1 = w2; w2 = 0;
644 w0 = w1; w1 = w2; w2 = 0;
647 w0 = w1; w1 = w2; w2 = 0;
651 word borrow =
bigint_sub3(ws + 16 + 1, ws, 16 + 1, p, 16);
658 word w2 = 0, w1 = 0, w0 = 0;
662 w0 = w1; w1 = w2; w2 = 0;
667 w0 = w1; w1 = w2; w2 = 0;
673 w0 = w1; w1 = w2; w2 = 0;
680 w0 = w1; w1 = w2; w2 = 0;
688 w0 = w1; w1 = w2; w2 = 0;
697 w0 = w1; w1 = w2; w2 = 0;
707 w0 = w1; w1 = w2; w2 = 0;
718 w0 = w1; w1 = w2; w2 = 0;
730 w0 = w1; w1 = w2; w2 = 0;
743 w0 = w1; w1 = w2; w2 = 0;
755 ws[10] = w0 * p_dash;
757 w0 = w1; w1 = w2; w2 = 0;
770 ws[11] = w0 * p_dash;
772 w0 = w1; w1 = w2; w2 = 0;
786 ws[12] = w0 * p_dash;
788 w0 = w1; w1 = w2; w2 = 0;
803 ws[13] = w0 * p_dash;
805 w0 = w1; w1 = w2; w2 = 0;
821 ws[14] = w0 * p_dash;
823 w0 = w1; w1 = w2; w2 = 0;
840 ws[15] = w0 * p_dash;
842 w0 = w1; w1 = w2; w2 = 0;
860 ws[16] = w0 * p_dash;
862 w0 = w1; w1 = w2; w2 = 0;
881 ws[17] = w0 * p_dash;
883 w0 = w1; w1 = w2; w2 = 0;
903 ws[18] = w0 * p_dash;
905 w0 = w1; w1 = w2; w2 = 0;
926 ws[19] = w0 * p_dash;
928 w0 = w1; w1 = w2; w2 = 0;
950 ws[20] = w0 * p_dash;
952 w0 = w1; w1 = w2; w2 = 0;
975 ws[21] = w0 * p_dash;
977 w0 = w1; w1 = w2; w2 = 0;
1001 ws[22] = w0 * p_dash;
1003 w0 = w1; w1 = w2; w2 = 0;
1028 ws[23] = w0 * p_dash;
1030 w0 = w1; w1 = w2; w2 = 0;
1056 w0 = w1; w1 = w2; w2 = 0;
1081 w0 = w1; w1 = w2; w2 = 0;
1105 w0 = w1; w1 = w2; w2 = 0;
1128 w0 = w1; w1 = w2; w2 = 0;
1150 w0 = w1; w1 = w2; w2 = 0;
1171 w0 = w1; w1 = w2; w2 = 0;
1191 w0 = w1; w1 = w2; w2 = 0;
1210 w0 = w1; w1 = w2; w2 = 0;
1228 w0 = w1; w1 = w2; w2 = 0;
1245 w0 = w1; w1 = w2; w2 = 0;
1261 w0 = w1; w1 = w2; w2 = 0;
1276 w0 = w1; w1 = w2; w2 = 0;
1290 w0 = w1; w1 = w2; w2 = 0;
1303 w0 = w1; w1 = w2; w2 = 0;
1315 w0 = w1; w1 = w2; w2 = 0;
1326 w0 = w1; w1 = w2; w2 = 0;
1336 w0 = w1; w1 = w2; w2 = 0;
1345 w0 = w1; w1 = w2; w2 = 0;
1353 w0 = w1; w1 = w2; w2 = 0;
1360 w0 = w1; w1 = w2; w2 = 0;
1366 w0 = w1; w1 = w2; w2 = 0;
1371 w0 = w1; w1 = w2; w2 = 0;
1375 w0 = w1; w1 = w2; w2 = 0;
1378 w0 = w1; w1 = w2; w2 = 0;
1382 word borrow =
bigint_sub3(ws + 24 + 1, ws, 24 + 1, p, 24);
1389 word w2 = 0, w1 = 0, w0 = 0;
1391 ws[0] = w0 * p_dash;
1393 w0 = w1; w1 = w2; w2 = 0;
1396 ws[1] = w0 * p_dash;
1398 w0 = w1; w1 = w2; w2 = 0;
1402 ws[2] = w0 * p_dash;
1404 w0 = w1; w1 = w2; w2 = 0;
1409 ws[3] = w0 * p_dash;
1411 w0 = w1; w1 = w2; w2 = 0;
1417 ws[4] = w0 * p_dash;
1419 w0 = w1; w1 = w2; w2 = 0;
1426 ws[5] = w0 * p_dash;
1428 w0 = w1; w1 = w2; w2 = 0;
1436 ws[6] = w0 * p_dash;
1438 w0 = w1; w1 = w2; w2 = 0;
1447 ws[7] = w0 * p_dash;
1449 w0 = w1; w1 = w2; w2 = 0;
1459 ws[8] = w0 * p_dash;
1461 w0 = w1; w1 = w2; w2 = 0;
1472 ws[9] = w0 * p_dash;
1474 w0 = w1; w1 = w2; w2 = 0;
1486 ws[10] = w0 * p_dash;
1488 w0 = w1; w1 = w2; w2 = 0;
1501 ws[11] = w0 * p_dash;
1503 w0 = w1; w1 = w2; w2 = 0;
1517 ws[12] = w0 * p_dash;
1519 w0 = w1; w1 = w2; w2 = 0;
1534 ws[13] = w0 * p_dash;
1536 w0 = w1; w1 = w2; w2 = 0;
1552 ws[14] = w0 * p_dash;
1554 w0 = w1; w1 = w2; w2 = 0;
1571 ws[15] = w0 * p_dash;
1573 w0 = w1; w1 = w2; w2 = 0;
1591 ws[16] = w0 * p_dash;
1593 w0 = w1; w1 = w2; w2 = 0;
1612 ws[17] = w0 * p_dash;
1614 w0 = w1; w1 = w2; w2 = 0;
1634 ws[18] = w0 * p_dash;
1636 w0 = w1; w1 = w2; w2 = 0;
1657 ws[19] = w0 * p_dash;
1659 w0 = w1; w1 = w2; w2 = 0;
1681 ws[20] = w0 * p_dash;
1683 w0 = w1; w1 = w2; w2 = 0;
1706 ws[21] = w0 * p_dash;
1708 w0 = w1; w1 = w2; w2 = 0;
1732 ws[22] = w0 * p_dash;
1734 w0 = w1; w1 = w2; w2 = 0;
1759 ws[23] = w0 * p_dash;
1761 w0 = w1; w1 = w2; w2 = 0;
1787 ws[24] = w0 * p_dash;
1789 w0 = w1; w1 = w2; w2 = 0;
1816 ws[25] = w0 * p_dash;
1818 w0 = w1; w1 = w2; w2 = 0;
1846 ws[26] = w0 * p_dash;
1848 w0 = w1; w1 = w2; w2 = 0;
1877 ws[27] = w0 * p_dash;
1879 w0 = w1; w1 = w2; w2 = 0;
1909 ws[28] = w0 * p_dash;
1911 w0 = w1; w1 = w2; w2 = 0;
1942 ws[29] = w0 * p_dash;
1944 w0 = w1; w1 = w2; w2 = 0;
1976 ws[30] = w0 * p_dash;
1978 w0 = w1; w1 = w2; w2 = 0;
2011 ws[31] = w0 * p_dash;
2013 w0 = w1; w1 = w2; w2 = 0;
2047 w0 = w1; w1 = w2; w2 = 0;
2080 w0 = w1; w1 = w2; w2 = 0;
2112 w0 = w1; w1 = w2; w2 = 0;
2143 w0 = w1; w1 = w2; w2 = 0;
2173 w0 = w1; w1 = w2; w2 = 0;
2202 w0 = w1; w1 = w2; w2 = 0;
2230 w0 = w1; w1 = w2; w2 = 0;
2257 w0 = w1; w1 = w2; w2 = 0;
2283 w0 = w1; w1 = w2; w2 = 0;
2308 w0 = w1; w1 = w2; w2 = 0;
2332 w0 = w1; w1 = w2; w2 = 0;
2355 w0 = w1; w1 = w2; w2 = 0;
2377 w0 = w1; w1 = w2; w2 = 0;
2398 w0 = w1; w1 = w2; w2 = 0;
2418 w0 = w1; w1 = w2; w2 = 0;
2437 w0 = w1; w1 = w2; w2 = 0;
2455 w0 = w1; w1 = w2; w2 = 0;
2472 w0 = w1; w1 = w2; w2 = 0;
2488 w0 = w1; w1 = w2; w2 = 0;
2503 w0 = w1; w1 = w2; w2 = 0;
2517 w0 = w1; w1 = w2; w2 = 0;
2530 w0 = w1; w1 = w2; w2 = 0;
2542 w0 = w1; w1 = w2; w2 = 0;
2553 w0 = w1; w1 = w2; w2 = 0;
2563 w0 = w1; w1 = w2; w2 = 0;
2572 w0 = w1; w1 = w2; w2 = 0;
2580 w0 = w1; w1 = w2; w2 = 0;
2587 w0 = w1; w1 = w2; w2 = 0;
2593 w0 = w1; w1 = w2; w2 = 0;
2598 w0 = w1; w1 = w2; w2 = 0;
2602 w0 = w1; w1 = w2; w2 = 0;
2605 w0 = w1; w1 = w2; w2 = 0;
2609 word borrow =
bigint_sub3(ws + 32 + 1, ws, 32 + 1, p, 32);
void word3_muladd(word *w2, word *w1, word *w0, word x, word y)
void bigint_monty_redc_32(word z[], const word p[], word p_dash, word ws[])
void clear_mem(T *ptr, size_t n)
void bigint_monty_redc_8(word z[], const word p[], word p_dash, word ws[])
word bigint_sub3(word z[], const word x[], size_t x_size, const word y[], size_t y_size)
void bigint_monty_redc_6(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_24(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_16(word z[], const word p[], word p_dash, word ws[])
void bigint_monty_redc_4(word z[], const word p[], word p_dash, word ws[])
void word3_add(word *w2, word *w1, word *w0, word x)
Mask< T > conditional_copy_mem(T cnd, T *to, const T *from0, const T *from1, size_t elems)
word word_sub(word x, word y, word *carry)