mirror of
https://github.com/arnaucube/gnark-plonky2-verifier.git
synced 2026-01-12 17:11:31 +01:00
broken challenge array
This commit is contained in:
@@ -99,9 +99,16 @@ func (c *ChallengerChip) GetHash() Hash {
|
|||||||
return [4]F{c.GetChallenge(), c.GetChallenge(), c.GetChallenge(), c.GetChallenge()}
|
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
|
numFriQueries := config.NumQueryRounds
|
||||||
ldeSize := 1 << (degreeBits + config.RateBits)
|
|
||||||
friAlpha := c.GetExtensionChallenge()
|
friAlpha := c.GetExtensionChallenge()
|
||||||
|
|
||||||
var friBetas []QuadraticExtension
|
var friBetas []QuadraticExtension
|
||||||
@@ -118,9 +125,6 @@ func (c *ChallengerChip) GetFriChallenges(commitPhaseMerkleCaps []MerkleCap, fin
|
|||||||
friPowResponse := c.poseidonChip.HashNoPad(powInputs)[0]
|
friPowResponse := c.poseidonChip.HashNoPad(powInputs)[0]
|
||||||
friQueryIndices := c.GetNChallenges(numFriQueries)
|
friQueryIndices := c.GetNChallenges(numFriQueries)
|
||||||
|
|
||||||
// need to modulo lde size on fri query indices
|
|
||||||
_ = ldeSize
|
|
||||||
|
|
||||||
return FriChallenges{
|
return FriChallenges{
|
||||||
FriAlpha: friAlpha,
|
FriAlpha: friAlpha,
|
||||||
FriBetas: friBetas,
|
FriBetas: friBetas,
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package plonky2_verifier
|
package plonky2_verifier
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
. "gnark-ed25519/field"
|
. "gnark-ed25519/field"
|
||||||
"gnark-ed25519/poseidon"
|
"gnark-ed25519/poseidon"
|
||||||
|
"gnark-ed25519/utils"
|
||||||
|
|
||||||
"github.com/consensys/gnark/frontend"
|
"github.com/consensys/gnark/frontend"
|
||||||
)
|
)
|
||||||
@@ -17,12 +19,14 @@ func (c *VerifierChip) GetPublicInputsHash(publicInputs []F) Hash {
|
|||||||
return c.poseidonChip.HashNoPad(publicInputs)
|
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
|
config := commonData.Config
|
||||||
numChallenges := config.NumChallenges
|
numChallenges := config.NumChallenges
|
||||||
challenger := NewChallengerChip(c.api, c.field, c.poseidonChip)
|
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.ObserveHash(publicInputsHash)
|
||||||
challenger.ObserveCap(proofWithPis.Proof.WiresCap)
|
challenger.ObserveCap(proofWithPis.Proof.WiresCap)
|
||||||
plonkBetas := challenger.GetNChallenges(numChallenges)
|
plonkBetas := challenger.GetNChallenges(numChallenges)
|
||||||
@@ -34,8 +38,6 @@ func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicI
|
|||||||
challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
|
challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
|
||||||
plonkZeta := challenger.GetExtensionChallenge()
|
plonkZeta := challenger.GetExtensionChallenge()
|
||||||
|
|
||||||
_, _, _, _ = plonkAlphas, plonkBetas, plonkGammas, plonkZeta
|
|
||||||
|
|
||||||
challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
|
challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
|
||||||
|
|
||||||
return ProofChallenges{
|
return ProofChallenges{
|
||||||
@@ -47,12 +49,14 @@ func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicI
|
|||||||
proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
|
proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
|
||||||
proofWithPis.Proof.OpeningProof.FinalPoly,
|
proofWithPis.Proof.OpeningProof.FinalPoly,
|
||||||
proofWithPis.Proof.OpeningProof.PowWitness,
|
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)
|
publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
|
||||||
_ = c.GetChallenges(proofWithPis, publicInputsHash, commonData)
|
proofChallenges := c.GetChallenges(proofWithPis, publicInputsHash, commonData)
|
||||||
|
fmt.Printf("%+v\n", proofChallenges)
|
||||||
}
|
}
|
||||||
|
|||||||
37
plonky2_verifier/verifier_test.go
Normal file
37
plonky2_verifier/verifier_test.go
Normal file
@@ -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()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user