From 79cd1775ea2f15a11b3179854e388b285f59392c Mon Sep 17 00:00:00 2001 From: Manish Kumar Date: Sun, 22 Dec 2024 16:04:22 +0530 Subject: [PATCH] proof_verify test compatibility passing --- src/bbs_verify.sol | 12 +-- test/bbs_verify.t.sol | 205 +++++++++++++++++++++--------------------- test_vector.txt | 153 ++++++++++++++++--------------- 3 files changed, 184 insertions(+), 186 deletions(-) diff --git a/src/bbs_verify.sol b/src/bbs_verify.sol index 6260b63..45a2caa 100644 --- a/src/bbs_verify.sol +++ b/src/bbs_verify.sol @@ -630,7 +630,7 @@ contract BBS_Verifier { Pairing.G1Point memory t1 = Pairing.plus(Pairing.scalar_mul(proof.bBar, proof.challenge), temp1); Pairing.G1Point memory bv1 = Pairing.scalar_mul(BBS.generators()[0], domain); - Pairing.G1Point memory bv = Pairing.plus(BBS.BP1(), bv1); + Pairing.G1Point memory bv = Pairing.plus(BBS.P1(), bv1); for (uint256 i = 0; i < disclosedIndices.length; i++) { Pairing.G1Point memory t = Pairing.scalar_mul(BBS.generators()[disclosedIndices[i] + 1], disclosedMsg[i]); @@ -675,7 +675,7 @@ contract BBS_Verifier { ) public pure returns (uint256) { require(disclosedMsg.length == disclosedIndices.length, "invalid length"); - uint256 totalLength = 8 + disclosedMsg.length * (8 + 32) + initProof.points.length * 64 + 32 + 8; + uint256 totalLength = 8 + disclosedMsg.length * (8 + 32) + initProof.points.length * 32 + 32 + 8; bytes memory serializeBytes = new bytes(totalLength); uint256 serializeBytesPtr; @@ -693,7 +693,7 @@ contract BBS_Verifier { // Serialize disclosedIndices and disclosedMsg for (uint256 i = 0; i < disclosedMsg.length; i++) { bytes memory indexBytes = uint64ToBytes(uint64(disclosedIndices[i])); - bytes memory msgBytes = reverseBytes(uintToBytes(disclosedMsg[i])); + bytes memory msgBytes = uintToBytes(disclosedMsg[i]); assembly { let indexPtr := add(indexBytes, 0x20) @@ -711,18 +711,18 @@ contract BBS_Verifier { // Serialize G1 points for (uint256 i = 0; i < initProof.points.length; i++) { - bytes memory pointBytes = g1ToBytes(initProof.points[i]); + bytes memory pointBytes = serializeCompressed(initProof.points[i]); assembly { let pointPtr := add(pointBytes, 0x20) mstore(serializeBytesPtr, mload(pointPtr)) mstore(add(serializeBytesPtr, 0x20), mload(add(pointPtr, 0x20))) // Copy 64 bytes for G1 point - serializeBytesPtr := add(serializeBytesPtr, 64) + serializeBytesPtr := add(serializeBytesPtr, 32) } } // Serialize scalar (32 bytes) - bytes memory scalarBytes = reverseBytes(uintToBytes(initProof.scalar)); + bytes memory scalarBytes = uintToBytes(initProof.scalar); assembly { let scalarPtr := add(scalarBytes, 0x20) mstore(serializeBytesPtr, mload(scalarPtr)) // Copy 32 bytes diff --git a/test/bbs_verify.t.sol b/test/bbs_verify.t.sol index 2f8d3d2..d49c123 100644 --- a/test/bbs_verify.t.sol +++ b/test/bbs_verify.t.sol @@ -68,82 +68,82 @@ contract BBS_VerifierTest is Test { ] ); - // proof.aBar = Pairing.G1Point( - // uint256(17705900040482640200318765868397816899423300068827258330107828571873441470719), - // uint256(7713906401864379473036154127800301923576930562959621253303600800199073334118) - // ); - // proof.bBar = Pairing.G1Point( - // uint256(21727344193746663605105815693486793700736011477614477583899999224491814279994), - // uint256(3107868243865832229708730395440182823160504417487161073020576660932813536129) - // ); - // proof.d = Pairing.G1Point( - // uint256(15259877521667048732653966731531866330870155623999372073511953831671978329220), - // uint256(10346279138881905705140583326619164208036592391424952436660826945178815367429) - // ); - // proof.eCap = uint256(895560299474401253372773501875631392367182095767290314841076259590095084586); - // proof.r1Cap = uint256(11193219439787925012791936928927829256760578552338662201715987339199095941227); - // proof.r3Cap = uint256(15267152252107021640270952755495037380174121953972815385187286027940019996824); - // proof.challenge = uint256(17070931957668459394149291496811547077907740596908548642717845173554837520766); - - // proof.commitments = new uint256[](28); - // proof.commitments[0] = uint256(19095727655211535891907424632625597788660896504069139787113033189477200901164); - // proof.commitments[1] = uint256(19376086836081848875356199522059787747649523185103503820918546873546803656837); - // proof.commitments[2] = uint256(294630661519046963443548105138813757424736295965011860489516719425258301868); - // proof.commitments[3] = uint256(2669991038723578516998124743106790553264755193437596445025159197580315246913); - // proof.commitments[4] = uint256(9347384312453102707431895387088312145715418559983462799650963982682084827252); - // proof.commitments[5] = uint256(10423402888507524428295410032922396350307052955495214158940561611559586857682); - // proof.commitments[6] = uint256(21667666739487631443855567302732869873626852318523924021971922974064015548203); - // proof.commitments[7] = uint256(2391574914373737044908304675905879726184592881619003159020770247137231086890); - // proof.commitments[8] = uint256(6278153666110445575600940082413845807068412500507616321015839605239269964481); - // proof.commitments[9] = uint256(17407116680557453084774309595190475554418201715886488721842472385513811947490); - // proof.commitments[10] = uint256(8501318769770573792305740921919152496772914721536223890699332307683117426648); - // proof.commitments[11] = uint256(10051701914974888853862296233599397109887353152719520271166239879253384300084); - // proof.commitments[12] = uint256(4629893339370850175540759987958849789651933707400277961494579665229717132314); - // proof.commitments[13] = uint256(19733193495966317727151773873301557383437837661981698399123721056474042649121); - // proof.commitments[14] = uint256(16581440502746205531254170374821787090797536920805429488227888885103068899696); - // proof.commitments[15] = uint256(4648351001408854396093087060766510007903087217506064759222363505293687917509); - // proof.commitments[16] = uint256(5232978090956285957326199431497654863020266920439885149705611444557525841377); - // proof.commitments[17] = uint256(10378971376370607204122093933171648619962601242767826857548254941729314144779); - // proof.commitments[18] = uint256(10636096558455749185044536222842024797504005940994930068820626467354940043941); - // proof.commitments[19] = uint256(13014117807481833912707217404666717118061234026083047800320547313575178119938); - // proof.commitments[20] = uint256(9468061149785714375845841584548255079305964111362932915002031399165874890540); - // proof.commitments[21] = uint256(12080296571110568157656356440360410776064799132442611756186811013992503842789); - // proof.commitments[22] = uint256(8406199401805359744205934469936213843102959323070335564794326616494411213164); - // proof.commitments[23] = uint256(13146762841746050965674929823955906169083360848059985425714661251008235930384); - // proof.commitments[24] = uint256(18062184243758250054044805146678460481140799371280738494887026946927689738624); - // proof.commitments[25] = uint256(4689669766214571146361709842956272925578589085257066757670840626355289827344); - // proof.commitments[26] = uint256(19717012933748023731747259246552232456988022985282562051094427191782572854304); - // proof.commitments[27] = uint256(19403246504848923420955727303103540860884754495247099508968984133479080201474); - - // disclosed_msg[0] = 2266124219189018131; - // disclosed_msg[1] = 15553430782966677989; - // disclosed_msg[2] = 4743228516788447402; - - // disclosed_indices[0] = 0; - // disclosed_indices[1] = 1; - // disclosed_indices[2] = 5; - - // initProof.points[0] = Pairing.G1Point( - // uint256(17705900040482640200318765868397816899423300068827258330107828571873441470719), - // uint256(7713906401864379473036154127800301923576930562959621253303600800199073334118) - // ); - // initProof.points[1] = Pairing.G1Point( - // uint256(21727344193746663605105815693486793700736011477614477583899999224491814279994), - // uint256(3107868243865832229708730395440182823160504417487161073020576660932813536129) - // ); - // initProof.points[2] = Pairing.G1Point( - // uint256(15259877521667048732653966731531866330870155623999372073511953831671978329220), - // uint256(10346279138881905705140583326619164208036592391424952436660826945178815367429) - // ); - // initProof.points[3] = Pairing.G1Point( - // uint256(9450541227839351281812164523351865265510569098677555890572077252104786626690), - // uint256(9197258858130081208441965628507147760561818479091872534935021928583764617680) - // ); - // initProof.points[4] = Pairing.G1Point( - // uint256(5816804290213296793101908964222774752394739247046217083058295650122051844227), - // uint256(1590091680226237410825658942611263221992039739303345139797440692938537664171) - // ); - // initProof.scalar = uint256(4661402122534330745222086575742781481159552639583525480514127238648290568236); + proof.aBar = Pairing.G1Point( + uint256(4589785035873902068341417873604960519481583897204418666058475414382012351726), + uint256(20970208301589133985681742138243432057150518795105541875968436518067907451482) + ); + proof.bBar = Pairing.G1Point( + uint256(494789428909681690645146828013689108054268116392169451749293989761121075245), + uint256(17297246765270096457246040057082908839232893598408280949545770226231264303008) + ); + proof.d = Pairing.G1Point( + uint256(5753637097923463694110512927335594432498285696036803043736622864645821893845), + uint256(7763217521923340286337553713448633798372460063374344530579106705314907885993) + ); + proof.eCap = uint256(8042842032282577185618742748178918605750601718643454931428492117343952039038); + proof.r1Cap = uint256(19579446147797020085082626411591675595364051185016480545372113683170864922634); + proof.r3Cap = uint256(4516230118140551297436429895004240856013832273141665011691749625884080207354); + proof.challenge = uint256(9170523218553528937204975447093012127133495368757073227285674220594594974338); + + proof.commitments = new uint256[](28); + proof.commitments[0] = uint256(17792881980202731787526234274937780058085069479191903238906823842716306214812); + proof.commitments[1] = uint256(5490119514502333332729615463314122543383712208334755349752023587140211405697); + proof.commitments[2] = uint256(8889159508660262338321863253616291933494922456025680962524206950677875551279); + proof.commitments[3] = uint256(9069561048618705417723902927725352725947307230585332809698064781724968067034); + proof.commitments[4] = uint256(20969893955715799675734152993110834546643706880157866605773662861880465651067); + proof.commitments[5] = uint256(18992254795544495368514124342807525827274043235883918021842172730625926706813); + proof.commitments[6] = uint256(14107066283288679410313948191605430336257599969829422378683949903409387241861); + proof.commitments[7] = uint256(12798941174073416197818145838604285932385561094171703550406719941108730266040); + proof.commitments[8] = uint256(7707483228209930435601220614428470260454979817369328511181148436441189364252); + proof.commitments[9] = uint256(11262475290933883039391017742343262691566224782110744908836640737065755077740); + proof.commitments[10] = uint256(20025099778222518728998013782354089583639902533963312481516779660434642391386); + proof.commitments[11] = uint256(10756483111048549875162036903848810583245448777908829437837498721453052300981); + proof.commitments[12] = uint256(5647152189167844700359734420476822971758687100169609521874338153743197477480); + proof.commitments[13] = uint256(6597777520175410638237560299448047126090708484661051367609535243803437578595); + proof.commitments[14] = uint256(2842749640235199581966772189142285932173353551113407861190259580874923768210); + proof.commitments[15] = uint256(8100729913959445213266603261363507349758311134743628864205342530610132032731); + proof.commitments[16] = uint256(18464513909237023511808358407416412607248496403674383674269261481921398236651); + proof.commitments[17] = uint256(20804683512780541730456550307292592384947875235703111243674677825086272759966); + proof.commitments[18] = uint256(3429593186662195935096221738432760090703045873994959001388531410854056609164); + proof.commitments[19] = uint256(20454320943614726678297451940346778110920218678288721887823293454833947818188); + proof.commitments[20] = uint256(6857251212744083045997730459448394274381066615951269234611492745730845498418); + proof.commitments[21] = uint256(14742257749293642622734794076507628340506139847594980214581451413113499961427); + proof.commitments[22] = uint256(12246699489562568425338334745874046921145259134913765828527381619293537499424); + proof.commitments[23] = uint256(13417706375138770649263189175295971157348919314915824794971570392768751224714); + proof.commitments[24] = uint256(14932843913903189152044822214369631098581507006906059224083721437059566611948); + proof.commitments[25] = uint256(16736877594037174310126934822629376254973535401043750021946965372895587488488); + proof.commitments[26] = uint256(9510282590851897620616131906689045795242783177500978291791620055703189601120); + proof.commitments[27] = uint256(16287576082505117925628461501366254697615855474701713406049352554328601724125); + + disclosed_msg[0] = 2266124219189018131; + disclosed_msg[1] = 15553430782966677989; + disclosed_msg[2] = 4743228516788447402; + + disclosed_indices[0] = 0; + disclosed_indices[1] = 1; + disclosed_indices[2] = 5; + + initProof.points[0] = Pairing.G1Point( + uint256(4589785035873902068341417873604960519481583897204418666058475414382012351726), + uint256(20970208301589133985681742138243432057150518795105541875968436518067907451482) + ); + initProof.points[1] = Pairing.G1Point( + uint256(494789428909681690645146828013689108054268116392169451749293989761121075245), + uint256(17297246765270096457246040057082908839232893598408280949545770226231264303008) + ); + initProof.points[2] = Pairing.G1Point( + uint256(5753637097923463694110512927335594432498285696036803043736622864645821893845), + uint256(7763217521923340286337553713448633798372460063374344530579106705314907885993) + ); + initProof.points[3] = Pairing.G1Point( + uint256(6611873073341182289283590762314481902854760470835093185430710671814862240453), + uint256(14440086804843035476175025645886595973522367063881962137027138447185139043896) + ); + initProof.points[4] = Pairing.G1Point( + uint256(437030025586557310626084667197385398060437403959818122971050293505038543942), + uint256(14826402650986166312056692107563140793238833337671477194368246954293532362573) + ); + initProof.scalar = uint256(10292285624696250102528155226431512323443546267207964357395200222618557155767); } function test_verify() public { @@ -192,6 +192,18 @@ contract BBS_VerifierTest is Test { } } + function test_proof_verify_init() public { + BBS_Verifier verifier; + verifier = new BBS_Verifier(); + BBS_Verifier.InitProof memory init_output = + verifier.proofVerifyInit(pk, proof, disclosed_msg, disclosed_indices); + assert(initProof.scalar == init_output.scalar); + assert(initProof.points[3].X == init_output.points[3].X); + assert(initProof.points[3].Y == init_output.points[3].Y); + assert(initProof.points[4].X == init_output.points[4].X); + assert(initProof.points[4].Y == init_output.points[4].Y); + } + function test_calculateDomain() public { BBS_Verifier verifier; verifier = new BBS_Verifier(); @@ -199,31 +211,18 @@ contract BBS_VerifierTest is Test { assert(domain == uint256(10292285624696250102528155226431512323443546267207964357395200222618557155767)); } - // function test_proof_verify_init() public { - // BBS_Verifier verifier; - // verifier = new BBS_Verifier(); - // BBS_Verifier.InitProof memory init_output = - // verifier.proofVerifyInit(pk, proof, disclosed_msg, disclosed_indices); - - // assert(initProof.scalar == init_output.scalar); - // assert(initProof.points[3].X == init_output.points[3].X); - // assert(initProof.points[3].Y == init_output.points[3].Y); - // assert(initProof.points[4].X == init_output.points[4].X); - // assert(initProof.points[4].Y == init_output.points[4].Y); - // } - - // function testProofChallengeCalculate() public { - // BBS_Verifier verifier; - // verifier = new BBS_Verifier(); - // uint256 challenge = verifier.calculateProofChallenge(initProof, disclosed_msg, disclosed_indices); - - // assert(challenge == uint256(17070931957668459394149291496811547077907740596908548642717845173554837520766)); - // } - - // function testProofVerify() public { - // BBS_Verifier verifier; - // verifier = new BBS_Verifier(); - // bool res = verifier.verifyProof(pk, proof, disclosed_msg, disclosed_indices); - // assert(res); - // } + function testProofChallengeCalculate() public { + BBS_Verifier verifier; + verifier = new BBS_Verifier(); + uint256 challenge = verifier.calculateProofChallenge(initProof, disclosed_msg, disclosed_indices); + + assert(challenge == proof.challenge); + } + + function testProofVerify() public { + BBS_Verifier verifier; + verifier = new BBS_Verifier(); + bool res = verifier.verifyProof(pk, proof, disclosed_msg, disclosed_indices); + assert(res); + } } diff --git a/test_vector.txt b/test_vector.txt index 366d4e9..7e016b4 100644 --- a/test_vector.txt +++ b/test_vector.txt @@ -1,7 +1,7 @@ // This test vector is generated from this rust BBS+ implementation: https://github.com/hashcloak/bbs_sign // the 32 generators are hardcoded in this contract. -pk: "(QuadExtField(12645745131803946564517015766083220615208734349162119496713913738635122768190 + 18995555010723360870807378930627885936580090638932106191711429555833420406651 * u), QuadExtField(15886074934859455688300902859116025241719978288647494891665273100122551253775 + 3610369380377107663814668440952629069799181095497307971279336242375649233639 * u))" +pk: (QuadExtField(17652527263370484832215630591020119309015921535647000282809810468824642031170 + 5753563513486561380542298642784954153646983623549823942489208891347364888733 * u), QuadExtField(4821820852159715756877427048718686316054379094478095969767568465701080646242 + 16175590941729515442591004120732536622649782180454996203539989624698926591700 * u)) msg : "2266124219189018131" msg : "15553430782966677989" msg : "12252424663184168987" @@ -34,79 +34,78 @@ msg : "4766154862542150769" msg : "5861875202524790730" msg : "1386588526036119096" api_id : [66, 66, 83, 95, 81, 85, 85, 88, 45, 86, 48, 49, 45, 67, 83, 48, 50, 45, 119, 105, 116, 104, 45, 66, 78, 50, 53, 52, 71, 49, 95, 88, 77, 68, 58, 83, 72, 65, 45, 50, 53, 54, 95, 83, 86, 68, 87, 95, 82, 79, 95, 72, 50, 71, 95, 72, 77, 50, 83, 95] -generator : "(14209430103424996476411043444354935157416303663781110285074689873904795753579, 3147027275750645911911115093446053376060701457126778782726080478608931158905)" -generator : "(18913916542948759409282123705133431489605942222791445898569881277917683805334, 9964355566330467396566861302551927237867357960133836848469875848519760373555)" -generator : "(185200575564411050627786573152707464260358536178940607965586766573241335430, 20714562299123241179680408685428291568578925534895622821325120283507303088322)" -generator : "(19945759352355266083458953470321414674332324515980376150674039576634528755332, 10005179287406799622370547568632167046698236365248773129362925468205477475873)" -generator : "(3816539479643338944759298291464681192277983035912689733770494508811574555636, 9012924080423984920394486479942110564432750124182663486569090223252260834673)" -generator : "(5503641602689106148225048845214463777923510312174681209329424535855896891807, 18855361233142251924515218778489732696262088712916182672274951798948646574614)" -generator : "(5088124846464273193019221050625600521032734589946389224092190379437590154065, 6416271221657758966414097734287184125694475293237914233597130674976569687078)" -generator : "(20867680094384965415430814954750476939281108873463893726369574104505711531713, 15313558072170142110042684335532264510504254431172157718827227546994512565063)" -generator : "(13332179985482784038423999771784111532569533057023094804125481146734402475361, 507680900152057301814896529335572438268974885744736678380170456761999333657)" -generator : "(3045038804119001941107890165390844818828459912481507584096310983819098766879, 16307964546335583308110698700729181159053069282356638653459401639088234344604)" -generator : "(3559644071596397414057764249552229826405097815668910787154456861598728810278, 4391779124995501673609867762113662836793492829364560881363073603626930655625)" -generator : "(21653082138260604213309855567760806107492431734484035139700890716900599343303, 239207695156865581144238151433636535046365967131086294199296695227941171770)" -generator : "(19532594960074716982536287622079647052436395878182748669253163037560148413726, 18814379304601867855783758127354011339568480498358817716656599066590420245147)" -generator : "(5530277546553736393976250575755746872054185799592366955448004125627273921538, 14721946721422657898818820528438663071615088950081190286666632558960619493411)" -generator : "(5304174250557546383575733979460192076560718724266164035883159798186454330954, 5132963744980611805030961216467932318707275791112663960754378443695070699332)" -generator : "(18747176684043165020737413840763631299982680173696786910078949462642216569861, 3184798469160958711549356257994962696015550939851038992100841134011307659561)" -generator : "(11617367740317604325515897058722072091631998560749979862978584982439032934026, 10714631081278637802267913792073836852277883847482354349547212697065685038978)" -generator : "(10443739009275050855617151793639472164514116361986835336876949215494067786354, 17533063143390745559313023645655309797015876324479214359854925928229546974170)" -generator : "(18089487670226829519026544738090516690994653358523677206408472845446247967506, 18790516992677456776407534266144705464194079495023452727799859724626037654413)" -generator : "(15686787961755056545317135398414683826638785820078368032571700862736492626196, 17002388742937219061233294192933098643630775184099574496912893206631623588296)" -generator : "(1234793686678174125286055678852791020565513242367839254000047156928512479244, 8023212426403815577423199953592544767025937384974745028980221040842561245129)" -generator : "(12963386635172491742735929755803989093490296647313990230221027872454049928570, 4679895864973218183807762557889565158165986742372502912132148020556720240834)" -generator : "(3912185879860484366996197701758888492731463962797418423251438967978406709243, 9337100572161988718489241756950779718727341085906578489198306529969355191073)" -generator : "(19820260794974828351373124860128837608847907488815602797559456381519956658861, 14143139697714912538622250020338763182931575630381740393807396079048113615040)" -generator : "(13264853899440456693803942806358444107171743288228535282479477294125766698940, 2307662363094877437250605397937098571774268863958338091486326175812168284919)" -generator : "(16935319371890920010599028709808501357667428872490852912044163086211131338832, 4431939069062621435031064976169922429860491068987996109554656960391303794357)" -generator : "(3554740724820274132329602802340307763057328612131674768447857640558525478596, 16079714048303206272442788976078113615336498444498009887901064366359938758465)" -generator : "(14639299233850114854693366821679407991051094683735635940771715650978179440917, 8335721076487741241978947197520707896913716717035779588263764276250772825527)" -generator : "(17928003872082032538096154615424299166477654798428503561851164729561151765649, 4960546183400535454884274260414600230907942976003465514489920432487055283046)" -generator : "(18981045938113283612443388251792767107094240351202106144884475280364714363297, 11864354051124467278446435225759078477043758754954030607595910513505845895374)" -generator : "(5849608471641896932689050259307265823896272072351795065590531311030596429007, 21229044712538721502348483276244406588878344472909917768994382101200976203326)" -generator : "(393432175667211108483070939793661330735615114668362658763611056763370352241, 19985271941600432926866508116673625261827724078554764982827712024353220929168)" -signature.A : "(16605941458272293469898459593559962462499885703597334825353004900710945536242, 15276896411257112930580737499920866088375905247814230771366087132031781450435)" -signature.E : "20145301027381071188604537375435971326340204640470956156185142406370688319043" -proof.a : "(17705900040482640200318765868397816899423300068827258330107828571873441470719, 7713906401864379473036154127800301923576930562959621253303600800199073334118)" -proof.b : "(21727344193746663605105815693486793700736011477614477583899999224491814279994, 3107868243865832229708730395440182823160504417487161073020576660932813536129)" -proof.d : "(15259877521667048732653966731531866330870155623999372073511953831671978329220, 10346279138881905705140583326619164208036592391424952436660826945178815367429)" -proof.eCap : "895560299474401253372773501875631392367182095767290314841076259590095084586" -proof.r1Cap : "11193219439787925012791936928927829256760578552338662201715987339199095941227" -proof.r3Cap : "15267152252107021640270952755495037380174121953972815385187286027940019996824" -proof.challenge : "17070931957668459394149291496811547077907740596908548642717845173554837520766" -proof.commitments[0] : "19095727655211535891907424632625597788660896504069139787113033189477200901164" -proof.commitments[1] : "19376086836081848875356199522059787747649523185103503820918546873546803656837" -proof.commitments[2] : "294630661519046963443548105138813757424736295965011860489516719425258301868" -proof.commitments[3] : "2669991038723578516998124743106790553264755193437596445025159197580315246913" -proof.commitments[4] : "9347384312453102707431895387088312145715418559983462799650963982682084827252" -proof.commitments[5] : "10423402888507524428295410032922396350307052955495214158940561611559586857682" -proof.commitments[6] : "21667666739487631443855567302732869873626852318523924021971922974064015548203" -proof.commitments[7] : "2391574914373737044908304675905879726184592881619003159020770247137231086890" -proof.commitments[8] : "6278153666110445575600940082413845807068412500507616321015839605239269964481" -proof.commitments[9] : "17407116680557453084774309595190475554418201715886488721842472385513811947490" -proof.commitments[10] : "8501318769770573792305740921919152496772914721536223890699332307683117426648" -proof.commitments[11] : "10051701914974888853862296233599397109887353152719520271166239879253384300084" -proof.commitments[12] : "4629893339370850175540759987958849789651933707400277961494579665229717132314" -proof.commitments[13] : "19733193495966317727151773873301557383437837661981698399123721056474042649121" -proof.commitments[14] : "16581440502746205531254170374821787090797536920805429488227888885103068899696" -proof.commitments[15] : "4648351001408854396093087060766510007903087217506064759222363505293687917509" -proof.commitments[16] : "5232978090956285957326199431497654863020266920439885149705611444557525841377" -proof.commitments[17] : "10378971376370607204122093933171648619962601242767826857548254941729314144779" -proof.commitments[18] : "10636096558455749185044536222842024797504005940994930068820626467354940043941" -proof.commitments[19] : "13014117807481833912707217404666717118061234026083047800320547313575178119938" -proof.commitments[20] : "9468061149785714375845841584548255079305964111362932915002031399165874890540" -proof.commitments[21] : "12080296571110568157656356440360410776064799132442611756186811013992503842789" -proof.commitments[22] : "8406199401805359744205934469936213843102959323070335564794326616494411213164" -proof.commitments[23] : "13146762841746050965674929823955906169083360848059985425714661251008235930384" -proof.commitments[24] : "18062184243758250054044805146678460481140799371280738494887026946927689738624" -proof.commitments[25] : "4689669766214571146361709842956272925578589085257066757670840626355289827344" -proof.commitments[26] : "19717012933748023731747259246552232456988022985282562051094427191782572854304" -proof.commitments[27] : "19403246504848923420955727303103540860884754495247099508968984133479080201474" -points[0] : "(17705900040482640200318765868397816899423300068827258330107828571873441470719, 7713906401864379473036154127800301923576930562959621253303600800199073334118)" -points[1] : "(21727344193746663605105815693486793700736011477614477583899999224491814279994, 3107868243865832229708730395440182823160504417487161073020576660932813536129)" -points[2] : "(15259877521667048732653966731531866330870155623999372073511953831671978329220, 10346279138881905705140583326619164208036592391424952436660826945178815367429)" -points[3] : "(9450541227839351281812164523351865265510569098677555890572077252104786626690, 9197258858130081208441965628507147760561818479091872534935021928583764617680)" -points[4] : "(5816804290213296793101908964222774752394739247046217083058295650122051844227, 1590091680226237410825658942611263221992039739303345139797440692938537664171)" -scalar : "4661402122534330745222086575742781481159552639583525480514127238648290568236" -challenge : "17070931957668459394149291496811547077907740596908548642717845173554837520766" \ No newline at end of file +generator: (1173147175266788629161386345780835162643573498245275798226483331942833064090, 3145771569857800812612490171819094524500692685865840936106036825748970017425) +generator: (17959488178071103586887041079899546140481668450262589167571954617203990003931, 9373372757406534579589807812909162170493381282282055995414262223554020738469) +generator: (16380393904719381847123808879092138100099862519814676706991964183592469278036, 13419064243729972931910835325273073158849664397029543553671213683259211229016) +generator: (10011265545506972230685287172414929655892727331155130996433485506147641614716, 14334430316185001240382705869019108438296174635774957711616746050867178914052) +generator: (12283399099910692471540027513043652828679217720294980096786616079477268990181, 11769172645066528297868527814827529439332284730728660166652006752452954078501) +generator: (17930349550811222065814166468413282560106430323892614573707741975714346648713, 11377920438361863175939308656552273126249742602955706876624924893171319025886) +generator: (15307523606231210529567583070832003860853992124039141147755409127163272476371, 21488624556484663372323909443350226738477135288629327670976400472289430374826) +generator: (5654726928524216305838010965008022899653349750468499008338514899070443399341, 3756198776334014955912930933213029525470616112230126974228432834467018709135) +generator: (9957347644045616734873860422778161256248062700908303783670828208992688052735, 2504637797351340999662067003596356069394974879247629311686868148743357461560) +generator: (16403330996054574763530751561633094592150996050583743138829995864377497247319, 6446773961720043854294133141565879255764271196611564877856564159069018565043) +generator: (15888451533231955509199210830760113858577831611602424876567905922136007402938, 19215166253598153274963866121746167474460293952141063412468175431374129976271) +generator: (15022652498007559408533533252004001090243793868973868481519026229097007632403, 7581984809942871632514194443085566848480942630840856603320301783436961387452) +generator: (1302769090331320941504744703455039649525967990478864888817914162687010352982, 1755344547472618877820060641259140462945806891865693089639197701837443816710) +generator: (16153163936571489731405338144926242235073298112968333929725002837850835181442, 19156488576420737399265847256730436450788645157454417898001804440108336200602) +generator: (5616223417513003685510602580688354394669532788546049890336500094750490381205, 13034311885166364200155507714477771802690604579507733871196271987058238904912) +generator: (9643655102806455741028903115519435474821000055663403189061819001309524016312, 6069835868166716414650319279327329841781783256719779078423850942341511861503) +generator: (17431199659754885273798744084025037632951955016606485628640772292056074297332, 19132617647673639002459190544261948975215985865914002493727977475439438432512) +generator: (12373734458317617314628028459837027294291776348305043081080349834239561189694, 3677566406048315197483187111520828710854955894386595774524835535775650560611) +generator: (20499341640479498631238075777144206238051422119662911607654502549297729453659, 19935999804740659661606097165507119603913056856868137635864162257318848300092) +generator: (7934132476930643356156605467530739933255469367028804294978638893922378804050, 21820122857806683337418498246714352760212668089496828245789008781586555155247) +generator: (2562823402937553216280089632709848292947373555861404964615463993775182481712, 18328941045591590880349240999088240844303194584276276064795602490921550857312) +generator: (153759350313213566109302013407252970674980566321179731901501462604730312556, 3210752135885401873718647495268941916555047559524287797801711501762371481634) +generator: (13636514067428181095787693192440452218537567466091766340342788597701268153332, 4358088473862711746982381633802222194830186459269349673950859337538364305948) +generator: (17634058837307309296396615465374994084623484518869477504834248502759534693214, 16024827000017053814187936039847237209990298815264560739004817629059591452009) +generator: (16453569312504957028723515610426556180810266427872941041927105148986965294797, 2732734973218124539348608155070219728296389137934310881487333611087202931682) +generator: (4114269611738334173210087396419950646428491603710706268161251549816070561722, 17386111633153003536660733463215327520706937094733684811286033605149170024869) +generator: (13731159138308940009567543434701339242413399457300072091360119309795210930894, 12337453279912739068938084638286241109537513029389490150088392770161163819649) +generator: (8204288829875205585296664861597277902356097075957994159764849007659776230237, 16575669935574012423291879085108280061678829639629721526694452695998565252931) +generator: (2076322709672338731204413192547335576967683590546912106453962207464210345840, 13089051593672529609077868426152948484604245086678840892477851929424127619444) +generator: (17019919734230251763787743889078305305757454687543403321012198101635472162460, 5185191194715695775180744754547732566196814012314493969009466713176559661918) +generator: (13241862004939365319152232354537337712254726153508919319935262820095413713569, 8830790179260831569867944674002905218695496479029728900041819747197656672434) +generator: (12396288641390375580945105728413265282035324302647555995968168512592330840740, 7006476850124921792464455340149262004736826328762868987536397881081947430797) +signature: (18560110211758111409457254497318999076590696430315551100544651149487196532441, 9253158186666056998999906264407871590983850237840297100821092165083672542422) +signature: 14593612209139887880018211160667064594021517337981680648722278342913238211798 +init_res: "(4589785035873902068341417873604960519481583897204418666058475414382012351726, 20970208301589133985681742138243432057150518795105541875968436518067907451482)" +init_res: "(494789428909681690645146828013689108054268116392169451749293989761121075245, 17297246765270096457246040057082908839232893598408280949545770226231264303008)" +init_res: "(5753637097923463694110512927335594432498285696036803043736622864645821893845, 7763217521923340286337553713448633798372460063374344530579106705314907885993)" +init_res: "(6611873073341182289283590762314481902854760470835093185430710671814862240453, 14440086804843035476175025645886595973522367063881962137027138447185139043896)" +init_res: "(437030025586557310626084667197385398060437403959818122971050293505038543942, 14826402650986166312056692107563140793238833337671477194368246954293532362573)" +init_res: "10292285624696250102528155226431512323443546267207964357395200222618557155767" +proof: (4589785035873902068341417873604960519481583897204418666058475414382012351726, 20970208301589133985681742138243432057150518795105541875968436518067907451482) +proof: (494789428909681690645146828013689108054268116392169451749293989761121075245, 17297246765270096457246040057082908839232893598408280949545770226231264303008) +proof: (5753637097923463694110512927335594432498285696036803043736622864645821893845, 7763217521923340286337553713448633798372460063374344530579106705314907885993) +proof: 8042842032282577185618742748178918605750601718643454931428492117343952039038 +proof: 19579446147797020085082626411591675595364051185016480545372113683170864922634 +proof: 4516230118140551297436429895004240856013832273141665011691749625884080207354 +proof: 9170523218553528937204975447093012127133495368757073227285674220594594974338 +commitment 0: 17792881980202731787526234274937780058085069479191903238906823842716306214812 +commitment 1: 5490119514502333332729615463314122543383712208334755349752023587140211405697 +commitment 2: 8889159508660262338321863253616291933494922456025680962524206950677875551279 +commitment 3: 9069561048618705417723902927725352725947307230585332809698064781724968067034 +commitment 4: 20969893955715799675734152993110834546643706880157866605773662861880465651067 +commitment 5: 18992254795544495368514124342807525827274043235883918021842172730625926706813 +commitment 6: 14107066283288679410313948191605430336257599969829422378683949903409387241861 +commitment 7: 12798941174073416197818145838604285932385561094171703550406719941108730266040 +commitment 8: 7707483228209930435601220614428470260454979817369328511181148436441189364252 +commitment 9: 11262475290933883039391017742343262691566224782110744908836640737065755077740 +commitment 10: 20025099778222518728998013782354089583639902533963312481516779660434642391386 +commitment 11: 10756483111048549875162036903848810583245448777908829437837498721453052300981 +commitment 12: 5647152189167844700359734420476822971758687100169609521874338153743197477480 +commitment 13: 6597777520175410638237560299448047126090708484661051367609535243803437578595 +commitment 14: 2842749640235199581966772189142285932173353551113407861190259580874923768210 +commitment 15: 8100729913959445213266603261363507349758311134743628864205342530610132032731 +commitment 16: 18464513909237023511808358407416412607248496403674383674269261481921398236651 +commitment 17: 20804683512780541730456550307292592384947875235703111243674677825086272759966 +commitment 18: 3429593186662195935096221738432760090703045873994959001388531410854056609164 +commitment 19: 20454320943614726678297451940346778110920218678288721887823293454833947818188 +commitment 20: 6857251212744083045997730459448394274381066615951269234611492745730845498418 +commitment 21: 14742257749293642622734794076507628340506139847594980214581451413113499961427 +commitment 22: 12246699489562568425338334745874046921145259134913765828527381619293537499424 +commitment 23: 13417706375138770649263189175295971157348919314915824794971570392768751224714 +commitment 24: 14932843913903189152044822214369631098581507006906059224083721437059566611948 +commitment 25: 16736877594037174310126934822629376254973535401043750021946965372895587488488 +commitment 26: 9510282590851897620616131906689045795242783177500978291791620055703189601120 +commitment 27: 16287576082505117925628461501366254697615855474701713406049352554328601724125 \ No newline at end of file