diff --git a/plonky2_verifier/challenger.go b/plonky2_verifier/challenger.go index ccf5063..1c04e0f 100644 --- a/plonky2_verifier/challenger.go +++ b/plonky2_verifier/challenger.go @@ -99,9 +99,16 @@ func (c *ChallengerChip) GetHash() Hash { return [4]F{c.GetChallenge(), c.GetChallenge(), c.GetChallenge(), c.GetChallenge()} } -func (c *ChallengerChip) GetFriChallenges(commitPhaseMerkleCaps []MerkleCap, finalPoly PolynomialCoeffs, powWitness F, degreeBits uint64, config FriConfig) FriChallenges { +func (c *ChallengerChip) GetFriChallenges(commitPhaseMerkleCaps []MerkleCap, finalPoly PolynomialCoeffs, powWitness F, degreeBits uint64, config struct { + RateBits uint64 "json:\"rate_bits\"" + CapHeight uint64 "json:\"cap_height\"" + ProofOfWorkBits uint64 "json:\"proof_of_work_bits\"" + ReductionStrategy struct { + ConstantArityBits []int "json:\"ConstantArityBits\"" + } "json:\"reduction_strategy\"" + NumQueryRounds uint64 "json:\"num_query_rounds\"" +}) FriChallenges { numFriQueries := config.NumQueryRounds - ldeSize := 1 << (degreeBits + config.RateBits) friAlpha := c.GetExtensionChallenge() var friBetas []QuadraticExtension @@ -118,9 +125,6 @@ func (c *ChallengerChip) GetFriChallenges(commitPhaseMerkleCaps []MerkleCap, fin friPowResponse := c.poseidonChip.HashNoPad(powInputs)[0] friQueryIndices := c.GetNChallenges(numFriQueries) - // need to modulo lde size on fri query indices - _ = ldeSize - return FriChallenges{ FriAlpha: friAlpha, FriBetas: friBetas, diff --git a/plonky2_verifier/verifier.go b/plonky2_verifier/verifier.go index 8e2e9a6..7506aab 100644 --- a/plonky2_verifier/verifier.go +++ b/plonky2_verifier/verifier.go @@ -1,8 +1,10 @@ package plonky2_verifier import ( + "fmt" . "gnark-ed25519/field" "gnark-ed25519/poseidon" + "gnark-ed25519/utils" "github.com/consensys/gnark/frontend" ) @@ -17,12 +19,14 @@ func (c *VerifierChip) GetPublicInputsHash(publicInputs []F) Hash { return c.poseidonChip.HashNoPad(publicInputs) } -func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicInputsHash Hash, commonData CommonCircuitData) ProofChallenges { +func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicInputsHash Hash, commonData CommonCircuitDataRaw) ProofChallenges { config := commonData.Config numChallenges := config.NumChallenges challenger := NewChallengerChip(c.api, c.field, c.poseidonChip) - challenger.ObserveHash(commonData.CircuitDigest) + var circuitDigest Hash + copy(circuitDigest[:], utils.Uint64ArrayToFArray(commonData.CircuitDigest.Elements)) + challenger.ObserveHash(circuitDigest) challenger.ObserveHash(publicInputsHash) challenger.ObserveCap(proofWithPis.Proof.WiresCap) plonkBetas := challenger.GetNChallenges(numChallenges) @@ -34,8 +38,6 @@ func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicI challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap) plonkZeta := challenger.GetExtensionChallenge() - _, _, _, _ = plonkAlphas, plonkBetas, plonkGammas, plonkZeta - challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings()) return ProofChallenges{ @@ -47,12 +49,14 @@ func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicI proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps, proofWithPis.Proof.OpeningProof.FinalPoly, proofWithPis.Proof.OpeningProof.PowWitness, - commonData.DegreeBits, config.FriConfig, + commonData.DegreeBits, + config.FriConfig, ), } } -func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitData) { +func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitDataRaw) { publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs) - _ = c.GetChallenges(proofWithPis, publicInputsHash, commonData) + proofChallenges := c.GetChallenges(proofWithPis, publicInputsHash, commonData) + fmt.Printf("%+v\n", proofChallenges) } diff --git a/plonky2_verifier/verifier_test.go b/plonky2_verifier/verifier_test.go new file mode 100644 index 0000000..e9760b6 --- /dev/null +++ b/plonky2_verifier/verifier_test.go @@ -0,0 +1,37 @@ +package plonky2_verifier + +import ( + . "gnark-ed25519/field" + . "gnark-ed25519/poseidon" + "testing" + + "github.com/consensys/gnark/frontend" + "github.com/consensys/gnark/test" +) + +type TestVerifierCircuit struct{} + +func (circuit *TestVerifierCircuit) Define(api frontend.API) error { + field := NewFieldAPI(api) + poseidonChip := NewPoseidonChip(api, field) + verifierChip := VerifierChip{api: api, field: field, poseidonChip: *poseidonChip} + proofWithPis := DeserializeProofWithPublicInputs("./data/proof_with_public_inputs.json") + commonCircuitData := DeserializeCommonCircuitData("./data/common_circuit_data.json") + verfierOnlyCircuitData := DeserializeVerifierOnlyCircuitData("./data/verifier_only_circuit_data.json") + verifierChip.Verify(proofWithPis, verfierOnlyCircuitData, commonCircuitData) + panic("look at stdout") + return nil +} + +func TestVerifierWitness(t *testing.T) { + assert := test.NewAssert(t) + + testCase := func() { + circuit := TestVerifierCircuit{} + witness := TestVerifierCircuit{} + err := test.IsSolved(&circuit, &witness, TEST_CURVE.ScalarField()) + assert.NoError(err) + } + + testCase() +}