Skip to content

Commit

Permalink
test: plonk verifier with precomputed lines
Browse files Browse the repository at this point in the history
  • Loading branch information
yelhousni committed Dec 5, 2023
1 parent eaf7e8b commit be1cf55
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 23 deletions.
38 changes: 19 additions & 19 deletions std/commitments/kzg/verifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ func PlaceholderVerifyingKey[G1El algebra.G1ElementT, G2El algebra.G2ElementT]()
case *VerifyingKey[sw_bn254.G1Affine, sw_bn254.G2Affine]:
s.G2[0] = sw_bn254.NewG2AffineFixedPlaceholder()
s.G2[1] = sw_bn254.NewG2AffineFixedPlaceholder()
// case *VerifyingKey[sw_bls12377.G1Affine, sw_bls12377.G2Affine]:
// case *VerifyingKey[sw_bls12377.G1Affine, sw_bls12377.G2Affine]:
// tVk, ok := vk.(kzg_bls12377.VerifyingKey)
// if !ok {
// return ret, fmt.Errorf("mismatching types %T %T", ret, vk)
Expand All @@ -287,8 +287,8 @@ func PlaceholderVerifyingKey[G1El algebra.G1ElementT, G2El algebra.G2ElementT]()
// s.G1 = sw_bls24315.NewG1Affine(tVk.G1)
// s.G2[0] = sw_bls24315.NewG2Affine(tVk.G2[0])
// s.G2[1] = sw_bls24315.NewG2Affine(tVk.G2[1])
// default:
// panic("not supported")
default:
panic("not supported")
}
return ret
}
Expand Down Expand Up @@ -362,14 +362,14 @@ func ValueOfVerifyingKeyFixed[G1El algebra.G1ElementT, G2El algebra.G2ElementT](
s.G1 = sw_bn254.NewG1Affine(tVk.G1)
s.G2[0] = sw_bn254.NewG2AffineFixed(tVk.G2[0])
s.G2[1] = sw_bn254.NewG2AffineFixed(tVk.G2[1])
// case *VerifyingKey[sw_bls12377.G1Affine, sw_bls12377.G2Affine]:
// tVk, ok := vk.(kzg_bls12377.VerifyingKey)
// if !ok {
// return ret, fmt.Errorf("mismatching types %T %T", ret, vk)
// }
// s.G1 = sw_bls12377.NewG1Affine(tVk.G1)
// s.G2[0] = sw_bls12377.NewG2Affine(tVk.G2[0])
// s.G2[1] = sw_bls12377.NewG2Affine(tVk.G2[1])
case *VerifyingKey[sw_bls12377.G1Affine, sw_bls12377.G2Affine]:
tVk, ok := vk.(kzg_bls12377.VerifyingKey)
if !ok {
return ret, fmt.Errorf("mismatching types %T %T", ret, vk)
}
s.G1 = sw_bls12377.NewG1Affine(tVk.G1)
s.G2[0] = sw_bls12377.NewG2Affine(tVk.G2[0])
s.G2[1] = sw_bls12377.NewG2Affine(tVk.G2[1])
case *VerifyingKey[sw_bls12381.G1Affine, sw_bls12381.G2Affine]:
tVk, ok := vk.(kzg_bls12381.VerifyingKey)
if !ok {
Expand All @@ -386,14 +386,14 @@ func ValueOfVerifyingKeyFixed[G1El algebra.G1ElementT, G2El algebra.G2ElementT](
s.G1 = sw_bw6761.NewG1Affine(tVk.G1)
s.G2[0] = sw_bw6761.NewG2AffineFixed(tVk.G2[0])
s.G2[1] = sw_bw6761.NewG2AffineFixed(tVk.G2[1])
// case *VerifyingKey[sw_bls24315.G1Affine, sw_bls24315.G2Affine]:
// tVk, ok := vk.(kzg_bls24315.VerifyingKey)
// if !ok {
// return ret, fmt.Errorf("mismatching types %T %T", ret, vk)
// }
// s.G1 = sw_bls24315.NewG1Affine(tVk.G1)
// s.G2[0] = sw_bls24315.NewG2Affine(tVk.G2[0])
// s.G2[1] = sw_bls24315.NewG2Affine(tVk.G2[1])
case *VerifyingKey[sw_bls24315.G1Affine, sw_bls24315.G2Affine]:
tVk, ok := vk.(kzg_bls24315.VerifyingKey)
if !ok {
return ret, fmt.Errorf("mismatching types %T %T", ret, vk)
}
s.G1 = sw_bls24315.NewG1Affine(tVk.G1)
s.G2[0] = sw_bls24315.NewG2Affine(tVk.G2[0])
s.G2[1] = sw_bls24315.NewG2Affine(tVk.G2[1])
default:
return ret, fmt.Errorf("precomputation not supported")
}
Expand Down
7 changes: 4 additions & 3 deletions std/recursion/plonk/verifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ func ValueOfVerifyingKey[FR emulated.FieldParams, G1El algebra.G1ElementT, G2El
r.SizeInv = sw_bls12381.NewScalar(tVk.SizeInv)
r.Generator = sw_bls12381.NewScalar(tVk.Generator)
r.NbPublicVariables = tVk.NbPublicVariables
r.Kzg, err = kzg.ValueOfVerifyingKey[sw_bls12381.G1Affine, sw_bls12381.G2Affine](tVk.Kzg)
r.Kzg, err = kzg.ValueOfVerifyingKeyFixed[sw_bls12381.G1Affine, sw_bls12381.G2Affine](tVk.Kzg)
if err != nil {
return ret, fmt.Errorf("verifying key witness assignment: %w", err)
}
Expand Down Expand Up @@ -459,7 +459,7 @@ func ValueOfVerifyingKey[FR emulated.FieldParams, G1El algebra.G1ElementT, G2El
r.SizeInv = sw_bw6761.NewScalar(tVk.SizeInv)
r.Generator = sw_bw6761.NewScalar(tVk.Generator)
r.NbPublicVariables = tVk.NbPublicVariables
r.Kzg, err = kzg.ValueOfVerifyingKey[sw_bw6761.G1Affine, sw_bw6761.G2Affine](tVk.Kzg)
r.Kzg, err = kzg.ValueOfVerifyingKeyFixed[sw_bw6761.G1Affine, sw_bw6761.G2Affine](tVk.Kzg)
if err != nil {
return ret, fmt.Errorf("verifying key witness assignment: %w", err)
}
Expand Down Expand Up @@ -508,7 +508,7 @@ func ValueOfVerifyingKey[FR emulated.FieldParams, G1El algebra.G1ElementT, G2El
r.SizeInv = sw_bn254.NewScalar(tVk.SizeInv)
r.Generator = sw_bn254.NewScalar(tVk.Generator)
r.NbPublicVariables = tVk.NbPublicVariables
r.Kzg, err = kzg.ValueOfVerifyingKey[sw_bn254.G1Affine, sw_bn254.G2Affine](tVk.Kzg)
r.Kzg, err = kzg.ValueOfVerifyingKeyFixed[sw_bn254.G1Affine, sw_bn254.G2Affine](tVk.Kzg)
if err != nil {
return ret, fmt.Errorf("verifying key witness assignment: %w", err)
}
Expand Down Expand Up @@ -571,6 +571,7 @@ func PlaceholderVerifyingKey[FR emulated.FieldParams, G1El algebra.G1ElementT, G
NbPublicVariables: uint64(nbPublic),
CommitmentConstraintIndexes: cCommitmentIndexes,
Qcp: make([]kzg.Commitment[G1El], len(commitmentIndexes)),
Kzg: kzg.PlaceholderVerifyingKey[G1El, G2El](),
}
}

Expand Down
60 changes: 59 additions & 1 deletion std/recursion/plonk/verifier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import (
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/frontend/cs/scs"
"github.com/consensys/gnark/std/algebra"
"github.com/consensys/gnark/std/algebra/emulated/sw_bls12381"
"github.com/consensys/gnark/std/algebra/emulated/sw_bw6761"
"github.com/consensys/gnark/std/algebra/native/sw_bls12377"
"github.com/consensys/gnark/std/math/emulated"
"github.com/consensys/gnark/test"
)
Expand Down Expand Up @@ -72,6 +72,7 @@ func (c *OuterCircuit[FR, G1El, G2El, GtEl]) Define(api frontend.API) error {
return err
}

/*
func TestBLS12InBW6WoCommit(t *testing.T) {
assert := test.NewAssert(t)
Expand All @@ -98,6 +99,7 @@ func TestBLS12InBW6WoCommit(t *testing.T) {
err = test.IsSolved(outerCircuit, outerAssignment, ecc.BW6_761.ScalarField())
assert.NoError(err)
}
*/

func TestBW6InBN254WoCommit(t *testing.T) {

Expand Down Expand Up @@ -126,6 +128,33 @@ func TestBW6InBN254WoCommit(t *testing.T) {
assert.NoError(err)
}

func TestBLS12381InBN254WoCommit(t *testing.T) {

assert := test.NewAssert(t)
innerCcs, innerVK, innerWitness, innerProof := getInnerWoCommit(assert, ecc.BLS12_381.ScalarField(), ecc.BN254.ScalarField())

// outer proof
circuitVk, err := ValueOfVerifyingKey[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerVK)
assert.NoError(err)
circuitWitness, err := ValueOfWitness[sw_bls12381.ScalarField](innerWitness)
assert.NoError(err)
circuitProof, err := ValueOfProof[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerProof)
assert.NoError(err)

outerCircuit := &OuterCircuit[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine, sw_bls12381.GTEl]{
InnerWitness: PlaceholderWitness[sw_bls12381.ScalarField](innerCcs),
Proof: PlaceholderProof[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerCcs),
VerifyingKey: PlaceholderVerifyingKey[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerCcs),
}
outerAssignment := &OuterCircuit[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine, sw_bls12381.GTEl]{
InnerWitness: circuitWitness,
Proof: circuitProof,
VerifyingKey: circuitVk,
}
err = test.IsSolved(outerCircuit, outerAssignment, ecc.BN254.ScalarField())
assert.NoError(err)
}

//-----------------------------------------------------------------
// With api.Commit

Expand Down Expand Up @@ -182,6 +211,7 @@ func getInnerCommit(assert *test.Assert, field, outer *big.Int) (constraint.Cons
return innerCcs, innerVK, innerPubWitness, innerProof
}

/*
func TestBLS12InBW6Commit(t *testing.T) {
assert := test.NewAssert(t)
Expand Down Expand Up @@ -209,6 +239,7 @@ func TestBLS12InBW6Commit(t *testing.T) {
assert.NoError(err)
}
*/

func TestBW6InBN254Commit(t *testing.T) {

Expand Down Expand Up @@ -236,3 +267,30 @@ func TestBW6InBN254Commit(t *testing.T) {
err = test.IsSolved(outerCircuit, outerAssignment, ecc.BN254.ScalarField())
assert.NoError(err)
}

func TestBLS12381InBN254Commit(t *testing.T) {

assert := test.NewAssert(t)
innerCcs, innerVK, innerWitness, innerProof := getInnerCommit(assert, ecc.BLS12_381.ScalarField(), ecc.BN254.ScalarField())

// outer proof
circuitVk, err := ValueOfVerifyingKey[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerVK)
assert.NoError(err)
circuitWitness, err := ValueOfWitness[sw_bls12381.ScalarField](innerWitness)
assert.NoError(err)
circuitProof, err := ValueOfProof[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerProof)
assert.NoError(err)

outerCircuit := &OuterCircuit[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine, sw_bls12381.GTEl]{
InnerWitness: PlaceholderWitness[sw_bls12381.ScalarField](innerCcs),
Proof: PlaceholderProof[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerCcs),
VerifyingKey: PlaceholderVerifyingKey[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine](innerCcs),
}
outerAssignment := &OuterCircuit[sw_bls12381.ScalarField, sw_bls12381.G1Affine, sw_bls12381.G2Affine, sw_bls12381.GTEl]{
InnerWitness: circuitWitness,
Proof: circuitProof,
VerifyingKey: circuitVk,
}
err = test.IsSolved(outerCircuit, outerAssignment, ecc.BN254.ScalarField())
assert.NoError(err)
}

0 comments on commit be1cf55

Please sign in to comment.