sp1_primitives/
lib.rs

1//! sp1-primitives contains types and functions that are used in both sp1-core and sp1-zkvm.
2//! Because it is imported in the zkvm entrypoint, it should be kept minimal.
3
4use 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    // These constants are created by a RNG.
15
16    // This will be compatible with a poseidon2 permutation config with
17    // a state width of 16 and total rounds (both full and partial) of 30.
18    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
1156/// Append a single deferred proof to a hash chain of deferred proofs.
1157pub 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}