1use ark_bn254::Fr as Fp;
5use mina_poseidon::{constants::SpongeConstants, poseidon::ArithmeticSpongeParams};
6use once_cell::sync::Lazy;
7
8use core::str::FromStr;
18
19fn params() -> ArithmeticSpongeParams<Fp> {
20 ArithmeticSpongeParams {
21 mds: vec![
22 vec![
23 Fp::from_str(
24 "18254759465961548724473677898900554279129333700345398792534035897544813417380",
25 )
26 .unwrap(),
27 Fp::from_str(
28 "9701727079493493822153587075727161870060130406601968554920630310837077525782",
29 )
30 .unwrap(),
31 Fp::from_str(
32 "6448075384674872988709285295252735647564764677180219427814076333498731944341",
33 )
34 .unwrap(),
35 ],
36 vec![
37 Fp::from_str(
38 "10582678689390677133753881397356982896844997242148790399395649637165847896125",
39 )
40 .unwrap(),
41 Fp::from_str(
42 "14953878658754362056567950679445798963011901944940518481654524320703963311366",
43 )
44 .unwrap(),
45 Fp::from_str(
46 "2769559556749664962636128855242028623701912278738796979170458933982658616355",
47 )
48 .unwrap(),
49 ],
50 vec![
51 Fp::from_str(
52 "11085432328429990699367643357327464988188253029150852680916595311968413759302",
53 )
54 .unwrap(),
55 Fp::from_str(
56 "6616328759095010539674576883698535512612418243442338373652055842385579197823",
57 )
58 .unwrap(),
59 Fp::from_str(
60 "1788173826467567565151305865636675972489937758217944451266517527454717587391",
61 )
62 .unwrap(),
63 ],
64 ],
65 round_constants: vec![
66 vec![
67 Fp::from_str(
68 "464317818058904040455944620932325370057318211982758073789794737262512069860",
69 )
70 .unwrap(),
71 Fp::from_str(
72 "3462163333362550903390325785926437039762839525013511939547720766741499409856",
73 )
74 .unwrap(),
75 Fp::from_str(
76 "12308193519164615772431903590941145851045953550307364845912877146027882177970",
77 )
78 .unwrap(),
79 ],
80 vec![
81 Fp::from_str(
82 "2714591816949287658718284157908523280274340884728966119095559324137312851163",
83 )
84 .unwrap(),
85 Fp::from_str(
86 "16384206429233192859678459425673999470857159372638200975562270773516251379588",
87 )
88 .unwrap(),
89 Fp::from_str(
90 "19416611223573031732302519381697999456593181436167069017836818060955725864200",
91 )
92 .unwrap(),
93 ],
94 vec![
95 Fp::from_str(
96 "17603455420764872031698321921973319158461544396609704072026904164018868607752",
97 )
98 .unwrap(),
99 Fp::from_str(
100 "11238098416885388471337306072943475212729724613485264776842071924751017567771",
101 )
102 .unwrap(),
103 Fp::from_str(
104 "20115085162632036284496420664439046277270577640351232755593699800626568913281",
105 )
106 .unwrap(),
107 ],
108 vec![
109 Fp::from_str(
110 "13522402812268713007260660858020591835416325370361256561462576999381232564525",
111 )
112 .unwrap(),
113 Fp::from_str(
114 "17993297334719348473740719243191272244929728431491444848946396448123051191677",
115 )
116 .unwrap(),
117 Fp::from_str(
118 "14266894438972358618281326760350513234022317540856366683582613440301108328203",
119 )
120 .unwrap(),
121 ],
122 vec![
123 Fp::from_str(
124 "15544565783214950187472074309645319815959207946976778588709413987755227716658",
125 )
126 .unwrap(),
127 Fp::from_str(
128 "11459281677950411823472431204851572448489387232119046190993717723024935465646",
129 )
130 .unwrap(),
131 Fp::from_str(
132 "3175427723782491063823141004980187933184665826684252846205862234135139398026",
133 )
134 .unwrap(),
135 ],
136 vec![
137 Fp::from_str(
138 "18104087100840279413272173524166428384373648597907924300377376914338365801413",
139 )
140 .unwrap(),
141 Fp::from_str(
142 "11059348970814019325544810642103429754398805409212413029570905399054361253560",
143 )
144 .unwrap(),
145 Fp::from_str(
146 "9723694385274179134284666123116305587583263720877786033125569799811141709147",
147 )
148 .unwrap(),
149 ],
150 vec![
151 Fp::from_str(
152 "21334124835555176052046135550571447667154056413650326169040093998967534013839",
153 )
154 .unwrap(),
155 Fp::from_str(
156 "13186187149295477383503606350078912331255804347098276303051944780008615958248",
157 )
158 .unwrap(),
159 Fp::from_str(
160 "1470033952086888296713916393108192307114009370637357884278948695504654950262",
161 )
162 .unwrap(),
163 ],
164 vec![
165 Fp::from_str(
166 "7525745512005637899980788850937553026084357875660084470654426987818115307169",
167 )
168 .unwrap(),
169 Fp::from_str(
170 "11196989505533608046175719825672890499899138989727925138952469167443760521626",
171 )
172 .unwrap(),
173 Fp::from_str(
174 "9101167944054900479650446113089291293767218643046467434823338481469624077969",
175 )
176 .unwrap(),
177 ],
178 vec![
179 Fp::from_str(
180 "746152031855445071661969786731764979416640168084300832548286844362915267733",
181 )
182 .unwrap(),
183 Fp::from_str(
184 "14500783258490511332342759610086566441467851535274198353685874901881586203920",
185 )
186 .unwrap(),
187 Fp::from_str(
188 "12586553744079534087671160799108871165444925427796015728451282191808004632029",
189 )
190 .unwrap(),
191 ],
192 vec![
193 Fp::from_str(
194 "2658978799169405016067965116007625196452718808329137140199842584938385590196",
195 )
196 .unwrap(),
197 Fp::from_str(
198 "14945177760821130319202365009462588707535813273905143480365649428853002471274",
199 )
200 .unwrap(),
201 Fp::from_str(
202 "17059544527948691563140405641038225702602878092594471881549757285581285907208",
203 )
204 .unwrap(),
205 ],
206 vec![
207 Fp::from_str(
208 "20191280011693017888798491354094094243127547574655352220297687980090230216",
209 )
210 .unwrap(),
211 Fp::from_str(
212 "18502499034030581022389564056073081062360187604161458073890564428974602584477",
213 )
214 .unwrap(),
215 Fp::from_str(
216 "8264062626605956514525302888463961111763485965406820048999276299668892074923",
217 )
218 .unwrap(),
219 ],
220 vec![
221 Fp::from_str(
222 "10792209418985110179364134772680195398048938179898831723416765403620730620462",
223 )
224 .unwrap(),
225 Fp::from_str(
226 "11664556276797417846866489492418594702491171278433997565894976597592370230667",
227 )
228 .unwrap(),
229 Fp::from_str(
230 "12270771377697756787250169216048909236321853168489305289596185098410215090484",
231 )
232 .unwrap(),
233 ],
234 vec![
235 Fp::from_str(
236 "8811136672424023763408452444568991590125177469609096631745680177504609711487",
237 )
238 .unwrap(),
239 Fp::from_str(
240 "20237676190929489436588870470052869226876887618934149899920104260655948094739",
241 )
242 .unwrap(),
243 Fp::from_str(
244 "20062974513054622329783259390735561568588514582980747668306658460292592667248",
245 )
246 .unwrap(),
247 ],
248 vec![
249 Fp::from_str(
250 "798776603612212418444623010074034446472782213575824096964910597458981693714",
251 )
252 .unwrap(),
253 Fp::from_str(
254 "8758094627630360838980606896109464566485363275799929171438278126952202465833",
255 )
256 .unwrap(),
257 Fp::from_str(
258 "707487852423957926868336579455035906997963205205141270331975346408432067044",
259 )
260 .unwrap(),
261 ],
262 vec![
263 Fp::from_str(
264 "202779927146339323474786313977213080711135813758190854284590663556011706836",
265 )
266 .unwrap(),
267 Fp::from_str(
268 "20391231297043803259194308176992776361609861855662006565804325535077866583400",
269 )
270 .unwrap(),
271 Fp::from_str(
272 "13103971641300442794695006804822894722919592148173662271765398624597649213516",
273 )
274 .unwrap(),
275 ],
276 vec![
277 Fp::from_str(
278 "11887088560178314335635682366268022017575768082106271832073442174179560940002",
279 )
280 .unwrap(),
281 Fp::from_str(
282 "9497730497365106303373876625863922615426121795921218372965815099779016166015",
283 )
284 .unwrap(),
285 Fp::from_str(
286 "13255889376415173861282249540978269441170571583954046228817145377643690062643",
287 )
288 .unwrap(),
289 ],
290 vec![
291 Fp::from_str(
292 "21797601683155849424606801821462621112628210830522816165936272187765788522806",
293 )
294 .unwrap(),
295 Fp::from_str(
296 "13791904812004141351280616602806766268926714029237345281809436730651246516674",
297 )
298 .unwrap(),
299 Fp::from_str(
300 "3541295787421703076701812027030126532836938797821201403520460081703194798007",
301 )
302 .unwrap(),
303 ],
304 vec![
305 Fp::from_str(
306 "6772295061598565998757352284489337907928739308702535748450215960170676319556",
307 )
308 .unwrap(),
309 Fp::from_str(
310 "19608658591798530616680061208581311706541541564609366646372793300896320095218",
311 )
312 .unwrap(),
313 Fp::from_str(
314 "15108470522637839917783948187626705626608074131603801620229663133367773769409",
315 )
316 .unwrap(),
317 ],
318 vec![
319 Fp::from_str(
320 "6982167525494887125745884237873629770460477859443352710958203128353080003941",
321 )
322 .unwrap(),
323 Fp::from_str(
324 "7877853416249147253292651939679543007752875545630493492558173940354891685347",
325 )
326 .unwrap(),
327 Fp::from_str(
328 "16723886233609641431662771575929234875591162154288587674425439500724219825212",
329 )
330 .unwrap(),
331 ],
332 vec![
333 Fp::from_str(
334 "2671311012893846775573899497331547132295274951055892772678260375558714942406",
335 )
336 .unwrap(),
337 Fp::from_str(
338 "10473922685305341900412641696196941263307819634043185788067854748950602802383",
339 )
340 .unwrap(),
341 Fp::from_str(
342 "5111630741260296655990184310611375231177307348451724203930709456972805973880",
343 )
344 .unwrap(),
345 ],
346 vec![
347 Fp::from_str(
348 "4992057345914438551815056581049158703461724962129889522457212594798779955393",
349 )
350 .unwrap(),
351 Fp::from_str(
352 "21183229986193453383825269196190741932488867108677665668392098260004852050858",
353 )
354 .unwrap(),
355 Fp::from_str(
356 "17083812614758825262603118558173710997332640429545889370504202808090339572857",
357 )
358 .unwrap(),
359 ],
360 vec![
361 Fp::from_str(
362 "18125355879021821849041167225185950892076210587475775745349215815478764407922",
363 )
364 .unwrap(),
365 Fp::from_str(
366 "8733966472516018163838600897336665253176449185681528084604422362542186741640",
367 )
368 .unwrap(),
369 Fp::from_str(
370 "12872170036700590319474830060138441606481805188061693688276584984859227049202",
371 )
372 .unwrap(),
373 ],
374 vec![
375 Fp::from_str(
376 "4477722790415428221489180851061526086953856916136558152290587660464310195129",
377 )
378 .unwrap(),
379 Fp::from_str(
380 "15013641992838646488575621859957900283128972996570425739867595472354843675113",
381 )
382 .unwrap(),
383 Fp::from_str(
384 "11110048915932820585149019832900719558018746589803602931460479672600239301992",
385 )
386 .unwrap(),
387 ],
388 vec![
389 Fp::from_str(
390 "6386524788949068680243545386229548182250656575626566757865736117588702942149",
391 )
392 .unwrap(),
393 Fp::from_str(
394 "10817607938125396761228235991828983933462215897289776505148575850147631400593",
395 )
396 .unwrap(),
397 Fp::from_str(
398 "17865086662065068946652014543896618689007438069494510844490187921781045033543",
399 )
400 .unwrap(),
401 ],
402 vec![
403 Fp::from_str(
404 "21842035812228593226084835552836653742808044145939024628842446854237127923353",
405 )
406 .unwrap(),
407 Fp::from_str(
408 "2471068742343144756503096572812849495213874183856231809598640313621938630669",
409 )
410 .unwrap(),
411 Fp::from_str(
412 "6547073217674180994961882255834734219166276822047545566909303528752619346965",
413 )
414 .unwrap(),
415 ],
416 vec![
417 Fp::from_str(
418 "9562418092642273301602927692306423921540755207933680809887955184175060412865",
419 )
420 .unwrap(),
421 Fp::from_str(
422 "5728419725627720701717078886669712201564103341166911632619636881997293379662",
423 )
424 .unwrap(),
425 Fp::from_str(
426 "9577751993330236726740958969117670757888267786661142736615315540557935073808",
427 )
428 .unwrap(),
429 ],
430 vec![
431 Fp::from_str(
432 "18485877910552384007717083804696131794323032392196584185820990234315883649039",
433 )
434 .unwrap(),
435 Fp::from_str(
436 "1769516528997465058766917692166940530540162775010485894812511264651123420964",
437 )
438 .unwrap(),
439 Fp::from_str(
440 "386757200774461941643538807053842280717539800465562760112828539321993775241",
441 )
442 .unwrap(),
443 ],
444 vec![
445 Fp::from_str(
446 "3316509296104361799525651631938052468498330218596415774527777363167138087617",
447 )
448 .unwrap(),
449 Fp::from_str(
450 "13729336006888298565425261097968915916390598196131379830434588594171666569512",
451 )
452 .unwrap(),
453 Fp::from_str(
454 "16148239410408669906403652096870758949643310812745307334909798696471189947927",
455 )
456 .unwrap(),
457 ],
458 vec![
459 Fp::from_str(
460 "21823520381432477314141727574561655219860240640515827154913290917309686356497",
461 )
462 .unwrap(),
463 Fp::from_str(
464 "4578651555280644323637866316527376720986123056791528481862274310799615790675",
465 )
466 .unwrap(),
467 Fp::from_str(
468 "5091226074924237835610573037013208388130454756337337471122368918009398753447",
469 )
470 .unwrap(),
471 ],
472 vec![
473 Fp::from_str(
474 "6515120964938381342071855012952056094433032260551298595194434149594056652176",
475 )
476 .unwrap(),
477 Fp::from_str(
478 "2340842607486511800425610472421888578518367747461866490788654350550767741883",
479 )
480 .unwrap(),
481 Fp::from_str(
482 "14503247487728138668651412383800848326991400373338038830652551371427345571441",
483 )
484 .unwrap(),
485 ],
486 vec![
487 Fp::from_str(
488 "3712612816523606936094514234541515605991691986951168127960369409943944902903",
489 )
490 .unwrap(),
491 Fp::from_str(
492 "1152766033584194531070871869834974085415579739949782153652057784926343256899",
493 )
494 .unwrap(),
495 Fp::from_str(
496 "8765049913334393206963752695629450392338936491569237833753514286462581790561",
497 )
498 .unwrap(),
499 ],
500 vec![
501 Fp::from_str(
502 "1601627912182619663670418257843886466719103377571015176803695116602531025179",
503 )
504 .unwrap(),
505 Fp::from_str(
506 "18098024103033142368624034583201165961009040474643655548434700066455514231331",
507 )
508 .unwrap(),
509 Fp::from_str(
510 "11268744383531850444109289654319779756413360261210505934077738062212630536901",
511 )
512 .unwrap(),
513 ],
514 vec![
515 Fp::from_str(
516 "13295211045409383825433911169815486079945004241473963274225158733643991813121",
517 )
518 .unwrap(),
519 Fp::from_str(
520 "10102619007330980171750476017504785290001093245315837544464105419145430593293",
521 )
522 .unwrap(),
523 Fp::from_str(
524 "209066254001010781273163283043011468251658035504800687498237342325693440716",
525 )
526 .unwrap(),
527 ],
528 vec![
529 Fp::from_str(
530 "10569794888394925789900696666438098928482919555802848731145904974932210713381",
531 )
532 .unwrap(),
533 Fp::from_str(
534 "3479060041588228962773080916545344859794556889989789923050334615578110393377",
535 )
536 .unwrap(),
537 Fp::from_str(
538 "8177920417424677597775227574376448009357347539898615178798501628859714007479",
539 )
540 .unwrap(),
541 ],
542 vec![
543 Fp::from_str(
544 "12067616893727942346831314147294036302857666398663726324584342747296065928710",
545 )
546 .unwrap(),
547 Fp::from_str(
548 "16971111464439978238379247781540292780056241741803063434856766170743124461469",
549 )
550 .unwrap(),
551 Fp::from_str(
552 "19754437344667989781187357721513315145328407420825515279265102170857620051268",
553 )
554 .unwrap(),
555 ],
556 vec![
557 Fp::from_str(
558 "3975594217367336645402283024719769072885792075344511606692741601510641156311",
559 )
560 .unwrap(),
561 Fp::from_str(
562 "19040197452680989990741508256669934716515775259429067120683774529031109727966",
563 )
564 .unwrap(),
565 Fp::from_str(
566 "5634578132978895965594894841292458192813357921721236220653749372316851034659",
567 )
568 .unwrap(),
569 ],
570 vec![
571 Fp::from_str(
572 "18016203270230065093894089716032049117997200515456531317821733896468154005026",
573 )
574 .unwrap(),
575 Fp::from_str(
576 "2432210503610876869795949218217418458948353953591635398452243060116570483824",
577 )
578 .unwrap(),
579 Fp::from_str(
580 "13732529162121190544870742850789344400294092206745459683809641438775485491009",
581 )
582 .unwrap(),
583 ],
584 vec![
585 Fp::from_str(
586 "14451766174292343678890357279454517773013585124369849119851032684103228653072",
587 )
588 .unwrap(),
589 Fp::from_str(
590 "12181367175079876176988175575030826371836485595254655739186027469233503901695",
591 )
592 .unwrap(),
593 Fp::from_str(
594 "10991645916339084020684503132290495819766466380987797648576877855177656702574",
595 )
596 .unwrap(),
597 ],
598 vec![
599 Fp::from_str(
600 "21313503925572929158381750262537945058966279485804307864340280517601895617812",
601 )
602 .unwrap(),
603 Fp::from_str(
604 "1550527311092834162328201290652099251984068161341884726521396319041776382263",
605 )
606 .unwrap(),
607 Fp::from_str(
608 "12003435213367105899404267897476505638234793525266930670911913539817221417924",
609 )
610 .unwrap(),
611 ],
612 vec![
613 Fp::from_str(
614 "8914436165324002549401721460186086215484314929358430322367050538121529812441",
615 )
616 .unwrap(),
617 Fp::from_str(
618 "5912060284310139977854439979850774712081952153779342442587915555451388976602",
619 )
620 .unwrap(),
621 Fp::from_str(
622 "18562577306045458592699989513868153553084370626914798022460227144415813035912",
623 )
624 .unwrap(),
625 ],
626 vec![
627 Fp::from_str(
628 "3121108818032693608292705100552135299104657945137655223341160358361023747970",
629 )
630 .unwrap(),
631 Fp::from_str(
632 "17009269623907524632744383402475624293106226516559465345873667100464648970276",
633 )
634 .unwrap(),
635 Fp::from_str(
636 "16002511017673785381646235433633055570232704209925362749110958022614294680393",
637 )
638 .unwrap(),
639 ],
640 vec![
641 Fp::from_str(
642 "9391205603129777266623979897548135033992809302803677537718465809304634939535",
643 )
644 .unwrap(),
645 Fp::from_str(
646 "18388689572534660670130774712714127815208938853203887656653830866982720723174",
647 )
648 .unwrap(),
649 Fp::from_str(
650 "5541548341946936547043936820389981449139467811019058131623682269330484215783",
651 )
652 .unwrap(),
653 ],
654 vec![
655 Fp::from_str(
656 "7190170322642292762509602175876149041297305605840922902837779590457938918669",
657 )
658 .unwrap(),
659 Fp::from_str(
660 "2027727849652978298961694136962688734430323753419089111303416976388312626148",
661 )
662 .unwrap(),
663 Fp::from_str(
664 "402427768909234974448400451691124558802645007494232545425431267044631491274",
665 )
666 .unwrap(),
667 ],
668 vec![
669 Fp::from_str(
670 "12797987239774923416407369376953974586493255155241527032821517134381740228905",
671 )
672 .unwrap(),
673 Fp::from_str(
674 "13333249780205062899642181453873590081512016926206507817605750877019442371089",
675 )
676 .unwrap(),
677 Fp::from_str(
678 "18589810567518770657334682134081256712119747946842941531219734231027968237759",
679 )
680 .unwrap(),
681 ],
682 vec![
683 Fp::from_str(
684 "14776177603689091833670811465610858113310593319381602563122002687195119058247",
685 )
686 .unwrap(),
687 Fp::from_str(
688 "8091773219661648644611506313794854881311037176009459530767471191252204309868",
689 )
690 .unwrap(),
691 Fp::from_str(
692 "11572415535524327542083010017274275840592842320730873456621979565559067913733",
693 )
694 .unwrap(),
695 ],
696 vec![
697 Fp::from_str(
698 "20923164127054504021838810951918321616973675807578349217848643497149066166007",
699 )
700 .unwrap(),
701 Fp::from_str(
702 "13778673838153545444828783204107784921806288587132367999597554094415915790790",
703 )
704 .unwrap(),
705 Fp::from_str(
706 "15824998809651622678290890820327874961632638426240138370022501121781103446259",
707 )
708 .unwrap(),
709 ],
710 vec![
711 Fp::from_str(
712 "4090916114781784760754024121473951637398586212781078739533487486471895169595",
713 )
714 .unwrap(),
715 Fp::from_str(
716 "960857870893264392654072242483170132703826969766439993624797963496069781505",
717 )
718 .unwrap(),
719 Fp::from_str(
720 "20907571141369581631669592493277131511110363500792783458107745525298320150137",
721 )
722 .unwrap(),
723 ],
724 vec![
725 Fp::from_str(
726 "12109635595469802832249294970134397092397779126665661972278751053960740447966",
727 )
728 .unwrap(),
729 Fp::from_str(
730 "4824844368626589074800225473359998312724599509010698030845972726192270761413",
731 )
732 .unwrap(),
733 Fp::from_str(
734 "1279633418489206280063439936145640252901253476940505080338091886704297503137",
735 )
736 .unwrap(),
737 ],
738 vec![
739 Fp::from_str(
740 "13710991567078829309950552225511825775559273430088991705888338422645023107567",
741 )
742 .unwrap(),
743 Fp::from_str(
744 "21744331847293235251226457402120455816051177980544192245842389157344912734176",
745 )
746 .unwrap(),
747 Fp::from_str(
748 "13750456500419553884447154012886160987332428475286924998031161614878499276461",
749 )
750 .unwrap(),
751 ],
752 vec![
753 Fp::from_str(
754 "7897870706671989949903359523135485593775134275719857967175422051001928288650",
755 )
756 .unwrap(),
757 Fp::from_str(
758 "11530512859482871748707639867674853723860540856854102438746375696832108722419",
759 )
760 .unwrap(),
761 Fp::from_str(
762 "15102320430753094455411262873908179792479117498565463936483853362951093377404",
763 )
764 .unwrap(),
765 ],
766 vec![
767 Fp::from_str(
768 "20684012922073862986880613075424856809319565915848039596293835293542621074230",
769 )
770 .unwrap(),
771 Fp::from_str(
772 "11143754623250183108051550852169137897571161411757151918630704123953225725876",
773 )
774 .unwrap(),
775 Fp::from_str(
776 "21515833961121090836372549249533024521086358011705741464637998484545867651639",
777 )
778 .unwrap(),
779 ],
780 vec![
781 Fp::from_str(
782 "14927367861301244473471972423309886137778884679987552642033604382283866452496",
783 )
784 .unwrap(),
785 Fp::from_str(
786 "2234445563530370737450306710054836240206601416475326119659514396778117223266",
787 )
788 .unwrap(),
789 Fp::from_str(
790 "7320243644229576716977260850447281726825012665363843781486677636270396893993",
791 )
792 .unwrap(),
793 ],
794 vec![
795 Fp::from_str(
796 "3648709991731171089283528046834957511485556517829186374119154464357293936649",
797 )
798 .unwrap(),
799 Fp::from_str(
800 "8431771340355225974834111903440269408389608143822442356390982704086190421477",
801 )
802 .unwrap(),
803 Fp::from_str(
804 "850707530944871742730572985296454989068982533587676445405227892149682249460",
805 )
806 .unwrap(),
807 ],
808 vec![
809 Fp::from_str(
810 "12770330711881918473357359607046064327068283622530828696564875920105463050911",
811 )
812 .unwrap(),
813 Fp::from_str(
814 "18309438953837613260356082733742847603856465956586832431344593061564231402706",
815 )
816 .unwrap(),
817 Fp::from_str(
818 "7558769148417330857693721923631008074203529622851527561622447590521963662006",
819 )
820 .unwrap(),
821 ],
822 vec![
823 Fp::from_str(
824 "3817411164684956972519434296876841710387488302709712662164166985673595410943",
825 )
826 .unwrap(),
827 Fp::from_str(
828 "14529667139169881031943219432572774573785882712681678612418006263967413092263",
829 )
830 .unwrap(),
831 Fp::from_str(
832 "5591068111468958432601398487692727664831870363727501013569466045034798523918",
833 )
834 .unwrap(),
835 ],
836 ],
837 }
838}
839
840pub fn static_params() -> &'static ArithmeticSpongeParams<Fp> {
841 static PARAMS: Lazy<ArithmeticSpongeParams<Fp>> = Lazy::new(params);
842 &PARAMS
843}
844
845#[derive(Clone)]
850pub struct PlonkSpongeConstantsIVC {}
851
852impl SpongeConstants for PlonkSpongeConstantsIVC {
853 const SPONGE_CAPACITY: usize = 1;
854 const SPONGE_WIDTH: usize = 3;
855 const SPONGE_RATE: usize = 2;
856 const PERM_ROUNDS_FULL: usize = 55;
857 const PERM_ROUNDS_PARTIAL: usize = 0;
858 const PERM_HALF_ROUNDS_FULL: usize = 0;
859 const PERM_SBOX: u32 = 7;
860 const PERM_FULL_MDS: bool = true;
861 const PERM_INITIAL_ARK: bool = false;
862}
863
864#[cfg(test)]
865mod tests {
866 use core::str::FromStr;
867
868 use super::{static_params, PlonkSpongeConstantsIVC};
869 use ark_bn254::Fr as Fp;
870 use kimchi::o1_utils::FieldHelpers;
871 use mina_poseidon::poseidon::{ArithmeticSponge as Poseidon, Sponge as _};
872
873 #[test]
877 fn test_poseidon() {
878 let mut hash = Poseidon::<Fp, PlonkSpongeConstantsIVC>::new(static_params());
879 let input: [Fp; 3] = [
880 Fp::from_str("1").unwrap(),
881 Fp::from_str("1").unwrap(),
882 Fp::from_str("1").unwrap(),
883 ];
884 let exp_output_str = [
885 "62838cdb9e91f1e85b450c1c45ccd220da17896083479d4879d520dc51ca390c",
886 "1dcb5390c0c61fc6c461043e5b1ae385faedb3d5a87c95f488bb851faca61f0a",
887 "fc0388532e2e38ec1e1402fbcf016a7954cf8fb6b6ba5739c7666aea7af42c29",
888 ];
889 let exp_output = exp_output_str.map(|x| Fp::from_hex(x).unwrap());
890 hash.absorb(&input);
891 assert_eq!(hash.state, exp_output);
892 }
893}