-
-
Save elichai/7401f5423c2693960677ba4f8a9fab14 to your computer and use it in GitHub Desktop.
ZKHack Puzzle #1 Solution
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
A = list() | |
# bits_vecs-1635288647752 was computed by the rust program, it contains a list of all the messages in bits represantion (after the blake2s hash) | |
with open("bits_vecs-1635288647752", 'r') as f: | |
for line_index, line in enumerate(f): | |
A.append(list()) | |
for bit_index in range(0, 256): | |
A[line_index].append(int(line[bit_index])) | |
# Curve Order | |
P = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001 | |
F = FiniteField(P) | |
GA = Matrix(F, A) | |
GAT = GA.transpose() | |
GAinv = GAT.inverse() | |
# blake2s of our message | |
bitstring = '0111011010010000000111101110100010110110010100111011011011111111100110001010110001110000111111111100111001100110001001111101110110111011101000100110010110011111001111011010110111110011111111110100111011111011000110000011100101101000001110011101011100010000' | |
bits = [int(el) for el in bitstring] | |
gbits = vector(F, bits) | |
gsolution = GAinv * gbits | |
# Print the generator multipliers. | |
",".join(['Fq::from_str("'+str(el)+'").unwrap()' for el in gsolution]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use ark_bls12_381::{G1Affine, G1Projective}; | |
use ark_ff::Zero; | |
use bls_pedersen::bls::verify; | |
use bls_pedersen::data::puzzle_data; | |
use bls_pedersen::hash::hash_to_curve; | |
use std::fs::File; | |
use std::io::Write; | |
use std::str::FromStr; | |
use std::time::{SystemTime, UNIX_EPOCH}; | |
use ark_bls12_381::fr::Fr; | |
use ark_ec::AffineCurve; | |
use ark_ec::group::Group; | |
use ark_serialize::CanonicalSerialize; | |
pub fn bytes_to_bits(bytes: &[u8]) -> Vec<bool> { | |
let mut bits = Vec::with_capacity(bytes.len() * 8); | |
for byte in bytes { | |
for i in 0..8 { | |
let bit = (*byte >> i) & 1; | |
bits.push(bit == 1) | |
} | |
} | |
bits | |
} | |
fn bytes_to_bits_string(bytes: &[u8]) -> String { | |
let bits = bytes_to_bits(bytes); | |
let mut s = String::with_capacity(bits.len()); | |
for bit in bits { | |
if bit { | |
s.push('1'); | |
} else { | |
s.push('0'); | |
} | |
} | |
return s; | |
} | |
fn write_msgs_to_file(msgs: Vec<Vec<u8>>) { | |
let mut file = File::create(format!( | |
"bits_vecs-{}", | |
(SystemTime::now().duration_since(UNIX_EPOCH)) | |
.unwrap() | |
.as_millis() | |
)) | |
.unwrap(); | |
for msg in msgs { | |
let blake = hash_to_curve(&msg).0; | |
let string = bytes_to_bits_string(&blake); | |
file.write_all(string.as_ref()).unwrap(); | |
file.write_all(b"\n").unwrap(); | |
} | |
} | |
fn main() { | |
let selectors = [ | |
Fr::from_str( | |
"27645015623588109382996024038763530282647599513403648261518408122004451823795", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"23018579491472099737921523253639007115479688088731410213980168199642094036630", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"29728708590680781027258775738142182040997984360825508843160093564781637588102", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"17965919699583598651808746671816564956606527614540745476209815407709057388028", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"13082221508142704926561381603849357254353703958677811147765222856179216739526", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19124171807105492832738567081116125263608809282765915971833913569038276594413", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"7367207697973790245843988134781211604381160946787273337614778110984931150439", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"8497722656259331940089212302443893803694190234181535507522029996933469802472", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"23328865162497788778095898796963235679772076289316285477650979006005088227156", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4345178647389434077245747365046664222607436853009009901957880406543514573134", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"13396115140529750850441216840401962747189533509929673229302698864833549504089", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"6798850546792403139931536639208743831788895791563033823954590389382400164509", | |
) | |
.unwrap(), | |
Fr::from_str("503421367940070474970485558527529465008792034110304422323883515821909377412") | |
.unwrap(), | |
Fr::from_str( | |
"13178163023499282611699738516295977789349471247238579588003782551297816121215", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"50542999609321821221497041892231846534293459278325718376747236734151455565983", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"31279344809323085430727443705571911769435378834128320202717184758629710130579", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39449325997921684787012356897684127776584007152983934720791964012713865576514", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"25060498849771696271708097916058698429561517916685362709822147576628015419349", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"52154620271551991149523206712049883614539980008486534928140733662013392214030", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"47294116457957701712952217874087977549496960281180417712937520050909088493531", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15899537607539784699410628160774575679277809122185845652225072342275924755920", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"26525373088433561566938755515742749569596099106104804359583561243867707345956", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"35671958427851513014081199771145447716311526482871768225031124368922336334372", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"5892951316573482577891034800092635414793052339131876419438964589032944096903", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"7014368926120569994744525594172301380172491043597540162366004636412400236160", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"43850911963695683512108352084677251840284111450809640431449639847485830288332", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"44359629843806310231804196378888785881508246066359185286718447592530413466479", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"21995136892125143520029914175560068770815410159668930761036830663811440565969", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"28777875389214585569125280098279975976608103451527231674663155839533378441426", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"40658581331247393802108131999306673841642865728022809750721838306054512881268", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39191977380343839901780855119687869344531659617204757425592697529886494654826", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"5306093278482685511861412652658803172981037146680880597201643037737947957192", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2798167601380171330771739264183890609842212276408477960233027699031111610776", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"6146934867117857211384196920515829088657040458513054205479899701846297852222", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"24798838150959429214785951152195509256006903237163103086451091371476168025975", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"41762518104443405277464718633994737129130683197933081875278007231510759879813", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39861985581355926934536569410035530831366903044092001091213742280324846206162", | |
) | |
.unwrap(), | |
Fr::from_str("826990456045837858375210102036166412445351573072185691157943778748436422226") | |
.unwrap(), | |
Fr::from_str( | |
"10699598480730395691602744214500909205404712055694034717712464194006520830261", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19671210072684465717273460358697727509298302036031133007243941528566978425011", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19321661637444168765411828019053874411785115584609045549415324622830541412418", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"16950875150057342191131265868308709964759388967930951039987795907848194405164", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"33724331499455443524315876952537921901591388642983306755415860601240453861273", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"11800534254121810264689355801355032142540752347645648356321703561269073508227", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"44797130044888147280519635502422756935611215612087070183200677726770101303520", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30466638324328394352632742414190784162424546791324711624105624883505971943964", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30155492298866069733352754567983415578205899598015619310860887819562938631729", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"26214894555634818963140182932404041306496075789455108335465409716298992983592", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4333662265600499628323655119322819455375968293014627285195127071546474403806", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"37223936837953062571834369437691787166282429156393199638502853080805992959294", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30443369165113475091151478523546371935480775747696925468432400191140655185434", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"7611748800869703691368523112039892582854759885899236974876848969401625495611", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4603281489476188498275868632684644587284403028255372855409014695974644402982", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"42557647334454170730381953822226031246539750531271789159937719730939497687536", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"25535382323304156498625719016597800420303876567724127826125992937175522029601", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15987363650848239000822355636771182011976523056235164152042043636267921264878", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"7538409889885100255479216312560386099821540957519410054339597542029192606774", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"36491390668545774124484208411714209798137503852747463737630007970019254583611", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2980010746923727602037815375177432681499441591780964365536739726828933063096", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15432754283264540396530641753440849630151559370151434485239581568249527242993", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"35917368324250489714542479749833252485085607078461083775061242990308879099270", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"35897146860307196171575863360659961234526236171176669967387376930105998335950", | |
) | |
.unwrap(), | |
Fr::from_str("509209397247715956163103188735408557388502269601525827918677715114184726238") | |
.unwrap(), | |
Fr::from_str( | |
"1832388692246515303999227212347425262087250293827819986986665220398428218754", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"43335702610238921016359722258866237152422515780515307613807376523036370682580", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"18349952892770463379025803817114923075105149712274310743328796122987547337923", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"29798405096666434780678059131655835533241683863130875283453835115901656619705", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"9152221654182771485224294683349691555176983945160878125648885258940514579308", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4160021064851262772927331334104623142700687678967838816494727925823534663340", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"5255266923388693131018940262127435279453297868497328859497245983138001420819", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38896295765840522001779134699868428975828444412631237100079606764065712313288", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"32511828350338582990113153195744463665158987066039323675755781399686751988135", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"37570230209815948497675964545538996167298497794334200427568772171328022837675", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"42558223543440172504834785325914071889207569272444792588794756225936074040192", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"9542510798517623988284928400764292411401305527145531995925267578314830891101", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"21005891663059020319757117576255942031606935693305695269034651734511195637991", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"35945093100235923936050509281674275664355643661689848686264047341169068338425", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"1100637112088481826782727522920173190795159780770074768749996856170610626064", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"29675950578878515574510030679573767959464190152756596385949916439507912346064", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"25643261502034302684885712566207392035245325123299817971024797462348319957534", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30890278957023492827829663733558089801879173758661827196302084710224430060764", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"31824540190056914939169564434338298540000774634607877944494960607459154159576", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"1628152114810142390663530675157781267210518923188601382229266995268350524129", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"43360264815698481897002906826976123823818098617317772517288152422501222640424", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"32808939749983468293780485103238470022199106635432170887195270010048177956445", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"23805873630590833893261617612777965942046983195617999803718043340581746957778", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"50038140570787135858776195183653069663452704927691389286596086958640189683933", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"45804604658282384198656439250836770604893996613035924464186349307829724912076", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15580378328514312974048801186693469956053076784499396669845446425335850740747", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"42201506419927965532604162004526628298942587052966528765983445874105541901538", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39198440919218345293446505126394957358514727143155552810597062799562457902420", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"16022075568019548209264696314989400612795916055030516043881257165549600006476", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"31033785156842933243801038636927941980733251495527102314393997965753157010862", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34489028147956151802543110393812400483738552832557853271615303747712768453564", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"44689219358287839634743935337600453879060573131556575188163134861577571918540", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"25880380403880688461301831053505883070551895161037097851766277709674746829848", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"40593298953619372706645895791509158417159695429681758225628459220306831373828", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34987462544558984958138460370060177530462714352382104080429131654615871115103", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"28795721683781046698531597276975665760970127589962762161462211566695245786574", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"50553546745097737513663829660738070827896128100484665048968206773648748173129", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"12794889178094450952035469151466192252446754139802679528855887071096424886427", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4306818772293953345036314118700242581930307010081788063247347488207374000828", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"10627375355034945970656547051785084090147234225352972882986294276496412881591", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"46710016525689028798967326542219012697416561532558797274187114989392221880435", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"1561524312293839488944238139933566141911836380907261411947325136441143821612", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"46124028128914917451884552361640682269238918499820504499851080713723993177372", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"37760097046558768145007172597839328883365627447454099583762273092654577586516", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"18529408256298401436113005606056974533281770381654468362075425932473506631576", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"5201757191730359404716892687500769964097764809645899196449745151949153717715", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"48409008341996483259007332858264633342298298160604467989717346319090713272128", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"33081793340495052543604354735865285707748415684342273114030780219425518141836", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"8180195966088317185090574053186008858708377005669628088987746373089421245671", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34043276659715031127978114709774305107729927196005527155666712901874803655167", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"37363469169883767565684401649710528212027976005147970588578957919205422097205", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"17907639119153939549731417327205064131167153307639074653163187588610023079059", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"5542596859547955750398874810387653989135658890617370462642922503050017571472", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38940212966878608185535780280929019920478177716417283479337855654127831835911", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"18632045012821278584944457944921382942272535685397685705768608990782448238477", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"3429818023585006798066250055224344372769233733273626448340483030781511814321", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"20148978888652930259526606474721858146428260997685984339496371528480117652609", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"10344286068012801003469935236670009264125505067020312909641977245612869697516", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"27243831156859473259049465444168223279557440072047777326152973662857001312008", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"51119892761647232857878962365799632459431584931828914598962716600778011318640", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"31555995730535508797667956283775051465034393810821340754638422573533763400761", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"21604450677700677032809505559291770115834824205816559865634190131553375088010", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"8444077053849777148338184305363401061482661593526671793311245040351335180111", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19222315296082346268301642111091713310225661736012519605541576707013882768599", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30518577794842799436165782660802287784590957132367557791724190875996606220280", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"28715585732618526717288081572657884664860079457185084621539675800792700301339", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"52134618871047857678035854898839503045356584313678487425892120708398200737209", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"12024477781283112288914491282751817611566054275770551033771739786925777481306", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"24393822633776700806605181939059706093930296213783248035276874124618718405679", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"46971435152429821741609511466451084015448861064790769656604559661306877302713", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19004783019180969524609126185309681076720820124384722576343473176113641718845", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"35561829007202368254055514859685416626811330309076586611724816680739624199214", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"47371682246443044106726200224955473925505780234507982358724034550135370629905", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34744567143193566595351848536934233704821065754392583158881817322847489847523", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"1812365659022012959066386836000188698062011345742824428734937028044171292828", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"40347277444668358828191202523663778258985447553472193165894248985614195382864", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"16393950819200299756535477454807528305079500147823352114102619401968184249894", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"3751915004373937097299640762257716929553761213362484167916825279222355271627", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"14866283257170398986665508139005058063778728687440240483213633495906110131713", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19299463125616799628688276507317480792217888415341368543130925788638679052361", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19787610757522270400372034493211239622958347269642273978462491408608876725164", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"43590876849242310049312088412404690228749014273287853216002866365877113971854", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"18543776456517838999477785145508824945501322710635701207104415625073505311849", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2824409325664813117423067734014447093507660116707659499859938694162869555544", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"21021942298331089504043934007734775673880074581615283911546996956343751324285", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2241693235874362524542106535882719267857318138984420148997528726425607123876", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"50813193793360296594743151449546985880659796137167481126116411763198310028027", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"22978345431801056751253642542973436406837641380107798396470613382536658028521", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"24761751892714169009162214361728345178642840769662627723279159003104133327208", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38268088440423523771296457269173505870875203098331446557924350934998339778564", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"48200716806886677553068665510440543498408998244747146099714902115030549670926", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"50816279248730460370620454184364711157286814064944391411986639908918931647476", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"21847071073721219667246497945606304112872184671609011860312453950822652138130", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"40816459217603795782090298239129530811812739442848494722796819390797663180204", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"35215950383587135142043786304603016863961429917462489412154372750960549299071", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"42472374645035277907579158029326123498312910897110659611117001750641990398167", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"11553015459338561731459852751817672188523641310180811165879451898937716523836", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"48671692878545764287343709730900702766802344026229497502639852820477938934984", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"31736625812983050406447998561651570409084965837956607964444638789472199372780", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"48271701158856483592101370117825501338754047738751810005617540200404759430511", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2346997487890329034031566760612910897313869678978771378743503127260133045940", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"7956176089750615424508111691970909775181454243130717299941806671876477680478", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30657726980222478640990815218663683701021873068924455786011924745883389533607", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"28648145854394197997043516756247933060288856967582018228484480788082352367086", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"29984447436834019397097712639290961454160828611609345269633766140150559687716", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"10786462761512095732013404154586604359982227567284289975371886553758230192052", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"17934081384153174300080106996199462416600000096801815950432902386225429418532", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"43948353518176182613410471077613540801140226394438839120479842580823684816065", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39470069009127092911921006441522880645919476102013320972571451505035093617838", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"12960910756597468157121116124404437340844889914198037293949283352711053228316", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"52131674812759880696255536439110376569548107702413381449477119963784835681091", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"33895305935864521171387952054548205889619558765607416171291110684458503425957", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"21796632307815309534199017216172858692976713818669557030559298796427036193848", | |
) | |
.unwrap(), | |
Fr::from_str("233804528893697670531020975089810903320212973779992305986035592436728752586") | |
.unwrap(), | |
Fr::from_str( | |
"24853771297665545875814242403450287341058241361198265941412023718999210154548", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2545642913620988785240976158024718742302140784920605888592767274560917349402", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"5150009944628310112176558941678029578700489829411581373626138398919204858450", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"43513427473501976138422729058734990329620097141596577356552945468675744369875", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34664777604491315248844309686087907826512421705520697344840244716697571768659", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34829702329670961196720900712460193349464522733397464844407496624503037229883", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"14790136151153453293563725125809773915452333454258354661589549242473342704012", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15220419960329874594183832213883657580025603830676091956648035825233476411967", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34553102061831041233473099210532645554696691004097788889724087212000484434153", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34511084024450384693039046211726314699749777447744869334907058689413378840727", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4666390552575366502446862859897213716043039627875815274152659412331096523146", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38928695377858140770569982410633063689224544538101784338339778095012744988516", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"8131430435412994412737757255901870165759245131792178714540838139516892086267", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"33728533838040868150007055543032217411225504601244791893187438596154079496551", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19113742755293746523581321786643471494811865825910240329789394516082671528927", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"9745400682191568371094383282682043581637338069142252710152305489697867766490", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"41550294025728960449205330772528500146981733492540912909779011099223758727353", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"6196326131216851899510165594875881779679559233603002765792455197067943364915", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"40260448810324815059095480219242703856579766860891418308102019866473843929149", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38266705941500803095744660609647391999978217064149122063689670469017902303703", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"29693439664123208062219456258126950898510887228412388246171502189756521164997", | |
) | |
.unwrap(), | |
Fr::from_str("279075610758979236827898323221968670902490076835237906413752113806435661190") | |
.unwrap(), | |
Fr::from_str( | |
"11394676813731382883250316681738861799244729609066010237226624214449592881205", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"41020454348107228983611538302893956620440263292850875854213837096131342716828", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15558551528855920543612167516181654275952965772833610672859591944461881428365", | |
) | |
.unwrap(), | |
Fr::from_str("909361998759777730644995787852119211214744608757415310147341713442666207491") | |
.unwrap(), | |
Fr::from_str( | |
"51877756536668220601671529865486630796671651798777152710617024595577177764300", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34645796819881122213005277922214081014782774533202482577776350027921046550514", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"19741050234673299486557055082622114819619727432039803352538681876905229109355", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"2531632446293933904905297489898494389043820315527983493417871241825948497554", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"16984686746651525403734748463543840053547062415689626046055035192843307136210", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"15583103312565400047581154476872834827531837963066251145073086742892046179439", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"9598075475587937735511597753850644912075167894091811634410018729469100483605", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"14852644519548415509819387805521890215597515493714645371662599528984409999751", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"37080910411462335629633118116515969778507217598619551884115974056984626555979", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"41545492360060090107471283306060376284711635803838113522515087702218863064541", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"23994703866412250561092680142752467267611012784164520740629585726102160466302", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"24011643436965560093301244333843792853023028532771725187944518330926279820805", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39817197182448906144695293265738014672698857854985281750352342404765200591922", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"12736127190702585196616292129294751588188065100739943328747727184598185197629", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"14319518664229891366134557719303733818477641818190402760941457551540502893357", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38112448274738620654969755343889952779104147124241649998388931903002098408385", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"8532768399327819842824286619837865839837927966465294733617648690679494244381", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"30807242996659607462749324807113819242935725529955037145001594887260876246610", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"34514690310256888598670020330979743366830245987562178065438813102219211115678", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"7393025450172800227152170074548677129031814868330288147613502815202487875676", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"51986270926289842838958970120174397346787706050062384524182579512527401235649", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"17641499898750425376155393191479489349304682244714922995296904553479259485227", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"6879035244415744114298576179001171491644771903198478195977728173699802186177", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"26541493516187648699753502026786164221288334545873477098060820434694321524392", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"17374367195032842962318682663511628307713236752903762956065266855161240841827", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"22512076649861116677388954849125178811226305710349056268133842897611742037543", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"17189881319462955044831196637211044959211264697038150938801927959735095632712", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39432486882877956786927400099556400467324061709294924802899235272785143335370", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"42903844403374598656484447588714313500606718252103428848012038979671539617021", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"4102785885852349624229911745563288921960571628929268095291078409404629461660", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"9978800824061823903041905588924748656250512599568082251084818122847285410065", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"3405151345999114025090585991523763036251428040903851544076200050536749122531", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"12102828680319562269800957562333628443973056629287223229733910530720628251134", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"31619963050961815273264700572956235042903166842704199937624991370959012390525", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"27713097627497052442308363782049617577203334391044511426993888554225453985039", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"20294776401703858970018807919660949153359764721444891103816218717898086121513", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"25867591151486797150395525171563000326546129710146279106191134576744247057678", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"39360085504228792361725941006290618038528534323208961813624219344677548386718", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"52123183906207541725367375488332153184523334790992365723354910616392943331962", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"11928802143452927360624238512062927666882991164844471066806675845494240583329", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"49483966372665154406145850472158982433164905378883409362847814390591352924545", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"11132748455339102457544208624122897638358644277830322719931037208046157172075", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"14156203107653389585295992595161636505623692119078993813500521454480696890190", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"36503171270846883161819455087879153857237661620972281840690901742131956587974", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"13733744302141418853842360854098241016827712473358368089108412379307607909989", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"24017384515815099897745595764654084401800851674543535343192617974894637857156", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"10948832559202220068524718211279160268884741525842509434619554569234490602803", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"38932202851192708789489367815520016056038931949969398268821217495420170368459", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"52174319811833630285185308165724888875186277791255484960609477359099016342359", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"28081200227224051221755052814664956826713800676810016675676131346420652932487", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"36521286593961977603988235886306261828645842295819217016076885596548242677961", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"16708536333094644003518692745148315085465236140292892298822122812590547330327", | |
) | |
.unwrap(), | |
Fr::from_str( | |
"6769691326408305518047502379958157439957827386631887324632648911856770263560", | |
) | |
.unwrap(), | |
]; | |
let msg = b"tom marvolo riddle"; | |
{ | |
let hashed_msg = hash_to_curve(msg).0; | |
println!("out hashed msg: {}", bytes_to_bits_string(&hashed_msg)); | |
} | |
let (pk, ms, sigs) = puzzle_data(); | |
write_msgs_to_file(ms); | |
let mut sum = G1Projective::zero(); | |
for (i, num) in selectors.iter().enumerate() { | |
let additive = sigs[i].into_projective().mul(num); | |
sum += additive; | |
} | |
let affine = G1Affine::from(sum); | |
verify(pk, msg, affine.clone()); | |
let mut sig = Vec::new(); | |
affine.serialize(&mut sig).unwrap(); | |
let sig_hex = hex::encode(sig); | |
println!("sig: {}", sig_hex); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use bls_pedersen::bls::verify; | |
use bls_pedersen::data::puzzle_data; | |
use bls_pedersen::PUZZLE_DESCRIPTION; | |
use prompt::{puzzle, welcome}; | |
use std::io::Cursor; | |
use ark_bls12_381::G1Affine; | |
use ark_serialize::CanonicalDeserialize; | |
fn main() { | |
welcome(); | |
puzzle(PUZZLE_DESCRIPTION); | |
let (pk, ms, sigs) = puzzle_data(); | |
for (m, sig) in ms.iter().zip(sigs.iter()) { | |
verify(pk, m, *sig); | |
} | |
let sig = G1Affine::deserialize(&mut Cursor::new(hex::decode("2181a73c680de90ff4b44797dc1cb7daa253c993d4e58926030998c2c960cf44df9ae25744117a9b0d53a80e2956e307").unwrap())).unwrap(); | |
let m = b"tom marvolo riddle"; | |
verify(pk, m, sig); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment