pub trait Poseidon2Constants<const W: usize> {
const DIAG: &'static [u64]; const RC: &'static [u64]; const HALF_ROUNDS: usize;
const N_PARTIAL_ROUNDS: usize;
const RATE: usize;
const CAPACITY: usize;
const SPONGE_WIDTH: usize;
}
pub struct Poseidon2_4;
pub struct Poseidon2_8;
pub struct Poseidon2_12;
pub struct Poseidon2_16;
impl Poseidon2Constants<12> for Poseidon2_12 {
const DIAG: &'static [u64] = &[
0xc3b6c08e23ba9300,
0xd84b5de94a324fb6,
0x0d0c371c5b35b84f,
0x7964f570e7188037,
0x5daf18bbd996604b,
0x6743bc47b9595257,
0x5528b9362c59bb70,
0xac45e25b7127b68b,
0xa2077d7dfbb606b5,
0xf3faac6faee378ae,
0x0c6388b51545e883,
0xd27dbb6944917b60,
];
const RC: &'static [u64] = &[
0x13dcf33aba214f46,
0x30b3b654a1da6d83,
0x1fc634ada6159b56,
0x937459964dc03466,
0xedd2ef2ca7949924,
0xede9affde0e22f68,
0x8515b9d6bac9282d,
0x6b5c07b4e9e900d8,
0x1ec66368838c8a08,
0x9042367d80d1fbab,
0x400283564a3c3799,
0x4a00be0466bca75e,
0x7913beee58e3817f,
0xf545e88532237d90,
0x22f8cb8736042005,
0x6f04990e247a2623,
0xfe22e87ba37c38cd,
0xd20e32c85ffe2815,
0x117227674048fe73,
0x4e9fb7ea98a6b145,
0xe0866c232b8af08b,
0x00bbc77916884964,
0x7031c0fb990d7116,
0x240a9e87cf35108f,
0x2e6363a5a12244b3,
0x5e1c3787d1b5011c,
0x4132660e2a196e8b,
0x3a013b648d3d4327,
0xf79839f49888ea43,
0xfe85658ebafe1439,
0xb6889825a14240bd,
0x578453605541382b,
0x4508cda8f6b63ce9,
0x9c3ef35848684c91,
0x0812bde23c87178c,
0xfe49638f7f722c14,
0x8e3f688ce885cbf5,
0xb8e110acf746a87d,
0xb4b2e8973a6dabef,
0x9e714c5da3d462ec,
0x6438f9033d3d0c15,
0x24312f7cf1a27199,
0x23f843bb47acbf71,
0x9183f11a34be9f01,
0x839062fbb9d45dbf,
0x24b56e7e6c2e43fa,
0xe1683da61c962a72,
0xa95c63971a19bfa7,
0x4adf842aa75d4316,
0xf8fbb871aa4ab4eb,
0x68e85b6eb2dd6aeb,
0x07a0b06b2d270380,
0xd94e0228bd282de4,
0x8bdd91d3250c5278,
0x209c68b88bba778f,
0xb5e18cdab77f3877,
0xb296a3e808da93fa,
0x8370ecbda11a327e,
0x3f9075283775dad8,
0xb78095bb23c6aa84,
0x3f36b9fe72ad4e5f,
0x69bc96780b10b553,
0x3f1d341f2eb7b881,
0x4e939e9815838818,
0xda366b3ae2a31604,
0xbc89db1e7287d509,
0x6102f411f9ef5659,
0x58725c5e7ac1f0ab,
0x0df5856c798883e7,
0xf7bb62a8da4c961b,
0xc68be7c94882a24d,
0xaf996d5d5cdaedd9,
0x9717f025e7daf6a5,
0x6436679e6e7216f4,
0x8a223d99047af267,
0xbb512e35a133ba9a,
0xfbbf44097671aa03,
0xf04058ebf6811e61,
0x5cca84703fac7ffb,
0x9b55c7945de6469f,
0x8e05bf09808e934f,
0x2ea900de876307d7,
0x7748fff2b38dfb89,
0x6b99a676dd3b5d81,
0xac4bb7c627cf7c13,
0xadb6ebe5e9e2f5ba,
0x2d33378cafa24ae3,
0x1e5b73807543f8c2,
0x09208814bfebb10f,
0x782e64b6bb5b93dd,
0xadd5a48eac90b50f,
0xadd4c54c736ea4b1,
0xd58dbb86ed817fd8,
0x6d5ed1a533f34ddd,
0x28686aa3e36b7cb9,
0x591abd3476689f36,
0x047d766678f13875,
0xa2a11112625f5b49,
0x21fd10a3f8304958,
0xf9b40711443b0280,
0xd2697eb8b2bde88e,
0x3493790b51731b3f,
0x11caf9dd73764023,
0x7acfb8f72878164e,
0x744ec4db23cefc26,
0x1e00e58f422c6340,
0x21dd28d906a62dda,
0xf32a46ab5f465b5f,
0xbfce13201f3f7e6b,
0xf30d2e7adb5304e2,
0xecdf4ee4abad48e9,
0xf94e82182d395019,
0x4ee52e3744d887c5,
0xa1341c7cac0083b2,
0x2302fb26c30c834a,
0xaea3c587273bf7d3,
0xf798e24961823ec7,
0x962deba3e9a2cd94,
];
const HALF_ROUNDS: usize = 4;
const N_PARTIAL_ROUNDS: usize = 22;
const SPONGE_WIDTH: usize = 12;
const RATE: usize = 8;
const CAPACITY: usize = 4;
}
impl Poseidon2Constants<16> for Poseidon2_16 {
const DIAG: &'static [u64] = &[
0xde9b91a467d6afc0,
0xc5f16b9c76a9be17,
0x0ab0fef2d540ac55,
0x3001d27009d05773,
0xed23b1f906d3d9eb,
0x5ce73743cba97054,
0x1c3bab944af4ba24,
0x2faa105854dbafae,
0x53ffb3ae6d421a10,
0xbcda9df8884ba396,
0xfc1273e4a31807bb,
0xc77952573d5142c0,
0x56683339a819b85e,
0x328fcbd8f0ddc8eb,
0xb5101e303fce9cb7,
0x774487b8c40089bb,
];
const RC: &'static [u64] = &[
0x15ebea3fc73397c3,
0xd73cd9fbfe8e275c,
0x8c096bfce77f6c26,
0x4e128f68b53d8fea,
0x29b779a36b2763f6,
0xfe2adc6fb65acd08,
0x8d2520e725ad0955,
0x1c2392b214624d2a,
0x37482118206dcc6e,
0x2f829bed19be019a,
0x2fe298cb6f8159b0,
0x2bbad982deccdbbf,
0xbad568b8cc60a81e,
0xb86a814265baad10,
0xbec2005513b3acb3,
0x6bf89b59a07c2a94,
0xa25deeb835e230f5,
0x3c5bad8512b8b12a,
0x7230f73c3cb7a4f2,
0xa70c87f095c74d0f,
0x6b7606b830bb2e80,
0x6cd467cfc4f24274,
0xfeed794df42a9b0a,
0x8cf7cf6163b7dbd3,
0x9a6e9dda597175a0,
0xaa52295a684faf7b,
0x017b811cc3589d8d,
0x55bfb699b6181648,
0xc2ccaf71501c2421,
0x1707950327596402,
0xdd2fcdcd42a8229f,
0x8b9d7d5b27778a21,
0xac9a05525f9cf512,
0x2ba125c58627b5e8,
0xc74e91250a8147a5,
0xa3e64b640d5bb384,
0xf53047d18d1f9292,
0xbaaeddacae3a6374,
0xf2d0914a808b3db1,
0x18af1a3742bfa3b0,
0x9a621ef50c55bdb8,
0xc615f4d1cc5466f3,
0xb7fbac19a35cf793,
0xd2b1a15ba517e46d,
0x4a290c4d7fd26f6f,
0x4f0cf1bb1770c4c4,
0x548345386cd377f5,
0x33978d2789fddd42,
0xab78c59deb77e211,
0xc485b2a933d2be7f,
0xbde3792c00c03c53,
0xab4cefe8f893d247,
0xc5c0e752eab7f85f,
0xdbf5a76f893bafea,
0xa91f6003e3d984de,
0x099539077f311e87,
0x097ec52232f9559e,
0x53641bdf8991e48c,
0x2afe9711d5ed9d7c,
0xa7b13d3661b5d117,
0x5a0e243fe7af6556,
0x1076fae8932d5f00,
0x9b53a83d434934e3,
0xed3fd595a3c0344a,
0x28eff4b01103d100,
0x60400ca3e2685a45,
0x1c8636beb3389b84,
0xac1332b60e13eff0,
0x2adafcc364e20f87,
0x79ffc2b14054ea0b,
0x3f98e4c0908f0a05,
0xcdb230bc4e8a06c4,
0x1bcaf7705b152a74,
0xd9bca249a82a7470,
0x91e24af19bf82551,
0xa62b43ba5cb78858,
0xb4898117472e797f,
0xb3228bca606cdaa0,
0x844461051bca39c9,
0xf3411581f6617d68,
0xf7fd50646782b533,
0x6ca664253c18fb48,
0x2d2fcdec0886a08f,
0x29da00dd799b575e,
0x47d966cc3b6e1e93,
0xde884e9a17ced59e,
0xdacf46dc1c31a045,
0x5d2e3c121eb387f2,
0x51f8b0658b124499,
0x1e7dbd1daa72167d,
0x8275015a25c55b88,
0xe8521c24ac7a70b3,
0x6521d121c40b3f67,
0xac12de797de135b0,
0xafa28ead79f6ed6a,
0x685174a7a8d26f0b,
0xeff92a08d35d9874,
0x3058734b76dd123a,
0xfa55dcfba429f79c,
0x559294d4324c7728,
0x7a770f53012dc178,
0xedd8f7c408f3883b,
0x39b533cf8d795fa5,
0x160ef9de243a8c0a,
0x431d52da6215fe3f,
0x54c51a2a2ef6d528,
0x9b13892b46ff9d16,
0x263c46fcee210289,
0xb738c96d25aabdc4,
0x5c33a5203996d38f,
0x2626496e7c98d8dd,
0xc669e0a52785903a,
0xaecde726c8ae1f47,
0x039343ef3a81e999,
0x2615ceaf044a54f9,
0x7e41e834662b66e1,
0x4ca5fd4895335783,
0x64b334d02916f2b0,
0x87268837389a6981,
0x034b75bcb20a6274,
0x58e658296cc2cd6e,
0xe2d0f759acc31df4,
0x81a652e435093e20,
0x0b72b6e0172eaf47,
0x4aec43cec577d66d,
0xde78365b028a84e6,
0x444e19569adc0ee4,
0x942b2451fa40d1da,
0xe24506623ea5bd6c,
0x082854bf2ef7c743,
0x69dbbc566f59d62e,
0x248c38d02a7b5cb2,
0x4f4e8f8c09d15edb,
0xd96682f188d310cf,
0x6f9a25d56818b54c,
0xb6cefed606546cd9,
0x5bc07523da38a67b,
0x7df5a3c35b8111cf,
0xaaa2cc5d4db34bb0,
0x9e673ff22a4653f8,
0xbd8b278d60739c62,
0xe10d20f6925b8815,
0xf6c87b91dd4da2bf,
0xfed623e2f71b6f1a,
0xa0f02fa52a94d0d3,
0xbb5794711b39fa16,
0xd3b94fba9d005c7f,
0x15a26e89fad946c9,
0xf3cb87db8a67cf49,
0x400d2bf56aa2a577,
];
const HALF_ROUNDS: usize = 4;
const N_PARTIAL_ROUNDS: usize = 22;
const SPONGE_WIDTH: usize = 16;
const RATE: usize = 12;
const CAPACITY: usize = 4;
}
impl Poseidon2Constants<4> for Poseidon2_4 {
const DIAG: &'static [u64] = &[0xf0ce126fe8a83094, 0x60f87e0b59fb4ee6, 0xa8106c221cd6d882, 0x5529eddc46e372e7];
const RC: &'static [u64] = &[
0x5098165ee28e503e,
0x41b84edfee6c0590,
0xdda6bc081661f7b8,
0xb56f892b5fc6d76c,
0xb2b7e92b1f70399f,
0x7075cc44042536e9,
0xd5aae31b4968adb1,
0x0713f06eb5e40337,
0x80dccd8a419cc2d5,
0x89ae3f75c9b53e2c,
0x8aac5449eff27e1d,
0xef29b2b24bf503f9,
0xa1d4f9eaaa62e9fc,
0x2f215d5c5a0aa622,
0x7b3447f34ae22dd9,
0x4b614218a8e81eef,
0xe063343114e0f434,
0x2cdedf7f0717ad4e,
0x4662c297f2537cf5,
0x8fe48eee51761f3d,
0x616aead4ae0ebf00,
0x9b40b73022b3089b,
0xa051e1646094b036,
0xf69b2c13f377ff8e,
0x96f7dec4549af9be,
0x858371686234c707,
0x8483ec4d5e3e8114,
0x21aea04a4066e649,
0xbed21bd95c72ec7e,
0x948655aafad4b757,
0xd4b2ed65735823e2,
0x1930ef5f54c40462,
0xb3cc1696b1d3811e,
0xafe0336077202599,
0x11da6a906ef66e3e,
0xd7abdf7d347fb43f,
0x65e7d3c9f0e8da86,
0x0b73bdafed7f79f4,
0x619b24eb14c29f0f,
0x85904bd8db9e3cd9,
0x4c9c28e673abb589,
0x73b20f643717949f,
0x832ab3faa2c0639a,
0xfa1d702bafb65207,
0x03f5f17b0409003c,
0x2c3ff110b39f84d5,
0x4cdfd3ff34ce6f4f,
0xd3acf5807f208db4,
0x13d28634ce48e600,
0xb065f0e667d7caf9,
0x44f6f3d6b12825ca,
0x243a64c03f36ea35,
0x470a3b7c2f6a6a7a,
];
const HALF_ROUNDS: usize = 4;
const N_PARTIAL_ROUNDS: usize = 21;
const SPONGE_WIDTH: usize = 4;
const RATE: usize = 4;
const CAPACITY: usize = 4;
}
impl Poseidon2Constants<8> for Poseidon2_8 {
const DIAG: &'static [u64] = &[
0xa98811a1fed4e3a5,
0x1cc48b54f377e2a0,
0xe40cd4f6c5609a26,
0x11de79ebca97a4a3,
0x9177c73d8b7e929c,
0x2a6fe8085797e791,
0x3de6e93329f8d5ad,
0x3f7af9125da962fe,
];
const RC: &'static [u64] = &[
0xdd5743e7f2a5a5d9,
0xcb3a864e58ada44b,
0xffa2449ed32f8cdc,
0x42025f65d6bd13ee,
0x7889175e25506323,
0x34b98bb03d24b737,
0xbdcc535ecc4faa2a,
0x5b20ad869fc0d033,
0xf1dda5b9259dfcb4,
0x27515210be112d59,
0x4227d1718c766c3f,
0x26d333161a5bd794,
0x49b938957bf4b026,
0x4a56b5938b213669,
0x1120426b48c8353d,
0x6b323c3f10a56cad,
0xce57d6245ddca6b2,
0xb1fc8d402bba1eb1,
0xb5c5096ca959bd04,
0x6db55cd306d31f7f,
0xc49d293a81cb9641,
0x1ce55a4fe979719f,
0xa92e60a9d178a4d1,
0x002cc64973bcfd8c,
0xcea721cce82fb11b,
0xe5b55eb8098ece81,
0x4e30525c6f1ddd66,
0x43c6702827070987,
0xaca68430a7b5762a,
0x3674238634df9c93,
0x88cee1c825e33433,
0xde99ae8d74b57176,
0x488897d85ff51f56,
0x1140737ccb162218,
0xa7eeb9215866ed35,
0x9bd2976fee49fcc9,
0xc0c8f0de580a3fcc,
0x4fb2dae6ee8fc793,
0x343a89f35f37395b,
0x223b525a77ca72c8,
0x56ccb62574aaa918,
0xc4d507d8027af9ed,
0xa080673cf0b7e95c,
0xf0184884eb70dcf8,
0x044f10b0cb3d5c69,
0xe9e3f7993938f186,
0x1b761c80e772f459,
0x606cec607a1b5fac,
0x14a0c2e1d45f03cd,
0x4eace8855398574f,
0xf905ca7103eff3e6,
0xf8c8f8d20862c059,
0xb524fe8bdd678e5a,
0xfbb7865901a1ec41,
0x014ef1197d341346,
0x9725e20825d07394,
0xfdb25aef2c5bae3b,
0xbe5402dc598c971e,
0x93a5711f04cdca3d,
0xc45a9a5b2f8fb97b,
0xfe8946a924933545,
0x2af997a27369091c,
0xaa62c88e0b294011,
0x058eb9d810ce9f74,
0xb3cb23eced349ae4,
0xa3648177a77b4a84,
0x43153d905992d95d,
0xf4e2a97cda44aa4b,
0x5baa2702b908682f,
0x082923bdf4f750d1,
0x98ae09a325893803,
0xf8a6475077968838,
0xceb0735bf00b2c5f,
0x0a1a5d953888e072,
0x2fcb190489f94475,
0xb5be06270dec69fc,
0x739cb934b09acf8b,
0x537750b75ec7f25b,
0xe9dd318bae1f3961,
0xf7462137299efe1a,
0xb1f6b8eee9adb940,
0xbdebcc8a809dfe6b,
0x40fc1f791b178113,
0x3ac1c3362d014864,
0x9a016184bdb8aeba,
0x95f2394459fbc25e,
];
const HALF_ROUNDS: usize = 4;
const N_PARTIAL_ROUNDS: usize = 22;
const SPONGE_WIDTH: usize = 8;
const RATE: usize = 4;
const CAPACITY: usize = 4;
}