|
| 1 | +module Groth16.Proof where |
| 2 | +import Data.Maybe (fromJust) |
| 3 | +import GHC.Exception (fromCallSiteList, ratioZeroDenomException) |
| 4 | +import BLS12381 (Fp1 (..), Fp12 (..), Fp2 (..), Fp6 (..), |
| 5 | + G1, G2, EllipticCurve (..), ecExp, pairing) |
| 6 | + |
| 7 | + |
| 8 | +piA :: G1 |
| 9 | +piA = EC (Fp1 3984352275393513407707458752223381552625938981874722736014424587477519416324786265219287577738019481427124666148577) |
| 10 | + (Fp1 3934357811246215342496484974341718744307142950543561986855369767107187586719026787540296884547368402577497158247886) |
| 11 | +piB :: G2 |
| 12 | +piB = EC (Fp2 1383768228561621316627203185691386271068632930515025058311040033286484194936249393773572848513907248314714565823954 |
| 13 | + 3372051825839361802267191902926554912410385994757553252424676676340216183130863424210420817445471978026226922337833) |
| 14 | + (Fp2 173769527298906309724813645384929913748747002524984682791528623242175734184686578339273192650865422687981596071356 |
| 15 | + 1221155903482790553508449256524896113531260560029665446099564785219231367859438371011146458551163658702696619239964) |
| 16 | + |
| 17 | + |
| 18 | +eAB :: Fp12 |
| 19 | +eAB = pairing piA piB |
| 20 | + |
| 21 | +vkAlpha :: G1 |
| 22 | +vkAlpha = EC (Fp1 884254335835973708623649726843225902515012882730292989362595689678679572079921231771317068170806996078338505579806) |
| 23 | + (Fp1 3768977299080966250688020815019979226470712404975382082543343112954422303817680439779613820354767573782934373316440) |
| 24 | + |
| 25 | +vkBeta :: G2 |
| 26 | +vkBeta = EC (Fp2 2720547088220552322101421658501053569361804801106447169991638985241299183616270020289525175877218022943839744678186 |
| 27 | + 2801315382036359271580184551867838805765997071063520052931583554992307693827563040347593044852696020880400403800183) |
| 28 | + |
| 29 | + (Fp2 770284704932965497202598239706215866847979347767071358071158374227966578813392253003771174891535118568391181236317 |
| 30 | + 1139019368208251015845183620656622771874508938093356438887657395609394230231468860652936479057193953006987748576783) |
| 31 | + |
| 32 | +eAlphBeta :: Fp12 |
| 33 | +eAlphBeta = pairing vkAlpha vkBeta |
| 34 | + |
| 35 | +vkI0 :: G1 |
| 36 | +vkI0 = EC (Fp1 1543158387756368305682640577732972437006142138783149846616634502202298429897559731463273773655375040974203537466722) |
| 37 | + (Fp1 2088673663149159531424996367136503441740704070304009602411162415476128434508623983231292593704123869519078025433851) |
| 38 | + |
| 39 | +vkI1 :: G1 |
| 40 | +vkI1 = EC (Fp1 3379779854616555326463337240069717300537103481222871647422326726751131356695553710288272264490199347961045579814992) |
| 41 | + (Fp1 3148331474212877925196015078803050368886350560299501354135811263836671051022075420732464407909524101161401693824468) |
| 42 | + |
| 43 | +vkI :: G1 |
| 44 | +vkI = vkI0 <> ecExp vkI1 168932 |
| 45 | + |
| 46 | +vkGamma :: G2 |
| 47 | +vkGamma = EC (Fp2 3059144344244213709971259814753781636986470325476647558659373206291635324768958432433509563104347017837885763365758 |
| 48 | + 352701069587466618187139116011060144890029952792775240219908644239793785735715026873347600343865175952761926303160) |
| 49 | + |
| 50 | + (Fp2 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582 |
| 51 | + 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905) |
| 52 | + |
| 53 | +eIGamma :: Fp12 |
| 54 | +eIGamma = pairing vkI vkGamma |
| 55 | + |
| 56 | + |
| 57 | +piC :: G1 |
| 58 | +piC = EC (Fp1 2760002180549978667072186956156037192766725652969953377981440820425053248045665685727157004083291821437533086232223) |
| 59 | + (Fp1 1418798878631376940395924303249345283900683995745178488269207401399355667366482245751366473765081910834806927478837) |
| 60 | + |
| 61 | +vkDelta :: G2 |
| 62 | +vkDelta = EC (Fp2 1141849674709460885091515179048158257162912866718788931520718365807686518957690229971427646803968066456032635732114 |
| 63 | + 3653817707682780481400988959837792884813139044060691250486309066732559611975172107961595508869522546031232689129662) |
| 64 | + |
| 65 | + (Fp2 426945487787332816931873177136288041913449245111552392246454628501530427951336241004199984406283998396003691442915 |
| 66 | + 2540492032915892247569545602749267035529833466265680663689342492623743591035104699497312141136821058026929128894073) |
| 67 | + |
| 68 | +eCDelta :: Fp12 |
| 69 | +eCDelta = pairing piC vkDelta |
| 70 | + |
| 71 | + |
| 72 | +lhs :: Fp12 |
| 73 | +lhs = eAlphBeta * eIGamma * eCDelta |
| 74 | + |
| 75 | +proof :: Bool |
| 76 | +proof = lhs == eAB |
0 commit comments