1use lazy_static::lazy_static;
5use p3_baby_bear::{BabyBear, DiffusionMatrixBabyBear};
6use p3_field::AbstractField;
7use p3_poseidon2::{Poseidon2, Poseidon2ExternalMatrixGeneral};
8
9pub mod consts;
10pub mod io;
11pub mod types;
12
13lazy_static! {
14 pub static ref RC_16_30: [[BabyBear; 16]; 30] = [
19 [
20 BabyBear::from_wrapped_u32(2110014213),
21 BabyBear::from_wrapped_u32(3964964605),
22 BabyBear::from_wrapped_u32(2190662774),
23 BabyBear::from_wrapped_u32(2732996483),
24 BabyBear::from_wrapped_u32(640767983),
25 BabyBear::from_wrapped_u32(3403899136),
26 BabyBear::from_wrapped_u32(1716033721),
27 BabyBear::from_wrapped_u32(1606702601),
28 BabyBear::from_wrapped_u32(3759873288),
29 BabyBear::from_wrapped_u32(1466015491),
30 BabyBear::from_wrapped_u32(1498308946),
31 BabyBear::from_wrapped_u32(2844375094),
32 BabyBear::from_wrapped_u32(3042463841),
33 BabyBear::from_wrapped_u32(1969905919),
34 BabyBear::from_wrapped_u32(4109944726),
35 BabyBear::from_wrapped_u32(3925048366),
36 ],
37 [
38 BabyBear::from_wrapped_u32(3706859504),
39 BabyBear::from_wrapped_u32(759122502),
40 BabyBear::from_wrapped_u32(3167665446),
41 BabyBear::from_wrapped_u32(1131812921),
42 BabyBear::from_wrapped_u32(1080754908),
43 BabyBear::from_wrapped_u32(4080114493),
44 BabyBear::from_wrapped_u32(893583089),
45 BabyBear::from_wrapped_u32(2019677373),
46 BabyBear::from_wrapped_u32(3128604556),
47 BabyBear::from_wrapped_u32(580640471),
48 BabyBear::from_wrapped_u32(3277620260),
49 BabyBear::from_wrapped_u32(842931656),
50 BabyBear::from_wrapped_u32(548879852),
51 BabyBear::from_wrapped_u32(3608554714),
52 BabyBear::from_wrapped_u32(3575647916),
53 BabyBear::from_wrapped_u32(81826002),
54 ],
55 [
56 BabyBear::from_wrapped_u32(4289086263),
57 BabyBear::from_wrapped_u32(1563933798),
58 BabyBear::from_wrapped_u32(1440025885),
59 BabyBear::from_wrapped_u32(184445025),
60 BabyBear::from_wrapped_u32(2598651360),
61 BabyBear::from_wrapped_u32(1396647410),
62 BabyBear::from_wrapped_u32(1575877922),
63 BabyBear::from_wrapped_u32(3303853401),
64 BabyBear::from_wrapped_u32(137125468),
65 BabyBear::from_wrapped_u32(765010148),
66 BabyBear::from_wrapped_u32(633675867),
67 BabyBear::from_wrapped_u32(2037803363),
68 BabyBear::from_wrapped_u32(2573389828),
69 BabyBear::from_wrapped_u32(1895729703),
70 BabyBear::from_wrapped_u32(541515871),
71 BabyBear::from_wrapped_u32(1783382863),
72 ],
73 [
74 BabyBear::from_wrapped_u32(2641856484),
75 BabyBear::from_wrapped_u32(3035743342),
76 BabyBear::from_wrapped_u32(3672796326),
77 BabyBear::from_wrapped_u32(245668751),
78 BabyBear::from_wrapped_u32(2025460432),
79 BabyBear::from_wrapped_u32(201609705),
80 BabyBear::from_wrapped_u32(286217151),
81 BabyBear::from_wrapped_u32(4093475563),
82 BabyBear::from_wrapped_u32(2519572182),
83 BabyBear::from_wrapped_u32(3080699870),
84 BabyBear::from_wrapped_u32(2762001832),
85 BabyBear::from_wrapped_u32(1244250808),
86 BabyBear::from_wrapped_u32(606038199),
87 BabyBear::from_wrapped_u32(3182740831),
88 BabyBear::from_wrapped_u32(73007766),
89 BabyBear::from_wrapped_u32(2572204153),
90 ],
91 [
92 BabyBear::from_wrapped_u32(1196780786),
93 BabyBear::from_wrapped_u32(3447394443),
94 BabyBear::from_wrapped_u32(747167305),
95 BabyBear::from_wrapped_u32(2968073607),
96 BabyBear::from_wrapped_u32(1053214930),
97 BabyBear::from_wrapped_u32(1074411832),
98 BabyBear::from_wrapped_u32(4016794508),
99 BabyBear::from_wrapped_u32(1570312929),
100 BabyBear::from_wrapped_u32(113576933),
101 BabyBear::from_wrapped_u32(4042581186),
102 BabyBear::from_wrapped_u32(3634515733),
103 BabyBear::from_wrapped_u32(1032701597),
104 BabyBear::from_wrapped_u32(2364839308),
105 BabyBear::from_wrapped_u32(3840286918),
106 BabyBear::from_wrapped_u32(888378655),
107 BabyBear::from_wrapped_u32(2520191583),
108 ],
109 [
110 BabyBear::from_wrapped_u32(36046858),
111 BabyBear::from_wrapped_u32(2927525953),
112 BabyBear::from_wrapped_u32(3912129105),
113 BabyBear::from_wrapped_u32(4004832531),
114 BabyBear::from_wrapped_u32(193772436),
115 BabyBear::from_wrapped_u32(1590247392),
116 BabyBear::from_wrapped_u32(4125818172),
117 BabyBear::from_wrapped_u32(2516251696),
118 BabyBear::from_wrapped_u32(4050945750),
119 BabyBear::from_wrapped_u32(269498914),
120 BabyBear::from_wrapped_u32(1973292656),
121 BabyBear::from_wrapped_u32(891403491),
122 BabyBear::from_wrapped_u32(1845429189),
123 BabyBear::from_wrapped_u32(2611996363),
124 BabyBear::from_wrapped_u32(2310542653),
125 BabyBear::from_wrapped_u32(4071195740),
126 ],
127 [
128 BabyBear::from_wrapped_u32(3505307391),
129 BabyBear::from_wrapped_u32(786445290),
130 BabyBear::from_wrapped_u32(3815313971),
131 BabyBear::from_wrapped_u32(1111591756),
132 BabyBear::from_wrapped_u32(4233279834),
133 BabyBear::from_wrapped_u32(2775453034),
134 BabyBear::from_wrapped_u32(1991257625),
135 BabyBear::from_wrapped_u32(2940505809),
136 BabyBear::from_wrapped_u32(2751316206),
137 BabyBear::from_wrapped_u32(1028870679),
138 BabyBear::from_wrapped_u32(1282466273),
139 BabyBear::from_wrapped_u32(1059053371),
140 BabyBear::from_wrapped_u32(834521354),
141 BabyBear::from_wrapped_u32(138721483),
142 BabyBear::from_wrapped_u32(3100410803),
143 BabyBear::from_wrapped_u32(3843128331),
144 ],
145 [
146 BabyBear::from_wrapped_u32(3878220780),
147 BabyBear::from_wrapped_u32(4058162439),
148 BabyBear::from_wrapped_u32(1478942487),
149 BabyBear::from_wrapped_u32(799012923),
150 BabyBear::from_wrapped_u32(496734827),
151 BabyBear::from_wrapped_u32(3521261236),
152 BabyBear::from_wrapped_u32(755421082),
153 BabyBear::from_wrapped_u32(1361409515),
154 BabyBear::from_wrapped_u32(392099473),
155 BabyBear::from_wrapped_u32(3178453393),
156 BabyBear::from_wrapped_u32(4068463721),
157 BabyBear::from_wrapped_u32(7935614),
158 BabyBear::from_wrapped_u32(4140885645),
159 BabyBear::from_wrapped_u32(2150748066),
160 BabyBear::from_wrapped_u32(1685210312),
161 BabyBear::from_wrapped_u32(3852983224),
162 ],
163 [
164 BabyBear::from_wrapped_u32(2896943075),
165 BabyBear::from_wrapped_u32(3087590927),
166 BabyBear::from_wrapped_u32(992175959),
167 BabyBear::from_wrapped_u32(970216228),
168 BabyBear::from_wrapped_u32(3473630090),
169 BabyBear::from_wrapped_u32(3899670400),
170 BabyBear::from_wrapped_u32(3603388822),
171 BabyBear::from_wrapped_u32(2633488197),
172 BabyBear::from_wrapped_u32(2479406964),
173 BabyBear::from_wrapped_u32(2420952999),
174 BabyBear::from_wrapped_u32(1852516800),
175 BabyBear::from_wrapped_u32(4253075697),
176 BabyBear::from_wrapped_u32(979699862),
177 BabyBear::from_wrapped_u32(1163403191),
178 BabyBear::from_wrapped_u32(1608599874),
179 BabyBear::from_wrapped_u32(3056104448),
180 ],
181 [
182 BabyBear::from_wrapped_u32(3779109343),
183 BabyBear::from_wrapped_u32(536205958),
184 BabyBear::from_wrapped_u32(4183458361),
185 BabyBear::from_wrapped_u32(1649720295),
186 BabyBear::from_wrapped_u32(1444912244),
187 BabyBear::from_wrapped_u32(3122230878),
188 BabyBear::from_wrapped_u32(384301396),
189 BabyBear::from_wrapped_u32(4228198516),
190 BabyBear::from_wrapped_u32(1662916865),
191 BabyBear::from_wrapped_u32(4082161114),
192 BabyBear::from_wrapped_u32(2121897314),
193 BabyBear::from_wrapped_u32(1706239958),
194 BabyBear::from_wrapped_u32(4166959388),
195 BabyBear::from_wrapped_u32(1626054781),
196 BabyBear::from_wrapped_u32(3005858978),
197 BabyBear::from_wrapped_u32(1431907253),
198 ],
199 [
200 BabyBear::from_wrapped_u32(1418914503),
201 BabyBear::from_wrapped_u32(1365856753),
202 BabyBear::from_wrapped_u32(3942715745),
203 BabyBear::from_wrapped_u32(1429155552),
204 BabyBear::from_wrapped_u32(3545642795),
205 BabyBear::from_wrapped_u32(3772474257),
206 BabyBear::from_wrapped_u32(1621094396),
207 BabyBear::from_wrapped_u32(2154399145),
208 BabyBear::from_wrapped_u32(826697382),
209 BabyBear::from_wrapped_u32(1700781391),
210 BabyBear::from_wrapped_u32(3539164324),
211 BabyBear::from_wrapped_u32(652815039),
212 BabyBear::from_wrapped_u32(442484755),
213 BabyBear::from_wrapped_u32(2055299391),
214 BabyBear::from_wrapped_u32(1064289978),
215 BabyBear::from_wrapped_u32(1152335780),
216 ],
217 [
218 BabyBear::from_wrapped_u32(3417648695),
219 BabyBear::from_wrapped_u32(186040114),
220 BabyBear::from_wrapped_u32(3475580573),
221 BabyBear::from_wrapped_u32(2113941250),
222 BabyBear::from_wrapped_u32(1779573826),
223 BabyBear::from_wrapped_u32(1573808590),
224 BabyBear::from_wrapped_u32(3235694804),
225 BabyBear::from_wrapped_u32(2922195281),
226 BabyBear::from_wrapped_u32(1119462702),
227 BabyBear::from_wrapped_u32(3688305521),
228 BabyBear::from_wrapped_u32(1849567013),
229 BabyBear::from_wrapped_u32(667446787),
230 BabyBear::from_wrapped_u32(753897224),
231 BabyBear::from_wrapped_u32(1896396780),
232 BabyBear::from_wrapped_u32(3143026334),
233 BabyBear::from_wrapped_u32(3829603876),
234 ],
235 [
236 BabyBear::from_wrapped_u32(859661334),
237 BabyBear::from_wrapped_u32(3898844357),
238 BabyBear::from_wrapped_u32(180258337),
239 BabyBear::from_wrapped_u32(2321867017),
240 BabyBear::from_wrapped_u32(3599002504),
241 BabyBear::from_wrapped_u32(2886782421),
242 BabyBear::from_wrapped_u32(3038299378),
243 BabyBear::from_wrapped_u32(1035366250),
244 BabyBear::from_wrapped_u32(2038912197),
245 BabyBear::from_wrapped_u32(2920174523),
246 BabyBear::from_wrapped_u32(1277696101),
247 BabyBear::from_wrapped_u32(2785700290),
248 BabyBear::from_wrapped_u32(3806504335),
249 BabyBear::from_wrapped_u32(3518858933),
250 BabyBear::from_wrapped_u32(654843672),
251 BabyBear::from_wrapped_u32(2127120275),
252 ],
253 [
254 BabyBear::from_wrapped_u32(1548195514),
255 BabyBear::from_wrapped_u32(2378056027),
256 BabyBear::from_wrapped_u32(390914568),
257 BabyBear::from_wrapped_u32(1472049779),
258 BabyBear::from_wrapped_u32(1552596765),
259 BabyBear::from_wrapped_u32(1905886441),
260 BabyBear::from_wrapped_u32(1611959354),
261 BabyBear::from_wrapped_u32(3653263304),
262 BabyBear::from_wrapped_u32(3423946386),
263 BabyBear::from_wrapped_u32(340857935),
264 BabyBear::from_wrapped_u32(2208879480),
265 BabyBear::from_wrapped_u32(139364268),
266 BabyBear::from_wrapped_u32(3447281773),
267 BabyBear::from_wrapped_u32(3777813707),
268 BabyBear::from_wrapped_u32(55640413),
269 BabyBear::from_wrapped_u32(4101901741),
270 ],
271 [
272 BabyBear::from_wrapped_u32(104929687),
273 BabyBear::from_wrapped_u32(1459980974),
274 BabyBear::from_wrapped_u32(1831234737),
275 BabyBear::from_wrapped_u32(457139004),
276 BabyBear::from_wrapped_u32(2581487628),
277 BabyBear::from_wrapped_u32(2112044563),
278 BabyBear::from_wrapped_u32(3567013861),
279 BabyBear::from_wrapped_u32(2792004347),
280 BabyBear::from_wrapped_u32(576325418),
281 BabyBear::from_wrapped_u32(41126132),
282 BabyBear::from_wrapped_u32(2713562324),
283 BabyBear::from_wrapped_u32(151213722),
284 BabyBear::from_wrapped_u32(2891185935),
285 BabyBear::from_wrapped_u32(546846420),
286 BabyBear::from_wrapped_u32(2939794919),
287 BabyBear::from_wrapped_u32(2543469905)
288 ],
289 [
290 BabyBear::from_wrapped_u32(2191909784),
291 BabyBear::from_wrapped_u32(3315138460),
292 BabyBear::from_wrapped_u32(530414574),
293 BabyBear::from_wrapped_u32(1242280418),
294 BabyBear::from_wrapped_u32(1211740715),
295 BabyBear::from_wrapped_u32(3993672165),
296 BabyBear::from_wrapped_u32(2505083323),
297 BabyBear::from_wrapped_u32(3845798801),
298 BabyBear::from_wrapped_u32(538768466),
299 BabyBear::from_wrapped_u32(2063567560),
300 BabyBear::from_wrapped_u32(3366148274),
301 BabyBear::from_wrapped_u32(1449831887),
302 BabyBear::from_wrapped_u32(2408012466),
303 BabyBear::from_wrapped_u32(294726285),
304 BabyBear::from_wrapped_u32(3943435493),
305 BabyBear::from_wrapped_u32(924016661),
306 ],
307 [
308 BabyBear::from_wrapped_u32(3633138367),
309 BabyBear::from_wrapped_u32(3222789372),
310 BabyBear::from_wrapped_u32(809116305),
311 BabyBear::from_wrapped_u32(30100013),
312 BabyBear::from_wrapped_u32(2655172876),
313 BabyBear::from_wrapped_u32(2564247117),
314 BabyBear::from_wrapped_u32(2478649732),
315 BabyBear::from_wrapped_u32(4113689151),
316 BabyBear::from_wrapped_u32(4120146082),
317 BabyBear::from_wrapped_u32(2512308515),
318 BabyBear::from_wrapped_u32(650406041),
319 BabyBear::from_wrapped_u32(4240012393),
320 BabyBear::from_wrapped_u32(2683508708),
321 BabyBear::from_wrapped_u32(951073977),
322 BabyBear::from_wrapped_u32(3460081988),
323 BabyBear::from_wrapped_u32(339124269),
324 ],
325 [
326 BabyBear::from_wrapped_u32(130182653),
327 BabyBear::from_wrapped_u32(2755946749),
328 BabyBear::from_wrapped_u32(542600513),
329 BabyBear::from_wrapped_u32(2816103022),
330 BabyBear::from_wrapped_u32(1931786340),
331 BabyBear::from_wrapped_u32(2044470840),
332 BabyBear::from_wrapped_u32(1709908013),
333 BabyBear::from_wrapped_u32(2938369043),
334 BabyBear::from_wrapped_u32(3640399693),
335 BabyBear::from_wrapped_u32(1374470239),
336 BabyBear::from_wrapped_u32(2191149676),
337 BabyBear::from_wrapped_u32(2637495682),
338 BabyBear::from_wrapped_u32(4236394040),
339 BabyBear::from_wrapped_u32(2289358846),
340 BabyBear::from_wrapped_u32(3833368530),
341 BabyBear::from_wrapped_u32(974546524),
342 ],
343 [
344 BabyBear::from_wrapped_u32(3306659113),
345 BabyBear::from_wrapped_u32(2234814261),
346 BabyBear::from_wrapped_u32(1188782305),
347 BabyBear::from_wrapped_u32(223782844),
348 BabyBear::from_wrapped_u32(2248980567),
349 BabyBear::from_wrapped_u32(2309786141),
350 BabyBear::from_wrapped_u32(2023401627),
351 BabyBear::from_wrapped_u32(3278877413),
352 BabyBear::from_wrapped_u32(2022138149),
353 BabyBear::from_wrapped_u32(575851471),
354 BabyBear::from_wrapped_u32(1612560780),
355 BabyBear::from_wrapped_u32(3926656936),
356 BabyBear::from_wrapped_u32(3318548977),
357 BabyBear::from_wrapped_u32(2591863678),
358 BabyBear::from_wrapped_u32(188109355),
359 BabyBear::from_wrapped_u32(4217723909),
360 ],
361 [
362 BabyBear::from_wrapped_u32(1564209905),
363 BabyBear::from_wrapped_u32(2154197895),
364 BabyBear::from_wrapped_u32(2459687029),
365 BabyBear::from_wrapped_u32(2870634489),
366 BabyBear::from_wrapped_u32(1375012945),
367 BabyBear::from_wrapped_u32(1529454825),
368 BabyBear::from_wrapped_u32(306140690),
369 BabyBear::from_wrapped_u32(2855578299),
370 BabyBear::from_wrapped_u32(1246997295),
371 BabyBear::from_wrapped_u32(3024298763),
372 BabyBear::from_wrapped_u32(1915270363),
373 BabyBear::from_wrapped_u32(1218245412),
374 BabyBear::from_wrapped_u32(2479314020),
375 BabyBear::from_wrapped_u32(2989827755),
376 BabyBear::from_wrapped_u32(814378556),
377 BabyBear::from_wrapped_u32(4039775921),
378 ],
379 [
380 BabyBear::from_wrapped_u32(1165280628),
381 BabyBear::from_wrapped_u32(1203983801),
382 BabyBear::from_wrapped_u32(3814740033),
383 BabyBear::from_wrapped_u32(1919627044),
384 BabyBear::from_wrapped_u32(600240215),
385 BabyBear::from_wrapped_u32(773269071),
386 BabyBear::from_wrapped_u32(486685186),
387 BabyBear::from_wrapped_u32(4254048810),
388 BabyBear::from_wrapped_u32(1415023565),
389 BabyBear::from_wrapped_u32(502840102),
390 BabyBear::from_wrapped_u32(4225648358),
391 BabyBear::from_wrapped_u32(510217063),
392 BabyBear::from_wrapped_u32(166444818),
393 BabyBear::from_wrapped_u32(1430745893),
394 BabyBear::from_wrapped_u32(1376516190),
395 BabyBear::from_wrapped_u32(1775891321),
396 ],
397 [
398 BabyBear::from_wrapped_u32(1170945922),
399 BabyBear::from_wrapped_u32(1105391877),
400 BabyBear::from_wrapped_u32(261536467),
401 BabyBear::from_wrapped_u32(1401687994),
402 BabyBear::from_wrapped_u32(1022529847),
403 BabyBear::from_wrapped_u32(2476446456),
404 BabyBear::from_wrapped_u32(2603844878),
405 BabyBear::from_wrapped_u32(3706336043),
406 BabyBear::from_wrapped_u32(3463053714),
407 BabyBear::from_wrapped_u32(1509644517),
408 BabyBear::from_wrapped_u32(588552318),
409 BabyBear::from_wrapped_u32(65252581),
410 BabyBear::from_wrapped_u32(3696502656),
411 BabyBear::from_wrapped_u32(2183330763),
412 BabyBear::from_wrapped_u32(3664021233),
413 BabyBear::from_wrapped_u32(1643809916),
414 ],
415 [
416 BabyBear::from_wrapped_u32(2922875898),
417 BabyBear::from_wrapped_u32(3740690643),
418 BabyBear::from_wrapped_u32(3932461140),
419 BabyBear::from_wrapped_u32(161156271),
420 BabyBear::from_wrapped_u32(2619943483),
421 BabyBear::from_wrapped_u32(4077039509),
422 BabyBear::from_wrapped_u32(2921201703),
423 BabyBear::from_wrapped_u32(2085619718),
424 BabyBear::from_wrapped_u32(2065264646),
425 BabyBear::from_wrapped_u32(2615693812),
426 BabyBear::from_wrapped_u32(3116555433),
427 BabyBear::from_wrapped_u32(246100007),
428 BabyBear::from_wrapped_u32(4281387154),
429 BabyBear::from_wrapped_u32(4046141001),
430 BabyBear::from_wrapped_u32(4027749321),
431 BabyBear::from_wrapped_u32(111611860),
432 ],
433 [
434 BabyBear::from_wrapped_u32(2066954820),
435 BabyBear::from_wrapped_u32(2502099969),
436 BabyBear::from_wrapped_u32(2915053115),
437 BabyBear::from_wrapped_u32(2362518586),
438 BabyBear::from_wrapped_u32(366091708),
439 BabyBear::from_wrapped_u32(2083204932),
440 BabyBear::from_wrapped_u32(4138385632),
441 BabyBear::from_wrapped_u32(3195157567),
442 BabyBear::from_wrapped_u32(1318086382),
443 BabyBear::from_wrapped_u32(521723799),
444 BabyBear::from_wrapped_u32(702443405),
445 BabyBear::from_wrapped_u32(2507670985),
446 BabyBear::from_wrapped_u32(1760347557),
447 BabyBear::from_wrapped_u32(2631999893),
448 BabyBear::from_wrapped_u32(1672737554),
449 BabyBear::from_wrapped_u32(1060867760),
450 ],
451 [
452 BabyBear::from_wrapped_u32(2359801781),
453 BabyBear::from_wrapped_u32(2800231467),
454 BabyBear::from_wrapped_u32(3010357035),
455 BabyBear::from_wrapped_u32(1035997899),
456 BabyBear::from_wrapped_u32(1210110952),
457 BabyBear::from_wrapped_u32(1018506770),
458 BabyBear::from_wrapped_u32(2799468177),
459 BabyBear::from_wrapped_u32(1479380761),
460 BabyBear::from_wrapped_u32(1536021911),
461 BabyBear::from_wrapped_u32(358993854),
462 BabyBear::from_wrapped_u32(579904113),
463 BabyBear::from_wrapped_u32(3432144800),
464 BabyBear::from_wrapped_u32(3625515809),
465 BabyBear::from_wrapped_u32(199241497),
466 BabyBear::from_wrapped_u32(4058304109),
467 BabyBear::from_wrapped_u32(2590164234),
468 ],
469 [
470 BabyBear::from_wrapped_u32(1688530738),
471 BabyBear::from_wrapped_u32(1580733335),
472 BabyBear::from_wrapped_u32(2443981517),
473 BabyBear::from_wrapped_u32(2206270565),
474 BabyBear::from_wrapped_u32(2780074229),
475 BabyBear::from_wrapped_u32(2628739677),
476 BabyBear::from_wrapped_u32(2940123659),
477 BabyBear::from_wrapped_u32(4145206827),
478 BabyBear::from_wrapped_u32(3572278009),
479 BabyBear::from_wrapped_u32(2779607509),
480 BabyBear::from_wrapped_u32(1098718697),
481 BabyBear::from_wrapped_u32(1424913749),
482 BabyBear::from_wrapped_u32(2224415875),
483 BabyBear::from_wrapped_u32(1108922178),
484 BabyBear::from_wrapped_u32(3646272562),
485 BabyBear::from_wrapped_u32(3935186184),
486 ],
487 [
488 BabyBear::from_wrapped_u32(820046587),
489 BabyBear::from_wrapped_u32(1393386250),
490 BabyBear::from_wrapped_u32(2665818575),
491 BabyBear::from_wrapped_u32(2231782019),
492 BabyBear::from_wrapped_u32(672377010),
493 BabyBear::from_wrapped_u32(1920315467),
494 BabyBear::from_wrapped_u32(1913164407),
495 BabyBear::from_wrapped_u32(2029526876),
496 BabyBear::from_wrapped_u32(2629271820),
497 BabyBear::from_wrapped_u32(384320012),
498 BabyBear::from_wrapped_u32(4112320585),
499 BabyBear::from_wrapped_u32(3131824773),
500 BabyBear::from_wrapped_u32(2347818197),
501 BabyBear::from_wrapped_u32(2220997386),
502 BabyBear::from_wrapped_u32(1772368609),
503 BabyBear::from_wrapped_u32(2579960095),
504 ],
505 [
506 BabyBear::from_wrapped_u32(3544930873),
507 BabyBear::from_wrapped_u32(225847443),
508 BabyBear::from_wrapped_u32(3070082278),
509 BabyBear::from_wrapped_u32(95643305),
510 BabyBear::from_wrapped_u32(3438572042),
511 BabyBear::from_wrapped_u32(3312856509),
512 BabyBear::from_wrapped_u32(615850007),
513 BabyBear::from_wrapped_u32(1863868773),
514 BabyBear::from_wrapped_u32(803582265),
515 BabyBear::from_wrapped_u32(3461976859),
516 BabyBear::from_wrapped_u32(2903025799),
517 BabyBear::from_wrapped_u32(1482092434),
518 BabyBear::from_wrapped_u32(3902972499),
519 BabyBear::from_wrapped_u32(3872341868),
520 BabyBear::from_wrapped_u32(1530411808),
521 BabyBear::from_wrapped_u32(2214923584),
522 ],
523 [
524 BabyBear::from_wrapped_u32(3118792481),
525 BabyBear::from_wrapped_u32(2241076515),
526 BabyBear::from_wrapped_u32(3983669831),
527 BabyBear::from_wrapped_u32(3180915147),
528 BabyBear::from_wrapped_u32(3838626501),
529 BabyBear::from_wrapped_u32(1921630011),
530 BabyBear::from_wrapped_u32(3415351771),
531 BabyBear::from_wrapped_u32(2249953859),
532 BabyBear::from_wrapped_u32(3755081630),
533 BabyBear::from_wrapped_u32(486327260),
534 BabyBear::from_wrapped_u32(1227575720),
535 BabyBear::from_wrapped_u32(3643869379),
536 BabyBear::from_wrapped_u32(2982026073),
537 BabyBear::from_wrapped_u32(2466043731),
538 BabyBear::from_wrapped_u32(1982634375),
539 BabyBear::from_wrapped_u32(3769609014),
540 ],
541 [
542 BabyBear::from_wrapped_u32(2195455495),
543 BabyBear::from_wrapped_u32(2596863283),
544 BabyBear::from_wrapped_u32(4244994973),
545 BabyBear::from_wrapped_u32(1983609348),
546 BabyBear::from_wrapped_u32(4019674395),
547 BabyBear::from_wrapped_u32(3469982031),
548 BabyBear::from_wrapped_u32(1458697570),
549 BabyBear::from_wrapped_u32(1593516217),
550 BabyBear::from_wrapped_u32(1963896497),
551 BabyBear::from_wrapped_u32(3115309118),
552 BabyBear::from_wrapped_u32(1659132465),
553 BabyBear::from_wrapped_u32(2536770756),
554 BabyBear::from_wrapped_u32(3059294171),
555 BabyBear::from_wrapped_u32(2618031334),
556 BabyBear::from_wrapped_u32(2040903247),
557 BabyBear::from_wrapped_u32(3799795076),
558 ]
559 ];
560
561
562 pub static ref RC_16_30_U32: [[u32; 16]; 30] = [
563 [
564 (2110014213),
565 (3964964605),
566 (2190662774),
567 (2732996483),
568 (640767983),
569 (3403899136),
570 (1716033721),
571 (1606702601),
572 (3759873288),
573 (1466015491),
574 (1498308946),
575 (2844375094),
576 (3042463841),
577 (1969905919),
578 (4109944726),
579 (3925048366),
580 ],
581 [
582 (3706859504),
583 (759122502),
584 (3167665446),
585 (1131812921),
586 (1080754908),
587 (4080114493),
588 (893583089),
589 (2019677373),
590 (3128604556),
591 (580640471),
592 (3277620260),
593 (842931656),
594 (548879852),
595 (3608554714),
596 (3575647916),
597 (81826002),
598 ],
599 [
600 (4289086263),
601 (1563933798),
602 (1440025885),
603 (184445025),
604 (2598651360),
605 (1396647410),
606 (1575877922),
607 (3303853401),
608 (137125468),
609 (765010148),
610 (633675867),
611 (2037803363),
612 (2573389828),
613 (1895729703),
614 (541515871),
615 (1783382863),
616 ],
617 [
618 (2641856484),
619 (3035743342),
620 (3672796326),
621 (245668751),
622 (2025460432),
623 (201609705),
624 (286217151),
625 (4093475563),
626 (2519572182),
627 (3080699870),
628 (2762001832),
629 (1244250808),
630 (606038199),
631 (3182740831),
632 (73007766),
633 (2572204153),
634 ],
635 [
636 (1196780786),
637 (3447394443),
638 (747167305),
639 (2968073607),
640 (1053214930),
641 (1074411832),
642 (4016794508),
643 (1570312929),
644 (113576933),
645 (4042581186),
646 (3634515733),
647 (1032701597),
648 (2364839308),
649 (3840286918),
650 (888378655),
651 (2520191583),
652 ],
653 [
654 (36046858),
655 (2927525953),
656 (3912129105),
657 (4004832531),
658 (193772436),
659 (1590247392),
660 (4125818172),
661 (2516251696),
662 (4050945750),
663 (269498914),
664 (1973292656),
665 (891403491),
666 (1845429189),
667 (2611996363),
668 (2310542653),
669 (4071195740),
670 ],
671 [
672 (3505307391),
673 (786445290),
674 (3815313971),
675 (1111591756),
676 (4233279834),
677 (2775453034),
678 (1991257625),
679 (2940505809),
680 (2751316206),
681 (1028870679),
682 (1282466273),
683 (1059053371),
684 (834521354),
685 (138721483),
686 (3100410803),
687 (3843128331),
688 ],
689 [
690 (3878220780),
691 (4058162439),
692 (1478942487),
693 (799012923),
694 (496734827),
695 (3521261236),
696 (755421082),
697 (1361409515),
698 (392099473),
699 (3178453393),
700 (4068463721),
701 (7935614),
702 (4140885645),
703 (2150748066),
704 (1685210312),
705 (3852983224),
706 ],
707 [
708 (2896943075),
709 (3087590927),
710 (992175959),
711 (970216228),
712 (3473630090),
713 (3899670400),
714 (3603388822),
715 (2633488197),
716 (2479406964),
717 (2420952999),
718 (1852516800),
719 (4253075697),
720 (979699862),
721 (1163403191),
722 (1608599874),
723 (3056104448),
724 ],
725 [
726 (3779109343),
727 (536205958),
728 (4183458361),
729 (1649720295),
730 (1444912244),
731 (3122230878),
732 (384301396),
733 (4228198516),
734 (1662916865),
735 (4082161114),
736 (2121897314),
737 (1706239958),
738 (4166959388),
739 (1626054781),
740 (3005858978),
741 (1431907253),
742 ],
743 [
744 (1418914503),
745 (1365856753),
746 (3942715745),
747 (1429155552),
748 (3545642795),
749 (3772474257),
750 (1621094396),
751 (2154399145),
752 (826697382),
753 (1700781391),
754 (3539164324),
755 (652815039),
756 (442484755),
757 (2055299391),
758 (1064289978),
759 (1152335780),
760 ],
761 [
762 (3417648695),
763 (186040114),
764 (3475580573),
765 (2113941250),
766 (1779573826),
767 (1573808590),
768 (3235694804),
769 (2922195281),
770 (1119462702),
771 (3688305521),
772 (1849567013),
773 (667446787),
774 (753897224),
775 (1896396780),
776 (3143026334),
777 (3829603876),
778 ],
779 [
780 (859661334),
781 (3898844357),
782 (180258337),
783 (2321867017),
784 (3599002504),
785 (2886782421),
786 (3038299378),
787 (1035366250),
788 (2038912197),
789 (2920174523),
790 (1277696101),
791 (2785700290),
792 (3806504335),
793 (3518858933),
794 (654843672),
795 (2127120275),
796 ],
797 [
798 (1548195514),
799 (2378056027),
800 (390914568),
801 (1472049779),
802 (1552596765),
803 (1905886441),
804 (1611959354),
805 (3653263304),
806 (3423946386),
807 (340857935),
808 (2208879480),
809 (139364268),
810 (3447281773),
811 (3777813707),
812 (55640413),
813 (4101901741),
814 ],
815 [
816 (104929687),
817 (1459980974),
818 (1831234737),
819 (457139004),
820 (2581487628),
821 (2112044563),
822 (3567013861),
823 (2792004347),
824 (576325418),
825 (41126132),
826 (2713562324),
827 (151213722),
828 (2891185935),
829 (546846420),
830 (2939794919),
831 (2543469905)
832 ],
833 [
834 (2191909784),
835 (3315138460),
836 (530414574),
837 (1242280418),
838 (1211740715),
839 (3993672165),
840 (2505083323),
841 (3845798801),
842 (538768466),
843 (2063567560),
844 (3366148274),
845 (1449831887),
846 (2408012466),
847 (294726285),
848 (3943435493),
849 (924016661),
850 ],
851 [
852 (3633138367),
853 (3222789372),
854 (809116305),
855 (30100013),
856 (2655172876),
857 (2564247117),
858 (2478649732),
859 (4113689151),
860 (4120146082),
861 (2512308515),
862 (650406041),
863 (4240012393),
864 (2683508708),
865 (951073977),
866 (3460081988),
867 (339124269),
868 ],
869 [
870 (130182653),
871 (2755946749),
872 (542600513),
873 (2816103022),
874 (1931786340),
875 (2044470840),
876 (1709908013),
877 (2938369043),
878 (3640399693),
879 (1374470239),
880 (2191149676),
881 (2637495682),
882 (4236394040),
883 (2289358846),
884 (3833368530),
885 (974546524),
886 ],
887 [
888 (3306659113),
889 (2234814261),
890 (1188782305),
891 (223782844),
892 (2248980567),
893 (2309786141),
894 (2023401627),
895 (3278877413),
896 (2022138149),
897 (575851471),
898 (1612560780),
899 (3926656936),
900 (3318548977),
901 (2591863678),
902 (188109355),
903 (4217723909),
904 ],
905 [
906 (1564209905),
907 (2154197895),
908 (2459687029),
909 (2870634489),
910 (1375012945),
911 (1529454825),
912 (306140690),
913 (2855578299),
914 (1246997295),
915 (3024298763),
916 (1915270363),
917 (1218245412),
918 (2479314020),
919 (2989827755),
920 (814378556),
921 (4039775921),
922 ],
923 [
924 (1165280628),
925 (1203983801),
926 (3814740033),
927 (1919627044),
928 (600240215),
929 (773269071),
930 (486685186),
931 (4254048810),
932 (1415023565),
933 (502840102),
934 (4225648358),
935 (510217063),
936 (166444818),
937 (1430745893),
938 (1376516190),
939 (1775891321),
940 ],
941 [
942 (1170945922),
943 (1105391877),
944 (261536467),
945 (1401687994),
946 (1022529847),
947 (2476446456),
948 (2603844878),
949 (3706336043),
950 (3463053714),
951 (1509644517),
952 (588552318),
953 (65252581),
954 (3696502656),
955 (2183330763),
956 (3664021233),
957 (1643809916),
958 ],
959 [
960 (2922875898),
961 (3740690643),
962 (3932461140),
963 (161156271),
964 (2619943483),
965 (4077039509),
966 (2921201703),
967 (2085619718),
968 (2065264646),
969 (2615693812),
970 (3116555433),
971 (246100007),
972 (4281387154),
973 (4046141001),
974 (4027749321),
975 (111611860),
976 ],
977 [
978 (2066954820),
979 (2502099969),
980 (2915053115),
981 (2362518586),
982 (366091708),
983 (2083204932),
984 (4138385632),
985 (3195157567),
986 (1318086382),
987 (521723799),
988 (702443405),
989 (2507670985),
990 (1760347557),
991 (2631999893),
992 (1672737554),
993 (1060867760),
994 ],
995 [
996 (2359801781),
997 (2800231467),
998 (3010357035),
999 (1035997899),
1000 (1210110952),
1001 (1018506770),
1002 (2799468177),
1003 (1479380761),
1004 (1536021911),
1005 (358993854),
1006 (579904113),
1007 (3432144800),
1008 (3625515809),
1009 (199241497),
1010 (4058304109),
1011 (2590164234),
1012 ],
1013 [
1014 (1688530738),
1015 (1580733335),
1016 (2443981517),
1017 (2206270565),
1018 (2780074229),
1019 (2628739677),
1020 (2940123659),
1021 (4145206827),
1022 (3572278009),
1023 (2779607509),
1024 (1098718697),
1025 (1424913749),
1026 (2224415875),
1027 (1108922178),
1028 (3646272562),
1029 (3935186184),
1030 ],
1031 [
1032 (820046587),
1033 (1393386250),
1034 (2665818575),
1035 (2231782019),
1036 (672377010),
1037 (1920315467),
1038 (1913164407),
1039 (2029526876),
1040 (2629271820),
1041 (384320012),
1042 (4112320585),
1043 (3131824773),
1044 (2347818197),
1045 (2220997386),
1046 (1772368609),
1047 (2579960095),
1048 ],
1049 [
1050 (3544930873),
1051 (225847443),
1052 (3070082278),
1053 (95643305),
1054 (3438572042),
1055 (3312856509),
1056 (615850007),
1057 (1863868773),
1058 (803582265),
1059 (3461976859),
1060 (2903025799),
1061 (1482092434),
1062 (3902972499),
1063 (3872341868),
1064 (1530411808),
1065 (2214923584),
1066 ],
1067 [
1068 (3118792481),
1069 (2241076515),
1070 (3983669831),
1071 (3180915147),
1072 (3838626501),
1073 (1921630011),
1074 (3415351771),
1075 (2249953859),
1076 (3755081630),
1077 (486327260),
1078 (1227575720),
1079 (3643869379),
1080 (2982026073),
1081 (2466043731),
1082 (1982634375),
1083 (3769609014),
1084 ],
1085 [
1086 (2195455495),
1087 (2596863283),
1088 (4244994973),
1089 (1983609348),
1090 (4019674395),
1091 (3469982031),
1092 (1458697570),
1093 (1593516217),
1094 (1963896497),
1095 (3115309118),
1096 (1659132465),
1097 (2536770756),
1098 (3059294171),
1099 (2618031334),
1100 (2040903247),
1101 (3799795076),
1102 ]
1103 ];
1104}
1105
1106pub fn poseidon2_init(
1107) -> Poseidon2<BabyBear, Poseidon2ExternalMatrixGeneral, DiffusionMatrixBabyBear, 16, 7> {
1108 const ROUNDS_F: usize = 8;
1109 const ROUNDS_P: usize = 13;
1110 let mut round_constants = RC_16_30.to_vec();
1111 let internal_start = ROUNDS_F / 2;
1112 let internal_end = (ROUNDS_F / 2) + ROUNDS_P;
1113 let internal_round_constants =
1114 round_constants.drain(internal_start..internal_end).map(|vec| vec[0]).collect::<Vec<_>>();
1115 let external_round_constants = round_constants;
1116 Poseidon2::new(
1117 ROUNDS_F,
1118 external_round_constants,
1119 Poseidon2ExternalMatrixGeneral,
1120 ROUNDS_P,
1121 internal_round_constants,
1122 DiffusionMatrixBabyBear,
1123 )
1124}
1125
1126use p3_symmetric::{CryptographicHasher, PaddingFreeSponge};
1127
1128pub fn poseidon2_hash(input: Vec<BabyBear>) -> [BabyBear; 8] {
1129 POSEIDON2_HASHER.hash_iter(input)
1130}
1131
1132pub fn poseidon2_hasher() -> PaddingFreeSponge<
1133 Poseidon2<BabyBear, Poseidon2ExternalMatrixGeneral, DiffusionMatrixBabyBear, 16, 7>,
1134 16,
1135 8,
1136 8,
1137> {
1138 let hasher = poseidon2_init();
1139 PaddingFreeSponge::<
1140 Poseidon2<BabyBear, Poseidon2ExternalMatrixGeneral, DiffusionMatrixBabyBear, 16, 7>,
1141 16,
1142 8,
1143 8,
1144 >::new(hasher)
1145}
1146
1147lazy_static! {
1148 pub static ref POSEIDON2_HASHER: PaddingFreeSponge::<
1149 Poseidon2<BabyBear, Poseidon2ExternalMatrixGeneral, DiffusionMatrixBabyBear, 16, 7>,
1150 16,
1151 8,
1152 8,
1153 > = poseidon2_hasher();
1154}
1155
1156pub fn hash_deferred_proof(
1158 prev_digest: &[BabyBear; 8],
1159 vk_digest: &[BabyBear; 8],
1160 pv_digest: &[BabyBear; 32],
1161) -> [BabyBear; 8] {
1162 let mut inputs = Vec::with_capacity(48);
1163 inputs.extend_from_slice(prev_digest);
1164 inputs.extend_from_slice(vk_digest);
1165 inputs.extend_from_slice(pv_digest);
1166 poseidon2_hash(inputs.to_vec())
1167}