mirror of
https://github.com/arnaucube/gnark-plonky2-verifier.git
synced 2026-01-12 00:51:33 +01:00
Step test case with public inputs (#23)
* added step test case * export solidity code * just set proof's public input as public variables * make serialization a command line option * added flag to output solidity * some changes to the benchmark file * used gnark cherry picked bug fix * removed fuzz testing * added some logging * more debug messages and test cases for the hint issue * removed usage of goldilocks reduce * removed prints * removed GoldilocksReduce * removed prints * added a todo * some serialization changes
This commit is contained in:
@@ -172,12 +172,11 @@ func (c *PoseidonChip) mdsRowShf(r int, v [SPONGE_WIDTH]frontend.Variable) front
|
||||
|
||||
for i := 0; i < 12; i++ {
|
||||
if i < SPONGE_WIDTH {
|
||||
res1 := c.api.Mul(v[(i+r)%SPONGE_WIDTH], MDS_MATRIX_CIRC_VARS[i])
|
||||
res = c.api.Add(res, res1)
|
||||
res = field.GoldilocksMulAdd(c.api, v[(i+r)%SPONGE_WIDTH], MDS_MATRIX_CIRC_VARS[i], res)
|
||||
}
|
||||
}
|
||||
|
||||
res = c.api.Add(res, c.api.Mul(v[r], MDS_MATRIX_DIAG_VARS[r]))
|
||||
res = field.GoldilocksMulAdd(c.api, v[r], MDS_MATRIX_DIAG_VARS[r], res)
|
||||
return res
|
||||
}
|
||||
|
||||
@@ -203,15 +202,9 @@ func (c *PoseidonChip) mdsLayer(state_ PoseidonState) PoseidonState {
|
||||
result[i] = frontend.Variable(0)
|
||||
}
|
||||
|
||||
var state [SPONGE_WIDTH]frontend.Variable
|
||||
for i := 0; i < SPONGE_WIDTH; i++ {
|
||||
state[i] = field.GoldilocksReduce(c.api, state_[i])
|
||||
}
|
||||
|
||||
for r := 0; r < 12; r++ {
|
||||
if r < SPONGE_WIDTH {
|
||||
sum := c.mdsRowShf(r, state)
|
||||
result[r] = field.GoldilocksReduce(c.api, sum)
|
||||
result[r] = c.mdsRowShf(r, state_)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -298,14 +291,11 @@ func (c *PoseidonChip) mdsPartialLayerFast(state PoseidonState, r int) PoseidonS
|
||||
for i := 1; i < 12; i++ {
|
||||
if i < SPONGE_WIDTH {
|
||||
t := FAST_PARTIAL_ROUND_W_HATS_VARS[r][i-1]
|
||||
reducedState := field.GoldilocksReduce(c.api, state[i])
|
||||
dSum = c.api.Add(dSum, c.api.Mul(reducedState, t))
|
||||
dSum = field.GoldilocksMulAdd(c.api, state[i], t, dSum)
|
||||
}
|
||||
}
|
||||
|
||||
s0 := field.GoldilocksReduce(c.api, state[0])
|
||||
dSum = c.api.Add(dSum, c.api.Mul(s0, MDS0TO0_VAR))
|
||||
d := field.GoldilocksReduce(c.api, dSum)
|
||||
d := field.GoldilocksMulAdd(c.api, state[0], MDS0TO0_VAR, dSum)
|
||||
|
||||
var result PoseidonState
|
||||
for i := 0; i < SPONGE_WIDTH; i++ {
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/consensys/gnark-crypto/ecc"
|
||||
"github.com/consensys/gnark/backend"
|
||||
"github.com/consensys/gnark/frontend"
|
||||
"github.com/consensys/gnark/test"
|
||||
"github.com/succinctlabs/gnark-plonky2-verifier/field"
|
||||
@@ -58,3 +59,26 @@ func TestPublicInputsHashWitness(t *testing.T) {
|
||||
copy(out[:], utils.StrArrayToFrontendVariableArray(outStr))
|
||||
testCase(in, out)
|
||||
}
|
||||
|
||||
func TestPublicInputsHashWitness2(t *testing.T) {
|
||||
assert := test.NewAssert(t)
|
||||
|
||||
inStr := []string{"0", "1", "3736710860384812976"}
|
||||
outStr := []string{"8416658900775745054", "12574228347150446423", "9629056739760131473", "3119289788404190010"}
|
||||
var in [3]frontend.Variable
|
||||
var out [4]frontend.Variable
|
||||
copy(in[:], utils.StrArrayToFrontendVariableArray(inStr))
|
||||
copy(out[:], utils.StrArrayToFrontendVariableArray(outStr))
|
||||
|
||||
circuit := TestPublicInputsHashCircuit{In: in, Out: out}
|
||||
witness := TestPublicInputsHashCircuit{In: in, Out: out}
|
||||
|
||||
assert.ProverSucceeded(
|
||||
&circuit,
|
||||
&witness,
|
||||
test.WithBackends(backend.GROTH16),
|
||||
test.WithCurves(ecc.BN254),
|
||||
test.NoFuzzing(),
|
||||
test.NoSerialization(),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user