diff --git a/internal/edwards25519/scalarMul_test.go b/internal/edwards25519/scalarMul_test.go index 2f33fd1..0ca0c48 100644 --- a/internal/edwards25519/scalarMul_test.go +++ b/internal/edwards25519/scalarMul_test.go @@ -105,7 +105,6 @@ func TestBasepointTableGeneration(t *testing.T) { tmp1.Double(tmp2) tmp3.FromP1xP1(tmp1) } - } func TestScalarMulMatchesBasepointMul(t *testing.T) { @@ -146,3 +145,12 @@ func TestMultiScalarMulMatchesBasepointMul(t *testing.T) { t.Error(err) } } + +func TestBasepointNafTableGeneration(t *testing.T) { + var table NafLookupTable8 + table.FromP3(&B) + + if table != basepointNafTable { + t.Error("BasepointNafTable does not match") + } +} diff --git a/internal/edwards25519/tableConstants.go b/internal/edwards25519/tableConstants.go index 824f95b..c22344d 100644 --- a/internal/edwards25519/tableConstants.go +++ b/internal/edwards25519/tableConstants.go @@ -41,4 +41,5 @@ var ( AffineLookupTable{points: [8]AffineCached{AffineCached{YplusX: radix51.FieldElement{0x7f29362730383, 0x7fd7951459c36, 0x7504c512d49e7, 0x87ed7e3bc55f, 0x7deb10149c726}, YminusX: radix51.FieldElement{0x48478f387475, 0x69397d9678a3e, 0x67c8156c976f3, 0x2eb4d5589226c, 0x2c709e6c1c10a}, T2d: radix51.FieldElement{0x2af6a8766ee7a, 0x8aaa79a1d96c, 0x42f92d59b2fb0, 0x1752c40009c07, 0x8e68e9ff62ce}}, AffineCached{YplusX: radix51.FieldElement{0x509d50ab8f2f9, 0x1b8ab247be5e5, 0x5d9b2e6b2e486, 0x4faa5479a1339, 0x4cb13bd738f71}, YminusX: radix51.FieldElement{0x5500a4bc130ad, 0x127a17a938695, 0x2a26fa34e36d, 0x584d12e1ecc28, 0x2f1f3f87eeba3}, T2d: radix51.FieldElement{0x48c75e515b64a, 0x75b6952071ef0, 0x5d46d42965406, 0x7746106989f9f, 0x19a1e353c0ae2}}, AffineCached{YplusX: radix51.FieldElement{0x172cdd596bdbd, 0x731ddf881684, 0x10426d64f8115, 0x71a4fd8a9a3da, 0x736bd3990266a}, YminusX: radix51.FieldElement{0x47560bafa05c3, 0x418dcabcc2fa3, 0x35991cecf8682, 0x24371a94b8c60, 0x41546b11c20c3}, T2d: radix51.FieldElement{0x32d509334b3b4, 0x16c102cae70aa, 0x1720dd51bf445, 0x5ae662faf9821, 0x412295a2b87fa}}, AffineCached{YplusX: radix51.FieldElement{0x55261e293eac6, 0x6426759b65cc, 0x40265ae116a48, 0x6c02304bae5bc, 0x760bb8d195ad}, YminusX: radix51.FieldElement{0x19b88f57ed6e9, 0x4cdbf1904a339, 0x42b49cd4e4f2c, 0x71a2e771909d9, 0x14e153ebb52d2}, T2d: radix51.FieldElement{0x61a17cde6818a, 0x53dad34108827, 0x32b32c55c55b6, 0x2f9165f9347a3, 0x6b34be9bc33ac}}, AffineCached{YplusX: radix51.FieldElement{0x469656571f2d3, 0xaa61ce6f423f, 0x3f940d71b27a1, 0x185f19d73d16a, 0x1b9c7b62e6dd}, YminusX: radix51.FieldElement{0x72f643a78c0b2, 0x3de45c04f9e7b, 0x706d68d30fa5c, 0x696f63e8e2f24, 0x2012c18f0922d}, T2d: radix51.FieldElement{0x355e55ac89d29, 0x3e8b414ec7101, 0x39db07c520c90, 0x6f41e9b77efe1, 0x8af5b784e4ba}}, AffineCached{YplusX: radix51.FieldElement{0x314d289cc2c4b, 0x23450e2f1bc4e, 0xcd93392f92f4, 0x1370c6a946b7d, 0x6423c1d5afd98}, YminusX: radix51.FieldElement{0x499dc881f2533, 0x34ef26476c506, 0x4d107d2741497, 0x346c4bd6efdb3, 0x32b79d71163a1}, T2d: radix51.FieldElement{0x5f8d9edfcb36a, 0x1e6e8dcbf3990, 0x7974f348af30a, 0x6e6724ef19c7c, 0x480a5efbc13e2}}, AffineCached{YplusX: radix51.FieldElement{0x14ce442ce221f, 0x18980a72516cc, 0x72f80db86677, 0x703331fda526e, 0x24b31d47691c8}, YminusX: radix51.FieldElement{0x1e70b01622071, 0x1f163b5f8a16a, 0x56aaf341ad417, 0x7989635d830f7, 0x47aa27600cb7b}, T2d: radix51.FieldElement{0x41eedc015f8c3, 0x7cf8d27ef854a, 0x289e3584693f9, 0x4a7857b309a7, 0x545b585d14dda}}, AffineCached{YplusX: radix51.FieldElement{0x4e4d0e3b321e1, 0x7451fe3d2ac40, 0x666f678eea98d, 0x38858667fead, 0x4d22dc3e64c8d}, YminusX: radix51.FieldElement{0x7275ea0d43a0f, 0x681137dd7ccf7, 0x1e79cbab79a38, 0x22a214489a66a, 0xf62f9c332ba5}, T2d: radix51.FieldElement{0x46589d63b5f39, 0x7eaf979ec3f96, 0x4ebe81572b9a8, 0x21b7f5d61694a, 0x1c0fa01a36371}}}}, AffineLookupTable{points: [8]AffineCached{AffineCached{YplusX: radix51.FieldElement{0x2b0e8c936a50, 0x6b83b58b6cd21, 0x37ed8d3e72680, 0xa037db9f2a62, 0x4005419b1d2bc}, YminusX: radix51.FieldElement{0x604b622943dff, 0x1c899f6741a58, 0x60219e2f232fb, 0x35fae92a7f9cb, 0xfa3614f3b1ca}, T2d: radix51.FieldElement{0x3febdb9be82f0, 0x5e74895921400, 0x553ea38822706, 0x5a17c24cfc88c, 0x1fba218aef40a}}, AffineCached{YplusX: radix51.FieldElement{0x657043e7b0194, 0x5c11b55efe9e7, 0x7737bc6a074fb, 0xeae41ce355cc, 0x6c535d13ff776}, YminusX: radix51.FieldElement{0x49448fac8f53e, 0x34f74c6e8356a, 0xad780607dba2, 0x7213a7eb63eb6, 0x392e3acaa8c86}, T2d: radix51.FieldElement{0x534e93e8a35af, 0x8b10fd02c997, 0x26ac2acb81e05, 0x9d8c98ce3b79, 0x25e17fe4d50ac}}, AffineCached{YplusX: radix51.FieldElement{0x77ff576f121a7, 0x4e5f9b0fc722b, 0x46f949b0d28c8, 0x4cde65d17ef26, 0x6bba828f89698}, YminusX: radix51.FieldElement{0x9bd71e04f676, 0x25ac841f2a145, 0x1a47eac823871, 0x1a8a8c36c581a, 0x255751442a9fb}, T2d: radix51.FieldElement{0x1bc6690fe3901, 0x314132f5abc5a, 0x611835132d528, 0x5f24b8eb48a57, 0x559d504f7f6b7}}, AffineCached{YplusX: radix51.FieldElement{0x91e7f6d266fd, 0x36060ef037389, 0x18788ec1d1286, 0x287441c478eb0, 0x123ea6a3354bd}, YminusX: radix51.FieldElement{0x38378b3eb54d5, 0x4d4aaa78f94ee, 0x4a002e875a74d, 0x10b851367b17c, 0x1ab12d5807e3}, T2d: radix51.FieldElement{0x5189041e32d96, 0x5b062b090231, 0xc91766e7b78f, 0xaa0f55a138ec, 0x4a3961e2c918a}}, AffineCached{YplusX: radix51.FieldElement{0x7d644f3233f1e, 0x1c69f9e02c064, 0x36ae5e5266898, 0x8fc1dad38b79, 0x68aceead9bd41}, YminusX: radix51.FieldElement{0x43be0f8e6bba0, 0x68fdffc614e3b, 0x4e91dab5b3be0, 0x3b1d4c9212ff0, 0x2cd6bce3fb1db}, T2d: radix51.FieldElement{0x4c90ef3d7c210, 0x496f5a0818716, 0x79cf88cc239b8, 0x2cb9c306cf8db, 0x595760d5b508f}}, AffineCached{YplusX: radix51.FieldElement{0x2cbebfd022790, 0xb8822aec1105, 0x4d1cfd226bccc, 0x515b2fa4971be, 0x2cb2c5df54515}, YminusX: radix51.FieldElement{0x1bfe104aa6397, 0x11494ff996c25, 0x64251623e5800, 0xd49fc5e044be, 0x709fa43edcb29}, T2d: radix51.FieldElement{0x25d8c63fd2aca, 0x4c5cd29dffd61, 0x32ec0eb48af05, 0x18f9391f9b77c, 0x70f029ecf0c81}}, AffineCached{YplusX: radix51.FieldElement{0x2afaa5e10b0b9, 0x61de08355254d, 0xeb587de3c28d, 0x4f0bb9f7dbbd5, 0x44eca5a2a74bd}, YminusX: radix51.FieldElement{0x307b32eed3e33, 0x6748ab03ce8c2, 0x57c0d9ab810bc, 0x42c64a224e98c, 0xb7d5d8a6c314}, T2d: radix51.FieldElement{0x448327b95d543, 0x146681e3a4ba, 0x38714adc34e0c, 0x4f26f0e298e30, 0x272224512c7de}}, AffineCached{YplusX: radix51.FieldElement{0x3bb8a42a975fc, 0x6f2d5b46b17ef, 0x7b6a9223170e5, 0x53713fe3b7e6, 0x19735fd7f6bc2}, YminusX: radix51.FieldElement{0x492af49c5342e, 0x2365cdf5a0357, 0x32138a7ffbb60, 0x2a1f7d14646fe, 0x11b5df18a44cc}, T2d: radix51.FieldElement{0x390d042c84266, 0x1efe32a8fdc75, 0x6925ee7ae1238, 0x4af9281d0e832, 0xfef911191df8}}}}, } + basepointNafTable = NafLookupTable8{points: [64]AffineCached{AffineCached{YplusX: radix51.FieldElement{0x493c6f58c3b85, 0xdf7181c325f7, 0xf50b0b3e4cb7, 0x5329385a44c32, 0x7cf9d3a33d4b}, YminusX: radix51.FieldElement{0x3905d740913e, 0xba2817d673a2, 0x23e2827f4e67c, 0x133d2e0c21a34, 0x44fd2f9298f81}, T2d: radix51.FieldElement{0x11205877aaa68, 0x479955893d579, 0x50d66309b67a0, 0x2d42d0dbee5ee, 0x6f117b689f0c6}}, AffineCached{YplusX: radix51.FieldElement{0x5b0a84cee9730, 0x61d10c97155e4, 0x4059cc8096a10, 0x47a608da8014f, 0x7a164e1b9a80f}, YminusX: radix51.FieldElement{0x11fe8a4fcd265, 0x7bcb8374faacc, 0x52f5af4ef4d4f, 0x5314098f98d10, 0x2ab91587555bd}, T2d: radix51.FieldElement{0x6933f0dd0d889, 0x44386bb4c4295, 0x3cb6d3162508c, 0x26368b872a2c6, 0x5a2826af12b9b}}, AffineCached{YplusX: radix51.FieldElement{0x2bc4408a5bb33, 0x78ebdda05442, 0x2ffb112354123, 0x375ee8df5862d, 0x2945ccf146e20}, YminusX: radix51.FieldElement{0x182c3a447d6ba, 0x22964e536eff2, 0x192821f540053, 0x2f9f19e788e5c, 0x154a7e73eb1b5}, T2d: radix51.FieldElement{0x3dbf1812a8285, 0xfa17ba3f9797, 0x6f69cb49c3820, 0x34d5a0db3858d, 0x43aabe696b3bb}}, AffineCached{YplusX: radix51.FieldElement{0x25cd0944ea3bf, 0x75673b81a4d63, 0x150b925d1c0d4, 0x13f38d9294114, 0x461bea69283c9}, YminusX: radix51.FieldElement{0x72c9aaa3221b1, 0x267774474f74d, 0x64b0e9b28085, 0x3f04ef53b27c9, 0x1d6edd5d2e531}, T2d: radix51.FieldElement{0x36dc801b8b3a2, 0xe0a7d4935e30, 0x1deb7cecc0d7d, 0x53a94e20dd2c, 0x7a9fbb1c6a0f9}}, AffineCached{YplusX: radix51.FieldElement{0x6678aa6a8632f, 0x5ea3788d8b365, 0x21bd6d6994279, 0x7ace75919e4e3, 0x34b9ed338add7}, YminusX: radix51.FieldElement{0x6217e039d8064, 0x6dea408337e6d, 0x57ac112628206, 0x647cb65e30473, 0x49c05a51fadc9}, T2d: radix51.FieldElement{0x4e8bf9045af1b, 0x514e33a45e0d6, 0x7533c5b8bfe0f, 0x583557b7e14c9, 0x73c172021b008}}, AffineCached{YplusX: radix51.FieldElement{0x700848a802ade, 0x1e04605c4e5f7, 0x5c0d01b9767fb, 0x7d7889f42388b, 0x4275aae2546d8}, YminusX: radix51.FieldElement{0x75b0249864348, 0x52ee11070262b, 0x237ae54fb5acd, 0x3bfd1d03aaab5, 0x18ab598029d5c}, T2d: radix51.FieldElement{0x32cc5fd6089e9, 0x426505c949b05, 0x46a18880c7ad2, 0x4a4221888ccda, 0x3dc65522b53df}}, AffineCached{YplusX: radix51.FieldElement{0xc222a2007f6d, 0x356b79bdb77ee, 0x41ee81efe12ce, 0x120a9bd07097d, 0x234fd7eec346f}, YminusX: radix51.FieldElement{0x7013b327fbf93, 0x1336eeded6a0d, 0x2b565a2bbf3af, 0x253ce89591955, 0x267882d17602}, T2d: radix51.FieldElement{0xa119732ea378, 0x63bf1ba8e2a6c, 0x69f94cc90df9a, 0x431d1779bfc48, 0x497ba6fdaa097}}, AffineCached{YplusX: radix51.FieldElement{0x6cc0313cfeaa0, 0x1a313848da499, 0x7cb534219230a, 0x39596dedefd60, 0x61e22917f12de}, YminusX: radix51.FieldElement{0x3cd86468ccf0b, 0x48553221ac081, 0x6c9464b4e0a6e, 0x75fba84180403, 0x43b5cd4218d05}, T2d: radix51.FieldElement{0x2762f9bd0b516, 0x1c6e7fbddcbb3, 0x75909c3ace2bd, 0x42101972d3ec9, 0x511d61210ae4d}}, AffineCached{YplusX: radix51.FieldElement{0x676ef950e9d81, 0x1b81ae089f258, 0x63c4922951883, 0x2f1d54d9b3237, 0x6d325924ddb85}, YminusX: radix51.FieldElement{0x386484420de87, 0x2d6b25db68102, 0x650b4962873c0, 0x4081cfd271394, 0x71a7fe6fe2482}, T2d: radix51.FieldElement{0x182b8a5c8c854, 0x73fcbe5406d8e, 0x5de3430cff451, 0x554b967ac8c41, 0x4746c4b6559ee}}, AffineCached{YplusX: radix51.FieldElement{0x77b3c6dc69a2b, 0x4edf13ec2fa6e, 0x4e85ad77beac8, 0x7dba2b28e7bda, 0x5c9a51de34fe9}, YminusX: radix51.FieldElement{0x546c864741147, 0x3a1df99092690, 0x1ca8cc9f4d6bb, 0x36b7fc9cd3b03, 0x219663497db5e}, T2d: radix51.FieldElement{0xf1cf79f10e67, 0x43ccb0a2b7ea2, 0x5089dfff776a, 0x1dd84e1d38b88, 0x4804503c60822}}, AffineCached{YplusX: radix51.FieldElement{0x49ed02ca37fc7, 0x474c2b5957884, 0x5b8388e816683, 0x4b6c454b76be4, 0x553398a516506}, YminusX: radix51.FieldElement{0x21d23a36d175, 0x4fd3373c6476d, 0x20e291eeed02a, 0x62f2ecf2e7210, 0x771e098858de4}, T2d: radix51.FieldElement{0x2f5d278451edf, 0x730b133997342, 0x6965420eb6975, 0x308a3bfa516cf, 0x5a5ed1d68ff5a}}, AffineCached{YplusX: radix51.FieldElement{0x5122afe150e83, 0x4afc966bb0232, 0x1c478833c8268, 0x17839c3fc148f, 0x44acb897d8bf9}, YminusX: radix51.FieldElement{0x5e0c558527359, 0x3395b73afd75c, 0x72afa4e4b970, 0x62214329e0f6d, 0x19b60135fefd}, T2d: radix51.FieldElement{0x68145e134b83, 0x1e4860982c3cc, 0x68fb5f13d799, 0x7c9283744547e, 0x150c49fde6ad2}}, AffineCached{YplusX: radix51.FieldElement{0x3f29509471138, 0x729eeb4ca31cf, 0x69c22b575bfbc, 0x4910857bce212, 0x6b2b5a075bb99}, YminusX: radix51.FieldElement{0x1863c9cdca868, 0x3770e295a1709, 0xd85a3720fd13, 0x5e0ff1f71ab06, 0x78a6d7791e05f}, T2d: radix51.FieldElement{0x7704b47a0b976, 0x2ae82e91aab17, 0x50bd6429806cd, 0x68055158fd8ea, 0x725c7ffc4ad55}}, AffineCached{YplusX: radix51.FieldElement{0x26715d1cf99b2, 0x2205441a69c88, 0x448427dcd4b54, 0x1d191e88abdc5, 0x794cc9277cb1f}, YminusX: radix51.FieldElement{0x2bf71cd098c0, 0x49dabcc6cd230, 0x40a6533f905b2, 0x573efac2eb8a4, 0x4cd54625f855f}, T2d: radix51.FieldElement{0x6c426c2ac5053, 0x5a65ece4b095e, 0xc44086f26bb6, 0x7429568197885, 0x7008357b6fcc8}}, AffineCached{YplusX: radix51.FieldElement{0x672738773f01, 0x752bf799f6171, 0x6b4a6dae33323, 0x7b54696ead1dc, 0x6ef7e9851ad0}, YminusX: radix51.FieldElement{0x39fbb82584a34, 0x47a568f257a03, 0x14d88091ead91, 0x2145b18b1ce24, 0x13a92a3669d6d}, T2d: radix51.FieldElement{0x3771cc0577de5, 0x3ca06bb8b9952, 0xb81c5d50390, 0x43512340780ec, 0x3c296ddf8a2af}}, AffineCached{YplusX: radix51.FieldElement{0x515f9d914a713, 0x73191ff2255d5, 0x54f5cc2a4bdef, 0x3dd57fc118bcf, 0x7a99d393490c7}, YminusX: radix51.FieldElement{0x34d2ebb1f2541, 0xe815b723ff9d, 0x286b416e25443, 0xbdfe38d1bee8, 0xa892c7007477}, T2d: radix51.FieldElement{0x2ed2436bda3e8, 0x2afd00f291ea, 0xbe7381dea321, 0x3e952d4b2b193, 0x286762d28302f}}, AffineCached{YplusX: radix51.FieldElement{0x36093ce35b25, 0x3b64d7552e9cf, 0x71ee0fe0b8460, 0x69d0660c969e5, 0x32f1da046a9d9}, YminusX: radix51.FieldElement{0x58e2bce2ef5bd, 0x68ce8f78c6f8a, 0x6ee26e39261b2, 0x33d0aa50bcf9d, 0x7686f2a3d6f17}, T2d: radix51.FieldElement{0x512a66d597c6a, 0x609a70a57551, 0x26c08a3c464c, 0x4531fc8ee39e1, 0x561305f8a9ad2}}, AffineCached{YplusX: radix51.FieldElement{0x4978dec92aed1, 0x69adae7ca201, 0x11ee923290f55, 0x69641898d916c, 0xaaec53e35d4}, YminusX: radix51.FieldElement{0x2cc28e7b0c0d5, 0x77b60eb8a6ce4, 0x4042985c277a6, 0x636657b46d3eb, 0x30a1aef2c57c}, T2d: radix51.FieldElement{0x1f773003ad2aa, 0x5642cc10f76, 0x3b48f82cfca6, 0x2403c10ee4329, 0x20be9c1c24065}}, AffineCached{YplusX: radix51.FieldElement{0x387d8249673a6, 0x5bea8dc927c2a, 0x5bd8ed5650ef0, 0xef0e3fcd40e1, 0x750ab3361f0ac}, YminusX: radix51.FieldElement{0xe44ae2025e60, 0x5f97b9727041c, 0x5683472c0ecec, 0x188882eb1ce7c, 0x69764c545067e}, T2d: radix51.FieldElement{0x23283a2f81037, 0x477aff97e23d1, 0xb8958dbcbb68, 0x205b97e8add6, 0x54f96b3fb7075}}, AffineCached{YplusX: radix51.FieldElement{0x5f20429669279, 0x8fafae4941f5, 0x15d83c4eb7688, 0x1cf379eca4146, 0x3d7fe9c52bb75}, YminusX: radix51.FieldElement{0x5afc616b11ecd, 0x39f4aec8f22ef, 0x3b39e1625d92e, 0x5f85bd4508873, 0x78e6839fbe85d}, T2d: radix51.FieldElement{0x32df737b8856b, 0x608342f14e06, 0x3967889d74175, 0x1211907fba550, 0x70f268f350088}}, AffineCached{YplusX: radix51.FieldElement{0x64583b1805f47, 0x22c1baf832cd0, 0x132c01bd4d717, 0x4ecf4c3a75b8f, 0x7c0d345cfad88}, YminusX: radix51.FieldElement{0x4112070dcf355, 0x7dcff9c22e464, 0x54ada60e03325, 0x25cd98eef769a, 0x404e56c039b8c}, T2d: radix51.FieldElement{0x71f4b8c78338a, 0x62cfc16bc2b23, 0x17cf51280d9aa, 0x3bbae5e20a95a, 0x20d754762aaec}}, AffineCached{YplusX: radix51.FieldElement{0x7c36fc73bb758, 0x4a6c797734bd1, 0xef248ab3950e, 0x63154c9a53ec8, 0x2b8f1e46f3cee}, YminusX: radix51.FieldElement{0x4feb135b9f543, 0x63bd192ad93ae, 0x44e2ea612cdf7, 0x670f4991583ab, 0x38b8ada8790b4}, T2d: radix51.FieldElement{0x4a9cdf51f95d, 0x5d963fbd596b8, 0x22d9b68ace54a, 0x4a98e8836c599, 0x49aeb32ceba1}}, AffineCached{YplusX: radix51.FieldElement{0x7d0b75fc7931, 0x16f4ce4ba754a, 0x5ace4c03fbe49, 0x27e0ec12a159c, 0x795ee17530f67}, YminusX: radix51.FieldElement{0x67d3c63dcfe7e, 0x112f0adc81aee, 0x53df04c827165, 0x2fe5b33b430f0, 0x51c665e0c8d62}, T2d: radix51.FieldElement{0x25b0a52ecbd81, 0x5dc0695fce4a9, 0x3b928c575047d, 0x23bf3512686e5, 0x6cd19bf49dc54}}, AffineCached{YplusX: radix51.FieldElement{0x6612165afc386, 0x1171aa36203ff, 0x2642ea820a8aa, 0x1f3bb7b313f10, 0x5e01b3a7429e4}, YminusX: radix51.FieldElement{0x7619052179ca3, 0xc16593f0afd0, 0x265c4795c7428, 0x31c40515d5442, 0x7520f3db40b2e}, T2d: radix51.FieldElement{0x50be3d39357a1, 0x3ab33d294a7b6, 0x4c479ba59edb3, 0x4c30d184d326f, 0x71092c9ccef3c}}, AffineCached{YplusX: radix51.FieldElement{0x3d8ac74051dcf, 0x10ab6f543d0ad, 0x5d0f3ac0fda90, 0x5ef1d2573e5e4, 0x4173a5bb7137a}, YminusX: radix51.FieldElement{0x523f0364918c, 0x687f56d638a7b, 0x20796928ad013, 0x5d38405a54f33, 0xea15b03d0257}, T2d: radix51.FieldElement{0x56e31f0f9218a, 0x5635f88e102f8, 0x2cbc5d969a5b8, 0x533fbc98b347a, 0x5fc565614a4e3}}, AffineCached{YplusX: radix51.FieldElement{0x2e1e67790988e, 0x1e38b9ae44912, 0x648fbb4075654, 0x28df1d840cd72, 0x3214c7409d466}, YminusX: radix51.FieldElement{0x6570dc46d7ae5, 0x18a9f1b91e26d, 0x436b6183f42ab, 0x550acaa4f8198, 0x62711c414c454}, T2d: radix51.FieldElement{0x1827406651770, 0x4d144f286c265, 0x17488f0ee9281, 0x19e6cdb5c760c, 0x5bea94073ecb8}}, AffineCached{YplusX: radix51.FieldElement{0xce63f343d2f8, 0x1e0a87d1e368e, 0x45edbc019eea, 0x6979aed28d0d1, 0x4ad0785944f1b}, YminusX: radix51.FieldElement{0x5bf0912c89be4, 0x62fadcaf38c83, 0x25ec196b3ce2c, 0x77655ff4f017b, 0x3aacd5c148f61}, T2d: radix51.FieldElement{0x63b34c3318301, 0xe0e62d04d0b1, 0x676a233726701, 0x29e9a042d9769, 0x3aff0cb1d9028}}, AffineCached{YplusX: radix51.FieldElement{0x6430bf4c53505, 0x264c3e4507244, 0x74c9f19a39270, 0x73f84f799bc47, 0x2ccf9f732bd99}, YminusX: radix51.FieldElement{0x5c7eb3a20405e, 0x5fdb5aad930f8, 0x4a757e63b8c47, 0x28e9492972456, 0x110e7e86f4cd2}, T2d: radix51.FieldElement{0xd89ed603f5e4, 0x51e1604018af8, 0xb8eedc4a2218, 0x51ba98b9384d0, 0x5c557e0b9693}}, AffineCached{YplusX: radix51.FieldElement{0x6bbb089c20eb0, 0x6df41fb0b9eee, 0x51087ed87e16f, 0x102db5c9fa731, 0x289fef0841861}, YminusX: radix51.FieldElement{0x1ce311fc97e6f, 0x6023f3fb5db1f, 0x7b49775e8fc98, 0x3ad70adbf5045, 0x6e154c178fe98}, T2d: radix51.FieldElement{0x16336fed69abf, 0x4f066b929f9ec, 0x4e9ff9e6c5b93, 0x18c89bc4bb2ba, 0x6afbf642a95ca}}, AffineCached{YplusX: radix51.FieldElement{0x55070f913a8cc, 0x765619eac2bbc, 0x3ab5225f47459, 0x76ced14ab5b48, 0x12c093cedb801}, YminusX: radix51.FieldElement{0xde0c62f5d2c1, 0x49601cf734fb5, 0x6b5c38263f0f6, 0x4623ef5b56d06, 0xdb4b851b9503}, T2d: radix51.FieldElement{0x47f9308b8190f, 0x414235c621f82, 0x31f5ff41a5a76, 0x6736773aab96d, 0x33aa8799c6635}}, AffineCached{YplusX: radix51.FieldElement{0xf588fc156cb1, 0x363414da4f069, 0x7296ad9b68aea, 0x4d3711316ae43, 0x212cd0c1c8d58}, YminusX: radix51.FieldElement{0x7f51ebd085cf2, 0x12cfa67e3f5e1, 0x1800cf1e3d46a, 0x54337615ff0a8, 0x233c6f29e8e21}, T2d: radix51.FieldElement{0x4d5107f18c781, 0x64a4fd3a51a5e, 0x4f4cd0448bb37, 0x671d38543151e, 0x1db7778911914}}, AffineCached{YplusX: radix51.FieldElement{0x14769dd701ab6, 0x28339f1b4b667, 0x4ab214b8ae37b, 0x25f0aefa0b0fe, 0x7ae2ca8a017d2}, YminusX: radix51.FieldElement{0x352397c6bc26f, 0x18a7aa0227bbe, 0x5e68cc1ea5f8b, 0x6fe3e3a7a1d5f, 0x31ad97ad26e2a}, T2d: radix51.FieldElement{0x17ed0920b962, 0x187e33b53b6fd, 0x55829907a1463, 0x641f248e0a792, 0x1ed1fc53a6622}}, AffineCached{YplusX: radix51.FieldElement{0x642a61c092d2d, 0x31937e711d17f, 0x4dc4bedcd4122, 0x2569f0c8b3ddf, 0x503d664a57aa2}, YminusX: radix51.FieldElement{0x1e98e4d89f26e, 0x510ae16fcfe97, 0x2171172ce0b7c, 0x55191edbf3682, 0x5b12b36f28bc0}, T2d: radix51.FieldElement{0x3395b90a91537, 0x6f9e6fcbe5943, 0x23a2feae6ea0f, 0x4718c95011f06, 0x36906685e9a1f}}, AffineCached{YplusX: radix51.FieldElement{0x4be3c4fd8781d, 0x242716afc8a89, 0x16cf4e4bf3c77, 0x1d2f593f7325f, 0x355dccf04805c}, YminusX: radix51.FieldElement{0x10dd8b8699e48, 0x7463aeb8f8d63, 0x760856e91c033, 0xcf2b008ee055, 0x5b1112708474b}, T2d: radix51.FieldElement{0x5984dcb3c75db, 0x4eafecacff977, 0x16606587ed97b, 0x7b2d89c5ac45b, 0x584587b225ae4}}, AffineCached{YplusX: radix51.FieldElement{0x5c10f66a67ed6, 0x5997232f8890a, 0x2c8862e13ad85, 0x62a45a7ffe9c0, 0x5e27ba4b982a}, YminusX: radix51.FieldElement{0x3a363f12f57a6, 0x36677857dc672, 0x6016edd50d745, 0x777eda40c0454, 0x3d8918fb87d11}, T2d: radix51.FieldElement{0x6a67d1e5a864d, 0x61bc54210c7e0, 0x5a0ab3f96bab6, 0x2ed35b0884775, 0x7f8f3424d64a5}}, AffineCached{YplusX: radix51.FieldElement{0x24807b24886af, 0x3d8885fbc4f63, 0x115953e5523b4, 0x132d7a918d23d, 0x7e755cba0310f}, YminusX: radix51.FieldElement{0x6293624794ed1, 0xed1e1ed161da, 0x8ef30fb86fc3, 0x362557eff0b67, 0xcaa7059c3235}, T2d: radix51.FieldElement{0x44f52761a3023, 0x104d2decd135f, 0x791656699386a, 0x11871237a067e, 0x4536c2aee70b3}}, AffineCached{YplusX: radix51.FieldElement{0x3eff321ccb9c3, 0x68ca42af7119c, 0x58c5a2e68e2fd, 0x3d9ee302ff687, 0x6a15d0f5ca449}, YminusX: radix51.FieldElement{0x1a302599db7fa, 0x6fe05f844dc03, 0x1c40635bad39c, 0x238ff0dfc297f, 0x7bbdf8041ba47}, T2d: radix51.FieldElement{0x5e1f109bfa8d5, 0x73c44389e11c1, 0x25e21637093ab, 0x5bd7d979ccd1b, 0x55c206d4035cd}}, AffineCached{YplusX: radix51.FieldElement{0x7faad90de7625, 0x3c286391c6144, 0x529672e089f46, 0x61287ccedae10, 0x5cd6b3922ee71}, YminusX: radix51.FieldElement{0x38159b8443d37, 0x55ad9ec9f2e2a, 0x47a7bf00acf6d, 0x75c2cce0a6006, 0x278fc8bcd74e9}, T2d: radix51.FieldElement{0x4a994d633ebc7, 0x5cf46f4f7de07, 0x33450af844449, 0x21429fa184f70, 0x468615291ab88}}, AffineCached{YplusX: radix51.FieldElement{0x3851d54ceb6f, 0x559bfad6ce588, 0x389e4afb488a7, 0x242fa5690a98c, 0x5523e2f353889}, YminusX: radix51.FieldElement{0x1099c54a5efd2, 0x41e0af3f2ee34, 0x753ef3fd7141a, 0x6e9ee0c59c789, 0x636db66a5894e}, T2d: radix51.FieldElement{0x2536e7bd0d4de, 0x56cb47e3c535f, 0x72130d43d8496, 0x7cc447ad13e59, 0x5288cf65559b0}}, AffineCached{YplusX: radix51.FieldElement{0x2b629f0d9881c, 0x27caae1ce21f2, 0x12eebeff2c7ec, 0xe92ff727c4a4, 0x12c70c85f4524}, YminusX: radix51.FieldElement{0x5c8c50a97289b, 0x75d502547f652, 0x5da24a563faae, 0x30a36eb796307, 0x63f01b555a964}, T2d: radix51.FieldElement{0x5bda5e538767f, 0xfa612c198d48, 0x354cd4580a64c, 0x4aa9e49cfb4ea, 0x437165416ab62}}, AffineCached{YplusX: radix51.FieldElement{0x5b1fbddfdad86, 0x75c96cef1bc3a, 0x603747eb606fe, 0xdbb5bc0c8ccc, 0x46fe985f1b972}, YminusX: radix51.FieldElement{0xa2836e64b9a, 0x21e92a74e2c26, 0x7cd91d540da93, 0x11e423291a7a3, 0x3ea46dc72c2dd}, T2d: radix51.FieldElement{0x5018588e2dfa7, 0x3fa0ebdd53fe, 0x271d3959ce7d0, 0x4a735072f4bec, 0x88b0ca7df432}}, AffineCached{YplusX: radix51.FieldElement{0x70e54fefe6cc0, 0x2751ca3b2820c, 0x4d68f7c3aee75, 0x449fd4f8711fa, 0x3c755700af5ee}, YminusX: radix51.FieldElement{0x445337c54aa9d, 0x7cfc86df9a4c8, 0x4466d61db423a, 0x1bcf6c7d0eb4a, 0x7d5b0546110e1}, T2d: radix51.FieldElement{0x73a96d7c70596, 0x7615f603e6f13, 0x87035eabe3f9, 0x556b20b23346a, 0x1ae5c564b3a77}}, AffineCached{YplusX: radix51.FieldElement{0x1ad4c0302594b, 0x28f8d4b709b41, 0x2178a904fef9b, 0x331a28073e004, 0x201a641198d92}, YminusX: radix51.FieldElement{0xe6863e708d5b, 0x9914b654bfb1, 0x1d176412796b7, 0x3c307983e740f, 0x5d9cf1e818af1}, T2d: radix51.FieldElement{0x21d3be2a1592b, 0x54c571883eb7b, 0x109312caf6eaa, 0x5932abca49e6e, 0x3aa0a0c361fe0}}, AffineCached{YplusX: radix51.FieldElement{0x45fe508dff693, 0x56cc1f071b283, 0x1de95131f404a, 0x1a0239374eeae, 0x3e6190f708b20}, YminusX: radix51.FieldElement{0x46e21e149ef2e, 0x4a00ce2d20cf, 0x1e2ccc2338304, 0x94d8553aae4f, 0x6ee309f230d1a}, T2d: radix51.FieldElement{0xae32ac67b877, 0x1ea8fd8412729, 0x3a126b5e8888a, 0x3a5b0ba127bd8, 0x64cde98364f1d}}, AffineCached{YplusX: radix51.FieldElement{0x6b982b66c4ffa, 0x218c3e0b9085f, 0x654ec3ee2d06c, 0x396913cabc3, 0x19767cc144203}, YminusX: radix51.FieldElement{0x7d6e4071f6450, 0x1f7c3ea3ee4e1, 0xa53ecdf4e3da, 0x418c2797ed200, 0x2c41a80e5b453}, T2d: radix51.FieldElement{0x60fe08e9dc54b, 0x6b2f1c309a0b7, 0x3293b11cbbbbc, 0x1f4578658a7ed, 0x393bc7b77c81c}}, AffineCached{YplusX: radix51.FieldElement{0x367a868cd8c15, 0x74719add93627, 0x4174ad15a144f, 0x34b3df65cfb24, 0x6ebb5599ac3d3}, YminusX: radix51.FieldElement{0x38645b73f4755, 0x1b10773615d37, 0x70305ea7d72d4, 0x731fbdc8a9de2, 0x7c0cebbd0ca4e}, T2d: radix51.FieldElement{0x4c5da306059bd, 0x4acefccbf4853, 0x6b25a6c99b7af, 0x6461833026867, 0x7cead1176a994}}, AffineCached{YplusX: radix51.FieldElement{0x31e08c64de622, 0x7af71922a0c43, 0x6c048211cacec, 0x56e6e9b5b0e13, 0x7b816374fe4d0}, YminusX: radix51.FieldElement{0x64cdb68564783, 0x3acd825866df, 0x4bb8f4c4cca1d, 0x2a8bfe5c9f091, 0x32e73d7c414d7}, T2d: radix51.FieldElement{0x71bc104113fcc, 0x1f1194e6b0a52, 0x17e905170f1f4, 0xb1c793ce3aeb, 0x6f56ae3ce96f0}}, AffineCached{YplusX: radix51.FieldElement{0x2a3e186f6b4b9, 0x41e64af26a8ef, 0x134dafe05997e, 0x74a2b9edc733, 0x2bcbc96fc92ab}, YminusX: radix51.FieldElement{0x96ed8c1e9273, 0x68c2dacbaba7, 0x3cbdc9b7e4dad, 0x68bcdc69bd16a, 0x6ff27a9feafb3}, T2d: radix51.FieldElement{0x1f73e611f6329, 0xd51039c82d81, 0x1b8b0d7c0cec5, 0x466a870023ad2, 0x72b5a5b6de284}}, AffineCached{YplusX: radix51.FieldElement{0x12c4628a337c3, 0x46c67f460e78e, 0x490e5de68725e, 0x68435d2018c42, 0x3485a7aa6fde7}, YminusX: radix51.FieldElement{0x69774ed68e720, 0x3297de2957e26, 0x6450077e37426, 0xb3fe28b59cae, 0x61aa1160d97b7}, T2d: radix51.FieldElement{0x48a7b7f55128e, 0x6bab0c5b2e4a6, 0x3822130dd2f2d, 0xa159b9f678b4, 0x2c6ce0503ee8d}}, AffineCached{YplusX: radix51.FieldElement{0x717e676469b1a, 0x43c043c63d129, 0x44a290cd033b3, 0x1d3877054dc01, 0xf8c2b5378339}, YminusX: radix51.FieldElement{0x2dfb19c632889, 0x38525489e51b0, 0x3da48697a5b33, 0x3d4f27772b64d, 0xe77ad1d92649}, T2d: radix51.FieldElement{0x2301df2db5c75, 0x21501a33bc5e3, 0x276b53f750382, 0x6fabc7001775c, 0x4cc1e54c7258d}}, AffineCached{YplusX: radix51.FieldElement{0x3e1d86b3ae19c, 0x28f3017a71713, 0xd04fe40c7a9e, 0x73bc322e1cfff, 0x7294f2237a32d}, YminusX: radix51.FieldElement{0x4c0667543638e, 0x70c89c91f7e7f, 0x2a6ed9bd0987d, 0x1727ae4d753a0, 0x62ef3fdce7514}, T2d: radix51.FieldElement{0x8017f77d3efd, 0x3c70d3e486dcb, 0x409977a7b4776, 0x1525ed4e71ba7, 0x1928c87d15666}}, AffineCached{YplusX: radix51.FieldElement{0x47d566087229, 0x156b2eb18c947, 0x738a46cb6a68b, 0x54a2baad4303a, 0x4ae0ec1d4499f}, YminusX: radix51.FieldElement{0x4955ab57e2130, 0x7b2c89ebea361, 0x2f4b265bfadfe, 0x31821023a7684, 0x77db41774458f}, T2d: radix51.FieldElement{0x6cb9ba2be7da7, 0x3019c0fbab07a, 0x742ff1219ac76, 0x387575fd24bc9, 0x17f1b3461da31}}, AffineCached{YplusX: radix51.FieldElement{0x16b3d036c2886, 0x1dc7c9cf34134, 0x105ec02eb1d75, 0x126d5e3ac73ca, 0x78a82c43f443d}, YminusX: radix51.FieldElement{0x4199b3403ce52, 0x34f6ce21cb1c9, 0x5da9cd4b28d84, 0x31368bb16bda2, 0x3d9b99a13ada9}, T2d: radix51.FieldElement{0x38112702675c4, 0x5688d28e9c0ad, 0x712b1ffbf44e7, 0x1c8229cd3ad7b, 0xb49208bd81bb}}, AffineCached{YplusX: radix51.FieldElement{0x550fb0a0d0782, 0x62dd31ddac07f, 0x4026023ab23b5, 0x22460b1c9cc37, 0x3e40a64da2d51}, YminusX: radix51.FieldElement{0x2dcb32d287241, 0x6b892b09826b7, 0x5a36039ecf45d, 0x290c3d6097e79, 0x157ee7b2e1f28}, T2d: radix51.FieldElement{0x5a52e9dca709f, 0x378e7ff97b2fe, 0x4b8fe54948b42, 0x75a0fadd77b78, 0x5a277115c55fb}}, AffineCached{YplusX: radix51.FieldElement{0xd921e5854c55, 0x70dfbc6364f68, 0x48b9b89cf1ec, 0x6b9f1b1b72827, 0xf4e191892dd3}, YminusX: radix51.FieldElement{0x23015328300cc, 0x7fab0f4f85562, 0x1b6e3c321fb1d, 0x777279c16beac, 0x4689b02ab17df}, T2d: radix51.FieldElement{0x51c12ec4132ed, 0x31b2456b7b877, 0x5c21e5387d181, 0x313c37a49ca2f, 0x3b2432ebc9edd}}, AffineCached{YplusX: radix51.FieldElement{0x899781c7d8ef, 0x10de7318502e0, 0xdb18be90ad68, 0x60da1115b11c, 0x361fd1330328d}, YminusX: radix51.FieldElement{0x6ccc2b78c2e59, 0x706382f92b777, 0x70258f43764dc, 0x5dcc6ff9a04f6, 0x6c55c1f2ab2db}, T2d: radix51.FieldElement{0x30c8165159986, 0x22ef8a1e89a45, 0x3e81112e25ce4, 0x24358acb40b6a, 0x3cd845a927b2c}}, AffineCached{YplusX: radix51.FieldElement{0x506d72c1951df, 0x4bd1f05fea25e, 0x6e39d7efa8cd, 0x156aab5585124, 0x45f998ac7247f}, YminusX: radix51.FieldElement{0x715addf6fd3b0, 0x7cf1aebd6e3a2, 0x391b7101c8a9, 0x56887ab35ab69, 0x36121e8a0da91}, T2d: radix51.FieldElement{0x30728c55d3ecd, 0x188cd2a66f481, 0x151333b5b850d, 0x18dffa3616ab9, 0x23b086cf066d5}}, AffineCached{YplusX: radix51.FieldElement{0x66080b4bdd58f, 0x130c6974631ac, 0x4b2f0e6f5f290, 0x30aa27f229a80, 0x16c5fa19014f1}, YminusX: radix51.FieldElement{0x35118ea05195e, 0x46f82d20b86d, 0x34a3ccac75145, 0x53a7519c28496, 0x1ebb5388c6e8}, T2d: radix51.FieldElement{0x5416ee772f53b, 0xb9739d12a1e8, 0x2581c43263fe3, 0x2857fe94e1ab, 0x4864ef1818473}}, AffineCached{YplusX: radix51.FieldElement{0x5a83a0bd0b830, 0x37723868519a1, 0x54fbd2193bae, 0x12873379f4d82, 0x26c03aed7f6bc}, YminusX: radix51.FieldElement{0x7c33297639ab3, 0x5640d1a71df02, 0x588f03cd11f1e, 0x7b62e6025c41d, 0x2a7adc0c34dba}, T2d: radix51.FieldElement{0x67a2f581c7dce, 0x40905352db2c3, 0x62690f0ea7a25, 0x3aa486ca53ddc, 0x78b5169959e1d}}, AffineCached{YplusX: radix51.FieldElement{0x4c85a5769cc40, 0x74ae9ba657f2b, 0x61aa0db9bfa54, 0xda0ee5c50b2a, 0x457ec0224bcd2}, YminusX: radix51.FieldElement{0x18254df5d180d, 0xff9d3a8ca21f, 0x239c47dd41854, 0x38493ab951aa4, 0x2314bc90371e}, T2d: radix51.FieldElement{0xaefe8f26908a, 0x3bf6aa75a6f3d, 0x2133be85aeecc, 0x524ddc5bc9b75, 0x79572c534fcf0}}, AffineCached{YplusX: radix51.FieldElement{0x34300e0749597, 0x4720c80988687, 0x22326917cdc98, 0x50e0a49fb55cb, 0x7890c0b6e7f19}, YminusX: radix51.FieldElement{0x5b23ca35b2d6f, 0x7572598372473, 0x65ba812ec2836, 0x79f82199bc406, 0x70ddf8d98b60e}, T2d: radix51.FieldElement{0x140b7fdd75dc4, 0x30b5f02d37e92, 0x2d212168ecc0e, 0x5515ac7118f6, 0x45769691e89a7}}, AffineCached{YplusX: radix51.FieldElement{0x63ddc5ba643ad, 0x33d37236d6721, 0x19e76422173fb, 0x63c45d73a082b, 0x2ec0f706b05c7}, YminusX: radix51.FieldElement{0x3e305345b2ddb, 0x6bd805d736a9c, 0x55785f51ea730, 0x6c10111aef7ee, 0x10b74232f01c1}, T2d: radix51.FieldElement{0x21694608f59d8, 0x3f7c7a18f9f87, 0x13851c22537b8, 0x353c8285b3715, 0x5d6fa9d25a3f4}}, AffineCached{YplusX: radix51.FieldElement{0x45afeb2a3a6dd, 0xf3be01ccb585, 0x27e72b699b3b4, 0x38e032665fb0c, 0x574fa41887c9e}, YminusX: radix51.FieldElement{0x74185e46e6cbb, 0x25e447ca48db, 0x5f49918a9a730, 0x4bd3cbffafbfa, 0x645e704f775f6}, T2d: radix51.FieldElement{0x529dade891efa, 0x5a245dcfb1925, 0x53854443ce9cf, 0x499791aacc114, 0x7420e574dcaab}}, AffineCached{YplusX: radix51.FieldElement{0x66e3f94234b1c, 0x4d36843821f07, 0x711529721ed87, 0x3aa2a599d849, 0x2ba60fa9c3cdc}, YminusX: radix51.FieldElement{0x6a138a034513c, 0x5e8df3a73beec, 0x51b92983f9880, 0x1e994571c80c6, 0x44ef4632b581b}, T2d: radix51.FieldElement{0x6491c21d364c9, 0x58ca44944b47a, 0x1c725d1768ee, 0x1e7ab7a88ece0, 0x7054899c44b5f}}}} )