Skip to main content

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