You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2476 lines
84 KiB

use ark_bls12_377::Fr;
use ark_crypto_primitives::sponge::poseidon::PoseidonConfig;
use std::str::FromStr;
// Copyright: https://github.com/nikkolasg/ark-dkg/blob/main/src/parameters.rs
use json::JsonValue;
use lazy_static::lazy_static;
lazy_static! {
// bls12377_rate2_constraints_fr:
pub static ref FR: JsonValue = object! {
"ark" => array![
array!["1370773116404421539888881648821194629032979299946048429076387284005101684675",
"4673035637825817609038514733539555185313791666023633961663352080665830654830",
"3476986714632640194314485873881082667866912997891863048915892042674874286264"],
array!["1082495278266482754833562621758308632581366365108718780801560341752506567697",
"4949432510532674124503328437030614426007112126335799011165573383397503068558",
"1330731268421256836250705136567442317504087954921291231955447229193812596308"],
array!["2649505161225663922316999879032136225486779063673300240621719420078616600331",
"4969420587703679612645522006695883166296724515300508402438681500077273342102",
"205635712587803026777585519450868615715404988831679984758308345484658244699"],
array!["6145772648854219628629735661952781083869402744236565775495743574991105198727",
"5694971131555029816374722311330556638260056256238039903705739439184187043937",
"5741725876337992913741719090196370235271299497940404104226910654118627348231"],
array!["6469638413629030129780219709477213488269112947492045389237429028620220258446",
"3701595212702118832843766258638566924918883592466668319824165091176624488470",
"3788264172113320071929375505654410621672880197708720070568683533593741188367"],
array!["7440115096888436553805393179190448787187286166192882400220572931865568317182",
"792346028642694686435936057983036575794551345818605100013220351237266490211",
"3512073197867644095949820682768614757198377867832806840119595329029395413419"],
array!["3327088580126882425803902509250293076948968718390152099056814690231480975540",
"7158369207426751973498757672315193862013926247640641608613447343948389969907",
"6576114422707630183258306285876174832535448513519868242206479550748199028650"],
array!["1750441329216804285131573838407988974537000108919914117251383215390240334007",
"6643642586767682146943021170325866479407987761019956931934065669737733844970",
"4106833857706706417652949425395842926674588555313556065852954705212767334548"],
array!["5196247641080157421214976259470019902011109253162446920598369271583914387912",
"6360624992789526556614108772011303405529807087502693775123890278812066474754",
"8425833359837698797187325575646708254811496588866812335451071326764069753553"],
array!["7571765444928048488636382364785227388831860339901373587410494373985769122100",
"1146560176939543249528183531911179059346379826648787355971780563762045417939",
"7065673187452873657602174269205792331276819829797382751854008973390840650347"],
array!["2996886232144394882237600400269759049381836612341075168714674419715424495381",
"7668744387648470169368229696434415530109096020857128629089289952099341334341",
"936627698981026919732496023789041288394375500602254911470718843646602645053"],
array!["6199749224785668013863210092063343076018531979597999604829468825162260274190",
"1653132234679858820482383205271489733007453315887823778464537322543673289375",
"7939359542319254103812635759696217625861967838748888560647186882218141754398"],
array!["5250147394211818178524181700154433748053992647055590962793825894928645733326",
"235902753941634492088451291363018081809625358810315316265161104829935550542",
"6608963137139961850002639926351347514621255004982055637993898513250013620207"],
array!["686840635267965663175276645211808051025823527505028096239338481540935993835",
"6836915689880452140045500520891176609600850753468429607484223074627863622754",
"4411311036661487117682008390277121256586135166845650218368031395328640568455"],
array!["7765580651637884064091086941299831107821005732883926779656422881469118342677",
"332549754384827539552516583331436482626027168628972328124682073094327566178",
"8438579169602499403531276834153862236681805902767396281885988675130427183942"],
array!["4371224392051444141538216717830171873522813314722974453159288159086172590441",
"4471819188266525256545603690402039960553559029943278641513107103995534212653",
"7934285249368611074358220926618133755594116808280441387064776330233673680433"],
array!["3296929004083914338419828203502973195235748568216135964056267831058260996338",
"7828705062628438916991665037339807083733865061668384262916273779860279371794",
"6313358380505257639005175768394745400256528068580776946435054333930810425918"],
array!["7673091158517942236320201239127705985446414040558434294512441355493079388101",
"3589839431787481799335476281766961640592432750884680804513596535388211513959",
"3497309798506406648010286927425548038594271991920637549888387014860982947288"],
array!["3598928531842189258027744661377220155690961099878644839237443661252156892627",
"8323476545439527339398168929351847585459351691146904838200536423836775797722",
"2525233425021205371462807301191193452372106809085080242885832543937723343824"],
array!["1670123541208150697178760793866430341950571765422973242642698972122650175931",
"2615994352824306042392204336460002628039562926557752567316988279659549764738",
"3845612285742795068547496524855308821681721826554794539870518271238257264872"],
array!["8111729937113136682593516470591971173110681064547090000686075778488505769131",
"8396009887088699712099390488777898295472002649026341742255474271675851100167",
"7414449034416524223782013238252312102346828190465700203171291370882467344947"],
array!["3778308769422683143427677977866154704853508570989688082271648398982585170107",
"2565370813801956884760401215151019368813258954878221563399238313359761598300",
"7277843344904687178893605017520459777796065293383180828267621160222576167983"],
array!["6533305346353864830435743885484797433819452357103761181561861553139604158691",
"7023616807188225486961828699414844137821383541366139971758751915067616890468",
"6455936034448761051686329703810283225146169133435552271890713431685063292826"],
array!["2781819771186595572605878483518345975589831093852202671865373784050027047498",
"7768920898267371999735782676903681841500678447293607126814923973294043875457",
"6463549363657422809088424260159871142005366302883731565233242485772646214776"],
array!["4269033939844383336636476360431731618619965524039119758847937142713481376709",
"5618036788017776315188246458501777138795420885496187406031735668173200947333",
"1128431213282240763420656004648057492974288942591424362188971631793337713791"],
array!["6900739195883338461228609955335408882714240356250551921341894223851444718631",
"3771335365721990684607605930021444592509300370948450043449389607062564762590",
"4101659620264578558029808267598816776989279597141521237379858078563415422176"],
array!["7265965499850925058171553371274334440963706378337393611300731052328159723420",
"4766078774636290635629565607286497839044156826339894416138410680627572132174",
"6432220484581857509344049161489739648526811837695982886809250552529276108059"],
array!["6361365189519422980433504384140223138978192212838226387265114914908491362931",
"7610377774980016354219333532677870219839779550900332138169496134065793623856",
"363180943030113865942993953461474483659264066502549823448101062593623940092"],
array!["3562244767885763851343292605940116818317029725206904934994049890929589055395",
"7782549227482772885045540707357099585281118980712854335622177919009966444948",
"1275552603578693917501370061277948491143012995771911804618466157236333967239"],
array!["5104148721380689096094143534135757186465840305075873333902995773940524349076",
"3827555903928560008785730325772720209567461775844698712063218244346202837926",
"6537952092752701292661689328736100739363623229800800023575262375504637794811"],
array!["2625555787287768315537311869809801184270047957788564515280996906803464172085",
"2268046926631224821219360422346148209575446526490776085639666316914303207343",
"8301985790233975096406293902798523168400755923104779849614021896827941122062"],
array!["6186410907907226666421909877388154922245464592386712702411681535145025981542",
"1570197114753247526703806268420919303949793186535455032181860083077073573260",
"6433616921731463425493337442585921501113569311931762833956390491384184622184"],
array!["3730715929874541583946502538607860277000019933547155277889700636306045698678",
"4162712607911623590542516061947062496983700183068013598513127619182396118738",
"4885581468925689451043482261642022591161185334411569876922526171563347772487"],
array!["679010986662603253067780482929422410547319947222192616893132766589997651700",
"7045332371454775389874918027434858274122123892961682451412342124928285105115",
"796483939088841221822094384379289433804847199444006131260701274900329521826"],
array!["6930777873598706215302735286927888271122111082058406024378887982572264481712",
"3833261336312955683233981899122259611841384124139797023838966596495768744423",
"6081952172694136481884686958014712088378824178559544670607383857565862846284"],
array!["3816381396460078181431529965953560061945407168453302734314638292833792891390",
"56734387980297685686110088096585973744605712015961903089771968507489169889",
"1528381975769046861077120384272922840572114805411576866912148437940560430592"],
array!["4051427337822729290390706006634045761150954597129823553613464074823819976689",
"928801883926308717594921627141285880564599719525707838888160095066522021660",
"2575814441780474908465005749689528467553680700052052921662671958906858409792"],
array!["4188482005041843983756841875722811236284873807578170011114849822278345286775",
"2055640774204777367415844703991682482137697203553277498227758201416424138567",
"4575553062307433825409075011087260276527850105624870927391350382554634786094"],
array!["1854996916655462786356197865726500413712215270951193953965916926815164398288",
"4106990062567081635175461840146829007165341060131472749713325730182145598945",
"4440684113159162228103294475409844107272920293202271745070427054893404635089"]],
"mds" => array![array!["6093452032963406658309134825240609333033222270199073508119142384975416392638",
"5968273173562867837210008744966745230923761158428968101807573098840850097286",
"1100466639266852149977689148055725793531897994956807001704693611715839541982"],
array!["3160983601532844171864802850648492289862147997874094785600836495095965353712",
"2338351297827692414112631814274572996809824929139580588221558887342663769892",
"3177005087903404343485399282920555615020488967881372266904325860698809358885"],
array!["2285176219817854683696635383059984246218458246545520061123961933072089703485",
"84377861777946561525373172505381054389617879929776365352216307785104476701",
"8280884008678095605415834125731826663585461281789631237939546251146561093166"]],
"rate" => 2,
"alpha"=> 17,
"full_rounds" => 8,
"partial_rounds" => 31
};
}
/// TODO
pub fn poseidon_params() -> PoseidonConfig<Fr> {
let arks = FR["ark"]
.members()
.map(|ark| {
ark
.members()
.map(|v| Fr::from_str(v.as_str().unwrap()).unwrap())
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
let mds = FR["mds"]
.members()
.map(|m| {
m.members()
.map(|v| Fr::from_str(v.as_str().unwrap()).unwrap())
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
PoseidonConfig::new(
FR["full_rounds"].as_usize().unwrap(),
FR["partial_rounds"].as_usize().unwrap(),
FR["alpha"].as_u64().unwrap(),
mds,
arks,
FR["rate"].as_usize().unwrap(),
// TODO (nikkolasg): check out the concrete parameters for the capacity
// so far taken from https://github.com/AleoHQ/snarkVM/blob/d6ce2d3540b9355b59ef580db998188c786f8599/fields/src/traits/poseidon_default.rs#L43
1,
)
}
// Generated from poseidon_transcript::test::poseidon_parameters_generation
pub fn poseidon_params_bls12381() -> PoseidonConfig<ark_bls12_381::Fr> {
use ark_ff::PrimeField;
use poseidon_parameters::{
Alpha, ArcMatrix, Matrix, MatrixOperations, MdsMatrix, OptimizedArcMatrix,
OptimizedMdsMatrices, PoseidonParameters, RoundNumbers, SquareMatrix,
};
/// Parameters for the rate-1 instance of Poseidon.
pub fn rate_1<F: PrimeField>() -> PoseidonParameters<F> {
PoseidonParameters {
M: 128,
t: 2,
arc: ArcMatrix::new(
64,
2,
vec![
F::from_str(
"35174739893055911104493616029378130908017657834702731071195911003169112450229",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40230473166484073181383530626136429631051240172158259323832118663695222064618",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"44839971797550275719608927493602345619671796219131839128512847210863471539893",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"48611564661854252146943435349048894917868766542696555144699929229862960415826",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40685922923883326639435460208454299274336241847181916712959630054792010757353",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"15664326207051802832937062272185115402684860397390155009854115660846132411502",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"20394588293088308460232807257084465383971903994422965392216628021702933756783",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"38072899122370719412288433912125900148799524273752876684473712699262778897654",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"49322204581160802920728528441668898478821361914594574984125707955891751339030",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"50347305345520436535964839331484028706021264874956603553067798037836173651466",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40078972002964969619442410831168416589272403782380052533737439660325916494912",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16924481893633890556036089675091788745304335123156116162143840931183063196275",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"15950945481350597658451757244282476321967934435937826665895833437077276040754",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"45461282993637819573288749652453263783235945959670912694991729940283965985733",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"28038644046234298370628400737789907143817173874662134250914598498795544431933",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"11068658063110546729562922745621277134925014371838931507832785600289614789661",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"52268179647931159024439236070026950641875512180000134500458099574638256905396",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"20086107503624605748636970696926057193402564249603453473832198318657465264844",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"43167135986193729211374724389523185950396183466709666189982348666853925219274",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"17447884039561508187156464597183128324504945258768782636135974167343387840370",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"38143921110340159188228723493420793611575037275078276538202087394517162729554",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16552274712964434889263219772539968802934308159216951923060313539515542031786",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"21533690197859269486445042768281999749203728740955226853531960445800814390872",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"21880324978302337713295482389160476412101864070449056420604485964938425631874",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"21087213863282472584378891060158648179244240590829455065271622458534461188836",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"45441431536584624993024537766051601076632677727170866925607963222280486713049",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"30366589203056029534723552859270912699187398046791858542022387243548834105416",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16733270300941292512227942400499003353179417300568446496228472021958136869720",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"47689344912249729511524931558254404476237521452234110431416696572010445584377",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"51082398733030351856006960204664584892075227924560364715540908659573989781750",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"43167631539924493632724725819354890041217481730115306669306358893967667398874",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"26279180116818040201102703456273647693759458841914982758720296510206405428021",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"46216367353381802394196440660508655919466089439065744128194487821032228754652",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"7697386669681950056820540614309128742475760814776187777185453179049760288818",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"21817782321868614563882198267973607652180292878221625474094565055913249527776",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"32913105459022632076500291209667002113801444807962815598956143828295422498435",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"8502502120080628515364514243099640525167810254369523636419786457595198827016",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"30648576830725883184207011877575066156796295678736109722327320104219004516016",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"45671339585608301452963125193632555070872004563546575584248952737167410364255",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"2451562695720526255410159479987351458212942773001104345088347268337017907959",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"7231969043003068614870036828648884326376597612869950504826116686399812612615",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"47273307399297813289148635743141600935869642174900722409535446469272321692250",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"27329929942264081140373255677952719498722443205980316837000158653641048193545",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"34885886867965298185213628215610826501969641592969627478599392659366672373049",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"25721535552417582691507498115295027536875255063383254204046680789623453672738",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"33423368799112636093951957186824418831319616314165017049161108153912788138739",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"25189833401427047672367010746537756277335149535290712725530069868987176912248",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"47958321445457642291354706357838648199395839243428939094705320859005837779683",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"31774563161791760397918769926476984438505538732495587514473389056037994152917",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"47850858374935538132163048932011117808042772861034650362901884832239133015769",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"12199128582337530870446335645513552144450426981759317374083089598580379977396",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"47383053307574057321551022954108360871160286114060097754143644961632203800586",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"13803873123545025453120373087635256640332504728831881021333511396025254579362",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"23837178543685639949465643421241187863068824855019641916163779619876342616994",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"31189587782086980076115943766865860302487147542493494232203123657276644861038",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"46499582074722273407549664254855207560785631035023694347608062453482015876732",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"26662253988013080389152043229142922449414668235746968994211290964651963062577",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"7640762545216115926527336572554187073301504782874830986070234716899751469743",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"34498963117721665288552413822781095260286143856801028464976598055529802364121",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"36341838182182173408654982018067474537982027919615372559077851240339996099909",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"48300815548868869899847665404889851174998730453507260888165473018017728774364",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"32747300835280625438818285868260843662581362309780466961516941514877133787742",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"45303055704904829718227319208556302736092241137651995389242696979297340573498",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"4026222424264187292280393735543795340594832329968061359731987906507864963350",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"31228142597140675203545792153829318135052985461159014806691885654670181871080",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16750970802520682106296025351756788120283612961882144708385294780405339907653",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"20590763839978944194181943371062517541785283010773701162056751611994399836929",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"37594126822410828138420253267022641722217448081718524151329800547846230255554",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"2394917091132363277251637490654694317375647018617394697153359156851524846663",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"19737567843628339977867209886872321409023634418218069475717765230353858108711",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"42204066697221303743688912704913307336835691602781490921152392223146514657878",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"38876322214460807353380405022935203128264986058834077654885314090533204762902",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40247991658021514679970964566577204929744204347802761928836742882323686245178",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"39561906161264753200012194261000443020947453081833838411624410505039816555019",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"11166460550589161376470931941636300531100498757195643048019370497750388675069",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"24790565769125580275808568537357949817511203246184311136698467928472412457388",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"11554811916664964398531930051533768691042015283409338870777253388332997487366",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"29075039934313065791873216420662295250443756892492849722546053940305352208592",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"39006987007077517708714677464659567763889315959219170058379373515871687446558",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"10061028159773233365380812282944217591122833800994251428395880422048305719205",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"25031744215108526550081827540392247511207429766528399786265447570055547629537",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"10547501786444119997366494351393198125463151669258024373934193854191592243660",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"41670235909630407351693051359364867863450981844765151303749913478896054145311",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"1550363730816174450383908114106000535080436631518311072819950124158318191772",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"45637974422753200101239746614094187617113326582060147125507840703682309645118",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"6370060789642013553710100441744454816236009933679880713369392969145674474801",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"35620803994636505121581975698616513950631274399330479421894994077745439358719",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16067112068611935345405777398473590697557771847332060708439576094222338198471",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"30951410852793823879089954146089097398960021512400590702302072057244085482851",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"12276812530571706718883327429408937606433993990196477479137283768845651925632",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"1005720997907928078270582364714493795153874104882338052955430808063076949858",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"9432539242737555038548151091729061683667954775317685872580932218706555557193",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"48144091886915459055979584468520005030090312584666359911350135788203438616374",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"22450925011805294935671299553107487783565275020715623196582033415826118494250",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"28149684753511832845415363706857286714650553416094912809755106801999479476946",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"18984416380626314263255929984317834766173910658882331424593963038930830788043",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"48109900230700383470215980955557162221434150244334962594952526792484549956555",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40552374456316069085238865117122876015343906448762540220517521948829052005624",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"11526656751459710456216830286109707102065783384712439837497260759522383867216",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"49248089956591852389575948260598336493822205882486787578128339029114849462975",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"39372448145844604168126556278211607335704246721513006643620494230495045549807",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"47966243235447948688248399775419397863458889989786324048551282844713998917659",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"10668975765352037241237726978611677229760273562923261307501184329169652545894",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"39507142063581063677057438880300974612179697912640172055190488555355094497813",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"15638468735129173771932513149618051284064233358516491068231561062569214055646",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"17353431924571233181583986362517131255570540171642397316569828436646526591477",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"1113151614126806805734456303419241558692549524321573289125509096780876830226",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"9984420714488068655842637440690086256585448839019918893900233218326556751996",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"35272971102390074745676114574216945810721613586667868556864593470832260078394",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"41799703040810741398331928206395151226132289978178889483708245720764196041488",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"23792232833587856422363054609833448590404370086820676679702830143363402049151",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"23400519399894650768950735628474893615670522380725820954092838104223338024750",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"27249609507238299376315178191811683563055616067419555246827701486258799476504",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"31460888976162844111664970745263960397533358231300142520392677905396078538854",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"50541111392701415266654707208995846306449617779331389560072929586596066181460",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16849402175596403120072436766532798469469816167994479896578935023255475833387",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"42001541432800637111202252596131403836308927391584450209899896684682298556999",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"7555678132801484327842862804202549162661136010229184979905673538160644182471",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16973896084242861113146860522670036493260039473958217656803484585799718732593",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"42770539705351951841624093062193706601998280964803890045059967451602239435405",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"32967596628774896802370445267419978233370846153035552840999780942126744328522",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"29885680756072762644563275495535410002799284565481770605563275267677242393534",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"6767565503770123230340610856538459014642791435134695578527084133222911388089",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"38034555907959016273994483610140537209819290169171432036495630086575144181148",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"35085508904879414050180652811899618801153816228166027426392174635054369363148",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"36657441819968029240636827111992013950645228690585008802597958876784513528202",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"1322579115549556048043817488502303168290944210869541203532619083870097554885",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16882844793625225132625646093399829180269843611668936510323341639265456546672",
)
.map_err(|_| ())
.unwrap(),
],
),
mds: MdsMatrix::from_elements(vec![
F::from_str(
"26217937587563095239723870254092982918845276250263818911301829349969290592257",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123009",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123009",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"39326906381344642859585805381139474378267914375395728366952744024953935888385",
)
.map_err(|_| ())
.unwrap(),
]),
alpha: Alpha::Exponent(5),
rounds: RoundNumbers { r_P: 56, r_F: 8 },
optimized_mds: OptimizedMdsMatrices {
M_hat: SquareMatrix::new(
1,
1,
vec![F::from_str(
"39326906381344642859585805381139474378267914375395728366952744024953935888385",
)
.map_err(|_| ())
.unwrap()],
),
v: Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123009",
)
.map_err(|_| ())
.unwrap()],
),
w: Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123009",
)
.map_err(|_| ())
.unwrap()],
),
M_prime: SquareMatrix::new(
2,
2,
vec![
F::from_str("1").map_err(|_| ()).unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"39326906381344642859585805381139474378267914375395728366952744024953935888385",
)
.map_err(|_| ())
.unwrap(),
],
),
M_doubleprime: SquareMatrix::new(
2,
2,
vec![
F::from_str(
"26217937587563095239723870254092982918845276250263818911301829349969290592257",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123009",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123010",
)
.map_err(|_| ())
.unwrap(),
F::from_str("1").map_err(|_| ()).unwrap(),
],
),
M_inverse: SquareMatrix::new(
2,
2,
vec![
F::from_str("18").map_err(|_| ()).unwrap(),
F::from_str(
"52435875175126190479447740508185965837690552500527637822603658699938581184489",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"52435875175126190479447740508185965837690552500527637822603658699938581184489",
)
.map_err(|_| ())
.unwrap(),
F::from_str("36").map_err(|_| ()).unwrap(),
],
),
M_hat_inverse: SquareMatrix::new(1, 1, vec![F::from_str("4").map_err(|_| ()).unwrap()]),
M_00: F::from_str(
"26217937587563095239723870254092982918845276250263818911301829349969290592257",
)
.map_err(|_| ())
.unwrap(),
M_i: Matrix::new(
2,
2,
vec![
F::from_str("1").map_err(|_| ()).unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"18844142621030738849315867221324380626272463491487726140277535101490822753350",
)
.map_err(|_| ())
.unwrap(),
],
),
v_collection: vec![
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123009",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"48066218910532341272827095465837135351216339792150334670720020474943699419137",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"51343461108977728177792579247598758216071999323433312034632749143689860743169",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52162771658589074904033950193039163932285914206254056375610931310876401074177",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52367599295991911585594292929399265361339392926959242460855476852673036156929",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52418806205342620755984378613489290718602762607135538982166613238122194927617",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52431607932680298048581900034511797057918605027179613112494397334484484620289",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52434808364514717371731280389767423642747565632190631645076343358575057043457",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435608472473322202518625478581330288954805783443386278221829864597700149249",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435808499462973410215461750784806950506615821256574936508201491103360925697",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435858506210386212139670818835676115894568330709872101079794397729776119809",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435871007897239412620723085848393407241556458073196392222692624386379918337",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435874133318952712740986152601572730078303489914027465008417181050530867969",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435874914674381037771051919289867560787490247874235233204848320216568605377",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435875110013238119028568360961941268464786937364287175253956105008078039729",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435875158847952389342947471379959695384111109736800160766233051205955398317",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435875171056630956921542248984464302113942152829928407144302287755424737964",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"13108968792764157739230385562246116075528485538207482101786075571938856184491",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"16386210991972587054669531517608020478304759509683779981097433567969359342251",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17205521541774694383529318006448496578998828002552854450925273066976985131691",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17410349179225221215744264628658615604172345125770123068382232941728891579051",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17461556088587852923798001284211145360465724406574440222746472910416868190891",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17474357815928510850811435448099277799539069226775519511337532902588862343851",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17477558247763675332564793989071310909307405431825789333485297900631860882091",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478358355722466453003133624314319186749489483088356789022239150142610516651",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478558382712164233112718533125071256110010495903998652906474462520297925291",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478608389459588678140114760327759273450140749107909118877533290614719777451",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478620891146444789396963817128431277785173312408886735370297997638325240491",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478624016568158817211176081328599278868931453234131139493489174394226606251",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478624797923587324164729147378641279139870988440442240524286968583201947691",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478624993262444450903117413891151779207605872242020015781986417130445783051",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478625042097158732587714480519279404224539593192414459596411279267256741891",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"17478625054305837303008863747176311310478773023430013070550017494801459481601",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"43696562644921102185338021317933552205887607631253231634590248398654300758785",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"50251047042574918405920310710622862429739816283209036275600306124617511078081",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"51889668141988372461065883058795189985702868446197987435852820556108313657905",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52299323416841735974852276145838271874693631486945225225915949163981014302861",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52401737235555076853298874417599042346941322247132034673431731315949189464100",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"13100434308888769213324718604399760586735330561783008668357932828987297366025",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"42602014958566835162916985032239414524951747015841480534042227232200760229891",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"23759472533423256410591181385106345090660574879092279589161471483034835353601",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"45266774514700456962233600727416060650933058095168798264243111895712644726785",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"50643600010019757100144205562993489541001178899187927933013521998882097070081",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"51987806383849582134621856771887846763518209100192710350206124524674460155905",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52323857977307038393241269574111436069147466650443905954504275156122550927361",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52407870875671402457896122774667333395554781038006704855578812813984573620225",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52428874100262493474059836074806307727156609634897404580847447228450079293441",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52434124906410266228100764399841051310057066784120079512164605832066455711745",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435437607947209416610996481099737205782181071425748244993895482970549816321",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435765783331445213738554501414408679713459643252165428201217895696573342465",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435847827177504163020444006493076548196279286208769724003048498878079224001",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435868338139018900340916382762743515316984196947920797953506149673455694385",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435873465879397584671034476830160257097160424632708566441120562372299811981",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"52435874747814492255753564000347014442542204481553905508563024165547010841380",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"13108968686953623063938391000086753610635551120388476377140756041386752710345",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"42604148553083048625570403131161162780926802155492847461237933035300624065971",
)
.map_err(|_| ())
.unwrap()],
),
],
w_hat_collection: vec![
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123010",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123014",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123030",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123094",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054123350",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054124374",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054128470",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054144854",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054210390",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959054472534",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959055521110",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959059715414",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959076492630",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959143601494",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799959412036950",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799960485778774",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799964780746070",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105799981960615254",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105800050680091990",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105800325557998934",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105801425069626710",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105805823116137814",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105823415302182230",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069105893784046359894",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069106175259023070550",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069107301158929913174",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069111804758557283670",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069129819157066765654",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069201876751104693590",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215069490107127256405334",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215070643028631863252310",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215075254714650290640214",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215093701458724000191830",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215167488435018838398294",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425215462636340198191224150",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425216643227960915602527574",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425221365594443785247741270",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425240255060375263828596054",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425315812924101178152015190",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018425618044379004835445691734",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018426826970198619464620397910",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018431662673477077981319222614",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018451005486590912048114521430",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018528376739046248315295716694",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667018837861748867593384020497750",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667020075801788152973658919621974",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667025027561945294494758516118870",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667044834602573860579156902106454",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667124062765088124916750446056790",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701667440975415145182267124621858134",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701668708626015373411668621325063510",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701673779228416286329274608137885014",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701694061638019937999698555389171030",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793701775191276434544681394344394315094",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793702099709830092971408177500414891350",
)
.map_err(|_| ())
.unwrap()],
),
Matrix::new(
1,
1,
vec![F::from_str(
"34957250116750793652965160338790643891793703397784044726678315310124497196374",
)
.map_err(|_| ())
.unwrap()],
),
],
},
optimized_arc: OptimizedArcMatrix::new(
64,
2,
vec![
F::from_str(
"35174739893055911104493616029378130908017657834702731071195911003169112450229",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40230473166484073181383530626136429631051240172158259323832118663695222064618",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"44839971797550275719608927493602345619671796219131839128512847210863471539893",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"48611564661854252146943435349048894917868766542696555144699929229862960415826",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"40685922923883326639435460208454299274336241847181916712959630054792010757353",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"15664326207051802832937062272185115402684860397390155009854115660846132411502",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"20394588293088308460232807257084465383971903994422965392216628021702933756783",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"38072899122370719412288433912125900148799524273752876684473712699262778897654",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"49322204581160802920728528441668898478821361914594574984125707955891751339030",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"11546720471100324356589604343765555296510298649382063718189403564461171492863",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"36110500355375093385871324309901194334631381714439614527255597369650392849542",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"3756733109852649396584228778466872196362658360207834645541184763961143083412",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"20251607517129761800297717300935980834606026680555472569470067927197814159058",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"5239353656737021436485173734268526002414965521861452100759532275936501964328",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"21300582910621453970075769970860650148943961329345636625818996955442242699131",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"21774765045116391148518722696232516163747969484119487964534360379873683242474",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"32722020057382082921329627018209709241475223852823289284428837414575534351309",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"33794442154315934695685025730187059000350644284482738453096808368436585150449",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"33356374759281451907993729503609407203078972387590420010346940719085856704600",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"16536766136174515568748693372704332161755684369233290734723311101392999671135",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"8155200347229826422648196061952312662995020845960673032039978897344425954944",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"41985238868657599524996779043300115443521336708491497391680518882421278207729",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"2063843216042971340057236348680603623021991141192327802421586125773152594966",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"19356199834277755257103978861422834427804178278770847736951931659601323041542",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"29407672119923084920129945390192575072371921764906862646182735700097611522286",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"23210564968750306632117638368081722417964237341952338866982652674742521848757",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"8919995046928353282196218782858660366384850716988440303338558248538040137799",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"19043131128131902196810002314394958855517905924691850071099334468401919991484",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"25372870640639931691894472507697938527971989245889491446494524936601040512930",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"28282246530559666639248292418150612779488812032571757345639609704112262688983",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"4783363587969676537071285052282175798266183157943408226768189618569177474295",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"8076640637611150676334686135767012090042738255090463961889429353861598391372",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"24983375671346681151260101878347553784741288686089866276697910000786751968362",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"31553063832521567697657525429909509843798042381162189406532027953053159867207",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"19397104375854813327815726265263423471142957336141256772200649485967743774458",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"16725724823339561221215536793048178667667680016815450011449579154320911341709",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"29033205376761356766961278958992230640915887129936846622211162138860547139883",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"38925727287210137779737577678032857716007633840925015412872642147337070197265",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"13054654952792030513819618373016885831657266413665857293819158146045635067324",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"11180520252272331206279504788346032423267894347729733535225909704781507388571",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"7829946038227950055107016972108651685558876858831437098551135271673396051934",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"12701392201570649781537742561621512715498088373227761999475504609950261026304",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"23110137476929231098068588344230895315869860683132386592399445163537587938902",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"34695385667367102489869345055605545198093190593541852158466006956870675273759",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"12473323874126447804974523548032043130473262290187841938491511255009575125315",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"33244171987325668610688838482180693579479913109349074619790699084518395114481",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"27800393704277881477423349646564407645504532574407056486674972536299508573197",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"38745941841134632283836831790084585919738726247813020052320436485069697160134",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"4222833134514534672312302121120063621259334942025065036721108691056782902710",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"2485253499287676466887039925919700883876238304552596149921625457687783981441",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"25376906928048350822232005681485535724988673469685171030423527493301156576940",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"50342721676243810030803571465468547773052568618511402750629061381943937849683",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"50049567928418632800795449103016632592486776140307034477479632433833610837266",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"23363897037620979716239578483167524838213385084153054827737272694281707133655",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"42704349801891305094989489174556449021777358796153454937762648266288696875551",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"15237078269491179837022602841512824373125754318519659312626032716476523314968",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"7834537534669842390771199937679522681049234016864851395164092776167283317372",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"40845753633682491334484157504358463583021595599904903653237711863475293554700",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"30415461155839336041159980430244598228679743472933918944484463593999625263250",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"45446374854682768122749806214133032507584129094447282144188920433140420665338",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"44511327229393971496561348546051674374277199034903648290060869960535543887325",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"31765384944890114175945271689093192004082637054270389724882306488698748316643",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"11724725910654336698843657420057198898582989110234170277283715189016057454856",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"35333898667082217702239272910553250687762082480432049530115838213528273162930",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"13139429039691322549933623030015220158389702383341486257474725505081327320136",
)
.map_err(|_| ())
.unwrap(),
F::from_str("0").map_err(|_| ()).unwrap(),
F::from_str(
"32967596628774896802370445267419978233370846153035552840999780942126744328522",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"29885680756072762644563275495535410002799284565481770605563275267677242393534",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"6767565503770123230340610856538459014642791435134695578527084133222911388089",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"38034555907959016273994483610140537209819290169171432036495630086575144181148",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"35085508904879414050180652811899618801153816228166027426392174635054369363148",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"36657441819968029240636827111992013950645228690585008802597958876784513528202",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"1322579115549556048043817488502303168290944210869541203532619083870097554885",
)
.map_err(|_| ())
.unwrap(),
F::from_str(
"16882844793625225132625646093399829180269843611668936510323341639265456546672",
)
.map_err(|_| ())
.unwrap(),
],
),
}
}
let rate1_config = rate_1::<ark_bls12_381::Fr>();
let arkwork_mds = (0..rate1_config.mds.0 .0.n_rows)
.map(|i| rate1_config.mds.0 .0.row_vector(i).elements)
.collect::<Vec<Vec<_>>>();
let arkwork_ark = (0..rate1_config.arc.0.n_rows)
.map(|i| rate1_config.arc.0.row_vector(i).elements)
.collect::<Vec<Vec<_>>>();
PoseidonConfig {
full_rounds: rate1_config.rounds.r_F,
partial_rounds: rate1_config.rounds.r_P,
alpha: match rate1_config.alpha {
poseidon_parameters::Alpha::Exponent(alpha) => alpha as u64,
_ => panic!("Alpha is not exponent"),
},
ark: arkwork_ark,
mds: arkwork_mds,
rate: 1, // only hash one at a time
capacity: 1, // ??
}
}
pub trait PoseidonConfiguration: ark_ff::PrimeField {
fn poseidon_params() -> PoseidonConfig<Self>;
}
impl PoseidonConfiguration for ark_bls12_381::Fr {
fn poseidon_params() -> PoseidonConfig<Self> {
poseidon_params_bls12381()
}
}
impl PoseidonConfiguration for ark_bls12_377::Fr {
fn poseidon_params() -> PoseidonConfig<Self> {
poseidon_params()
}
}
impl PoseidonConfiguration for ark_blst::Scalar {
fn poseidon_params() -> PoseidonConfig<Self> {
let config = poseidon_params_bls12381();
let arks = config
.ark
.iter()
.map(|v| {
v.iter()
.map(|&e| ark_blst::Scalar::from(e))
.collect::<Vec<_>>()
})
.collect();
let mdss = config
.mds
.iter()
.map(|v| {
v.iter()
.map(|&e| ark_blst::Scalar::from(e))
.collect::<Vec<_>>()
})
.collect();
PoseidonConfig {
full_rounds: config.full_rounds,
partial_rounds: config.partial_rounds,
alpha: config.alpha,
ark: arks,
mds: mdss,
rate: config.rate,
capacity: config.capacity,
}
}
}
lazy_static! {
pub static ref POSEIDON_PARAMETERS_FR_377: PoseidonConfig<Fr> = poseidon_params();
}