1 // -*- mode: rust; -*- 2 // 3 // This file is part of curve25519-dalek. 4 // Copyright (c) 2018-2019 Henry de Valence 5 // See LICENSE for licensing information. 6 // 7 // Authors: 8 // - Henry de Valence <hdevalence@hdevalence.ca> 9 10 //! This module contains constants used by the IFMA backend. 11 12 use packed_simd::u64x4; 13 14 use window::NafLookupTable8; 15 16 use super::edwards::{CachedPoint, ExtendedPoint}; 17 use super::field::{F51x4Reduced, F51x4Unreduced}; 18 19 /// The identity element as an `ExtendedPoint`. 20 pub(crate) static EXTENDEDPOINT_IDENTITY: ExtendedPoint = ExtendedPoint(F51x4Unreduced([ 21 u64x4::new(0, 1, 1, 0), 22 u64x4::new(0, 0, 0, 0), 23 u64x4::new(0, 0, 0, 0), 24 u64x4::new(0, 0, 0, 0), 25 u64x4::new(0, 0, 0, 0), 26 ])); 27 28 /// The identity element as a `CachedPoint`. 29 pub(crate) static CACHEDPOINT_IDENTITY: CachedPoint = CachedPoint(F51x4Reduced([ 30 u64x4::new(121647, 121666, 243332, 2251799813685229), 31 u64x4::new(2251799813685248, 0, 0, 2251799813685247), 32 u64x4::new(2251799813685247, 0, 0, 2251799813685247), 33 u64x4::new(2251799813685247, 0, 0, 2251799813685247), 34 u64x4::new(2251799813685247, 0, 0, 2251799813685247), 35 ])); 36 37 /// Odd multiples of the Ed25519 basepoint: 38 pub(crate) static BASEPOINT_ODD_LOOKUP_TABLE: NafLookupTable8<CachedPoint> = NafLookupTable8([ 39 CachedPoint(F51x4Reduced([ 40 u64x4::new(1277522120965857, 73557767439946, 243332, 1943719795065404), 41 u64x4::new(108375142003455, 341984820733594, 0, 2097709862669256), 42 u64x4::new(150073485536043, 750646439938056, 0, 581130035634455), 43 u64x4::new(2149983732744869, 1903255931888577, 0, 646644904824193), 44 u64x4::new(291045673509296, 1060034214701851, 0, 325245010451737), 45 ])), 46 CachedPoint(F51x4Reduced([ 47 u64x4::new( 48 1970681836121889, 49 1660307753655178, 50 1077207637163462, 51 1436413309977108, 52 ), 53 u64x4::new( 54 158785710838757, 55 919645875412951, 56 174577133496574, 57 2213787394009350, 58 ), 59 u64x4::new( 60 1017606396438281, 61 1240932851489554, 62 918203302506967, 63 1239827708070863, 64 ), 65 u64x4::new( 66 1748989883612327, 67 1745367742532782, 68 1168385548387, 69 1211387683826673, 70 ), 71 u64x4::new( 72 799349980018733, 73 1471088235739693, 74 1505351346057417, 75 2104975925096407, 76 ), 77 ])), 78 CachedPoint(F51x4Reduced([ 79 u64x4::new( 80 171437462972293, 81 36016853025886, 82 1184164975342640, 83 1633525003912147, 84 ), 85 u64x4::new( 86 2113383632509037, 87 1946216474924125, 88 1884174984466256, 89 1373317790955847, 90 ), 91 u64x4::new( 92 791293623466401, 93 1796466048084189, 94 444977763198796, 95 629823271230872, 96 ), 97 u64x4::new( 98 1093217720067380, 99 2157024270666135, 100 238122980108466, 101 806820763806847, 102 ), 103 u64x4::new( 104 793658959468458, 105 368578641413741, 106 11592529764159, 107 2144017075993471, 108 ), 109 ])), 110 CachedPoint(F51x4Reduced([ 111 u64x4::new( 112 1538027396670268, 113 1588896993892061, 114 675619548648376, 115 788373514423313, 116 ), 117 u64x4::new( 118 1987517656073805, 119 1940987929951188, 120 666993851697339, 121 2040540928108427, 122 ), 123 u64x4::new( 124 375514548584082, 125 1726008037083790, 126 1070069155000872, 127 570111103756303, 128 ), 129 u64x4::new( 130 772223645372213, 131 2123395244967674, 132 868238486911408, 133 1846639042240362, 134 ), 135 u64x4::new( 136 872865734460736, 137 32277956842850, 138 1701451131455402, 139 773883376061880, 140 ), 141 ])), 142 CachedPoint(F51x4Reduced([ 143 u64x4::new( 144 1845177363882902, 145 275858237213625, 146 1052127336883600, 147 171072805852218, 148 ), 149 u64x4::new( 150 139016783952609, 151 462699304987089, 152 430046471494974, 153 410922720999257, 154 ), 155 u64x4::new( 156 846403935976337, 157 243817706931454, 158 971825428236901, 159 571800039596794, 160 ), 161 u64x4::new( 162 807642685434918, 163 1933536976438782, 164 812324278898440, 165 688391556487313, 166 ), 167 u64x4::new( 168 76239450396192, 169 629532732688863, 170 1833302026979779, 171 650067934544499, 172 ), 173 ])), 174 CachedPoint(F51x4Reduced([ 175 u64x4::new( 176 1373931604989264, 177 331159264656614, 178 364391529321767, 179 874765630865409, 180 ), 181 u64x4::new( 182 2109908262150241, 183 473400816504190, 184 91544045127333, 185 976307977609515, 186 ), 187 u64x4::new( 188 330175435673491, 189 2126511895885904, 190 1022944071588421, 191 2158480209801463, 192 ), 193 u64x4::new( 194 1305666795527971, 195 162063591028664, 196 2193154870675382, 197 1789166662611800, 198 ), 199 u64x4::new( 200 817858592500508, 201 1672743239440202, 202 859976879916778, 203 1167423340862516, 204 ), 205 ])), 206 CachedPoint(F51x4Reduced([ 207 u64x4::new( 208 274334925170164, 209 565841102587251, 210 603083835949120, 211 607539210240861, 212 ), 213 u64x4::new( 214 196754662972649, 215 1339063476699167, 216 1406077076979491, 217 896902435668469, 218 ), 219 u64x4::new( 220 397962210956733, 221 174839587476217, 222 1381082665748936, 223 175195877334136, 224 ), 225 u64x4::new( 226 717429432748391, 227 1635309821746318, 228 363374010274647, 229 882908746261699, 230 ), 231 u64x4::new( 232 600946602802781, 233 1946596133370711, 234 1532135183320341, 235 690530671668253, 236 ), 237 ])), 238 CachedPoint(F51x4Reduced([ 239 u64x4::new( 240 2074443704000945, 241 2163534804938345, 242 425423840926528, 243 1100826171404853, 244 ), 245 u64x4::new( 246 111700142796101, 247 1456893872751964, 248 1186145518682968, 249 2192182627706116, 250 ), 251 u64x4::new( 252 1848722121856066, 253 2123239575044749, 254 1323870754599272, 255 883211262889775, 256 ), 257 u64x4::new( 258 938263017712916, 259 689670293631396, 260 183944529557576, 261 501908638166580, 262 ), 263 u64x4::new( 264 2170571907220631, 265 36636756989655, 266 1875035480138608, 267 803703278398018, 268 ), 269 ])), 270 CachedPoint(F51x4Reduced([ 271 u64x4::new( 272 1053429956874064, 273 1636640618139765, 274 1556890827801070, 275 2142720579528828, 276 ), 277 u64x4::new( 278 1814240918422814, 279 692326274601777, 280 1054896561802157, 281 2025454041705534, 282 ), 283 u64x4::new( 284 2109495823888757, 285 1287497869997176, 286 194170063200096, 287 621116840113213, 288 ), 289 u64x4::new( 290 2156505873679998, 291 2197064359737385, 292 1312887672223536, 293 369862818895912, 294 ), 295 u64x4::new( 296 977381163563657, 297 1878897311974033, 298 2144566861359744, 299 1832960882773351, 300 ), 301 ])), 302 CachedPoint(F51x4Reduced([ 303 u64x4::new( 304 1266492498289486, 305 1301524759372145, 306 324789537938521, 307 442710471023019, 308 ), 309 u64x4::new( 310 1232722320001345, 311 1191193089162455, 312 176474006074813, 313 2158950213252857, 314 ), 315 u64x4::new( 316 1901782191467749, 317 494791441598902, 318 1820415815322129, 319 854954583485223, 320 ), 321 u64x4::new( 322 1511383667649702, 323 792536415032464, 324 2027741263854728, 325 1727944381044738, 326 ), 327 u64x4::new( 328 606355788891204, 329 1670687521471220, 330 582824350365415, 331 1509135066079912, 332 ), 333 ])), 334 CachedPoint(F51x4Reduced([ 335 u64x4::new( 336 1079942762813598, 337 2015830004785901, 338 479916361323351, 339 1907956590950158, 340 ), 341 u64x4::new( 342 2053400302939156, 343 1319799126867070, 344 19493088767391, 345 1908755581402373, 346 ), 347 u64x4::new( 348 2235858054780980, 349 885832711204321, 350 810332865560178, 351 103174191215441, 352 ), 353 u64x4::new( 354 1843466881032833, 355 355511728384038, 356 693846715794114, 357 186545012724117, 358 ), 359 u64x4::new( 360 1661758432892509, 361 1491022339899281, 362 698941123765263, 363 174945407208560, 364 ), 365 ])), 366 CachedPoint(F51x4Reduced([ 367 u64x4::new( 368 1075933251927831, 369 400263885306647, 370 1308157532880528, 371 347933379126665, 372 ), 373 u64x4::new( 374 673811632329433, 375 1584860147186478, 376 271778891257244, 377 498194055154207, 378 ), 379 u64x4::new( 380 703783427747558, 381 1051624728592032, 382 1371463103351544, 383 230351033002960, 384 ), 385 u64x4::new( 386 860729466483372, 387 421647596766583, 388 1520613871336707, 389 635298775280054, 390 ), 391 u64x4::new( 392 1168352891728845, 393 1691216293752089, 394 1799491997061519, 395 399728882318504, 396 ), 397 ])), 398 CachedPoint(F51x4Reduced([ 399 u64x4::new( 400 420156727446514, 401 1483649215777128, 402 165508610199900, 403 1918121104840431, 404 ), 405 u64x4::new( 406 2129902293682427, 407 730952770435213, 408 2184527544565390, 409 1939880362232986, 410 ), 411 u64x4::new( 412 1771978364905086, 413 510975579746524, 414 927564335219142, 415 177574146260558, 416 ), 417 u64x4::new( 418 2164104536437514, 419 1532598873799015, 420 406875369182421, 421 1367005937406517, 422 ), 423 u64x4::new( 424 35073200082587, 425 1981124717036219, 426 1854087014063833, 427 122419694385217, 428 ), 429 ])), 430 CachedPoint(F51x4Reduced([ 431 u64x4::new( 432 1963785875777739, 433 411497142699119, 434 1974557512687408, 435 1268304422747183, 436 ), 437 u64x4::new( 438 762752575978150, 439 1443822019541748, 440 1331556159904338, 441 377726798263780, 442 ), 443 u64x4::new( 444 825953972847841, 445 353487068141356, 446 1955697322427207, 447 2048226560172078, 448 ), 449 u64x4::new( 450 1482378558684434, 451 657691905625918, 452 923870001994493, 453 1694132799397736, 454 ), 455 u64x4::new( 456 1643904759603122, 457 170495566698285, 458 1218312703413378, 459 784318735038131, 460 ), 461 ])), 462 CachedPoint(F51x4Reduced([ 463 u64x4::new( 464 939230507241903, 465 2238763473105245, 466 1827325199528162, 467 1153939339775538, 468 ), 469 u64x4::new( 470 38544505283339, 471 258889431497015, 472 351721979677947, 473 1357907379592829, 474 ), 475 u64x4::new( 476 1393974676373341, 477 1131355528938676, 478 473104915298872, 479 978783482501776, 480 ), 481 u64x4::new( 482 2131516168980501, 483 2113911780991092, 484 1477027502354261, 485 542884524860340, 486 ), 487 u64x4::new( 488 1029606261349423, 489 64226378557628, 490 1669131167474348, 491 2212808057234874, 492 ), 493 ])), 494 CachedPoint(F51x4Reduced([ 495 u64x4::new( 496 1423176501543193, 497 163313632579593, 498 2220495688893001, 499 2220041045291870, 500 ), 501 u64x4::new( 502 1111834224023697, 503 1026815658023689, 504 1404605100939775, 505 1412149108248227, 506 ), 507 u64x4::new( 508 1542537854906076, 509 1270288391129127, 510 991419278941933, 511 1824939809581980, 512 ), 513 u64x4::new( 514 1142003215657891, 515 525980550896367, 516 1508270666157963, 517 917719462309053, 518 ), 519 u64x4::new( 520 400851268057105, 521 1620818232405188, 522 1251478578139510, 523 2162841805361886, 524 ), 525 ])), 526 CachedPoint(F51x4Reduced([ 527 u64x4::new( 528 2125383272208441, 529 1368790097335984, 530 11813369275978, 531 639513785921674, 532 ), 533 u64x4::new( 534 2200806265616284, 535 1041996387620216, 536 1275149397833084, 537 1723371028064068, 538 ), 539 u64x4::new( 540 603720163891275, 541 2135593511176153, 542 2049641644431548, 543 1198460677818310, 544 ), 545 u64x4::new( 546 1862491879401621, 547 2008116580769441, 548 626566325260235, 549 1058308304975798, 550 ), 551 u64x4::new( 552 628557314314858, 553 1075323332046522, 554 1631772244117095, 555 1812174547405683, 556 ), 557 ])), 558 CachedPoint(F51x4Reduced([ 559 u64x4::new( 560 1222773123817104, 561 363276129291452, 562 796237592807883, 563 1914425291893078, 564 ), 565 u64x4::new( 566 1721259057429088, 567 734941709009373, 568 1553365830564638, 569 1492120931079419, 570 ), 571 u64x4::new( 572 1009354843273686, 573 293884504384873, 574 1050281954944357, 575 134132942667344, 576 ), 577 u64x4::new( 578 23119363298711, 579 1694754778833445, 580 1725925193393496, 581 1738396998222001, 582 ), 583 u64x4::new( 584 1753692057254667, 585 118428526447110, 586 840961387840295, 587 1227619055408558, 588 ), 589 ])), 590 CachedPoint(F51x4Reduced([ 591 u64x4::new( 592 1004186117579547, 593 508771992330056, 594 1426571663072421, 595 2238524171903259, 596 ), 597 u64x4::new( 598 744764613007812, 599 398885442368825, 600 2047459490294949, 601 2141797621077959, 602 ), 603 u64x4::new( 604 4556204156489, 605 1708213022802363, 606 1071381560923933, 607 393474529142567, 608 ), 609 u64x4::new( 610 350116198213005, 611 945907227204695, 612 168267474358731, 613 1801504420122711, 614 ), 615 u64x4::new( 616 728788674520360, 617 1262722049156121, 618 455259596607008, 619 1159442365834489, 620 ), 621 ])), 622 CachedPoint(F51x4Reduced([ 623 u64x4::new( 624 2226818917892677, 625 185673745808179, 626 2240952219732549, 627 324137961621908, 628 ), 629 u64x4::new( 630 1659527641857410, 631 973964060249383, 632 1349692151487730, 633 1172743533370593, 634 ), 635 u64x4::new( 636 310591478467746, 637 2123977244137170, 638 774562885265820, 639 430035546191685, 640 ), 641 u64x4::new( 642 2150863173197992, 643 2101978317708856, 644 193592648406011, 645 1375328504508580, 646 ), 647 u64x4::new( 648 1946235834250479, 649 121741431658675, 650 1004342690620100, 651 2063466488599450, 652 ), 653 ])), 654 CachedPoint(F51x4Reduced([ 655 u64x4::new( 656 463079632200153, 657 40415275714025, 658 545935352782679, 659 1458043501600908, 660 ), 661 u64x4::new( 662 783771976559993, 663 880839641726471, 664 1782028201271831, 665 41664413404590, 666 ), 667 u64x4::new( 668 985129151724159, 669 187728621410000, 670 16620051933318, 671 378011085567733, 672 ), 673 u64x4::new( 674 1820372198168638, 675 905710046480679, 676 1912961774249737, 677 1868135861067161, 678 ), 679 u64x4::new( 680 474460473983187, 681 1455684425673661, 682 652771171116843, 683 733511920760779, 684 ), 685 ])), 686 CachedPoint(F51x4Reduced([ 687 u64x4::new( 688 1088886980746809, 689 1660218575261626, 690 527921875040240, 691 915086639857889, 692 ), 693 u64x4::new( 694 1814735788528175, 695 1586698876186367, 696 2040856637532862, 697 405684812785624, 698 ), 699 u64x4::new( 700 658578559700999, 701 1751442070931114, 702 1293623371490094, 703 715026719042518, 704 ), 705 u64x4::new( 706 382156225644820, 707 897982285504960, 708 577673183555858, 709 1158728558309719, 710 ), 711 u64x4::new( 712 1865791902475663, 713 124491617513788, 714 758484125168765, 715 734065580770143, 716 ), 717 ])), 718 CachedPoint(F51x4Reduced([ 719 u64x4::new( 720 330985690350617, 721 2214424721795630, 722 973374650780848, 723 1507267060932964, 724 ), 725 u64x4::new( 726 1733823971011290, 727 1730742552292995, 728 669018866977489, 729 604527664126146, 730 ), 731 u64x4::new( 732 1082092498645474, 733 1029182053935309, 734 756799947765834, 735 1764720030308351, 736 ), 737 u64x4::new( 738 969912105693756, 739 38116887248276, 740 2148030115687613, 741 995140534653865, 742 ), 743 u64x4::new( 744 2154373397460354, 745 298128883464656, 746 479587543632539, 747 1061127201140779, 748 ), 749 ])), 750 CachedPoint(F51x4Reduced([ 751 u64x4::new( 752 843064865526549, 753 2019481782959016, 754 1873125524281672, 755 2013330239022371, 756 ), 757 u64x4::new( 758 1192932403815186, 759 1818108671859220, 760 1247005102016258, 761 1210577394628058, 762 ), 763 u64x4::new( 764 132359273326717, 765 795492788299178, 766 1235924489372816, 767 891705064411550, 768 ), 769 u64x4::new( 770 1425833709104858, 771 152114045731085, 772 991347902581315, 773 1387773338707683, 774 ), 775 u64x4::new( 776 48024203807922, 777 157005564892977, 778 1474053161953744, 779 727448023498345, 780 ), 781 ])), 782 CachedPoint(F51x4Reduced([ 783 u64x4::new( 784 1076621484026788, 785 1309917234320927, 786 1786998180233659, 787 1595497085944737, 788 ), 789 u64x4::new( 790 1737334672694726, 791 2038133716999447, 792 1929061192400917, 793 620544235219084, 794 ), 795 u64x4::new( 796 1550527313469747, 797 329096759623509, 798 1585214659209474, 799 693419841748324, 800 ), 801 u64x4::new( 802 1450010875912315, 803 2085047082180569, 804 757421110771886, 805 389367139787400, 806 ), 807 u64x4::new( 808 781339490566117, 809 132941783448971, 810 258650459725225, 811 2042274962585613, 812 ), 813 ])), 814 CachedPoint(F51x4Reduced([ 815 u64x4::new( 816 859638991542650, 817 2249840007426442, 818 1138753070862357, 819 793751342318913, 820 ), 821 u64x4::new( 822 2133476133447306, 823 1027010646129239, 824 436851910892865, 825 866949948830344, 826 ), 827 u64x4::new( 828 1936003572431223, 829 531513680252193, 830 1929877059408416, 831 830585477662503, 832 ), 833 u64x4::new( 834 1460760405777960, 835 686673748420916, 836 275475330051554, 837 1581792376993692, 838 ), 839 u64x4::new( 840 894482039456784, 841 1801274480988632, 842 16407898635278, 843 1668497039215206, 844 ), 845 ])), 846 CachedPoint(F51x4Reduced([ 847 u64x4::new( 848 258585746227669, 849 936490904651492, 850 1826793887434108, 851 1201219990633823, 852 ), 853 u64x4::new( 854 979462791643635, 855 461762372210187, 856 218708929991480, 857 1378150755760178, 858 ), 859 u64x4::new( 860 642542170229970, 861 787135445552820, 862 371168855880557, 863 182642566486693, 864 ), 865 u64x4::new( 866 1152277399721904, 867 1726910452705576, 868 1452393215705343, 869 2117799581546845, 870 ), 871 u64x4::new( 872 1211265143925330, 873 14373046151823, 874 1745528818271507, 875 1842106288572078, 876 ), 877 ])), 878 CachedPoint(F51x4Reduced([ 879 u64x4::new( 880 635154614562157, 881 1956763034454109, 882 509123035953043, 883 445727657534780, 884 ), 885 u64x4::new( 886 2072765509783252, 887 1282639891593570, 888 1075086397362049, 889 722996110178195, 890 ), 891 u64x4::new( 892 1385572918825603, 893 1190035835509576, 894 218317841176013, 895 1047865370756924, 896 ), 897 u64x4::new( 898 473991569426488, 899 1910588123704592, 900 1338270051770806, 901 401676861680875, 902 ), 903 u64x4::new( 904 992455353618436, 905 126422733426929, 906 1955248037756399, 907 119233843022643, 908 ), 909 ])), 910 CachedPoint(F51x4Reduced([ 911 u64x4::new( 912 1555272991526078, 913 2214378187116349, 914 366893798097444, 915 1401502118355702, 916 ), 917 u64x4::new( 918 1157229521930713, 919 2144787187506262, 920 1681597469697840, 921 847499096518697, 922 ), 923 u64x4::new( 924 1872802655800758, 925 1027119609820793, 926 1137278714788290, 927 1664750301179485, 928 ), 929 u64x4::new( 930 1091289858897030, 931 910126419483563, 932 1101920147235731, 933 597083075893952, 934 ), 935 u64x4::new( 936 1711011533670315, 937 185206680336278, 938 1620960612579784, 939 1968598849170880, 940 ), 941 ])), 942 CachedPoint(F51x4Reduced([ 943 u64x4::new( 944 73077300235958, 945 257216723095630, 946 466947267713785, 947 847105214181598, 948 ), 949 u64x4::new( 950 1322905631406309, 951 407458059314731, 952 230045063190376, 953 923800751267786, 954 ), 955 u64x4::new( 956 1146027205000415, 957 1541328763727623, 958 768510249199119, 959 1630223587589059, 960 ), 961 u64x4::new( 962 1930368769879433, 963 1376145403022159, 964 1898149855343131, 965 1709421930518180, 966 ), 967 u64x4::new( 968 633944191571764, 969 58314960742839, 970 2050971151574988, 971 757799756090059, 972 ), 973 ])), 974 CachedPoint(F51x4Reduced([ 975 u64x4::new( 976 361576929158539, 977 1035682890165818, 978 160945739362874, 979 266975208626222, 980 ), 981 u64x4::new( 982 1635371797076046, 983 2106722851965197, 984 451585919077206, 985 6692426667180, 986 ), 987 u64x4::new( 988 175820543533852, 989 2057511393764025, 990 1531846543720469, 991 1648320903946519, 992 ), 993 u64x4::new( 994 947461770620940, 995 1107335044817620, 996 1725565474111216, 997 2182263619949220, 998 ), 999 u64x4::new( 1000 726444888601221, 1001 1379664085279206, 1002 1517215633290417, 1003 1763968936542507, 1004 ), 1005 ])), 1006 CachedPoint(F51x4Reduced([ 1007 u64x4::new( 1008 686545355846512, 1009 1712283265573167, 1010 1743509592736302, 1011 1653906616429153, 1012 ), 1013 u64x4::new( 1014 985108805667149, 1015 2244347650874753, 1016 1304749057936860, 1017 321846134330589, 1018 ), 1019 u64x4::new( 1020 296321076156886, 1021 1717929256240029, 1022 450933772486425, 1023 2015536856431605, 1024 ), 1025 u64x4::new( 1026 1690393512821866, 1027 646913049470189, 1028 2198650647576397, 1029 1230646705710442, 1030 ), 1031 u64x4::new( 1032 601961913448442, 1033 878806578800541, 1034 620497587492381, 1035 330716414244629, 1036 ), 1037 ])), 1038 CachedPoint(F51x4Reduced([ 1039 u64x4::new( 1040 631510982676132, 1041 1755753187697174, 1042 1596201246674299, 1043 2197888384902121, 1044 ), 1045 u64x4::new( 1046 626957678275745, 1047 1447583371478595, 1048 1375375216702128, 1049 1443613232818823, 1050 ), 1051 u64x4::new( 1052 1962997804660501, 1053 1051744123184519, 1054 1002558639300437, 1055 1237313314603385, 1056 ), 1057 u64x4::new( 1058 2118828335274995, 1059 226398203764759, 1060 889099617161107, 1061 1620967117678504, 1062 ), 1063 u64x4::new( 1064 227261019362935, 1065 2046897556746842, 1066 591524060355369, 1067 2178552047369691, 1068 ), 1069 ])), 1070 CachedPoint(F51x4Reduced([ 1071 u64x4::new( 1072 1375403119051662, 1073 222313965014452, 1074 539873444241395, 1075 213198095917915, 1076 ), 1077 u64x4::new( 1078 1436952871599114, 1079 1229749762725246, 1080 1174441562267670, 1081 265367077740349, 1082 ), 1083 u64x4::new( 1084 11107426165917, 1085 985954476039181, 1086 1147329112365579, 1087 1133931640328107, 1088 ), 1089 u64x4::new( 1090 585235055006843, 1091 699515259687482, 1092 299559608721134, 1093 2134819767146767, 1094 ), 1095 u64x4::new( 1096 1376401105588528, 1097 391412107507860, 1098 302743651807545, 1099 1362834426455518, 1100 ), 1101 ])), 1102 CachedPoint(F51x4Reduced([ 1103 u64x4::new( 1104 1802940904616205, 1105 1615132760193234, 1106 869321663313735, 1107 666494072545310, 1108 ), 1109 u64x4::new( 1110 1452849320020701, 1111 1472716813676364, 1112 472862999490802, 1113 359937983286145, 1114 ), 1115 u64x4::new( 1116 1221198323133843, 1117 491718521756528, 1118 1387135774113906, 1119 793779904904008, 1120 ), 1121 u64x4::new( 1122 1032129287829151, 1123 30730741946697, 1124 217603185195068, 1125 2118169309744162, 1126 ), 1127 u64x4::new( 1128 225899335574721, 1129 1767553399797342, 1130 881082465669982, 1131 1435383196392870, 1132 ), 1133 ])), 1134 CachedPoint(F51x4Reduced([ 1135 u64x4::new( 1136 1127093564374276, 1137 2245188499702906, 1138 1250041622887441, 1139 2179324911668149, 1140 ), 1141 u64x4::new( 1142 908019210866875, 1143 1879900391060964, 1144 1355047706206597, 1145 647218945377302, 1146 ), 1147 u64x4::new( 1148 1616265604422592, 1149 2134336781521657, 1150 1157711219915601, 1151 1227494173135033, 1152 ), 1153 u64x4::new( 1154 136450294813355, 1155 1984543542455033, 1156 1199486053011083, 1157 33687889941331, 1158 ), 1159 u64x4::new( 1160 1053447012707371, 1161 68239344331930, 1162 537448158443925, 1163 1829189783369646, 1164 ), 1165 ])), 1166 CachedPoint(F51x4Reduced([ 1167 u64x4::new( 1168 996806463322563, 1169 2043104667851348, 1170 1110361398300309, 1171 1218740346887957, 1172 ), 1173 u64x4::new( 1174 399141907016839, 1175 1307691109658227, 1176 532535384961264, 1177 896201194398872, 1178 ), 1179 u64x4::new( 1180 111705272106160, 1181 1790972382466021, 1182 1159338112559144, 1183 303544352897203, 1184 ), 1185 u64x4::new( 1186 1036600573322969, 1187 1457119922663674, 1188 334117653665514, 1189 460023361701263, 1190 ), 1191 u64x4::new( 1192 1363773215189933, 1193 1915594049343802, 1194 1661249423378694, 1195 1744945551969247, 1196 ), 1197 ])), 1198 CachedPoint(F51x4Reduced([ 1199 u64x4::new( 1200 3093919631215, 1201 574886478077610, 1202 1704446919728971, 1203 250093147254210, 1204 ), 1205 u64x4::new( 1206 1387413348737796, 1207 360142717826981, 1208 2116185073015983, 1209 474541388374100, 1210 ), 1211 u64x4::new( 1212 1632539630892580, 1213 1332404016215719, 1214 2145297637794728, 1215 1289783723173504, 1216 ), 1217 u64x4::new( 1218 1030244179060173, 1219 579782698595797, 1220 1062365251139982, 1221 677149839815546, 1222 ), 1223 u64x4::new( 1224 6671539419876, 1225 1426937459653775, 1226 406942403696343, 1227 675479224223817, 1228 ), 1229 ])), 1230 CachedPoint(F51x4Reduced([ 1231 u64x4::new( 1232 271984148441782, 1233 1708099625818957, 1234 1499011822959235, 1235 516808451044836, 1236 ), 1237 u64x4::new( 1238 1124847751346323, 1239 2038336022958449, 1240 1721698491022600, 1241 705944403212572, 1242 ), 1243 u64x4::new( 1244 85459783780275, 1245 1715213099986669, 1246 1728445509034791, 1247 730657630359717, 1248 ), 1249 u64x4::new( 1250 1185034652652387, 1251 755472578204310, 1252 476118360897817, 1253 1800434542785310, 1254 ), 1255 u64x4::new( 1256 1815589628676941, 1257 491778500674079, 1258 1547664984392513, 1259 279891608681267, 1260 ), 1261 ])), 1262 CachedPoint(F51x4Reduced([ 1263 u64x4::new( 1264 2036337168672113, 1265 1730787524684269, 1266 639134121311693, 1267 698060925015524, 1268 ), 1269 u64x4::new( 1270 315211075189491, 1271 1329055848835358, 1272 688621136402134, 1273 1271193060119448, 1274 ), 1275 u64x4::new( 1276 1697984374314012, 1277 459330773536457, 1278 305481314707918, 1279 61676911066002, 1280 ), 1281 u64x4::new( 1282 2166631826859191, 1283 2105217187401781, 1284 937587962768434, 1285 357397435365683, 1286 ), 1287 u64x4::new( 1288 1206757093145471, 1289 1287847622009294, 1290 1951336140421622, 1291 2233789834777410, 1292 ), 1293 ])), 1294 CachedPoint(F51x4Reduced([ 1295 u64x4::new( 1296 82144190081093, 1297 1568417433687791, 1298 907555979158442, 1299 2037855062523867, 1300 ), 1301 u64x4::new( 1302 1225315484058853, 1303 315317868015613, 1304 1765025920288384, 1305 175223259828436, 1306 ), 1307 u64x4::new( 1308 1215010304871271, 1309 662713408454950, 1310 429517658575616, 1311 991062684008811, 1312 ), 1313 u64x4::new( 1314 993837615254894, 1315 1485561584889450, 1316 2001836754226476, 1317 1915943063896801, 1318 ), 1319 u64x4::new( 1320 818895101625673, 1321 1342479472068804, 1322 1380235330010671, 1323 23315169761453, 1324 ), 1325 ])), 1326 CachedPoint(F51x4Reduced([ 1327 u64x4::new( 1328 1500726307559118, 1329 956166860173424, 1330 512663951564436, 1331 1940180717699824, 1332 ), 1333 u64x4::new( 1334 1789521472720825, 1335 779456898652427, 1336 2035063615853504, 1337 863582140589407, 1338 ), 1339 u64x4::new( 1340 634508890793787, 1341 1748041666732214, 1342 259642099961634, 1343 1294936839797812, 1344 ), 1345 u64x4::new( 1346 2183334898697038, 1347 2197242820694806, 1348 2217225409073703, 1349 992633998226449, 1350 ), 1351 u64x4::new( 1352 2197077498155916, 1353 1562008797791883, 1354 1395088759904208, 1355 331715244679294, 1356 ), 1357 ])), 1358 CachedPoint(F51x4Reduced([ 1359 u64x4::new( 1360 186854731652320, 1361 284389440026580, 1362 1252175415119400, 1363 1025377410100223, 1364 ), 1365 u64x4::new( 1366 1578732129417607, 1367 898645497852382, 1368 2237766074482974, 1369 1939197790303592, 1370 ), 1371 u64x4::new( 1372 1438830390640145, 1373 1682452015845597, 1374 1108441197232223, 1375 1984134492898664, 1376 ), 1377 u64x4::new( 1378 282668727301669, 1379 1609018289552856, 1380 390363439795705, 1381 1138459124667912, 1382 ), 1383 u64x4::new( 1384 18889015928490, 1385 532489638086725, 1386 324621535996080, 1387 2210046082697453, 1388 ), 1389 ])), 1390 CachedPoint(F51x4Reduced([ 1391 u64x4::new( 1392 2041327051605378, 1393 2244037852176483, 1394 2116336876147147, 1395 9616672544864, 1396 ), 1397 u64x4::new( 1398 969847387559191, 1399 1059119127679639, 1400 1764630094670633, 1401 364568045311834, 1402 ), 1403 u64x4::new( 1404 505938893153679, 1405 2075421412172902, 1406 326984153045666, 1407 1959549727324704, 1408 ), 1409 u64x4::new( 1410 1088715617911260, 1411 13917085151028, 1412 950568481355929, 1413 23687195265771, 1414 ), 1415 u64x4::new( 1416 1798284568673198, 1417 808382292203333, 1418 2214698741961545, 1419 610817203275867, 1420 ), 1421 ])), 1422 CachedPoint(F51x4Reduced([ 1423 u64x4::new( 1424 1731488929623777, 1425 1158815615106413, 1426 1491090861948525, 1427 1428384712900962, 1428 ), 1429 u64x4::new( 1430 722237139522457, 1431 1514290328911535, 1432 1366197913116230, 1433 1519472657321210, 1434 ), 1435 u64x4::new( 1436 246028966932273, 1437 1888239319448405, 1438 423720022211163, 1439 455243905681470, 1440 ), 1441 u64x4::new( 1442 738323403716001, 1443 1758018973481179, 1444 1180718299482318, 1445 1008495946606708, 1446 ), 1447 u64x4::new( 1448 334959381596119, 1449 1704599537529481, 1450 2172191232106896, 1451 13502508918495, 1452 ), 1453 ])), 1454 CachedPoint(F51x4Reduced([ 1455 u64x4::new( 1456 273393076768079, 1457 427388720298603, 1458 1071733376018227, 1459 1715429388968611, 1460 ), 1461 u64x4::new( 1462 751776629892313, 1463 1965239102856011, 1464 541955408230119, 1465 831043488876080, 1466 ), 1467 u64x4::new( 1468 643718536393104, 1469 390543998404644, 1470 2176730661486279, 1471 499459234889079, 1472 ), 1473 u64x4::new( 1474 1482404333915009, 1475 865527293526285, 1476 507957951411713, 1477 216456252558825, 1478 ), 1479 u64x4::new( 1480 2210281256300231, 1481 1519357818277551, 1482 1257866936775246, 1483 1689605217672864, 1484 ), 1485 ])), 1486 CachedPoint(F51x4Reduced([ 1487 u64x4::new( 1488 2135395168187905, 1489 2214400157568614, 1490 2032983817870823, 1491 1124945109072647, 1492 ), 1493 u64x4::new( 1494 1602820011758145, 1495 906675633903289, 1496 782700735390986, 1497 2067218823525601, 1498 ), 1499 u64x4::new( 1500 786785748926382, 1501 1433583123655616, 1502 905839404290873, 1503 2249680349963778, 1504 ), 1505 u64x4::new( 1506 1940824582370584, 1507 1610961256326291, 1508 285307858781375, 1509 1755588655461194, 1510 ), 1511 u64x4::new( 1512 233682812055333, 1513 2146114223476434, 1514 41132209533476, 1515 535292431776371, 1516 ), 1517 ])), 1518 CachedPoint(F51x4Reduced([ 1519 u64x4::new( 1520 600257696476418, 1521 18449221564824, 1522 1422209458591138, 1523 239571584769716, 1524 ), 1525 u64x4::new( 1526 2056372917056980, 1527 1155290566623531, 1528 1252473955568148, 1529 1276690716882081, 1530 ), 1531 u64x4::new( 1532 246974369025311, 1533 658117221519903, 1534 2000380937898441, 1535 1351183273924850, 1536 ), 1537 u64x4::new( 1538 1803747363753112, 1539 1736801515030186, 1540 2025633577199091, 1541 603378480769167, 1542 ), 1543 u64x4::new( 1544 57348749438551, 1545 1893551220299655, 1546 657926732731806, 1547 1522499384853705, 1548 ), 1549 ])), 1550 CachedPoint(F51x4Reduced([ 1551 u64x4::new( 1552 591809128842736, 1553 284860517232591, 1554 27436696863545, 1555 886306697195798, 1556 ), 1557 u64x4::new( 1558 2113192175751749, 1559 1405882509906423, 1560 561316282804847, 1561 835573846576266, 1562 ), 1563 u64x4::new( 1564 94407289485409, 1565 1781534171669004, 1566 2098782516531528, 1567 598529921520053, 1568 ), 1569 u64x4::new( 1570 1860137004504786, 1571 2197323407480349, 1572 1516772733981532, 1573 961740253777086, 1574 ), 1575 u64x4::new( 1576 1484139612868217, 1577 1593557644636881, 1578 838834937143441, 1579 36382198263380, 1580 ), 1581 ])), 1582 CachedPoint(F51x4Reduced([ 1583 u64x4::new( 1584 1165898865828562, 1585 1153420815042389, 1586 1068625028915785, 1587 1945927229911090, 1588 ), 1589 u64x4::new( 1590 843454394017146, 1591 571029655293754, 1592 386282254545998, 1593 1804608237584150, 1594 ), 1595 u64x4::new( 1596 370552451091100, 1597 1279105656351124, 1598 1864742949668631, 1599 2093071521726981, 1600 ), 1601 u64x4::new( 1602 1872542389052198, 1603 1679083953574330, 1604 349872262454465, 1605 1470311090717925, 1606 ), 1607 u64x4::new( 1608 685345654160323, 1609 319718985807814, 1610 1359932285384164, 1611 1410900103316331, 1612 ), 1613 ])), 1614 CachedPoint(F51x4Reduced([ 1615 u64x4::new( 1616 2083666668832889, 1617 314624387816655, 1618 1496694646480345, 1619 1946728950459189, 1620 ), 1621 u64x4::new( 1622 1579153761571203, 1623 508771185291380, 1624 1002249659402007, 1625 551517831173801, 1626 ), 1627 u64x4::new( 1628 2132371471626150, 1629 1988122278556533, 1630 1552195130653890, 1631 1327637750292755, 1632 ), 1633 u64x4::new( 1634 118937099181527, 1635 382610380973142, 1636 634951529106471, 1637 382740054041699, 1638 ), 1639 u64x4::new( 1640 801287519643470, 1641 87822941589258, 1642 1908825350108451, 1643 1404208826499115, 1644 ), 1645 ])), 1646 CachedPoint(F51x4Reduced([ 1647 u64x4::new( 1648 330347226380261, 1649 672119116965146, 1650 1761510370768005, 1651 1959200302484704, 1652 ), 1653 u64x4::new( 1654 1631876583009250, 1655 1684917718484264, 1656 1027256947805920, 1657 2174612545251129, 1658 ), 1659 u64x4::new( 1660 636668855699872, 1661 625187713984839, 1662 265886954766790, 1663 167898557908504, 1664 ), 1665 u64x4::new( 1666 1210974548180860, 1667 2051308710365526, 1668 907620584086428, 1669 1081788677970850, 1670 ), 1671 u64x4::new( 1672 621792955460854, 1673 1450945504745382, 1674 1666728650687828, 1675 977937146451674, 1676 ), 1677 ])), 1678 CachedPoint(F51x4Reduced([ 1679 u64x4::new( 1680 24725936182267, 1681 2226765032752574, 1682 2036560083102883, 1683 2002351185719584, 1684 ), 1685 u64x4::new( 1686 1620080779405308, 1687 1493220053370419, 1688 2245691691038916, 1689 1152182628629603, 1690 ), 1691 u64x4::new( 1692 317928527147500, 1693 1855194218440212, 1694 979380281964169, 1695 861442286685289, 1696 ), 1697 u64x4::new( 1698 393308472784625, 1699 486143087279967, 1700 1234071346236405, 1701 777748237119399, 1702 ), 1703 u64x4::new( 1704 43850412814718, 1705 1497656407486446, 1706 744128331046695, 1707 1618035787321792, 1708 ), 1709 ])), 1710 CachedPoint(F51x4Reduced([ 1711 u64x4::new( 1712 1670169946550211, 1713 1230951698726438, 1714 806586940221293, 1715 23159779184607, 1716 ), 1717 u64x4::new( 1718 634011340979302, 1719 764182085034744, 1720 731065727766955, 1721 1737985776442180, 1722 ), 1723 u64x4::new( 1724 240492712141842, 1725 73976435954441, 1726 162810587166835, 1727 697230894340912, 1728 ), 1729 u64x4::new( 1730 1299745598348388, 1731 1359436039694544, 1732 1856609816731554, 1733 25228008461513, 1734 ), 1735 u64x4::new( 1736 2180690501932381, 1737 2161211192848458, 1738 87069466793408, 1739 2003456332883860, 1740 ), 1741 ])), 1742 CachedPoint(F51x4Reduced([ 1743 u64x4::new( 1744 1106932458043379, 1745 1675181364231371, 1746 1681785724775243, 1747 131824742557210, 1748 ), 1749 u64x4::new( 1750 1671649414647169, 1751 1827849994880670, 1752 1097958057111899, 1753 701956891169434, 1754 ), 1755 u64x4::new( 1756 2095539283710881, 1757 591029812888096, 1758 1699571518315654, 1759 1297589045812566, 1760 ), 1761 u64x4::new( 1762 1345612272298537, 1763 2166754730876055, 1764 2047982622154948, 1765 1785222806258129, 1766 ), 1767 u64x4::new( 1768 2181915268829890, 1769 1895697064378670, 1770 1288412327355885, 1771 1561075738281368, 1772 ), 1773 ])), 1774 CachedPoint(F51x4Reduced([ 1775 u64x4::new( 1776 741330264098392, 1777 357073519729966, 1778 1603572339180975, 1779 433572083688575, 1780 ), 1781 u64x4::new( 1782 699685108971208, 1783 1719650727634959, 1784 1941668009419214, 1785 870374958347891, 1786 ), 1787 u64x4::new( 1788 385971389331537, 1789 11655507719711, 1790 94814615497633, 1791 515572102810609, 1792 ), 1793 u64x4::new( 1794 1396688200590426, 1795 1518748475144123, 1796 162386454324368, 1797 2083303971579002, 1798 ), 1799 u64x4::new( 1800 1511688632419263, 1801 251584258592336, 1802 545345887993880, 1803 1229840230314160, 1804 ), 1805 ])), 1806 CachedPoint(F51x4Reduced([ 1807 u64x4::new( 1808 1298668855706029, 1809 2017860934939344, 1810 2224150456036391, 1811 1925926576297971, 1812 ), 1813 u64x4::new( 1814 259522963883544, 1815 1312469129541229, 1816 1647530465049600, 1817 1113737129047154, 1818 ), 1819 u64x4::new( 1820 733193298663145, 1821 2115712816303403, 1822 897628702762311, 1823 116440277571901, 1824 ), 1825 u64x4::new( 1826 1998719395229750, 1827 1662774553684237, 1828 194395608126452, 1829 98796702872301, 1830 ), 1831 u64x4::new( 1832 2226158244229144, 1833 91961728239158, 1834 526869903032152, 1835 849263805316773, 1836 ), 1837 ])), 1838 CachedPoint(F51x4Reduced([ 1839 u64x4::new( 1840 472779569333556, 1841 854477760843410, 1842 2070906720349401, 1843 734613359834689, 1844 ), 1845 u64x4::new( 1846 1771897100487404, 1847 1604024196006064, 1848 319699348925383, 1849 437152129592623, 1850 ), 1851 u64x4::new( 1852 627618365135361, 1853 1768642666037955, 1854 588564169143939, 1855 35295037750744, 1856 ), 1857 u64x4::new( 1858 220241884231278, 1859 319104161410840, 1860 1048165719448798, 1861 1583931089774347, 1862 ), 1863 u64x4::new( 1864 166479451884333, 1865 1623611819962804, 1866 59990366193679, 1867 900727256046987, 1868 ), 1869 ])), 1870 CachedPoint(F51x4Reduced([ 1871 u64x4::new( 1872 1944687327687331, 1873 1328410791053991, 1874 2083980670913902, 1875 609396833380574, 1876 ), 1877 u64x4::new( 1878 1907563845734496, 1879 1385619047697883, 1880 869817384774457, 1881 106642388505109, 1882 ), 1883 u64x4::new( 1884 1006516581737154, 1885 1561918369633937, 1886 1921172883211450, 1887 2216650451558824, 1888 ), 1889 u64x4::new( 1890 1780506017391778, 1891 233064930371847, 1892 1332962603425752, 1893 1380075261612354, 1894 ), 1895 u64x4::new( 1896 1907624789747741, 1897 1310065402098523, 1898 1838275780706825, 1899 884225500782782, 1900 ), 1901 ])), 1902 CachedPoint(F51x4Reduced([ 1903 u64x4::new( 1904 198729830692545, 1905 100156148743413, 1906 2140568641558859, 1907 2220606475942394, 1908 ), 1909 u64x4::new( 1910 1108788217903741, 1911 1706330932366163, 1912 2050449866410661, 1913 684907598542847, 1914 ), 1915 u64x4::new( 1916 1101958322366646, 1917 659427843062405, 1918 253899933868173, 1919 896574852821269, 1920 ), 1921 u64x4::new( 1922 1157052140740658, 1923 440541103447032, 1924 2173354981480949, 1925 604768603561932, 1926 ), 1927 u64x4::new( 1928 961238337866054, 1929 830849154351308, 1930 1643852412409441, 1931 1436749321770368, 1932 ), 1933 ])), 1934 CachedPoint(F51x4Reduced([ 1935 u64x4::new( 1936 784870637473285, 1937 1180234052037572, 1938 2086951602998715, 1939 419328169540373, 1940 ), 1941 u64x4::new( 1942 1966862397394559, 1943 788036164772123, 1944 2024355635709481, 1945 1471696676696146, 1946 ), 1947 u64x4::new( 1948 1468884300957205, 1949 1408016588131185, 1950 2229595828577885, 1951 240413942963547, 1952 ), 1953 u64x4::new( 1954 1481791691942441, 1955 970648959691160, 1956 1635500996148197, 1957 2236917233261585, 1958 ), 1959 u64x4::new( 1960 31660820731028, 1961 801794768903647, 1962 1069092619607344, 1963 282652554845923, 1964 ), 1965 ])), 1966 CachedPoint(F51x4Reduced([ 1967 u64x4::new( 1968 911659428682786, 1969 762502588057038, 1970 1311399152500807, 1971 1966922911783311, 1972 ), 1973 u64x4::new( 1974 1229849228728540, 1975 258161307933217, 1976 2140796867375541, 1977 1569345075547911, 1978 ), 1979 u64x4::new( 1980 1487354676143742, 1981 1818317546165791, 1982 811033554173350, 1983 1768788663337616, 1984 ), 1985 u64x4::new( 1986 450017165913234, 1987 962535873747168, 1988 2099104262993585, 1989 503030952485785, 1990 ), 1991 u64x4::new( 1992 1259958681304518, 1993 479589250923541, 1994 1503904042161640, 1995 706283657294305, 1996 ), 1997 ])), 1998 CachedPoint(F51x4Reduced([ 1999 u64x4::new( 2000 794562643024291, 2001 198670993088241, 2002 1678984629358943, 2003 273399517554618, 2004 ), 2005 u64x4::new( 2006 188458991574433, 2007 1389872130156447, 2008 1461868931574746, 2009 795140878721432, 2010 ), 2011 u64x4::new( 2012 624046647169653, 2013 630363741191019, 2014 911018499983500, 2015 1410140563046579, 2016 ), 2017 u64x4::new( 2018 1675056174405076, 2019 632544713589250, 2020 795454163559811, 2021 1535271563341780, 2022 ), 2023 u64x4::new( 2024 25504547444781, 2025 812510098987855, 2026 51290042016232, 2027 1992260991700127, 2028 ), 2029 ])), 2030 CachedPoint(F51x4Reduced([ 2031 u64x4::new( 2032 269968325452358, 2033 470932785179706, 2034 1684444304834150, 2035 1027482126748243, 2036 ), 2037 u64x4::new( 2038 457941065342419, 2039 2117377568137882, 2040 1209423706730905, 2041 2192403099717071, 2042 ), 2043 u64x4::new( 2044 1899046404863678, 2045 1359500336071762, 2046 1492389156724726, 2047 1455627081827750, 2048 ), 2049 u64x4::new( 2050 2016101061876546, 2051 1967000012916571, 2052 582539481696050, 2053 1197538178790094, 2054 ), 2055 u64x4::new( 2056 639684852217504, 2057 1799941252757449, 2058 1470016556327743, 2059 846111828965901, 2060 ), 2061 ])), 2062 ]); 2063