openzeppelin_crypto/poseidon2/instance/
pallas.rs

1//! This module contains the poseidon sponge hash function parameters for
2//! [`FpPallas`] field instance.
3
4use crate::{
5    field::instance::FpPallas, fp_from_hex, poseidon2::params::PoseidonParams,
6};
7
8/// Poseidon sponge hash function parameters for [`FpPallas`] field instance.
9pub struct PallasParams;
10
11#[rustfmt::skip]
12impl PoseidonParams<FpPallas> for PallasParams {
13    const T: usize = 3;
14    const D: u8 = 5;
15    const CAPACITY: usize = 1;
16    const ROUNDS_F: usize = 8;
17    const ROUNDS_P: usize = 56;
18    const MAT_INTERNAL_DIAG_M_1: &'static [FpPallas] = &[
19        fp_from_hex!(
20            "0000000000000000000000000000000000000000000000000000000000000001"
21        ),
22        fp_from_hex!(
23            "0000000000000000000000000000000000000000000000000000000000000001"
24        ),
25        fp_from_hex!(
26            "0000000000000000000000000000000000000000000000000000000000000002"
27        ),
28    ];
29    const ROUND_CONSTANTS: &'static [&'static [FpPallas]] = &[
30        &[
31            fp_from_hex!("360d7470611e473d353f628f76d110f34e71162f31003b7057538c2596426303"),
32            fp_from_hex!("2bab94d7ae222d135dc3c6c5febfaa314908ac2f12ebe06fbdb74213bf63188b"),
33            fp_from_hex!("150c93fef652fb1c2bf03e1a29aa871fef77e7d736766c5d0939d92753cc5dc8"),
34        ],
35        &[
36            fp_from_hex!("3270661e68928b3a955d55db56dc57c103cc0a60141e894e14259dce537782b2"),
37            fp_from_hex!("073f116f04122e25a0b7afe4e2057299b407c370f2b5a1ccce9fb9ffc345afb3"),
38            fp_from_hex!("2a32ec5c4ee5b1837affd09c1f53f5fd55c9cd2061ae93ca8ebad76fc71554d8"),
39        ],
40        &[
41            fp_from_hex!("270326ee039df19e651e2cfc740628ca634d24fc6e2559f22d8ccbe292efeead"),
42            fp_from_hex!("27c6642ac633bc66dc100fe7fcfa54918af895bce012f182a068fc37c182e274"),
43            fp_from_hex!("1bdfd8b01401c70ad27f57396989129d710e1fb6ab976a459ca18682e26d7ff9"),
44        ],
45        &[
46            fp_from_hex!("162a14c62f9a89b814b9d6a9c84dd678f4f6fb3f9054d373c832d824261a35ea"),
47            fp_from_hex!("2d193e0f76de586b2af6f79e3127feeaac0a1fc71e2cf0c0f79824667b5b6bec"),
48            fp_from_hex!("044ca3cc4a85d73b81696ef1104e674f4feff82984990ff85d0bf58dc8a4aa94"),
49        ],
50        &[
51            fp_from_hex!("1cbaf2b371dac6a81d0453416d3e235cb8d9e2d4f314f46f6198785f0cd6b9af"),
52            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
53            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
54        ],
55        &[
56            fp_from_hex!("1d5b2777692c205b0e6c49d061b6b5f4293c4ab038fdbbdc343e07610f3fede5"),
57            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
58            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
59        ],
60        &[
61            fp_from_hex!("2e9bdbba3dd34bffaa30535bdd749a7e06a9adb0c1e6f962f60e971b8d73b04f"),
62            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
63            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
64        ],
65        &[
66            fp_from_hex!("2de11886b18011ca8bd5bae36969299fde40fbe26d047b05035a13661f22418b"),
67            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
68            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
69        ],
70        &[
71            fp_from_hex!("2e07de1780b8a70d0d5b4a3f1841dcd82ab9395c449be947bc998884ba96a721"),
72            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
73            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
74        ],
75        &[
76            fp_from_hex!("0f69f1854d20ca0cbbdb63dbd52dad16250440a99d6b8af3825e4c2bb74925ca"),
77            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
78            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
79        ],
80        &[
81            fp_from_hex!("2eb1b25417fe17670d135dc639fb09a46ce5113507f96de9816c059422dc705e"),
82            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
83            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
84        ],
85        &[
86            fp_from_hex!("115cd0a0643cfb988c24cb44c3fab48aff36c661d26cc42db8b1bdf4953bd82c"),
87            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
88            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
89        ],
90        &[
91            fp_from_hex!("26ca293f7b2c462d066d7378b999868bbb57ddf14e0f958ade801612311d04cd"),
92            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
93            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
94        ],
95        &[
96            fp_from_hex!("17bf1b93c4c7e01a2a830aa162412cd90f160bf9f71e967ff5209d14b24820ca"),
97            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
98            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
99        ],
100        &[
101            fp_from_hex!("35b41a7ac4f3c571a24f8456369c85dfe03c0354bd8cfd3805c86f2e7dc293c5"),
102            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
103            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
104        ],
105        &[
106            fp_from_hex!("3b1480080523c439435927994849bea964e14d3beb2dddde72ac156af435d09e"),
107            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
108            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
109        ],
110        &[fp_from_hex!("2cc6810031dc1b0d4950856dc907d57508e286442a2d3eb2271618d874b14c6d"),
111            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
112            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
113        ],
114        &[
115            fp_from_hex!("25bdbbeda1bde8c1059618e2afd2ef999e517aa93b78341d91f318c09f0cb566"),
116            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
117            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
118        ],
119        &[
120            fp_from_hex!("392a4a8758e06ee8b95f33c25dde8ac02a5ed0a27b61926cc6313487073f7f7b"),
121            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
122            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
123        ],
124        &[
125            fp_from_hex!("272a55878a08442b9aa6111f4de009485e6a6fd15db89365e7bbcef02eb5866c"),
126            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
127            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
128        ],
129        &[
130            fp_from_hex!("2d5b308b0cf02cdfefa13c4e60e26239a6ebba011694dd129b925b3c5b21e0e2"),
131            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
132            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
133        ],
134        &[
135            fp_from_hex!("16549fc6af2f3b72dd5d293d72e2e5f244dff42f18b46c56ef38c57c311673ac"),
136            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
137            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
138        ],
139        &[
140            fp_from_hex!("1b10bb7a82afce39fa69c3a2ad52f76d76398265344203119b7126d9b46860df"),
141            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
142            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
143        ],
144        &[
145            fp_from_hex!("0f1e7505ebd91d2fc79c2df7dc98a3bed1b36968ba0405c090d27f6a00b7dfc8"),
146            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
147            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
148        ],
149        &[
150            fp_from_hex!("2f313faf0d3f6187537a7497a3b43f46797fd6e3f18eb1caff457756b819bb20"),
151            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
152            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
153        ],
154        &[
155            fp_from_hex!("3a5cbb6de450b481fa3ca61c0ed15bc55cad11ebf0f7ceb8f0bc3e732ecb26f6"),
156            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
157            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
158        ],
159        &[
160            fp_from_hex!("3dab54bc9bef688dd92086e253b439d651baa6e20f892b62865527cbca915982"),
161            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
162            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
163        ],
164        &[
165            fp_from_hex!("06dbfb42b979884de280d31670123f744c24b33b410fefd4368045acf2b71ae3"),
166            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
167            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
168        ],
169        &[
170            fp_from_hex!("068d6b4608aae810c6f039ea1973a63eb8d2de72e3d2c9eca7fc32d22f18b9d3"),
171            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
172            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
173        ],
174        &[
175            fp_from_hex!("366ebfafa3ad381c0ee258c9b8fdfccdb868a7d7e1f1f69a2b5dfcc5572555df"),
176            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
177            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
178        ],
179        &[
180            fp_from_hex!("39678f65512f1ee404db3024f41d3f567ef66d89d044d022e6bc229e95bc76b1"),
181            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
182            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
183        ],
184        &[
185            fp_from_hex!("21668f016a8063c0d58b7750a3bc2fe1cf82c25f99dc01a4e534c88fe53d85fe"),
186            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
187            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
188        ],
189        &[
190            fp_from_hex!("39d00994a8a5046a1bc749363e98a768e34dea56439fe1954bef429bc5331608"),
191            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
192            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
193        ],
194        &[
195            fp_from_hex!("1f9dbdc3f84312636b203bbe12fb3425b163d41605d39f99770c956f60d881b3"),
196            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
197            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
198        ],
199        &[
200            fp_from_hex!("027745a9cddfad95e5f17b9e0ee0cab6be0bc829fe5e66c69794a9f7c336eab2"),
201            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
202            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
203        ],
204        &[
205            fp_from_hex!("1cec0803c504b635788d695c61e932122fa43fe20a45c78d52025657abd8aee0"),
206            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
207            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
208        ],
209        &[
210            fp_from_hex!("123523d75e9fabc172077448ef87cc6eed5082c8dbf31365d3872a9559a03a73"),
211            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
212            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
213        ],
214        &[
215            fp_from_hex!("1723d1452c9cf02df419b848e5d694bf27feba35975ee7e5001779e3a1d357f4"),
216            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
217            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
218        ],
219        &[
220            fp_from_hex!("1739d180a16010bdfcc0573d7e61369421c3f776f572836d9dab1ee4dcf96622"),
221            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
222            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
223        ],
224        &[
225            fp_from_hex!("2d4e6354da9cc554acce32391794b627fafa96fbeb0ab89370290452042d048d"),
226            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
227            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
228        ],
229        &[
230            fp_from_hex!("153ee6142e535e334a869553c9d007f88f3bd43f99260621670bcf6f8b485dcd"),
231            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
232            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
233        ],
234        &[
235            fp_from_hex!("0c45bfd3a69aaa65635ef7e7a430b486968ad4424af83700d258d2e2b7782172"),
236            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
237            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
238        ],
239        &[
240            fp_from_hex!("0adfd53b256a6957f2d56aec831446006897ac0a8ffa5ff10e5633d251f73307"),
241            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
242            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
243        ],
244        &[
245            fp_from_hex!("315d2ac8ebdbac3c8cd1726b7cbab8ee3f87b28f1c1be4bdac9d36a8b7516d63"),
246            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
247            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
248        ],
249        &[
250            fp_from_hex!("1b8472712d02eef4cfaec23d2b16883fc9bb60d1f6959879299ce44ea423d8e1"),
251            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
252            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
253        ],
254        &[
255            fp_from_hex!("3c1cd07efda6ff24bd0b70fa2255eb6f367d2c54e36928c9c4a5404198adf70c"),
256            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
257            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
258        ],
259        &[
260            fp_from_hex!("136052d26bb3d373687f4e51b2e1dcd34a16073f738f7e0cbbe523aef9ab107a"),
261            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
262            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
263        ],
264        &[
265            fp_from_hex!("16c96beef6a0a848c1bdd859a1232a1d7b3cfbb873032681676c36c24ef967dd"),
266            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
267            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
268        ],
269        &[
270            fp_from_hex!("284b38c57ff65c262ab7fed8f499a9fb012387bab4f1662d067eec7f2d6340c4"),
271            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
272            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
273        ],
274        &[
275            fp_from_hex!("0c5993d175e81f6639e242198897d17cfc06772c1c0411a6af1dff204c922f86"),
276            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
277            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
278        ],
279        &[
280            fp_from_hex!("03bf7a3f7bd043dafcda655d1ba9c8f9f24887ad48e17759bbf53f67b1f87b15"),
281            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
282            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
283        ],
284        &[
285            fp_from_hex!("3188fe4ee9f9fafbb0cf999567f00e734c8f9cbe69f0e8279b5cd09e36d8be62"),
286            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
287            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
288        ],
289        &[
290            fp_from_hex!("171f528ccf6584375a39768c480d61e13af5bf77c1c42652afea99a2ec6c595a"),
291            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
292            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
293        ],
294        &[
295            fp_from_hex!("12f4175c4ab45afc196e41859b35ef88812c3286ee7000675a0563b9b8e9f1d5"),
296            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
297            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
298        ],
299        &[
300            fp_from_hex!("3a509e155cb7ebfd8f8fdcf800a9ac697e23e1aabe96cfab0e74d4d369118b79"),
301            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
302            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
303        ],
304        &[
305            fp_from_hex!("10f2a685df4a27c81a89920e2504c3b3984bc8f2e4c1b69e98712c65678cfd30"),
306            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
307            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
308        ],
309        &[
310            fp_from_hex!("09e5f49790c8a0e21d8d93d54ab91a0e54573c9333c56321e8a16728cc9d4918"),
311            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
312            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
313        ],
314        &[
315            fp_from_hex!("352d69bed80ee3e52bf35705d9f84a3442d17ed6ee0fab7e609a740347cf5fea"),
316            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
317            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
318        ],
319        &[
320            fp_from_hex!("058ee73ba9f3f293491562faf2b190d3c634debd281b76a63a758af6fa84e0e8"),
321            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
322            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
323        ],
324        &[
325            fp_from_hex!("232f99cc911eddd9cd0f1fc55b1a3250092cb92119bc76be621a132510a43904"),
326            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
327            fp_from_hex!("0000000000000000000000000000000000000000000000000000000000000000"),
328        ],
329        &[
330            fp_from_hex!("201beed7b8f3ab8186c22c6c5d4869f0f9efd52ca6bc2961c3b97c1e301bc213"),
331            fp_from_hex!("1376dce6580030c6a1c9291d58602f5129388842744a1210bf6b3431ba94e9bc"),
332            fp_from_hex!("1793199e6fd6ba342b3356c38238f761072ba8b02d92e7226454843c5486d7b3"),
333        ],
334        &[
335            fp_from_hex!("22de7a7488dcc7359fee9c20c87a67df3c66160dc62aacac06a3f1d3b433311b"),
336            fp_from_hex!("3514d5e9066bb160df8ff37fe2d8edf8dbe0b77fae77e1d030d6e3fd516b47a8"),
337            fp_from_hex!("30cd3006931ad636f919a00dabbf5fa5ff453d6f900f144a19377427137a81c7"),
338        ],
339        &[
340            fp_from_hex!("253d1a5c5293412741f81a5cf613c8df8f9e4b2cae2ebb515b6a74220692b506"),
341            fp_from_hex!("035b461c02d79d19a35e9613e7f5fe92851b3a59c990fafc73f666cb86a48e8e"),
342            fp_from_hex!("23a9928079d175bd5bc00eedd56b93e092b1283c2d5fccde7cfbf86a3aa04780"),
343        ],
344        &[
345            fp_from_hex!("13a7785ae134ea92f1594a0763c611abb5e2ea3436eef957f1e4ccd73fa00a82"),
346            fp_from_hex!("39fce308b7d43c574962ae3c0da17e313889c57863446d88bbf04f5252de4279"),
347            fp_from_hex!("1aae18833f8e1d3ac0fdf01662f60d22bef00a08c6ed38d23b57e34489b53fad"),
348        ],
349    ];
350}
351
352#[allow(unused_imports)]
353#[cfg(test)]
354mod tests {
355    use crate::{
356        field::instance::FpPallas,
357        fp_from_hex,
358        poseidon2::{instance::pallas::PallasParams, *},
359    };
360
361    type Scalar = FpPallas;
362
363    #[test]
364    fn smoke() {
365        let mut poseidon2 = Poseidon2::<PallasParams, _>::new();
366        for i in 1..PallasParams::T {
367            poseidon2.absorb(&Scalar::from(i as u64));
368        }
369        let perm = poseidon2.squeeze_batch(2);
370        assert_eq!(
371            perm[0],
372            fp_from_hex!(
373                "1c48ea0994a7d7984ea338a54dbf0c8681f5af883fe988d59ba3380c9f7901fc"
374            )
375        );
376        assert_eq!(
377            perm[1],
378            fp_from_hex!(
379                "079ddd0a80a3e9414489b526a2770448964766685f4c4842c838f8a23120b401"
380            )
381        );
382    }
383}