Browse Source

broken challenge array

main
jtguibas 3 years ago
parent
commit
df3f8082ca
3 changed files with 57 additions and 12 deletions
  1. +9
    -5
      plonky2_verifier/challenger.go
  2. +11
    -7
      plonky2_verifier/verifier.go
  3. +37
    -0
      plonky2_verifier/verifier_test.go

+ 9
- 5
plonky2_verifier/challenger.go

@ -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,

+ 11
- 7
plonky2_verifier/verifier.go

@ -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
- 0
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()
}

Loading…
Cancel
Save