From 9870ebd6cf94088fe399c44a60d9cc73c0001336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michele=20Orr=C3=B9?= Date: Mon, 11 Nov 2024 12:43:41 +0100 Subject: [PATCH] Add f64 and quickly check test vectors for a solinas prime. --- nimue-poseidon/Cargo.toml | 1 + nimue-poseidon/src/bn254.rs | 1 - nimue-poseidon/src/f64.rs | 1952 +++++++++++++++++++++++++++++++++++ nimue-poseidon/src/lib.rs | 4 + nimue-poseidon/src/tests.rs | 23 +- 5 files changed, 1978 insertions(+), 3 deletions(-) create mode 100644 nimue-poseidon/src/f64.rs diff --git a/nimue-poseidon/Cargo.toml b/nimue-poseidon/Cargo.toml index 1b35f97..8642ab2 100644 --- a/nimue-poseidon/Cargo.toml +++ b/nimue-poseidon/Cargo.toml @@ -17,6 +17,7 @@ ark-bls12-381 = "0.5.0" [features] bls12-381 = ["ark-bls12-381"] bn254 = ["ark-bn254"] +solinas = [] [[example]] name = "schnorr_algebraic_hash" diff --git a/nimue-poseidon/src/bn254.rs b/nimue-poseidon/src/bn254.rs index c90da25..94f8b65 100644 --- a/nimue-poseidon/src/bn254.rs +++ b/nimue-poseidon/src/bn254.rs @@ -1,6 +1,5 @@ poseidon_sponge!(254, PoseidonPermx5_254_3, x5_254_3); poseidon_sponge!(254, PoseidonPermx5_254_5, x5_254_5); - mod x5_254_3 { use ark_ff::MontFp; pub type Field = ark_bn254::Fr; diff --git a/nimue-poseidon/src/f64.rs b/nimue-poseidon/src/f64.rs new file mode 100644 index 0000000..15f4dfd --- /dev/null +++ b/nimue-poseidon/src/f64.rs @@ -0,0 +1,1952 @@ +use ark_ff::{Fp64, MontBackend, MontConfig}; + +#[derive(MontConfig)] +#[modulus = "18446744073709551359"] +#[generator = "7"] +pub struct FConfig64; + +pub type Field64 = Fp64>; + +poseidon_sponge!(64, PoseidonPermx3_64_24, x3_64_24); + +mod x3_64_24 { + + use ark_ff::MontFp; + + pub type Field = super::Field64; + pub const ALPHA: u64 = 3; + pub const R_F: usize = 8; + pub const R_P: usize = 42; + pub const N: usize = 24; + pub const R: usize = 20; + + pub const MDS: &'static [[Field; N]] = &[ + [ + MontFp!("0x70e6dae2c651cead"), + MontFp!("0x090e1669a71a5d00"), + MontFp!("0x850eb1097fab4a21"), + MontFp!("0x0b897348e7e0fab0"), + MontFp!("0xdba1e3e5b76ed64c"), + MontFp!("0x3334f13fa046b4ad"), + MontFp!("0x8a4d7cf4f0429ffb"), + MontFp!("0x19ea5fc1afb8c40d"), + MontFp!("0xbc9b82c52e2d16d3"), + MontFp!("0x6ef233462dfb9102"), + MontFp!("0xb78f9a4aa5692674"), + MontFp!("0x137434135cab157a"), + MontFp!("0xdcfc4fb1fad92667"), + MontFp!("0xf2da17d8ccaf5dba"), + MontFp!("0xdc562eb3b775a230"), + MontFp!("0x3a579ccd17e69b21"), + MontFp!("0xcd4371daa1f50ce1"), + MontFp!("0xf3fb536f0880da4b"), + MontFp!("0xd4c0d70cbe266d00"), + MontFp!("0x922f62855fcdcccf"), + MontFp!("0xf2587b5670e3f932"), + MontFp!("0x83cbc18d3068858d"), + MontFp!("0x42418957cdb87f03"), + MontFp!("0x8a1c2e26886dcc62"), + ], + [ + MontFp!("0x59ff431e0b5017a3"), + MontFp!("0x5f5653f6d4b07aee"), + MontFp!("0xf3a7fabec4bfaa90"), + MontFp!("0xeaa1c6cf8a5f93b6"), + MontFp!("0x640fe1aec663543c"), + MontFp!("0x5e8b2eb00c0b8f20"), + MontFp!("0xff0e9e271c3cd79a"), + MontFp!("0x8f893f3bf126360f"), + MontFp!("0x09ace012c2348c75"), + MontFp!("0x53fddfe811ff2173"), + MontFp!("0x42b52ba39e72e1af"), + MontFp!("0x2d4ae7306cd3dee8"), + MontFp!("0xcca7a772494dda3f"), + MontFp!("0xc3c21065f335c8ed"), + MontFp!("0xa38e5f985541602e"), + MontFp!("0xcf88ae035fab200b"), + MontFp!("0xc3e845fab9e1952b"), + MontFp!("0x7e80802dab7470dc"), + MontFp!("0x3394d8795d6f79d9"), + MontFp!("0x700e544671622092"), + MontFp!("0x8c106de82508d7b1"), + MontFp!("0x3456079cc49e452c"), + MontFp!("0xb87cb49c6e5ec4ff"), + MontFp!("0x72f947daead3c78e"), + ], + [ + MontFp!("0xaa12114e4439ba64"), + MontFp!("0x57de0d281134d6cd"), + MontFp!("0x0377608221c83b90"), + MontFp!("0x6a0b326610dc231d"), + MontFp!("0xe09d23f52773557e"), + MontFp!("0x0b6c555d16c9698f"), + MontFp!("0xd3624f92c8712ac4"), + MontFp!("0x4c1b3aa96f6afe15"), + MontFp!("0xe04985c3f61d5725"), + MontFp!("0x2cd40901905ea647"), + MontFp!("0x085e32b7ccfaeac6"), + MontFp!("0xe2a7a06ec82510d8"), + MontFp!("0x25e8ab1476f3f970"), + MontFp!("0x977a803a3fa88d09"), + MontFp!("0x747022bdb92cd39d"), + MontFp!("0x7ee29e2461848828"), + MontFp!("0xbca7ed86abd40b1f"), + MontFp!("0x4d8eaa622dcd79af"), + MontFp!("0xd3abc7ebc94290b6"), + MontFp!("0xa6bc3eed3a521f15"), + MontFp!("0x116e2b29a9e82c27"), + MontFp!("0xf07bc2c96b13d236"), + MontFp!("0xac1a30f50cbbcb0c"), + MontFp!("0x5337477bb9fe373f"), + ], + [ + MontFp!("0xbd456704024b80ee"), + MontFp!("0x77bb0c1a330f047d"), + MontFp!("0xcdaeb6a71e161841"), + MontFp!("0x5e6bde7e309579c8"), + MontFp!("0x7b0d9d6d914f5550"), + MontFp!("0x1108e728dad5ef99"), + MontFp!("0xabde85b0948b686f"), + MontFp!("0xd0cc4a661ba7b46a"), + MontFp!("0xfaf9bde12750e80f"), + MontFp!("0x2cd16331ac48ba70"), + MontFp!("0xbcc8becc4ed494a0"), + MontFp!("0x00ca4c234254abc9"), + MontFp!("0x2c0188455a6585c5"), + MontFp!("0x1ac76c144a91238a"), + MontFp!("0x70b952f793ba821b"), + MontFp!("0x33da01a130d2ffcc"), + MontFp!("0x3aa3ecde16bb3d7f"), + MontFp!("0x475e24ae547149ab"), + MontFp!("0x7e8e4d93128fe99a"), + MontFp!("0xdeb9d09eb26db2c8"), + MontFp!("0x041b350f67f0bdf7"), + MontFp!("0xf0b3ced1cf3aeb20"), + MontFp!("0xa94fae442109b2de"), + MontFp!("0x5148d587558e451c"), + ], + [ + MontFp!("0xe20ec1f1d0dccdb4"), + MontFp!("0x56bb8d026b1d8ca1"), + MontFp!("0xdd35d5235b2dfbac"), + MontFp!("0x19e54fe669a12e3f"), + MontFp!("0x481d050f6bed5d15"), + MontFp!("0x6d84f03061d0650e"), + MontFp!("0x53f09bc85e099939"), + MontFp!("0xc28dfaa7e1d3959e"), + MontFp!("0x582893256437308a"), + MontFp!("0xbc5cced5d7ed3024"), + MontFp!("0xf902a4934b46eb74"), + MontFp!("0xc16a119276c6f4c2"), + MontFp!("0xd05ecb6b8d31e808"), + MontFp!("0x9e84930796cfd5c7"), + MontFp!("0xf14cd791e6cbb148"), + MontFp!("0x97b57db2a72dcc56"), + MontFp!("0x9f8fe7db8263766b"), + MontFp!("0xb216cf3a71cc1261"), + MontFp!("0x45a818f076cca2d4"), + MontFp!("0xdb0240ada8013a0a"), + MontFp!("0x540b0e6f28ef9c93"), + MontFp!("0x19d2fb48f3a9c08c"), + MontFp!("0x14cf42a420aa8721"), + MontFp!("0x383a092d2f33e9aa"), + ], + [ + MontFp!("0x9290393c5fea5212"), + MontFp!("0xd93945ba33122406"), + MontFp!("0xecbe7af7a0dab614"), + MontFp!("0x7db4d64074d583e8"), + MontFp!("0x308ed70dfba59804"), + MontFp!("0x08450614e209de8c"), + MontFp!("0x76d7443c773e270d"), + MontFp!("0x0074410e893a94d8"), + MontFp!("0xd172bb93833466f1"), + MontFp!("0x9a8719e0b822659c"), + MontFp!("0x9f7a74da14cad5a8"), + MontFp!("0x28502f3040346c46"), + MontFp!("0x16c2eeee1dae9a39"), + MontFp!("0x86bc605e13beafd4"), + MontFp!("0xa189359049c3bcec"), + MontFp!("0x80a28346ef3a936b"), + MontFp!("0x4cfddbf3af068f8b"), + MontFp!("0x5ac9909428439f31"), + MontFp!("0x8e4e25e3e69cb21b"), + MontFp!("0xc1d04d6ff1b52909"), + MontFp!("0x6293b3dc21f82a0c"), + MontFp!("0x6a6b37adf449ff61"), + MontFp!("0x4160900d97137082"), + MontFp!("0x727458c6c77fe530"), + ], + [ + MontFp!("0x906d8c76a5bb02a8"), + MontFp!("0x16c4e6d73c27e202"), + MontFp!("0xcac60c15632c6ce7"), + MontFp!("0xb47d85d9b7d89577"), + MontFp!("0x29a1d5d5fe9db3ec"), + MontFp!("0x7131f056111d8915"), + MontFp!("0x991392cccfbd5ee7"), + MontFp!("0x2ef2dc59457ecbdc"), + MontFp!("0x81377100a281c260"), + MontFp!("0x167e27dc5f056066"), + MontFp!("0xba1577fc36f0a96f"), + MontFp!("0x7f9170c61554e917"), + MontFp!("0x9150ace40acd53ba"), + MontFp!("0x752a74387c859824"), + MontFp!("0x188e1b22401bf247"), + MontFp!("0xc68d951fcfcaaa0c"), + MontFp!("0x28218483354e1132"), + MontFp!("0x4b96077539116d04"), + MontFp!("0xb64b6816ef57177b"), + MontFp!("0x2e71b955728c25d6"), + MontFp!("0x9488b974d4dd5b5b"), + MontFp!("0xb6c5224b98d7c036"), + MontFp!("0x1c24e35592b63675"), + MontFp!("0xc91e8da2f57a525a"), + ], + [ + MontFp!("0xe85c03395c0200a1"), + MontFp!("0xf6bfcef1d409bffb"), + MontFp!("0x0196b09f44600604"), + MontFp!("0x89a41dae2da87b49"), + MontFp!("0xb97bc50b093755da"), + MontFp!("0xb6eb65ea6627b28c"), + MontFp!("0x7a440371db7437f2"), + MontFp!("0x5c68e5fe22d800a4"), + MontFp!("0x5a51501da57e4f99"), + MontFp!("0x4d515fca19eb89ef"), + MontFp!("0x2c93cf282add0820"), + MontFp!("0x292d273173c66e5c"), + MontFp!("0x50a3310afff19ced"), + MontFp!("0xf61c39a773dca545"), + MontFp!("0xcd072b51d5b0903b"), + MontFp!("0xa833ebcc5f431b26"), + MontFp!("0x5b6b4c249593f1d7"), + MontFp!("0xdad0a7ca0171fc4a"), + MontFp!("0xbd56470cc249d0a3"), + MontFp!("0x051a6ff128ed92cd"), + MontFp!("0x16f403a09d6ebf37"), + MontFp!("0x0d72cc8a94b9ede3"), + MontFp!("0xbc71f787e8614720"), + MontFp!("0x9aea3ad16887df2f"), + ], + [ + MontFp!("0x53b29e8044fd73df"), + MontFp!("0xf7cf6c83df0e8fc7"), + MontFp!("0x70e3be85e7abdac2"), + MontFp!("0x2f9d51e23ad33a2d"), + MontFp!("0xfb4492e97f6fde3a"), + MontFp!("0xeb86487afb325322"), + MontFp!("0xa430c39b0557dbf3"), + MontFp!("0xfbc2d550b55e5d48"), + MontFp!("0x537eb39ee6693c0d"), + MontFp!("0x40c4ec642d25c034"), + MontFp!("0x604f154a35afc282"), + MontFp!("0xa714bda94cfd4c39"), + MontFp!("0xcd6a9134908edf03"), + MontFp!("0x9acef696f244340d"), + MontFp!("0x9309982069ef312c"), + MontFp!("0xa63124f8306a2484"), + MontFp!("0x242a061483d71f89"), + MontFp!("0x0d3ac433a626f18d"), + MontFp!("0xc63372098c346aa9"), + MontFp!("0xd07fa091cd4972c6"), + MontFp!("0xa224f0a1c9631161"), + MontFp!("0x63f048b3771c41e5"), + MontFp!("0xe2817c6c0c265bd4"), + MontFp!("0xba7cadf0dcdc7df7"), + ], + [ + MontFp!("0x8a3d3ba02a08c8e7"), + MontFp!("0x3f8f8c0b93f58b07"), + MontFp!("0x46a914cfaa539ffb"), + MontFp!("0xa960b80187ddbbb9"), + MontFp!("0xc82096cacfdb76e3"), + MontFp!("0x09a8a4319261fb92"), + MontFp!("0x81d077321be2dff1"), + MontFp!("0x6e3071b7f9a8aaac"), + MontFp!("0x6706f82ee70f8495"), + MontFp!("0x6a43592cb42d98b6"), + MontFp!("0x92d4015f02aff96a"), + MontFp!("0xe2e5ba3897f2607c"), + MontFp!("0x5d2963620a32c819"), + MontFp!("0xe2d0e199b463a622"), + MontFp!("0x2493a5ff19745ffe"), + MontFp!("0xb3deebc1108cadd2"), + MontFp!("0x115c60690d06ce7a"), + MontFp!("0xe9b1ef8fefc04991"), + MontFp!("0x4f798423a6b7a779"), + MontFp!("0x7f976b5576b34d22"), + MontFp!("0x3c8bd94308dda075"), + MontFp!("0x5178112ba1b01e33"), + MontFp!("0x3537d202f9482495"), + MontFp!("0xec2ea2cf504c8319"), + ], + [ + MontFp!("0x68d9792f24056e97"), + MontFp!("0xc4866bde9e51a4c0"), + MontFp!("0xafb004092bd661d1"), + MontFp!("0x89258668a873959e"), + MontFp!("0x1f66032575da5d81"), + MontFp!("0x2f5aea7a02be42e4"), + MontFp!("0x06980b9291234b40"), + MontFp!("0xa194dd243299e88c"), + MontFp!("0xe81d7d3fbe1c2119"), + MontFp!("0xd2938ebbe6f286f4"), + MontFp!("0x4be0739bcfdffcc3"), + MontFp!("0x21fadc0da8c8fa5a"), + MontFp!("0xc048165ce8f77049"), + MontFp!("0xbae3908d94440b22"), + MontFp!("0x712c6253e40372de"), + MontFp!("0x1b2c51b99430d569"), + MontFp!("0xf765ea0171dedf8f"), + MontFp!("0x8570b03fa7bde5f4"), + MontFp!("0x1d051cfd9f4abed4"), + MontFp!("0x4d82838ff0098c48"), + MontFp!("0x30375ad96d9ef6cc"), + MontFp!("0xc0047722489f8de4"), + MontFp!("0x9cc440fd22d8f3a6"), + MontFp!("0x46ec4683066fa64b"), + ], + [ + MontFp!("0x414e3ea5c7d31fc7"), + MontFp!("0x3dbfa02b58e306d2"), + MontFp!("0x0012c092d2ff92e1"), + MontFp!("0x8f0da720beed5e94"), + MontFp!("0x016a8b827f35a15c"), + MontFp!("0xe534011671c8f273"), + MontFp!("0xe438115add5f9d52"), + MontFp!("0xb88fac38660cca71"), + MontFp!("0x7777bc3d77a0c74e"), + MontFp!("0xcff482b7851f4aaa"), + MontFp!("0xd841eb8a99602bd5"), + MontFp!("0xbb50b08f478775fe"), + MontFp!("0x3e3d4e9ccdb95b9c"), + MontFp!("0x04c994e0977ae208"), + MontFp!("0x97250390de2f9d33"), + MontFp!("0x1859f684202cfd22"), + MontFp!("0xf423d2f16802f031"), + MontFp!("0x3cfe68c0bb1c7d2c"), + MontFp!("0xe8c487e32ba56675"), + MontFp!("0x318c69e0288dad4e"), + MontFp!("0xfee4a069ade5cd2e"), + MontFp!("0x2b09bd17e383def1"), + MontFp!("0xf4d60ebb9f715881"), + MontFp!("0xd379aec9fa0b4b2b"), + ], + [ + MontFp!("0x220c90edf0f596f8"), + MontFp!("0xf682a229e08c50c8"), + MontFp!("0xd1852b2130e9aaa4"), + MontFp!("0x83fb89181aeaeb9b"), + MontFp!("0xaf7fa83e2651bed8"), + MontFp!("0x13886e514a80d384"), + MontFp!("0x6ceaf0bb1d62a1ae"), + MontFp!("0x6ed2d8fab133536b"), + MontFp!("0xf3606bd92537b5b8"), + MontFp!("0xb5e55921ea88c95a"), + MontFp!("0x8d145749bf1d397b"), + MontFp!("0xb96932834ff642f2"), + MontFp!("0xffa6a68e7dc1778f"), + MontFp!("0xe81d7ba99227c61a"), + MontFp!("0x467846b725b93eaa"), + MontFp!("0xc680395a9d8f6043"), + MontFp!("0x80babe12dedd445c"), + MontFp!("0x482f332947be96da"), + MontFp!("0x35161fa17903a149"), + MontFp!("0xb5b42a12e1148f67"), + MontFp!("0xaffeef3ebee87966"), + MontFp!("0x20ee335491a73e40"), + MontFp!("0x7e5fb9d88533cccb"), + MontFp!("0x9b1fa3018283895b"), + ], + [ + MontFp!("0xd66a2ab2aba8b024"), + MontFp!("0x47d826fa53ab2f76"), + MontFp!("0xe473cc68eb366312"), + MontFp!("0xa94ecebbac6b46b5"), + MontFp!("0x90f44a19e9f1ca8c"), + MontFp!("0xd2e4b03d37caf066"), + MontFp!("0x98a24a4444cae665"), + MontFp!("0x795480f4af50f079"), + MontFp!("0x02590696ead689f7"), + MontFp!("0xd85c11df41c246c1"), + MontFp!("0x95d90a784213a76d"), + MontFp!("0xaa55b3bfff175079"), + MontFp!("0xb4a7d88259d019df"), + MontFp!("0x17400692dcadd17f"), + MontFp!("0x2cba36e2ac25ca62"), + MontFp!("0xa70268f2f600dbbe"), + MontFp!("0xb3df8e0052e89ed8"), + MontFp!("0x654bccae501033c4"), + MontFp!("0x4d1da3b20c7edd1d"), + MontFp!("0x09e6d695650f6601"), + MontFp!("0x3b0baf129b789800"), + MontFp!("0x74f621524b786f34"), + MontFp!("0x2a52ccf6d9ab63e5"), + MontFp!("0x97487b87471144ba"), + ], + [ + MontFp!("0x7f3c77b30f7a19da"), + MontFp!("0x57e59eb0d4a68db3"), + MontFp!("0x86c94608cba154e9"), + MontFp!("0x07ce7176ff94f679"), + MontFp!("0xf269367beb91bf4e"), + MontFp!("0x4fec3bd49bb5160a"), + MontFp!("0x8e228735eb17d66a"), + MontFp!("0x39392005a88ee999"), + MontFp!("0x37fc74cee03968c6"), + MontFp!("0x9c261ef8afd13142"), + MontFp!("0xeec62d5c7d956499"), + MontFp!("0x432801d5ffee63fe"), + MontFp!("0x45111b3ce31d3738"), + MontFp!("0x5ea769a9e0cac6ae"), + MontFp!("0x892be71f8275b77a"), + MontFp!("0x24b06878bb40afed"), + MontFp!("0xfd25a7441057bf85"), + MontFp!("0x1b5ad44fcce50488"), + MontFp!("0xf81b68befc1434e4"), + MontFp!("0x869a134b59d9186d"), + MontFp!("0x014519262bed14de"), + MontFp!("0xea0429937e292811"), + MontFp!("0x68015ad8fe4def55"), + MontFp!("0x948dc5cdcd5bee43"), + ], + [ + MontFp!("0x83a9e00f6c5a20ee"), + MontFp!("0x20aaa2e1dbbcb9ff"), + MontFp!("0xd17a9f73bda9fc90"), + MontFp!("0x038f70dc0c7f7eba"), + MontFp!("0x055440a7d0a35e3d"), + MontFp!("0xbd5ac63a13d1a7c1"), + MontFp!("0xec0ae61b6b121c5a"), + MontFp!("0x056cce03061e845c"), + MontFp!("0x569d963f9baa8e5a"), + MontFp!("0x7b87f079d4204952"), + MontFp!("0x01eec56cc50f6307"), + MontFp!("0x1244a3ffa63b8f05"), + MontFp!("0x7a58c74ddae3ea96"), + MontFp!("0xa983820d2f4aed46"), + MontFp!("0x3d6ad347f426f308"), + MontFp!("0x67d756082adbb51f"), + MontFp!("0x4c7674aaeb95d483"), + MontFp!("0x94157add6e435959"), + MontFp!("0x5857b8a734fa5629"), + MontFp!("0xda5c0233dd1388b7"), + MontFp!("0xf7a414fceb576f28"), + MontFp!("0x7bb8becde7f68858"), + MontFp!("0xae53c33cd9af464d"), + MontFp!("0x2eee5f63c13b4d8f"), + ], + [ + MontFp!("0x1df78287fa15da95"), + MontFp!("0xd988cdf63a39d20b"), + MontFp!("0xd3a6412dcd61928d"), + MontFp!("0x48047d7db2182fb7"), + MontFp!("0xd1bb36f16d0635ab"), + MontFp!("0xaa67bedbcbb25902"), + MontFp!("0x65f861b4872e101e"), + MontFp!("0x2ee46b2125130756"), + MontFp!("0x3be2874d7de0ae0b"), + MontFp!("0x9c30d302410d29d9"), + MontFp!("0xd3d06d877e43e671"), + MontFp!("0xaef252790b68a6c6"), + MontFp!("0x9bbb18baa88453c8"), + MontFp!("0x96efea746e5a9715"), + MontFp!("0x845da562c843e927"), + MontFp!("0x1acde58ead686030"), + MontFp!("0xb482495c07b2729c"), + MontFp!("0x8ed1fb98333d28be"), + MontFp!("0xb5254c885a6f71e3"), + MontFp!("0xcf9beef012f23fcb"), + MontFp!("0x8999fcbd397a5930"), + MontFp!("0x625448ae7510ca03"), + MontFp!("0x5758f7704c27f739"), + MontFp!("0x213b1f365e92efae"), + ], + [ + MontFp!("0x75b99a800f6a4e50"), + MontFp!("0x6480016a5692c75c"), + MontFp!("0xa1b8e0944dbf341d"), + MontFp!("0x9d8a004f8b956f3b"), + MontFp!("0x4c06adc09d37c7f5"), + MontFp!("0x52bceba90cc316ef"), + MontFp!("0xa4c726bf0a05c621"), + MontFp!("0xa25fa8b92fbbee55"), + MontFp!("0x722b97245d3359c0"), + MontFp!("0xb7a455711a461a0c"), + MontFp!("0x231cbb34de2a15fe"), + MontFp!("0x7cec97f425eb2d45"), + MontFp!("0xb84585a25203a89a"), + MontFp!("0x77aba4c7e88873f1"), + MontFp!("0x37fe478b2c36cf66"), + MontFp!("0xcb6484b2339f5f8e"), + MontFp!("0x9d7bfa01a9e43ecf"), + MontFp!("0x6e0ab9fcc52a6de5"), + MontFp!("0x0cd364e0a15796e1"), + MontFp!("0x05d93140e2e3f2ca"), + MontFp!("0xe204443778179d0b"), + MontFp!("0xbef305850f048544"), + MontFp!("0xd32256924554a49b"), + MontFp!("0xc53511ffa12bb90f"), + ], + [ + MontFp!("0x24963e56058f634e"), + MontFp!("0x42ba953bf6a2ebe4"), + MontFp!("0xf59b3de68f6e561f"), + MontFp!("0x97fde1b7e2e04fa9"), + MontFp!("0xd54550d47e251af5"), + MontFp!("0x06d59e915cb62071"), + MontFp!("0x3fb9da70660121f0"), + MontFp!("0x9c6d745cda9317bd"), + MontFp!("0x9b2e7bad646b7572"), + MontFp!("0xeaecc8fa9e3f8ca6"), + MontFp!("0x86da1cdb3cfcc903"), + MontFp!("0x7d89bccf99ca4618"), + MontFp!("0xc424b3165b1272c6"), + MontFp!("0x655f29202ed109b5"), + MontFp!("0x6084931c4c587edd"), + MontFp!("0xbf254b666533c51f"), + MontFp!("0x6986d415ab4569de"), + MontFp!("0x84c5542ce3d641e6"), + MontFp!("0xbecfc4b066cf816b"), + MontFp!("0xb8c67054069cbcf0"), + MontFp!("0x0c104c400ca7e269"), + MontFp!("0xacd24cf52548e6c0"), + MontFp!("0x539da2943a2cea96"), + MontFp!("0x4b34154f23ce7f50"), + ], + [ + MontFp!("0x27a8fcc9a30540a5"), + MontFp!("0x2a384863fa279560"), + MontFp!("0xd30ad1b8bb0b5e63"), + MontFp!("0x2e86af6a6f62fa02"), + MontFp!("0x34bca2387740fcfa"), + MontFp!("0xbfb4397008b15dce"), + MontFp!("0x14a5bfb5f0dc9d97"), + MontFp!("0xe4649e64d9177252"), + MontFp!("0xd7be1ade0ddbc8b6"), + MontFp!("0x390a00e89f5cbcf9"), + MontFp!("0x4d72acfede73bbb0"), + MontFp!("0x187ee525fe64a12c"), + MontFp!("0xaeb1ef1688d202d8"), + MontFp!("0x5be593c3c65b0667"), + MontFp!("0xf3aa608de6ecc65c"), + MontFp!("0x9d7126e3db70b9f7"), + MontFp!("0x2c64d046e025840c"), + MontFp!("0x415d660d4c1159e0"), + MontFp!("0xff20ed0db79423b6"), + MontFp!("0x6d0d1d2b46e267a6"), + MontFp!("0x33bcd8b3cb1ae3c2"), + MontFp!("0x3ccf87b1d6f07a52"), + MontFp!("0x6aa98e243986b159"), + MontFp!("0xacea4c929bc468f1"), + ], + [ + MontFp!("0xda6bb46f0b2af6a8"), + MontFp!("0x67d0fd089cc0898c"), + MontFp!("0xb7dd68a9042cb514"), + MontFp!("0xcdf03ff3c7130f3e"), + MontFp!("0xffd80a8c40d6ae3f"), + MontFp!("0x4a44e7f5385c546c"), + MontFp!("0xb129828ecd7e97a5"), + MontFp!("0xbaf520f816202bee"), + MontFp!("0x35706f5a82d07680"), + MontFp!("0xb29eab3da9398698"), + MontFp!("0xb5992f06769f0df6"), + MontFp!("0xf83e56af0cc2860a"), + MontFp!("0x3378bd8b7bbd925c"), + MontFp!("0x78cc26b72180477e"), + MontFp!("0x7cfb9d3c73b4e3c6"), + MontFp!("0x0307a503873383ed"), + MontFp!("0x4f8ddac642662c7b"), + MontFp!("0x880a2b8923b753b9"), + MontFp!("0x555e02695ba71c4b"), + MontFp!("0x602bbaa3ae7f3df3"), + MontFp!("0x89c865c1b0286a0f"), + MontFp!("0x519c7245c1b05972"), + MontFp!("0xb4c9cb14d4f5cb27"), + MontFp!("0x9fabb53b3093a0c1"), + ], + [ + MontFp!("0xc3255de2a5e262f6"), + MontFp!("0xb784448972fb2770"), + MontFp!("0xa4ea00d549571431"), + MontFp!("0x45a22c337fd9e7b0"), + MontFp!("0x287182295a73e5cb"), + MontFp!("0xa24808a6cd756b23"), + MontFp!("0xfd80b40176916b20"), + MontFp!("0x385c2c05a01e88c7"), + MontFp!("0x871a4fce2bf9da58"), + MontFp!("0x38be6874cec2dfab"), + MontFp!("0xb5b845b9dd7e6c7a"), + MontFp!("0x2ac37898d7ab3b6a"), + MontFp!("0x0c220f53bdce7b01"), + MontFp!("0x5a1245438b2db20e"), + MontFp!("0xd334bc485d92f3d8"), + MontFp!("0x1db892c2bc97cb0b"), + MontFp!("0x5a238c35ee29f12a"), + MontFp!("0xbb640f62634add31"), + MontFp!("0x9ad6871d056d0e7f"), + MontFp!("0x6a6651c733137dcf"), + MontFp!("0x34d5c1babf149ef7"), + MontFp!("0xfe3edad768e25afa"), + MontFp!("0x00cf7b9294eac04e"), + MontFp!("0x8427ba6d9dd6193e"), + ], + [ + MontFp!("0xfce915ab6e25b3e6"), + MontFp!("0x3688b8fa8c9f5f2c"), + MontFp!("0x18b9f2b3bfe960f4"), + MontFp!("0x326a77fae4be97b6"), + MontFp!("0x96b1cfe94cbbb3fe"), + MontFp!("0x14faa9260126b6c6"), + MontFp!("0xb1247f567f78c70a"), + MontFp!("0x385d2b599cb24e41"), + MontFp!("0x177c0ac30bb6dfde"), + MontFp!("0x06c45afb8fe169a7"), + MontFp!("0x774b3f49d7b331e5"), + MontFp!("0x043bc5b74dcddd15"), + MontFp!("0xd6686614e69af832"), + MontFp!("0x00b13abc2a3e3af5"), + MontFp!("0x965b038aa331b415"), + MontFp!("0xf61b80d291a40f3e"), + MontFp!("0xdf59a4d74a728fd7"), + MontFp!("0x25e58ab87a486039"), + MontFp!("0xbf553e8dc30f8f85"), + MontFp!("0x1d479d64073d2f92"), + MontFp!("0xac79c8b3ba7185da"), + MontFp!("0xf64bcdb3a4250bf6"), + MontFp!("0x31cfe575eaed24f3"), + MontFp!("0xd71997c2aeb6ea3f"), + ], + [ + MontFp!("0x4bf704fb6a8f8d11"), + MontFp!("0x58db2b3041328f85"), + MontFp!("0xebe72c913f9abdd3"), + MontFp!("0x46feb18d627d5bff"), + MontFp!("0xd03e70bc1e79149d"), + MontFp!("0xe5c1990fb10fd8dc"), + MontFp!("0xd159b10ee894d37a"), + MontFp!("0x245b633f6d5b526d"), + MontFp!("0x411fa8aba6831734"), + MontFp!("0xc7ae395a1329b0e1"), + MontFp!("0x06116b8774d84f8a"), + MontFp!("0x293107b5bc6c5637"), + MontFp!("0x57d15c428b496288"), + MontFp!("0x65145619b98d0cb3"), + MontFp!("0x9b4a4f48dde636ba"), + MontFp!("0x08740a600dc09d46"), + MontFp!("0xbb132862b24cdd70"), + MontFp!("0xf4547a7a98c78c49"), + MontFp!("0x75d6aade510d3184"), + MontFp!("0x78f002115511f2e9"), + MontFp!("0x61554fca09413122"), + MontFp!("0xc6758a78edfc076a"), + MontFp!("0x993dc19cb110e565"), + MontFp!("0x6b5259f029a70694"), + ], + ]; + + pub const ARK: &'static [[Field; N]; R_F + R_P] = &[ + [ + MontFp!("0x240ec2a793108b4a"), + MontFp!("0x753452ad8cbbbecb"), + MontFp!("0xa3612a53da19a265"), + MontFp!("0x18a083f17b5a94eb"), + MontFp!("0x30d1c3ecb4f44b99"), + MontFp!("0xaea865a3e5830f71"), + MontFp!("0x4a9134c89190acc6"), + MontFp!("0xed37c99a612065b1"), + MontFp!("0xafd9964e15975e77"), + MontFp!("0xa77147766c1ff75e"), + MontFp!("0x1f075012654c408f"), + MontFp!("0xc5e11b29262d9283"), + MontFp!("0x6b6495600eb3ac52"), + MontFp!("0x2b3b599ae4fa1d12"), + MontFp!("0x90cda513782b872f"), + MontFp!("0x78d9b4ea0f82d0e9"), + MontFp!("0xbcbe92c86e626013"), + MontFp!("0xa24fb10ca2a94fe8"), + MontFp!("0xca3d8d1ebcc8b0b8"), + MontFp!("0x01f19977b5ae425b"), + MontFp!("0xdcb91f4a2ee555e1"), + MontFp!("0x522fc03d8de5625b"), + MontFp!("0x8093493f225f5fe0"), + MontFp!("0xe34925160dd8ac6a"), + ], + [ + MontFp!("0x0d849db4c9677f3e"), + MontFp!("0xdb3c9dba3951d80a"), + MontFp!("0x69ebf310531af9cb"), + MontFp!("0x618c6e79c2131c9a"), + MontFp!("0xf753bfda5bea2713"), + MontFp!("0xc764d2dcfe66b834"), + MontFp!("0x1428f86c920dc41f"), + MontFp!("0x32eec3f568ba6a6a"), + MontFp!("0xd348b99d1be142d1"), + MontFp!("0x5a54339e5cf85764"), + MontFp!("0xfcfcfcd93a85db2c"), + MontFp!("0x5bf91d3330de1254"), + MontFp!("0x7497efbc720c4d29"), + MontFp!("0xb7f823baf4fb4ad3"), + MontFp!("0xecbdc0ce5ce155f7"), + MontFp!("0x1e98e24a11060158"), + MontFp!("0xd68cc1bc7a734e3b"), + MontFp!("0x8b5192beefe56d76"), + MontFp!("0xcb37590292ed5d94"), + MontFp!("0x3c0f4ac4442e718d"), + MontFp!("0x7f28481f271ac458"), + MontFp!("0x95a29062b8b7ef10"), + MontFp!("0x5e35d63f60ebe7a4"), + MontFp!("0x6f0cce8765194a54"), + ], + [ + MontFp!("0xb2c5368f33cfdb88"), + MontFp!("0x23d4c5242d9031d8"), + MontFp!("0xa01e66ab5e6bf11d"), + MontFp!("0x37b3c3f35a2c2db7"), + MontFp!("0x6b0f16e664da3bc7"), + MontFp!("0xa2edd28b4157761c"), + MontFp!("0x772f8d3d4b7bbe30"), + MontFp!("0x067d7f034ea64273"), + MontFp!("0x9c04b9ef0ad21b49"), + MontFp!("0xec615fcfe5fb17e3"), + MontFp!("0xe5d5a133b594b39d"), + MontFp!("0x5575c2ad9cfb2e71"), + MontFp!("0x8b8bec6fa05ae8ec"), + MontFp!("0xfdfe46961b74f8ca"), + MontFp!("0x81826d165c8db1f4"), + MontFp!("0xebb8dd7f53d2873a"), + MontFp!("0xa74d8725a61f697c"), + MontFp!("0xa48bbebeb12e5ba1"), + MontFp!("0x1dc2cfba8304fb0d"), + MontFp!("0x121ce1466d109dd6"), + MontFp!("0x2e4a7c3aba839378"), + MontFp!("0x540a4d98e030dcdc"), + MontFp!("0x215ac5039c8dacf7"), + MontFp!("0x8627aac1074f6776"), + ], + [ + MontFp!("0xbd9f007a00342dad"), + MontFp!("0x0485d9997c5d2d43"), + MontFp!("0xf73dc1f105ba7b82"), + MontFp!("0x75dfe4727676a769"), + MontFp!("0x9226a74d24479a98"), + MontFp!("0x1f9526e943307c60"), + MontFp!("0xf8ec7859af0ac374"), + MontFp!("0xbf084ca320167a51"), + MontFp!("0x19225ef89b83a433"), + MontFp!("0x4eea3af3cf87a21d"), + MontFp!("0x5f32bfe642a25785"), + MontFp!("0xee18341408e7109e"), + MontFp!("0x095086a0fd9e22f4"), + MontFp!("0x24bbb72c5af99867"), + MontFp!("0xf0bdd8ee27e7a897"), + MontFp!("0x19c9f25475ec0a13"), + MontFp!("0x9fae6ed0f262b68c"), + MontFp!("0x8521b8743284e615"), + MontFp!("0x11341ea6613ab6ed"), + MontFp!("0x66efe6ca18cd3dca"), + MontFp!("0xf1ac5951a2934237"), + MontFp!("0x22f7e35282498908"), + MontFp!("0xb5bcdc16593c6674"), + MontFp!("0x865eaa9fa7c40873"), + ], + [ + MontFp!("0x9dee60da82ac4465"), + MontFp!("0x22735f881786cc39"), + MontFp!("0x6de9f9171436b66e"), + MontFp!("0xf2aadeaa6a66b7ad"), + MontFp!("0x4aacc905f9272cb4"), + MontFp!("0x2c2714c649e42a81"), + MontFp!("0x76d73405217d9dc7"), + MontFp!("0xc883b51c111a8c32"), + MontFp!("0x75dc8b2a293b801a"), + MontFp!("0xcca8a5875b768909"), + MontFp!("0xb9fd56aef43fe7cc"), + MontFp!("0xafbfec0102d26c2c"), + MontFp!("0x5157f8d356757a65"), + MontFp!("0x26e3b538e13b9d5c"), + MontFp!("0xca1497b238a3dc52"), + MontFp!("0x995c0df77c5b3940"), + MontFp!("0x7ff238ddc7075582"), + MontFp!("0xa6efe8632d790673"), + MontFp!("0x3f402fcafb803b75"), + MontFp!("0xd0a9b5989fa80648"), + MontFp!("0xd731da881957d177"), + MontFp!("0xce282dcdbed66f47"), + MontFp!("0x1270fea846832c28"), + MontFp!("0x873da44928addef1"), + ], + [ + MontFp!("0x3946531d53229dec"), + MontFp!("0x5f09a6e3919f98c7"), + MontFp!("0x8ea315a8fc0618f9"), + MontFp!("0x4fd30e28e515e81c"), + MontFp!("0x2cdbf5e36d8c63a5"), + MontFp!("0xcce53304047e771a"), + MontFp!("0xb710cb8e0564ca50"), + MontFp!("0x1631a30bdc219de3"), + MontFp!("0xde3e13bfac4ab80c"), + MontFp!("0xc37e18414100ead5"), + MontFp!("0x99e5043b30387161"), + MontFp!("0x3c6bb225d1d78d15"), + MontFp!("0x65c5d73b4a5f9807"), + MontFp!("0x137c582109bc3643"), + MontFp!("0x05f762e5b1d480fd"), + MontFp!("0xb389c617c45d5bd0"), + MontFp!("0x2a23ba94c54ad1ef"), + MontFp!("0xeb4440f0a237d56a"), + MontFp!("0x9d503447cce854b3"), + MontFp!("0xfc5b688737c2aae9"), + MontFp!("0x80f39542543f321c"), + MontFp!("0xbaf3e8826b9e7c31"), + MontFp!("0x1f7e8de645be342f"), + MontFp!("0xd5c2dcab1d053e13"), + ], + [ + MontFp!("0x986a4a8db3280f18"), + MontFp!("0x4b242191c7dadd25"), + MontFp!("0x50882bd23adf7857"), + MontFp!("0x09f16b633e545bdc"), + MontFp!("0x5e0981215a746ce5"), + MontFp!("0x9ece3a04ded2e454"), + MontFp!("0x8a7d4f600e85d88b"), + MontFp!("0xab49152709ed581d"), + MontFp!("0xed825bf8b3d32ab2"), + MontFp!("0x1f37d6e31dd92ee7"), + MontFp!("0x4a766830058f5e67"), + MontFp!("0xd413d3bb4acf6432"), + MontFp!("0x93da3397b6581f7a"), + MontFp!("0x5fd4de23b579e4f8"), + MontFp!("0xcf0bb8b34bfed3e6"), + MontFp!("0x1a31a6eccc154f82"), + MontFp!("0x4ec5a45b2444daea"), + MontFp!("0x5cb0b6b9fe239e7e"), + MontFp!("0x35a035640d1457f8"), + MontFp!("0x6dbc1e53fa738977"), + MontFp!("0x5efa24c87a749e3a"), + MontFp!("0x27613437239afc6b"), + MontFp!("0xfca89d793bf3a0c1"), + MontFp!("0x993a7c1d8b509373"), + ], + [ + MontFp!("0xae990f255bf5e977"), + MontFp!("0x7b7acad0dea808d9"), + MontFp!("0xe4df51bda3d6834a"), + MontFp!("0x3e7516a279ce8e04"), + MontFp!("0xc50749a33a60fb83"), + MontFp!("0x8eb497c64e56d7a9"), + MontFp!("0xade425408c5d2fe5"), + MontFp!("0xb6f34f730c10daa1"), + MontFp!("0xbcef2e56ac305d87"), + MontFp!("0x2d2a447c10e46c62"), + MontFp!("0x1580f32c34717e21"), + MontFp!("0x84053458cf464329"), + MontFp!("0xd8fa9ab59dde6961"), + MontFp!("0x82980512e0d69940"), + MontFp!("0x4cde6a69a159dce9"), + MontFp!("0xa504dce40d2b5a48"), + MontFp!("0x110ca7f7d0cda6e2"), + MontFp!("0xfa09f77131f1452e"), + MontFp!("0xb3226a341171e6d4"), + MontFp!("0xdf3271ee4ddcd610"), + MontFp!("0x10245cd637f7d033"), + MontFp!("0x9e9b54ded7e50b22"), + MontFp!("0x55f509f254b7e35e"), + MontFp!("0x770305e05b566059"), + ], + [ + MontFp!("0xc25639019180ef24"), + MontFp!("0x34f10edac360c5f9"), + MontFp!("0xa916820e3a4c0aa4"), + MontFp!("0x771e31cdca908142"), + MontFp!("0xc7483c5e864b3503"), + MontFp!("0xa3c46f88d2848a1f"), + MontFp!("0x8038982788e3a966"), + MontFp!("0x260490d7c9225b8b"), + MontFp!("0x8f29b9bc9c9ff52b"), + MontFp!("0x9eca64a99a2f4512"), + MontFp!("0x173ae30db15d3cf4"), + MontFp!("0x9dc0ad665c6f198e"), + MontFp!("0x08809d47fe8b8830"), + MontFp!("0x062ae1e794799105"), + MontFp!("0x87d4e118f187c9df"), + MontFp!("0x909427dfb26e7106"), + MontFp!("0xdd6ae0ed2b860e28"), + MontFp!("0xb29665bd1eb2afa6"), + MontFp!("0x2c63db6fd4ee02dc"), + MontFp!("0x35c5a2ffd39bc2ce"), + MontFp!("0x875f62e7c53fc417"), + MontFp!("0xe19d89ac6f2bc4fb"), + MontFp!("0x0d14634389245057"), + MontFp!("0x6be7c3348405623a"), + ], + [ + MontFp!("0x68a0148f85f02014"), + MontFp!("0x053b66589a569cb6"), + MontFp!("0x953b226a62f08b4c"), + MontFp!("0x09d4508bb4810fc0"), + MontFp!("0x95518a3826b0eec2"), + MontFp!("0xb75ab99956105ca8"), + MontFp!("0xc82371d676d48c9a"), + MontFp!("0x61b15247a05e9c21"), + MontFp!("0x33af269eff1f825d"), + MontFp!("0xd629b9b9047ab8ea"), + MontFp!("0xc93068d389e2d4ea"), + MontFp!("0xac10466f4b976c59"), + MontFp!("0x31d1ce7704841862"), + MontFp!("0x0a484569fa243d73"), + MontFp!("0xd7a6b9d534870cdc"), + MontFp!("0x11750c56d10c784f"), + MontFp!("0xc094fa6698940e8d"), + MontFp!("0x8ddd68efe3868d4c"), + MontFp!("0x7c0096350bc9bfb6"), + MontFp!("0xf425dd1b76edfbd3"), + MontFp!("0xb6ab8ce0383e8a33"), + MontFp!("0x622e65b931dbac28"), + MontFp!("0x0b5568d0bf077fe9"), + MontFp!("0xd6e3591de846152b"), + ], + [ + MontFp!("0xf239f23fd08164f9"), + MontFp!("0x4863be619ee92e84"), + MontFp!("0x24e8d490749e33e9"), + MontFp!("0xa9000176c5e951c1"), + MontFp!("0xe088ea688b9eb620"), + MontFp!("0x0a7427f52cbf104a"), + MontFp!("0xcd0e6c197f77b6b1"), + MontFp!("0x94be36b10c7d4930"), + MontFp!("0xf74e110bc09d2f2f"), + MontFp!("0x8441201952f59356"), + MontFp!("0x109867dbccc9dd66"), + MontFp!("0x5f164f533a6359e7"), + MontFp!("0xe572a712fc2b0ed3"), + MontFp!("0x757d2ee09f334594"), + MontFp!("0xad328750d711a41d"), + MontFp!("0x5f24ae2d9e2b69f9"), + MontFp!("0xb497f3cd4100261f"), + MontFp!("0xb308050e303f7083"), + MontFp!("0x2b862ca16302f6ae"), + MontFp!("0x95b657d9d9f5021b"), + MontFp!("0x2e7d16c5bbaaef02"), + MontFp!("0x70a4d93ec31ae87f"), + MontFp!("0x88554a56246d7163"), + MontFp!("0x9e5b0ac6ce73c344"), + ], + [ + MontFp!("0x87607583c1f22021"), + MontFp!("0xeb490685514ade4e"), + MontFp!("0x80ff79b55c59e727"), + MontFp!("0xebaab6d2fe22b19f"), + MontFp!("0xc2e80030efcee83e"), + MontFp!("0xf75b0bb78bb6fcfb"), + MontFp!("0xd1febaed89c8cb71"), + MontFp!("0xf9992ff4f4c50249"), + MontFp!("0x256fa25efeee82d5"), + MontFp!("0x0c59050402658413"), + MontFp!("0xbead2aec63e55865"), + MontFp!("0xfc4be776b30fe386"), + MontFp!("0x9494dddf06460fb5"), + MontFp!("0xac11debba14ab0ca"), + MontFp!("0xe3943487764df091"), + MontFp!("0x5084dbd61e210259"), + MontFp!("0x47b0cfcd64112240"), + MontFp!("0x3f8b1ad5c852a1ab"), + MontFp!("0x918dbd53ea331324"), + MontFp!("0x7a3ee799ce4a33b8"), + MontFp!("0x91e359bcb7886b42"), + MontFp!("0x184ea8a19fa8ae99"), + MontFp!("0x25d77e20eddd6354"), + MontFp!("0x348d82eacc7718e2"), + ], + [ + MontFp!("0x6602f76a41d1efe1"), + MontFp!("0xdaf23c2e098b09bd"), + MontFp!("0xd7b8be850e0e57a1"), + MontFp!("0xc51e7df4f8855070"), + MontFp!("0xb1bd2ff2feeb1804"), + MontFp!("0x840b56248453fd57"), + MontFp!("0xf3ceed3a8b5099a3"), + MontFp!("0x8fdedc805119ddbf"), + MontFp!("0x79ce965dfd546956"), + MontFp!("0x7ffc046b04f5959a"), + MontFp!("0x8385d3fed9b19240"), + MontFp!("0x9f400d4ee91cf32b"), + MontFp!("0xc1626c4b5968cc63"), + MontFp!("0x594d31369bdf5d9a"), + MontFp!("0x7b005ffaf67c2a4b"), + MontFp!("0x592f256ff08a2eb4"), + MontFp!("0xb55605f825a8bf54"), + MontFp!("0x1a2e6ad796384de0"), + MontFp!("0x892c2daaf915145e"), + MontFp!("0x972487031937f2ac"), + MontFp!("0xf899e0e4bfc61c05"), + MontFp!("0xd412469ff6514f25"), + MontFp!("0x93157c74b40e7b75"), + MontFp!("0x8f95241bbb036960"), + ], + [ + MontFp!("0x774bbff0a2135e8b"), + MontFp!("0xbece3caa5fca59e2"), + MontFp!("0xa70f7a3af5a9af91"), + MontFp!("0x2053124fc4c73004"), + MontFp!("0xb0903b76b359c884"), + MontFp!("0x0a0091105a5b5bf1"), + MontFp!("0x9a9f5c0ca297c144"), + MontFp!("0xe300fb7474171a63"), + MontFp!("0x6abcf1d301c6552c"), + MontFp!("0x6975ffd56f93dedd"), + MontFp!("0x31be996a361e8ce4"), + MontFp!("0x469a5228c8ac765a"), + MontFp!("0x907c31250ecc3ecc"), + MontFp!("0x2021c7cd003ce15b"), + MontFp!("0x1a2e2d1f753025b0"), + MontFp!("0x4341fba21850eba1"), + MontFp!("0x06ee53f346a972fb"), + MontFp!("0x9c9fb9f30f5c983a"), + MontFp!("0x865d837be8597cc1"), + MontFp!("0x4fb0998a2c433786"), + MontFp!("0x95c3f50201471ad8"), + MontFp!("0xa2a730f4f6e815f7"), + MontFp!("0xad5c75c0774d82a8"), + MontFp!("0x05dfdad6814c0599"), + ], + [ + MontFp!("0x5f1162f7dc6cd441"), + MontFp!("0x3ec558a534156b7c"), + MontFp!("0x00acc4391da75e5c"), + MontFp!("0xd12933dfbb3ea285"), + MontFp!("0xb521625654a8a6fa"), + MontFp!("0x221da50d9cddf162"), + MontFp!("0xaa3549f789c9ec03"), + MontFp!("0x44c4834b23cf5e75"), + MontFp!("0x40d60d6766edb0ee"), + MontFp!("0xd021a7d957ba9d47"), + MontFp!("0xe0f75a57c3f5372a"), + MontFp!("0x27b7495ad99cb77b"), + MontFp!("0xf0c0945d125d1dd6"), + MontFp!("0x607465043244b65f"), + MontFp!("0x878ff223416a7ecc"), + MontFp!("0xe80317ceaa25121a"), + MontFp!("0x63f6f68286976720"), + MontFp!("0x415e604f07cd1961"), + MontFp!("0x53d80907802c1448"), + MontFp!("0xfd3470ac4a2afb79"), + MontFp!("0x2fec40d8e0a914ba"), + MontFp!("0xafb4d0b5fddbea45"), + MontFp!("0xa174d4056ef97d30"), + MontFp!("0x2cbc5c415f9e0bbc"), + ], + [ + MontFp!("0x81ef52c672737433"), + MontFp!("0x37b315d8abe01173"), + MontFp!("0x81641522ec336fa2"), + MontFp!("0xd1dcb4006f75db80"), + MontFp!("0xe01057583981c09d"), + MontFp!("0xe15c2fdbd2fa0868"), + MontFp!("0x1b7b78b61a3adab3"), + MontFp!("0xd8e6a93d4858d348"), + MontFp!("0x8a9e5a25ed078c23"), + MontFp!("0xbc503d55df63fe72"), + MontFp!("0xa248824148455705"), + MontFp!("0x810b1b6390aa9aea"), + MontFp!("0xfeb4c64541d2c29b"), + MontFp!("0x346c14905f941eb8"), + MontFp!("0xd1fb93e8f22b778f"), + MontFp!("0xe82c8622350aafc1"), + MontFp!("0xee6db701e484e24e"), + MontFp!("0x13701c397195d477"), + MontFp!("0xcf00aef6b66f3d86"), + MontFp!("0x99620f5303aa7218"), + MontFp!("0x387d20fbeee11457"), + MontFp!("0x5dfdba7cf8c9a1f2"), + MontFp!("0xdf2ac0bd2470f86c"), + MontFp!("0xdfcc435769de8316"), + ], + [ + MontFp!("0x94c961a6d5467e9d"), + MontFp!("0x8e8792275ff2233b"), + MontFp!("0x0dd14a0dc251e970"), + MontFp!("0x575289c45dfc9e0a"), + MontFp!("0x042ab718496919ee"), + MontFp!("0xc206f9ac07c65176"), + MontFp!("0xebb7fad74d70cc85"), + MontFp!("0xd57ebb65db572846"), + MontFp!("0xdd09c80720ceed7d"), + MontFp!("0x873c363f00095267"), + MontFp!("0x2e383339276e4093"), + MontFp!("0x4f0d0782b2c8b737"), + MontFp!("0x8f878fc66a5a7850"), + MontFp!("0xe843f529068ac009"), + MontFp!("0xcda19e17f3b54390"), + MontFp!("0x855fbf51c0d6c44a"), + MontFp!("0x212b33c109a9e69c"), + MontFp!("0x7a8e8eed51fab217"), + MontFp!("0x60ac3668f0153a22"), + MontFp!("0x988f514a0249e121"), + MontFp!("0x224ec281d7c0658e"), + MontFp!("0xb644df07c7e8553c"), + MontFp!("0xf5f41c3b9b9e2877"), + MontFp!("0x3ebacfb67a9a3d27"), + ], + [ + MontFp!("0x65146220a3a8c0a9"), + MontFp!("0x590cbc85158d1978"), + MontFp!("0xd7f05c8122ec1932"), + MontFp!("0xc3b6a635b5cc96fe"), + MontFp!("0x6c27c5d509479abf"), + MontFp!("0x213cd7dabcd6e78d"), + MontFp!("0x838394a5431c2262"), + MontFp!("0xd5126b30e589b46b"), + MontFp!("0xbeee79d6fd4f84df"), + MontFp!("0xb5c0145be96a54e5"), + MontFp!("0x9978b1c70566a3f4"), + MontFp!("0x32aa9454c633afec"), + MontFp!("0xaff40f199d069bed"), + MontFp!("0x4ff14e9914976425"), + MontFp!("0x8a65f1d1eb6a251e"), + MontFp!("0xefe6eac0a5eda30d"), + MontFp!("0xffc68f979de172e4"), + MontFp!("0xbcb3db712bcc55c6"), + MontFp!("0x93acf1aa6e8a9d22"), + MontFp!("0xbbe2e847cf55cf43"), + MontFp!("0x69ab97e431cee092"), + MontFp!("0x881245ef49e2630e"), + MontFp!("0xcd7dd1ce9d922e0c"), + MontFp!("0x45c5d132ef40296d"), + ], + [ + MontFp!("0x343f80118aefd015"), + MontFp!("0x43465c962ccdfc2b"), + MontFp!("0x82721cb7b420ca20"), + MontFp!("0x78e7e78fb9546ff6"), + MontFp!("0xfd29b50d0f75dd85"), + MontFp!("0x45d0c2853e73e828"), + MontFp!("0x1927823b3659c972"), + MontFp!("0x36973da7f6c94489"), + MontFp!("0x6b6b7abda0c9022f"), + MontFp!("0x246554ee3f49b7f5"), + MontFp!("0xdb2e964cd295f4a9"), + MontFp!("0x60176cb18febc37a"), + MontFp!("0xab3ee9f462bb182f"), + MontFp!("0x85a63e3a23c517cd"), + MontFp!("0xf3eafd818e849912"), + MontFp!("0xa71a472887e42560"), + MontFp!("0xa8497584dacae693"), + MontFp!("0x5a767c9b5af33d10"), + MontFp!("0xbc7c55b85a3ec210"), + MontFp!("0xe05d645b6ae931f2"), + MontFp!("0xc12786849459e0f6"), + MontFp!("0x40ba491713c91141"), + MontFp!("0xd00653990ca2882c"), + MontFp!("0x011bcce2af8947b3"), + ], + [ + MontFp!("0x7e02974d92a00607"), + MontFp!("0xb83b5cb0bcdccf43"), + MontFp!("0x564bab91568042d0"), + MontFp!("0x1c63e60462c4e019"), + MontFp!("0x5554fc74434296c4"), + MontFp!("0xc5203ce4d2739ea0"), + MontFp!("0x4ac41c9434f93808"), + MontFp!("0x605ecbf7258c092a"), + MontFp!("0x2f3a78ef34ad4ae9"), + MontFp!("0x044889efdd9aa67f"), + MontFp!("0xb5e2e07a2f599281"), + MontFp!("0xe09b7e66b2c03bf3"), + MontFp!("0xe03e874ed19e14a6"), + MontFp!("0xda7ebb461927ebcb"), + MontFp!("0x804471a032f8915f"), + MontFp!("0x1396b9bb6811a42c"), + MontFp!("0xdd71d36258b06442"), + MontFp!("0x130df22639f33fac"), + MontFp!("0xf61739314787dee8"), + MontFp!("0x1887569c23e6e352"), + MontFp!("0x014ba79f34e6fce3"), + MontFp!("0x8045bf85289d78cc"), + MontFp!("0x12e4ebbbe7d1cad1"), + MontFp!("0x375005b5be5091a7"), + ], + [ + MontFp!("0xc2a39a6a726ba40c"), + MontFp!("0xf05f642162cae0f3"), + MontFp!("0x7bf8d2344d8714c0"), + MontFp!("0xa1b07d2740c5faae"), + MontFp!("0x50ce5b0d7dfbe741"), + MontFp!("0x0be409c08d9ffb8c"), + MontFp!("0xdae3b133e3c164f0"), + MontFp!("0x93f7463331946134"), + MontFp!("0x71e4d4584114328a"), + MontFp!("0xf145cbdd12d6d7ab"), + MontFp!("0x50edee2f406941b9"), + MontFp!("0xd3972131bd7eada0"), + MontFp!("0x24fa8cd71b4eae21"), + MontFp!("0xb52034e8b78ceccd"), + MontFp!("0x5249785d00660bcf"), + MontFp!("0x8ef3991c1d400dee"), + MontFp!("0x5157a39b1bc5fa46"), + MontFp!("0xc5ccf2b41253d1a6"), + MontFp!("0xb78b560cbb846e87"), + MontFp!("0x4b4858ceff78d344"), + MontFp!("0xd83782e72665a5fb"), + MontFp!("0x67a9b40fdec2b07b"), + MontFp!("0xd2fdbef12ded02a8"), + MontFp!("0x377e3ced59300b66"), + ], + [ + MontFp!("0x6f8626cd1f73b995"), + MontFp!("0xdbdc5ac70c2f1db5"), + MontFp!("0xf8474fb2755d4e52"), + MontFp!("0xc791b175eb895c14"), + MontFp!("0x1ce7e03901233257"), + MontFp!("0x07e72c154695f91a"), + MontFp!("0x9695730685df4b7a"), + MontFp!("0x25f649edc3d06122"), + MontFp!("0xbbc643aedc69500e"), + MontFp!("0x0ac606eca1196a1b"), + MontFp!("0xacb6ad902f55b53d"), + MontFp!("0xa13dc1c7adf23c50"), + MontFp!("0xb2b2a9f836838c1d"), + MontFp!("0xae3a777f83e462c1"), + MontFp!("0x15275af835c10949"), + MontFp!("0xf0616aa86758e9bb"), + MontFp!("0xa64e610900966808"), + MontFp!("0xb72da03bfcc05953"), + MontFp!("0xc91ec7c060da1d68"), + MontFp!("0xcc58e551844cdad2"), + MontFp!("0xafc7268b6bd92069"), + MontFp!("0x859f91cb011a2187"), + MontFp!("0xeef1076c8c7109a6"), + MontFp!("0xbd2795d1630214c8"), + ], + [ + MontFp!("0xf366d8583f32ea90"), + MontFp!("0xf26c94a7546605d7"), + MontFp!("0x0cd09180d78fa6b3"), + MontFp!("0x4b7868ba6da62733"), + MontFp!("0x62d296ec2054b6ee"), + MontFp!("0x3dd83963b81ec606"), + MontFp!("0x3d2dea21bf186e22"), + MontFp!("0x0759723dc6d59f04"), + MontFp!("0x36f4b39344cdc1f5"), + MontFp!("0xf1d951516ea80e3b"), + MontFp!("0xaee081f9d2fa1142"), + MontFp!("0xa95fa79a5453e3e6"), + MontFp!("0xd13c71f5c90d60c0"), + MontFp!("0xe1ea6eb5dbbd2563"), + MontFp!("0xf6839746449acd72"), + MontFp!("0xd92905f95cfe48e6"), + MontFp!("0x209b2f366ecd2d4d"), + MontFp!("0xce2e7a3e32324698"), + MontFp!("0x307af7f7ff6ef841"), + MontFp!("0x12c470229ba56c9d"), + MontFp!("0x42a7437137c34811"), + MontFp!("0x7209d7d7c6d65434"), + MontFp!("0xbca149c078e914ce"), + MontFp!("0xffc49dfcd00ed664"), + ], + [ + MontFp!("0x24f7cf8fe7e0ebaa"), + MontFp!("0xa2836a607ecf9828"), + MontFp!("0x71a10299f72567e9"), + MontFp!("0xb47f36509cf355b5"), + MontFp!("0xc83fc41d0d1387e7"), + MontFp!("0xb2a2e236f27469f9"), + MontFp!("0xadbb4aba85a35fbc"), + MontFp!("0x5199ef01f475e0df"), + MontFp!("0x9030bf2f679c8866"), + MontFp!("0xd7ce53a695f7c660"), + MontFp!("0x6c56c712bfdea91f"), + MontFp!("0xb9964f64638eb87a"), + MontFp!("0x96790e4df82e0dac"), + MontFp!("0x87ff84ee04028999"), + MontFp!("0xc5bd94c7598bd77b"), + MontFp!("0x7d82e4f8ada3e307"), + MontFp!("0xc8c25a74c4c80ddb"), + MontFp!("0x44b2ba2d02469440"), + MontFp!("0xe429cf826b538f50"), + MontFp!("0x364022b037f9bd59"), + MontFp!("0x19bfca9a2421a5f2"), + MontFp!("0x3a1e127d18a6b2d8"), + MontFp!("0xa72c048d26b5c02a"), + MontFp!("0x9ef51363798d048e"), + ], + [ + MontFp!("0x650e70ba374f8db5"), + MontFp!("0x6aa7c0b89fa7d5f3"), + MontFp!("0x88b59973686e621e"), + MontFp!("0x53479cfe59a786bf"), + MontFp!("0x393e059636a6735a"), + MontFp!("0x31199a2b2e9e05ec"), + MontFp!("0xa4f1abfa5aea6c88"), + MontFp!("0x6e57a3d21676bce0"), + MontFp!("0x648390659ac120f1"), + MontFp!("0xffe5d8bd45073a28"), + MontFp!("0xe2aec08796d412eb"), + MontFp!("0xd347bcb985bd6c98"), + MontFp!("0xce0be57d467fd41b"), + MontFp!("0xa8c83853d9af14f2"), + MontFp!("0xf2211480b0cac644"), + MontFp!("0x938f699af2dccbaf"), + MontFp!("0xb5f5585d07dd3121"), + MontFp!("0x39099d919a9a3433"), + MontFp!("0xaa31e0631af4715d"), + MontFp!("0xaed0ee6513f2cd4a"), + MontFp!("0x47c60ff2682d341a"), + MontFp!("0xc7812f2b15b4d1c0"), + MontFp!("0xfd13a34b8bdf9af8"), + MontFp!("0x100ea11c5c02a404"), + ], + [ + MontFp!("0x2f0a1c653891e702"), + MontFp!("0xd6d2b8ad02557ca7"), + MontFp!("0xcebae0203537d09e"), + MontFp!("0x829e335708b96814"), + MontFp!("0x95e7f17e7bb094a6"), + MontFp!("0x53541780a28f6e18"), + MontFp!("0x6075e3de5bd7e4df"), + MontFp!("0x61f56e8ad7b19960"), + MontFp!("0x6e4c9b37600f1298"), + MontFp!("0xe7b01b104244bcd9"), + MontFp!("0x9c59cbdbcc51730b"), + MontFp!("0xbc47bb031af028cf"), + MontFp!("0x3677d3f2bd7eeca2"), + MontFp!("0x5d3cb61dccac5d9e"), + MontFp!("0x6d0b31a5fb3c271d"), + MontFp!("0xb21f6400fd086c35"), + MontFp!("0xa5fb3f7142e2d9fc"), + MontFp!("0x49d215dc37a4313a"), + MontFp!("0xfd046175519309e7"), + MontFp!("0xf37ffeb64a905ef2"), + MontFp!("0x7c16568222e76963"), + MontFp!("0xe0fbb7ddc23ecade"), + MontFp!("0xc4bfcb6d955556e5"), + MontFp!("0x7a9b4d3d8e70e092"), + ], + [ + MontFp!("0x8a30e5ff5d50ac6d"), + MontFp!("0x1adc4117aca7caf1"), + MontFp!("0xb397b866e8c18dc1"), + MontFp!("0x0315877f5ab16f1f"), + MontFp!("0xd79dc8738277eede"), + MontFp!("0xf1ee68fd8c4d3aa6"), + MontFp!("0xcdd815ad10f3834e"), + MontFp!("0x727f0450278fd96e"), + MontFp!("0x05d8afec32159d95"), + MontFp!("0x78ad7ee8c3005e00"), + MontFp!("0x41c1f7322006f816"), + MontFp!("0x1bf427789d4c9f03"), + MontFp!("0x22559a72310bc8fe"), + MontFp!("0xc968299e1aaa9593"), + MontFp!("0x272e87ff7e8ca57d"), + MontFp!("0xd853ba580423f8b7"), + MontFp!("0x25a6a2652962b61b"), + MontFp!("0xd72766740e4bf870"), + MontFp!("0x99987cf5b4436055"), + MontFp!("0x4244398c17c22202"), + MontFp!("0xe71d4852d6bd938e"), + MontFp!("0xa8124c28da8f5da1"), + MontFp!("0x698aad54b6358897"), + MontFp!("0x17eac6edeb5aa21e"), + ], + [ + MontFp!("0x5c79fd334ba05e3b"), + MontFp!("0x27dfd5b99390ca5f"), + MontFp!("0xe517455cdb5a27fa"), + MontFp!("0xda6ee59dd844e902"), + MontFp!("0x5eed7395c9efd87c"), + MontFp!("0x84768c0f366370d4"), + MontFp!("0xc46e6a652e90ab6b"), + MontFp!("0x7304ecb2ff74d8fb"), + MontFp!("0x83fb32e11b5418b9"), + MontFp!("0xfd626f0ca458a9ae"), + MontFp!("0xd48ac456c9f462c9"), + MontFp!("0x5128eb899b5f75c5"), + MontFp!("0x5ba2bdacf5ae830b"), + MontFp!("0xb8bee4829965e53d"), + MontFp!("0x47c114b4995cbc8e"), + MontFp!("0xfa27bd1981b8543a"), + MontFp!("0xb91bcb4485bc5b59"), + MontFp!("0xc999ee357e5d0743"), + MontFp!("0x2173126bce0998e5"), + MontFp!("0x49306fb62698731e"), + MontFp!("0xa95a7c3f9576d83e"), + MontFp!("0xfed02e83d4cb644e"), + MontFp!("0xfac42a6f4a7f607f"), + MontFp!("0xdfa297bb91b31272"), + ], + [ + MontFp!("0x0e2e3c036265540f"), + MontFp!("0x9060f6606046fbf7"), + MontFp!("0xfaa97293e53ff0b7"), + MontFp!("0x28bb9cb0805584a6"), + MontFp!("0x6c76dbf284b55b0b"), + MontFp!("0x2b08abd4cb230179"), + MontFp!("0x9713b036303ff459"), + MontFp!("0x071b9537f8addba2"), + MontFp!("0x31cb52ff38df889e"), + MontFp!("0x0f2757d0b09b6b30"), + MontFp!("0x83c3771da4d8f83e"), + MontFp!("0x5455bcbc815449cf"), + MontFp!("0x3b5aec0339c8bc05"), + MontFp!("0xa023e8373d94ad70"), + MontFp!("0xf98f6707b5e68e51"), + MontFp!("0xeb0c99b28c5508ba"), + MontFp!("0x8da4d717d6917f93"), + MontFp!("0xd261a675ccaf0931"), + MontFp!("0xd5ac7aebd2b5ab72"), + MontFp!("0x9bee6daeff38425f"), + MontFp!("0x688011c60c30d6f7"), + MontFp!("0x9c6b9936f6b3b9e5"), + MontFp!("0x73bdd705b0ef2be0"), + MontFp!("0x28289d4a28a54c54"), + ], + [ + MontFp!("0x52c4bbb7d087e0f8"), + MontFp!("0xfd028b8920ef5e02"), + MontFp!("0x3cdc0ff7e59699eb"), + MontFp!("0xd6d948108134638c"), + MontFp!("0xe114acaa4c3c7d44"), + MontFp!("0x9f443556896ac48b"), + MontFp!("0xa546b2a580aa8ca4"), + MontFp!("0x7d839e119987f989"), + MontFp!("0x9101b1a8c4ad4469"), + MontFp!("0x69a14fd05b19b55d"), + MontFp!("0xf554d5b5618bd2aa"), + MontFp!("0x5af442dd1fc7ff5f"), + MontFp!("0xe378d24d574f010b"), + MontFp!("0x761aa0126e3bbb3e"), + MontFp!("0x20f6d7fe7bf14d2e"), + MontFp!("0x25aa59b22c9fbf84"), + MontFp!("0x4f02ed1014fc219b"), + MontFp!("0x82e28b79a0eef764"), + MontFp!("0x0d329d2cefe21731"), + MontFp!("0x3a4ee27972d0dbde"), + MontFp!("0x6e23cc36261cd6f5"), + MontFp!("0x02ea8241936a6cfb"), + MontFp!("0x55cc05da8fae5b12"), + MontFp!("0xa90c564c08445fde"), + ], + [ + MontFp!("0x180f8e092fed112e"), + MontFp!("0xd89394347fb37ccc"), + MontFp!("0xeed6dd94e3077f04"), + MontFp!("0x9b3d610eb0584ea4"), + MontFp!("0x0573568abc4f5f00"), + MontFp!("0x1d6c0c843d0d4dae"), + MontFp!("0x671fb868f854194f"), + MontFp!("0x6437126fb961b1ec"), + MontFp!("0x463e793dee4d9e2f"), + MontFp!("0x76f0c73db26b157e"), + MontFp!("0xb2c0aecb000f747d"), + MontFp!("0xec7d1cb611a266d8"), + MontFp!("0x4fa4f66a60a36091"), + MontFp!("0x826f76d6f80183ea"), + MontFp!("0x2843f937fd6a675f"), + MontFp!("0x984947368b15fe4c"), + MontFp!("0x779372cb8e381b52"), + MontFp!("0x13fe5bab707ea772"), + MontFp!("0x8e6e834aa2cd1289"), + MontFp!("0x7d22216e61f0dee1"), + MontFp!("0x245350de5cb46e4b"), + MontFp!("0x9dbb500860cd6712"), + MontFp!("0xbe597a8b4b069982"), + MontFp!("0x3ad1b353edbaf673"), + ], + [ + MontFp!("0x667ef1006abcc989"), + MontFp!("0x38e70f5c0d67908b"), + MontFp!("0x95e48ba2454e460c"), + MontFp!("0xe2a81cd03dead17d"), + MontFp!("0x6b69a35eb55dacef"), + MontFp!("0x5634d202b959d2a0"), + MontFp!("0x8a30d0c7f8c83dd1"), + MontFp!("0xbf5a8c87d40706a9"), + MontFp!("0x5ae5ef83e9ac0076"), + MontFp!("0xb491df1aa73d6fb4"), + MontFp!("0xe913d2e56bde6c13"), + MontFp!("0x7a20706e10be6553"), + MontFp!("0xc0914b7b61c2231c"), + MontFp!("0xe402818266090a19"), + MontFp!("0x30e29bbc92bd9db6"), + MontFp!("0x20ed8a2340989360"), + MontFp!("0x0ee6b25adb7d8843"), + MontFp!("0x2d2466efc9756196"), + MontFp!("0x3c3ca3f34074d640"), + MontFp!("0x965cc36b32fbeaa6"), + MontFp!("0x4e98b8c90139ef3f"), + MontFp!("0x2d6f913039305ddf"), + MontFp!("0xf19ce84275b3b415"), + MontFp!("0x9778578df08450a1"), + ], + [ + MontFp!("0xf5813cde7940e9fa"), + MontFp!("0x27ddb44c869b7490"), + MontFp!("0xaf2eecbbbb197d15"), + MontFp!("0x60722a845b50ac53"), + MontFp!("0x47aea498ffc86edf"), + MontFp!("0xa739f4ccd04a04a8"), + MontFp!("0xbd156b3f461d10f9"), + MontFp!("0x3673e4ee07f55b4b"), + MontFp!("0xea16bc46d7fda0a9"), + MontFp!("0x9ed60fdc47c5e224"), + MontFp!("0xf1e517356674bc62"), + MontFp!("0x94ac118cb773c6d9"), + MontFp!("0x1846f2e1f730ca84"), + MontFp!("0x0da8dbbbbfb7209f"), + MontFp!("0x4592e046592644d5"), + MontFp!("0xad7aa930d0d469ac"), + MontFp!("0x99736d4e28861066"), + MontFp!("0x9e636862e7596b6c"), + MontFp!("0x8f05eb07a269a38e"), + MontFp!("0xd60215c99722304d"), + MontFp!("0xa7114abea10880ac"), + MontFp!("0xffd6a07c924f53df"), + MontFp!("0x583bf00ff1ee3f81"), + MontFp!("0x5383e8d7806dfa1f"), + ], + [ + MontFp!("0x46c4d34efb63f9db"), + MontFp!("0xa9f56ca621f90a66"), + MontFp!("0x958d68e21b36119b"), + MontFp!("0xace22145470d8c30"), + MontFp!("0x5921de12d02bc56d"), + MontFp!("0x186a5f66f7e77137"), + MontFp!("0xa4068544766903df"), + MontFp!("0x5cec9d8696fb83e1"), + MontFp!("0xfb550b5b153acdcd"), + MontFp!("0x20dafe1c3b31724c"), + MontFp!("0x997137cdde38fd72"), + MontFp!("0x1f6d9058b062b702"), + MontFp!("0x712d0e95a3c04481"), + MontFp!("0xd3ddb1fbee50282f"), + MontFp!("0xf46898bcb147f20a"), + MontFp!("0x1ef0be8b7b50d90f"), + MontFp!("0xa203b69049d27c00"), + MontFp!("0x3718ef214103a0d1"), + MontFp!("0x6129a6307caa0a5c"), + MontFp!("0x19b35e6a87c8d3de"), + MontFp!("0xa850f00b52e2177d"), + MontFp!("0x2e6ddb8d286f0b81"), + MontFp!("0xbe22607525b0a81f"), + MontFp!("0x3dde291194e0a586"), + ], + [ + MontFp!("0x3848c993fb25ff4c"), + MontFp!("0xe8550d6fc96fc367"), + MontFp!("0xfa4eafcb414335b4"), + MontFp!("0xc9a12df85369d0e1"), + MontFp!("0x0756b33d4cf9fdab"), + MontFp!("0x41caf75b9b1e5154"), + MontFp!("0xa6d08d62b9f8c1fa"), + MontFp!("0x139a4789d699ab85"), + MontFp!("0x3b250d01c625e2b4"), + MontFp!("0x79c2a0a694bc7344"), + MontFp!("0x7a9634781feb0453"), + MontFp!("0x28709070219c3888"), + MontFp!("0x18d43dc90c766164"), + MontFp!("0x96b197a9d7fec243"), + MontFp!("0x6fdb315e0b664e19"), + MontFp!("0x2d5a72ad9ff0a223"), + MontFp!("0x21a660dc694cad1a"), + MontFp!("0xde66dbca71296555"), + MontFp!("0x8b9e2138082f39cc"), + MontFp!("0x83b76f5f9019fa60"), + MontFp!("0x6727154e298567c6"), + MontFp!("0x8014b7cf50fcf44a"), + MontFp!("0x59aecc78a111919f"), + MontFp!("0xd580d1b6174962ad"), + ], + [ + MontFp!("0xe2127af8d8c6639e"), + MontFp!("0x14689b44f07f27a7"), + MontFp!("0x22860a42a7709db9"), + MontFp!("0x313383d0d3ecfea5"), + MontFp!("0x69dc82fe5e3cc50c"), + MontFp!("0xb50650f38fcd8de4"), + MontFp!("0xc7297add6656b203"), + MontFp!("0xcec8479a0b714f2d"), + MontFp!("0x1d1ccdad0255fbaa"), + MontFp!("0x99867e3b621f7d30"), + MontFp!("0xd2a074f618f9ed42"), + MontFp!("0x5e80ace956c30fd9"), + MontFp!("0x0930031426cda7af"), + MontFp!("0x3b0d03a444d464ec"), + MontFp!("0x02e8ed651effc795"), + MontFp!("0x72191d54caf16c3c"), + MontFp!("0xe473a3be39f0fa8e"), + MontFp!("0x4914efcb54dfeab5"), + MontFp!("0xa21d9b8552313764"), + MontFp!("0xa6cb35459cd95761"), + MontFp!("0x03b8ce7c85abe70b"), + MontFp!("0xf66d518698bc6eff"), + MontFp!("0xe9079b2516ce426e"), + MontFp!("0x6471c069e3c17550"), + ], + [ + MontFp!("0xcd64faef6c52643c"), + MontFp!("0x4f963f7b51922df4"), + MontFp!("0xf6009bd08c73c6d2"), + MontFp!("0xc71d08f3d13de6f4"), + MontFp!("0x3b1ed22f80fa82c3"), + MontFp!("0xf1882a71ce2859eb"), + MontFp!("0xbfe279e8499f2dec"), + MontFp!("0x54cb4fa6c6be308d"), + MontFp!("0x6c3d82e4e9ed1d9d"), + MontFp!("0x0ff589c6cbc212da"), + MontFp!("0xb3514e7139cb0328"), + MontFp!("0x2c53d223b5fb5a39"), + MontFp!("0x709cc2a80f049c41"), + MontFp!("0xe8fb8d3130fcf235"), + MontFp!("0x9c9040c07493bef5"), + MontFp!("0xaf8e363e73b8b361"), + MontFp!("0xa6e3c3aba13e09bd"), + MontFp!("0x79dcc5f55ef2f040"), + MontFp!("0x0eaac826f504c07f"), + MontFp!("0x92961be29e469a47"), + MontFp!("0x0b534f28ff6d906d"), + MontFp!("0xcf5ed6bb2c792d00"), + MontFp!("0x1ec64ef488a8b24e"), + MontFp!("0xd11859b8c56ab3ab"), + ], + [ + MontFp!("0xa48e86dae35bff75"), + MontFp!("0x59fa8f477aca7351"), + MontFp!("0xe70d8916c8ff3374"), + MontFp!("0x60f79cb9198ad65e"), + MontFp!("0xef8804c9febcea16"), + MontFp!("0x94ebb692fb5d2fa8"), + MontFp!("0xb2257a02c0160830"), + MontFp!("0xd09cb1b0513e78b0"), + MontFp!("0xf9811869c819ce1d"), + MontFp!("0x44e0d1445828d654"), + MontFp!("0xae17216f4d20f631"), + MontFp!("0x71171627c0193c68"), + MontFp!("0x469997e36229103f"), + MontFp!("0xec4c9c9bb63a2ba7"), + MontFp!("0x628dbef89ed49a13"), + MontFp!("0x2b7a3b090e565df0"), + MontFp!("0xfafc8c3584d01c52"), + MontFp!("0x9dddee38bac55605"), + MontFp!("0x2eace0fd4bdc8f2e"), + MontFp!("0x9bab98753169ef2b"), + MontFp!("0x72151d0952d4796f"), + MontFp!("0x48cb578a6ab90f3e"), + MontFp!("0x554c30d0161710b4"), + MontFp!("0x661dba38f827fbec"), + ], + [ + MontFp!("0xf877ace6428051ab"), + MontFp!("0x4b485b8cc79d8fa8"), + MontFp!("0x74566cb59791222e"), + MontFp!("0x39fd592c33bc3003"), + MontFp!("0xc9abe364462f3573"), + MontFp!("0x1295898195f3b36b"), + MontFp!("0xca56b8e9b975c195"), + MontFp!("0x0181fdaff9c10f30"), + MontFp!("0xe2f0a7ca6bcff392"), + MontFp!("0x101c1f38e8dd1a31"), + MontFp!("0x3dd471d02454744c"), + MontFp!("0x266d6c6913519430"), + MontFp!("0x1d0c774c31e053f7"), + MontFp!("0x784b69b94ae1b40f"), + MontFp!("0x4ade01e00964a69c"), + MontFp!("0x78cf4e5889eef68c"), + MontFp!("0x26f7c05ff2facc43"), + MontFp!("0x3df47fba4095e9a0"), + MontFp!("0xdbaaf5f8c8d20dea"), + MontFp!("0x0b611475faf422fd"), + MontFp!("0xa829d7ce1d02ca1c"), + MontFp!("0xec2104f2c96099cf"), + MontFp!("0x5a8b994e05f70de0"), + MontFp!("0x8552861229cbe819"), + ], + [ + MontFp!("0x57f976d342a40446"), + MontFp!("0x0c50b26b8fd41dd7"), + MontFp!("0x8f4a7b45af8da415"), + MontFp!("0x88db23899c2db2ee"), + MontFp!("0x2151520c1b4cc4ba"), + MontFp!("0x078e6f60fd354bbb"), + MontFp!("0x3a034737d997b190"), + MontFp!("0x1bc72398c2e17119"), + MontFp!("0xbb556a68f988edb9"), + MontFp!("0x4e56cc27d8b96076"), + MontFp!("0xe6b057bd10954e3e"), + MontFp!("0x96aeb5015844e919"), + MontFp!("0x5f244c6fa3f0e809"), + MontFp!("0x561fab8847e58dea"), + MontFp!("0xe016ea05acf432e6"), + MontFp!("0x0bc460928dc229d2"), + MontFp!("0x09adb5e8baa2b7a3"), + MontFp!("0x62e144bd9e8b6eed"), + MontFp!("0x7a20dc37ccc7eea7"), + MontFp!("0x53f0f051290e8ce8"), + MontFp!("0xfffbf2ef9342c295"), + MontFp!("0xc5c08db5b1e0c0ef"), + MontFp!("0x6c813a08e5e52187"), + MontFp!("0xdf3c8b2b30bd5710"), + ], + [ + MontFp!("0x00b8052ff9ed3bc7"), + MontFp!("0xab4809bc5e153283"), + MontFp!("0xbdaf55e55e5a946c"), + MontFp!("0xc8ae40ffe329aafd"), + MontFp!("0xc03db8737d5e9b0e"), + MontFp!("0x111573eb26c19ece"), + MontFp!("0x6f21e1e5f038457d"), + MontFp!("0x09aa79c6bf5572cb"), + MontFp!("0x758aa3623eb60afd"), + MontFp!("0xad78dfde49e9c154"), + MontFp!("0x49394ac17a464193"), + MontFp!("0x501987164c82506c"), + MontFp!("0xdc6bde1d3317ffc7"), + MontFp!("0xa62aae96bc33c54d"), + MontFp!("0xaf511b412091131c"), + MontFp!("0x7cac9808671412ff"), + MontFp!("0x741fd789fb29b2b0"), + MontFp!("0x49a762ff7b1fabbd"), + MontFp!("0x04adb6fc05912379"), + MontFp!("0x14772edd7d7f544c"), + MontFp!("0x4062543d96637f8b"), + MontFp!("0xa98e93e4ec0a752c"), + MontFp!("0x419e5745a6372907"), + MontFp!("0x221762f9de62d8cd"), + ], + [ + MontFp!("0x0520d8cb581b7ff7"), + MontFp!("0x35f92a620ab3f59b"), + MontFp!("0x050ae41494a0a27d"), + MontFp!("0xbd30173dba7c09e0"), + MontFp!("0x95b76cb9a4cacf40"), + MontFp!("0xd8ca73b24ded4f0e"), + MontFp!("0x0ac67b34aecac78d"), + MontFp!("0x7be7b4f6d85eb6ce"), + MontFp!("0x887f5d9c98f3ccd4"), + MontFp!("0x429a406291c1d58f"), + MontFp!("0x13bcf186d5a050d4"), + MontFp!("0xfd11e4b4c7939f69"), + MontFp!("0xdf681f54bc29bba9"), + MontFp!("0x4fda999dc485474a"), + MontFp!("0xd6e47cf174037c2f"), + MontFp!("0x41301e4b94127914"), + MontFp!("0x8acd75a2e9a2f121"), + MontFp!("0x57d7c037fed25bd7"), + MontFp!("0xafaf80639a2aaec1"), + MontFp!("0xa2649a6cc4088945"), + MontFp!("0x17a3332b2a7c8646"), + MontFp!("0x170f082cd1466641"), + MontFp!("0xded4aa0c8927774d"), + MontFp!("0x0a2969d6cce86e0f"), + ], + [ + MontFp!("0x693d0b3ee4e55638"), + MontFp!("0x5d9e689eac721c7a"), + MontFp!("0x1a129e54784a71f4"), + MontFp!("0x8dbc32d3877435e5"), + MontFp!("0xa219d6f8d67fb022"), + MontFp!("0xde823f0c6d7709ec"), + MontFp!("0xb377effc344827a3"), + MontFp!("0x9df05eb0ab57d1ee"), + MontFp!("0x789e366e3b504906"), + MontFp!("0x704a90ff93a4e052"), + MontFp!("0x85cfed78eb1d7ab1"), + MontFp!("0x9d6a8656f295d65d"), + MontFp!("0x6b26de5af87d1f60"), + MontFp!("0x0d9673a9705b3470"), + MontFp!("0x2cf7d74f496cf38a"), + MontFp!("0xbc6b922a0ec7009b"), + MontFp!("0x5e95a43c1fc2ada2"), + MontFp!("0x93d4969823a82170"), + MontFp!("0x953bc3e78eac5f99"), + MontFp!("0xb33d84f1dd399d57"), + MontFp!("0x0c3475cb0974502f"), + MontFp!("0xb6917879b1f8b749"), + MontFp!("0x641a76bcb920c65c"), + MontFp!("0x34611e733e6ef5b8"), + ], + [ + MontFp!("0xbf737a4fc375cfd9"), + MontFp!("0xf2f9638aa8f154a9"), + MontFp!("0x46f503e21d935d21"), + MontFp!("0x53600931ac352abc"), + MontFp!("0x2764f7e2e5237664"), + MontFp!("0x1d6bacf9c6650060"), + MontFp!("0xcf4bc37bf99a4e6b"), + MontFp!("0x34802651fea4b8b5"), + MontFp!("0x1cc4fc6478c6d11f"), + MontFp!("0xc56e321f654bb5d8"), + MontFp!("0xa6d9cdcceeb5c8cc"), + MontFp!("0xda766866344c37ef"), + MontFp!("0x6a90d4a70ce6b086"), + MontFp!("0x035b50d7743c2306"), + MontFp!("0xd906110ba001a3ce"), + MontFp!("0x33a01e3f6cfab462"), + MontFp!("0xb5b532f25dbd9466"), + MontFp!("0x9ce78a37168fcd38"), + MontFp!("0x822e446049a84c39"), + MontFp!("0x874113bb78fd52be"), + MontFp!("0x72a0c4d7aaab60fd"), + MontFp!("0xcd2b89710f9423d4"), + MontFp!("0x0216fe71bc29d813"), + MontFp!("0xd4d2d065e4ad2233"), + ], + [ + MontFp!("0x305d55187271839d"), + MontFp!("0xf2a44cc81e6f4dbf"), + MontFp!("0xacc1da2b5a9b8f66"), + MontFp!("0x0154a616803e72cd"), + MontFp!("0x3fc328932f58f585"), + MontFp!("0x197f581291038e85"), + MontFp!("0x39750fd4c813c6b0"), + MontFp!("0x1c2f50bf687d1373"), + MontFp!("0xb1d355cffcde7559"), + MontFp!("0x14c772d3a98d3162"), + MontFp!("0x11849c30d1c92cd7"), + MontFp!("0xb5cfd644f687e777"), + MontFp!("0xe662fe6d83e1f722"), + MontFp!("0xeb65e48248913f90"), + MontFp!("0x88089e653e075f5e"), + MontFp!("0x93fba0181750da8c"), + MontFp!("0x7a522cac2f8e851f"), + MontFp!("0x7e1f8d0115cd79d6"), + MontFp!("0x55008c2f99027408"), + MontFp!("0x2d3287c0fecb1991"), + MontFp!("0xa22eead2131972c0"), + MontFp!("0x6dcbdc57ea9c4126"), + MontFp!("0xc5577594c155ec40"), + MontFp!("0x044fc62405e8998d"), + ], + [ + MontFp!("0xe3304c9597934077"), + MontFp!("0x0b1bec02c7c4da46"), + MontFp!("0x8fd0ce31d874b415"), + MontFp!("0x9576e4c579e62946"), + MontFp!("0x974c1306045a9c59"), + MontFp!("0x4d83760cfd572ebb"), + MontFp!("0x5be607bb8bd5e3b0"), + MontFp!("0xa5bf00b8cee12762"), + MontFp!("0x5d86fc92254bf1a6"), + MontFp!("0xbb273b9aeff85b27"), + MontFp!("0xb9af0c1c79b1e711"), + MontFp!("0xe6583740574607e3"), + MontFp!("0x1e7cec13824741eb"), + MontFp!("0xaedcb4539357df03"), + MontFp!("0x30ffba4475593e5d"), + MontFp!("0xcfb5db962e4d9e6f"), + MontFp!("0xb8897614b54b3a1a"), + MontFp!("0x148ff920c6ed9022"), + MontFp!("0x920b1042483a8f04"), + MontFp!("0x187035c46c96c545"), + MontFp!("0x347087af158ef7b5"), + MontFp!("0xab402ab8e746c824"), + MontFp!("0x91ede8faa74fb33b"), + MontFp!("0xc8c6c501b82dbcf0"), + ], + [ + MontFp!("0xd1f040a1fa2747bd"), + MontFp!("0x7dcc2d38ec5840c5"), + MontFp!("0xa21126cb270c510f"), + MontFp!("0xfaae1c31ef073c32"), + MontFp!("0xdd8e6b07dc91e942"), + MontFp!("0xb624a110f8cec227"), + MontFp!("0xaec163de17b50d75"), + MontFp!("0x678539dd6657647e"), + MontFp!("0xf5472b15e51ca3ae"), + MontFp!("0xf9bd4fae8c4e0b44"), + MontFp!("0x90d75fb40243a42d"), + MontFp!("0x06cf8cccdb5eff03"), + MontFp!("0xec36c5ec208bfe45"), + MontFp!("0xb75ca64c88217854"), + MontFp!("0x5a4bc3334e241d0e"), + MontFp!("0x2b23492e6063f85a"), + MontFp!("0x7b07e58b81603e5a"), + MontFp!("0x541af67609b9d04e"), + MontFp!("0x5cd610b1f6246f85"), + MontFp!("0x557ca8c4fd6776ad"), + MontFp!("0xd97c831c21e88b90"), + MontFp!("0x174f7d54d9d9ebe9"), + MontFp!("0xf381dbbf3498b78a"), + MontFp!("0x986f29f1dc6e598b"), + ], + [ + MontFp!("0xa4718a7b5e12563b"), + MontFp!("0x1c787a410022f5c4"), + MontFp!("0xda7395c3602c0e8d"), + MontFp!("0xb5e17ac67f3b33c1"), + MontFp!("0x0f3794f298c7d83b"), + MontFp!("0x44f2e69345b39d48"), + MontFp!("0xd82ef1a33153e174"), + MontFp!("0x303d6d48e5ba749f"), + MontFp!("0x534d65a3905f9baa"), + MontFp!("0x23a024244f9ad197"), + MontFp!("0x1ee65c492e0a0e8b"), + MontFp!("0xb7e245c51d7100f9"), + MontFp!("0x761145af8b8c62da"), + MontFp!("0x8cc36f8952dc42c8"), + MontFp!("0x2b7e69e7a5ea4a0f"), + MontFp!("0x72ca1d2aa1d2d24b"), + MontFp!("0x35139f449c283994"), + MontFp!("0x36702c2161c46599"), + MontFp!("0x3b4e0430e0ef8417"), + MontFp!("0xc9176d096a15fbec"), + MontFp!("0xf83041f965907f2c"), + MontFp!("0x9a7470d3dd819638"), + MontFp!("0xc0cf55fe02efee75"), + MontFp!("0x582653ec01605c82"), + ], + [ + MontFp!("0x436f4e4a8692b837"), + MontFp!("0xc705aaeb883b7a3c"), + MontFp!("0x6f73d2f95c563b8e"), + MontFp!("0xa82726ad84b40689"), + MontFp!("0xd52492971accce8b"), + MontFp!("0x64a4790fa27a593d"), + MontFp!("0xd3eab2d93291c84a"), + MontFp!("0x0cff7054ddd38e24"), + MontFp!("0x1b3fde4439d1a41b"), + MontFp!("0x4899536f581c6130"), + MontFp!("0xc0dc2a69b29afae8"), + MontFp!("0xb00c7556fc92a6dc"), + MontFp!("0x34d60584c0d06da2"), + MontFp!("0x5b47803e783bcdb0"), + MontFp!("0xcc47dbfd08511624"), + MontFp!("0x159df2d8cbc557c0"), + MontFp!("0xf25d94eda71ee8e9"), + MontFp!("0xd65814552132ff4f"), + MontFp!("0xa40e83a8323bf379"), + MontFp!("0x092b4aed35d1f724"), + MontFp!("0x675505ed1a7ae4b1"), + MontFp!("0x651e165e37ecadfc"), + MontFp!("0x547c0c5d44890135"), + MontFp!("0x68f3f86b14571bef"), + ], + [ + MontFp!("0x69b3eabdb1f93e06"), + MontFp!("0x8e9446a2306273a7"), + MontFp!("0xe56bc7dd7e269d86"), + MontFp!("0xd268629e15540a61"), + MontFp!("0xcc1ae494f6cbe85c"), + MontFp!("0xf9b67e546f345d61"), + MontFp!("0x1f2a1dcc922535ab"), + MontFp!("0xcb32f767dd99c7ea"), + MontFp!("0x7c5484ced2210dc2"), + MontFp!("0xee7e959891973ed7"), + MontFp!("0x5a8854c0aa276e78"), + MontFp!("0xebbd2c49615891f5"), + MontFp!("0xc3e702e07c097227"), + MontFp!("0x14062e4969cfd241"), + MontFp!("0x119201016761e94c"), + MontFp!("0xdeb61fcfef6c8164"), + MontFp!("0x4728d6620731f961"), + MontFp!("0xd35f176670a0fb71"), + MontFp!("0x1c389c333b9b48df"), + MontFp!("0x3a2f748490b79666"), + MontFp!("0xee1cdc0805cb5f53"), + MontFp!("0x8f671e24771a48ea"), + MontFp!("0xad05502389b8498c"), + MontFp!("0x1e180b87e426c7ff"), + ], + ]; +} diff --git a/nimue-poseidon/src/lib.rs b/nimue-poseidon/src/lib.rs index fb97ae8..fd1553e 100644 --- a/nimue-poseidon/src/lib.rs +++ b/nimue-poseidon/src/lib.rs @@ -112,6 +112,7 @@ where for i in 0..full_rounds_over_2 { self.apply_ark(&mut state, i); self.apply_s_box(&mut state, true); + println!("{:?}", state); self.apply_mds(&mut state); } @@ -166,6 +167,9 @@ pub mod bls12_381; #[cfg(feature = "bn254")] pub mod bn254; +#[cfg(feature = "solinas")] +pub mod f64; + /// Unit-tests. #[cfg(test)] mod tests; diff --git a/nimue-poseidon/src/tests.rs b/nimue-poseidon/src/tests.rs index 08979b9..0151562 100644 --- a/nimue-poseidon/src/tests.rs +++ b/nimue-poseidon/src/tests.rs @@ -5,7 +5,7 @@ fn test_vector(input: &[H::U], output: &[H::U]) where H::U: PartialEq + std::fmt::Debug, { - let mut hash = H::new([0; 32]); + let mut hash = H::default(); hash.as_mut().clone_from_slice(input); hash.permute(); assert_eq!(hash.as_ref(), output); @@ -39,7 +39,11 @@ fn test_squeeze_bytes_from_algebraic_hash() { .map(|i| merlin_challenges.iter().filter(|&&x| x == i).count()) .collect::>(); // each element should appear roughly 8 times on average. Checking we're not too far from that. - assert!(frequencies.iter().all(|&x| x < 32 && x > 0), "This array should have random bytes but hasn't: {:?}", frequencies); + assert!( + frequencies.iter().all(|&x| x < 32 && x > 0), + "This array should have random bytes but hasn't: {:?}", + frequencies + ); } #[cfg(feature = "bls12-381")] @@ -132,3 +136,18 @@ fn test_poseidon_bn254() { ]; test_vector::(&tv_x5_254_5_input, &tv_x5_254_5_output); } + + + +#[cfg(feature = "solinas")] +#[test] +fn test_poseidon_f64() { + use crate::f64; + use crate::f64::PoseidonPermx3_64_24; + use ark_ff::MontFp; + type F = f64::Field64; + + let tv_x5_255_3_input: [F; 24] = [MontFp!("0x0000000000000000"), MontFp!("0x0000000000000001"), MontFp!("0x0000000000000002"), MontFp!("0x0000000000000003"), MontFp!("0x0000000000000004"), MontFp!("0x0000000000000005"), MontFp!("0x0000000000000006"), MontFp!("0x0000000000000007"), MontFp!("0x0000000000000008"), MontFp!("0x0000000000000009"), MontFp!("0x000000000000000a"), MontFp!("0x000000000000000b"), MontFp!("0x000000000000000c"), MontFp!("0x000000000000000d"), MontFp!("0x000000000000000e"), MontFp!("0x000000000000000f"), MontFp!("0x0000000000000010"), MontFp!("0x0000000000000011"), MontFp!("0x0000000000000012"), MontFp!("0x0000000000000013"), MontFp!("0x0000000000000014"), MontFp!("0x0000000000000015"), MontFp!("0x0000000000000016"), MontFp!("0x0000000000000017")]; + let tv_x5_255_3_output: [F; 24] = [MontFp!("0x213efd2211b3973a"), MontFp!("0x166d183ef79550cf"), MontFp!("0x59baa9e4812f63da"), MontFp!("0xd1b0c6d5cc76a062"), MontFp!("0x00730338e6873644"), MontFp!("0x817e3a361c89952c"), MontFp!("0x1fadd87f0f791faa"), MontFp!("0x7ec7fc90801acbcb"), MontFp!("0xb3a5a02a68f6ab59"), MontFp!("0x636b2871ca76d626"), MontFp!("0x9bf8320b55f7d177"), MontFp!("0x4728f3af5ff11f87"), MontFp!("0x0987fd5995343d35"), MontFp!("0x8e4865041b151fe4"), MontFp!("0x38323c44cf193b8a"), MontFp!("0xa74010a13b9a76a1"), MontFp!("0x429ebd654194eec2"), MontFp!("0xf116892e365bb752"), MontFp!("0xca1713b0b8861a67"), MontFp!("0xef097aa5eed74e30"), MontFp!("0x575030a5ef0cac85"), MontFp!("0xcbe04288de12090a"), MontFp!("0xd5f0afa1f6978fd3"), MontFp!("0x48b80826a5d068e6")]; + test_vector::(&tv_x5_255_3_input, &tv_x5_255_3_output); +} \ No newline at end of file