@ -17,11 +17,11 @@ type TestFriCircuit struct {
commonCircuitDataFilename string ` gnark:"-" `
commonCircuitDataFilename string ` gnark:"-" `
verifierOnlyCircuitDataFilename string ` gnark:"-" `
verifierOnlyCircuitDataFilename string ` gnark:"-" `
p lonkZeta field . QuadraticExtension
f riAlpha field . QuadraticExtension
f riBetas [ ] field . QuadraticExtension
f riPOWResponse field . F
f riQueryIndices [ ] field . F
P lonkZeta field . QuadraticExtension
F riAlpha field . QuadraticExtension
F riBetas [ ] field . QuadraticExtension
F riPOWResponse field . F
F riQueryIndices [ ] field . F
}
}
func ( circuit * TestFriCircuit ) Define ( api frontend . API ) error {
func ( circuit * TestFriCircuit ) Define ( api frontend . API ) error {
@ -30,16 +30,16 @@ func (circuit *TestFriCircuit) Define(api frontend.API) error {
verifierOnlyCircuitData := utils . DeserializeVerifierOnlyCircuitData ( circuit . verifierOnlyCircuitDataFilename )
verifierOnlyCircuitData := utils . DeserializeVerifierOnlyCircuitData ( circuit . verifierOnlyCircuitDataFilename )
fieldAPI := field . NewFieldAPI ( api )
fieldAPI := field . NewFieldAPI ( api )
qeAPI := field . NewQuadraticExtensionAPI ( fieldAPI , commonCircuitData . DegreeBits )
qeAPI := field . NewQuadraticExtensionAPI ( api , fieldAPI , commonCircuitData . DegreeBits )
hashAPI := poseidon . NewHashAPI ( fieldAPI )
hashAPI := poseidon . NewHashAPI ( fieldAPI )
poseidonChip := poseidon . NewPoseidonChip ( api , fieldAPI , qeAPI )
poseidonChip := poseidon . NewPoseidonChip ( api , fieldAPI , qeAPI )
friChip := fri . NewFriChip ( api , fieldAPI , qeAPI , hashAPI , poseidonChip , & commonCircuitData . FriParams )
friChip := fri . NewFriChip ( api , fieldAPI , qeAPI , hashAPI , poseidonChip , & commonCircuitData . FriParams )
friChallenges := common . FriChallenges {
friChallenges := common . FriChallenges {
FriAlpha : circuit . f riAlpha,
FriBetas : circuit . f riBetas,
FriPowResponse : circuit . f riPOWResponse,
FriQueryIndices : circuit . f riQueryIndices,
FriAlpha : circuit . F riAlpha,
FriBetas : circuit . F riBetas,
FriPowResponse : circuit . F riPOWResponse,
FriQueryIndices : circuit . F riQueryIndices,
}
}
initialMerkleCaps := [ ] common . MerkleCap {
initialMerkleCaps := [ ] common . MerkleCap {
@ -50,7 +50,7 @@ func (circuit *TestFriCircuit) Define(api frontend.API) error {
}
}
friChip . VerifyFriProof (
friChip . VerifyFriProof (
fri . GetFriInstance ( & commonCircuitData , qeAPI , circuit . p lonkZeta, commonCircuitData . DegreeBits ) ,
fri . GetFriInstance ( & commonCircuitData , qeAPI , circuit . P lonkZeta, commonCircuitData . DegreeBits ) ,
fri . ToFriOpenings ( proofWithPis . Proof . Openings ) ,
fri . ToFriOpenings ( proofWithPis . Proof . Openings ) ,
& friChallenges ,
& friChallenges ,
initialMerkleCaps ,
initialMerkleCaps ,
@ -68,45 +68,45 @@ func TestFibonacciFriProof(t *testing.T) {
proofWithPIsFilename : "./data/fibonacci/proof_with_public_inputs.json" ,
proofWithPIsFilename : "./data/fibonacci/proof_with_public_inputs.json" ,
commonCircuitDataFilename : "./data/fibonacci/common_circuit_data.json" ,
commonCircuitDataFilename : "./data/fibonacci/common_circuit_data.json" ,
verifierOnlyCircuitDataFilename : "./data/fibonacci/verifier_only_circuit_data.json" ,
verifierOnlyCircuitDataFilename : "./data/fibonacci/verifier_only_circuit_data.json" ,
p lonkZeta: field . QuadraticExtension {
field . NewFieldElemen tFromString ( "14887793628029982930" ) ,
field . NewFieldElemen tFromString ( "1136137158284059037" ) ,
P lonkZeta: field . QuadraticExtension {
field . NewFieldCons tFromString ( "14887793628029982930" ) ,
field . NewFieldCons tFromString ( "1136137158284059037" ) ,
} ,
} ,
f riAlpha: field . QuadraticExtension {
field . NewFieldElemen tFromString ( "14641715242626918707" ) ,
field . NewFieldElemen tFromString ( "10574243340537902930" ) ,
F riAlpha: field . QuadraticExtension {
field . NewFieldCons tFromString ( "14641715242626918707" ) ,
field . NewFieldCons tFromString ( "10574243340537902930" ) ,
} ,
} ,
f riBetas: [ ] field . QuadraticExtension { } ,
f riPOWResponse: field . NewFieldElemen t ( 82451580476419 ) ,
f riQueryIndices: [ ] field . F {
field . NewFieldElemen t ( 6790812084677375942 ) ,
field . NewFieldElemen t ( 12394212020331474798 ) ,
field . NewFieldElemen t ( 16457600747000998582 ) ,
field . NewFieldElemen t ( 1543271328932331916 ) ,
field . NewFieldElemen t ( 12115726870906958644 ) ,
field . NewFieldElemen t ( 6775897107605342797 ) ,
field . NewFieldElemen t ( 15989401564746021030 ) ,
field . NewFieldElemen t ( 10691676456016926845 ) ,
field . NewFieldElemen t ( 1632499470630032007 ) ,
field . NewFieldElemen t ( 1317292355445098328 ) ,
field . NewFieldElemen t ( 18391440812534384252 ) ,
field . NewFieldElemen t ( 17321705613231354333 ) ,
field . NewFieldElemen t ( 6176487551308859603 ) ,
field . NewFieldElemen t ( 7119835651572002873 ) ,
field . NewFieldElemen t ( 3903019169623116693 ) ,
field . NewFieldElemen t ( 4886491111111487546 ) ,
field . NewFieldElemen t ( 4087641893164620518 ) ,
field . NewFieldElemen t ( 13801643080324181364 ) ,
field . NewFieldElemen t ( 16993775312274189321 ) ,
field . NewFieldElemen t ( 9268202926222765679 ) ,
field . NewFieldElemen t ( 10683001302406181735 ) ,
field . NewFieldElemen t ( 13359465725531647963 ) ,
field . NewFieldElemen t ( 4523327590105620849 ) ,
field . NewFieldElemen t ( 4883588003760409588 ) ,
field . NewFieldElemen t ( 187699146998097671 ) ,
field . NewFieldElemen t ( 14489263557623716717 ) ,
field . NewFieldElemen t ( 11748359318238148146 ) ,
field . NewFieldElemen t ( 13636347200053048758 ) ,
F riBetas: [ ] field . QuadraticExtension { } ,
F riPOWResponse: field . NewFieldCons t ( 82451580476419 ) ,
F riQueryIndices: [ ] field . F {
field . NewFieldCons t ( 6790812084677375942 ) ,
field . NewFieldCons t ( 12394212020331474798 ) ,
field . NewFieldCons t ( 16457600747000998582 ) ,
field . NewFieldCons t ( 1543271328932331916 ) ,
field . NewFieldCons t ( 12115726870906958644 ) ,
field . NewFieldCons t ( 6775897107605342797 ) ,
field . NewFieldCons t ( 15989401564746021030 ) ,
field . NewFieldCons t ( 10691676456016926845 ) ,
field . NewFieldCons t ( 1632499470630032007 ) ,
field . NewFieldCons t ( 1317292355445098328 ) ,
field . NewFieldCons t ( 18391440812534384252 ) ,
field . NewFieldCons t ( 17321705613231354333 ) ,
field . NewFieldCons t ( 6176487551308859603 ) ,
field . NewFieldCons t ( 7119835651572002873 ) ,
field . NewFieldCons t ( 3903019169623116693 ) ,
field . NewFieldCons t ( 4886491111111487546 ) ,
field . NewFieldCons t ( 4087641893164620518 ) ,
field . NewFieldCons t ( 13801643080324181364 ) ,
field . NewFieldCons t ( 16993775312274189321 ) ,
field . NewFieldCons t ( 9268202926222765679 ) ,
field . NewFieldCons t ( 10683001302406181735 ) ,
field . NewFieldCons t ( 13359465725531647963 ) ,
field . NewFieldCons t ( 4523327590105620849 ) ,
field . NewFieldCons t ( 4883588003760409588 ) ,
field . NewFieldCons t ( 187699146998097671 ) ,
field . NewFieldCons t ( 14489263557623716717 ) ,
field . NewFieldCons t ( 11748359318238148146 ) ,
field . NewFieldCons t ( 13636347200053048758 ) ,
} ,
} ,
}
}
witness := TestFriCircuit { }
witness := TestFriCircuit { }
@ -122,64 +122,121 @@ func TestDummyFriProof(t *testing.T) {
testCase := func ( ) {
testCase := func ( ) {
circuit := TestFriCircuit {
circuit := TestFriCircuit {
proofWithPIsFilename : "./data/dummy_2^14_gates/proof_with_public_inputs.json" ,
commonCircuitDataFilename : "./data/dummy_2^14_gates/common_circuit_data.json" ,
verifierOnlyCircuitDataFilename : "./data/dummy_2^14_gates/verifier_only_circuit_data.json" ,
p lonkZeta: field . QuadraticExtension {
field . NewFieldElemen tFromString ( "17377750363769967882" ) ,
field . NewFieldElemen tFromString ( "11921191651424768462" ) ,
proofWithPIsFilename : "../.. /data/dummy_2^14_gates/proof_with_public_inputs.json" ,
commonCircuitDataFilename : "../.. /data/dummy_2^14_gates/common_circuit_data.json" ,
verifierOnlyCircuitDataFilename : "../.. /data/dummy_2^14_gates/verifier_only_circuit_data.json" ,
P lonkZeta: field . QuadraticExtension {
field . NewFieldCons tFromString ( "17377750363769967882" ) ,
field . NewFieldCons tFromString ( "11921191651424768462" ) ,
} ,
} ,
f riAlpha: field . QuadraticExtension {
field . NewFieldElemen tFromString ( "16721004555774385479" ) ,
field . NewFieldElemen tFromString ( "10688151135543754663" ) ,
F riAlpha: field . QuadraticExtension {
field . NewFieldCons tFromString ( "16721004555774385479" ) ,
field . NewFieldCons tFromString ( "10688151135543754663" ) ,
} ,
} ,
f riBetas: [ ] field . QuadraticExtension {
F riBetas: [ ] field . QuadraticExtension {
{
{
field . NewFieldElemen tFromString ( "3312441922957827805" ) ,
field . NewFieldElemen tFromString ( "15128092514958289671" ) ,
field . NewFieldCons tFromString ( "3312441922957827805" ) ,
field . NewFieldCons tFromString ( "15128092514958289671" ) ,
} ,
} ,
{
{
field . NewFieldElemen tFromString ( "13630530769060141802" ) ,
field . NewFieldElemen tFromString ( "14559883974933163008" ) ,
field . NewFieldCons tFromString ( "13630530769060141802" ) ,
field . NewFieldCons tFromString ( "14559883974933163008" ) ,
} ,
} ,
{
{
field . NewFieldElemen tFromString ( "16146508250083930687" ) ,
field . NewFieldElemen tFromString ( "5176346568444408396" ) ,
field . NewFieldCons tFromString ( "16146508250083930687" ) ,
field . NewFieldCons tFromString ( "5176346568444408396" ) ,
} ,
} ,
} ,
} ,
friPOWResponse : field . NewFieldElement ( 4389 ) ,
friQueryIndices : [ ] field . F {
field . NewFieldElementFromString ( "16334967868590615051" ) ,
field . NewFieldElementFromString ( "2911473540496037915" ) ,
field . NewFieldElementFromString ( "14887216056886344225" ) ,
field . NewFieldElementFromString ( "7808811227805914295" ) ,
field . NewFieldElementFromString ( "2018594961417375749" ) ,
field . NewFieldElementFromString ( "3733368398777208435" ) ,
field . NewFieldElementFromString ( "2623035669037055104" ) ,
field . NewFieldElementFromString ( "299243030573481514" ) ,
field . NewFieldElementFromString ( "7189789717962704433" ) ,
field . NewFieldElementFromString ( "14566344026886816268" ) ,
field . NewFieldElementFromString ( "12555390069003437453" ) ,
field . NewFieldElementFromString ( "17225508403199418233" ) ,
field . NewFieldElementFromString ( "5088797913879903292" ) ,
field . NewFieldElementFromString ( "9715691392773433023" ) ,
field . NewFieldElementFromString ( "7565836764713256165" ) ,
field . NewFieldElementFromString ( "1500143546029322929" ) ,
field . NewFieldElementFromString ( "1245802417104422080" ) ,
field . NewFieldElementFromString ( "6831959786661245110" ) ,
field . NewFieldElementFromString ( "17271054758535453780" ) ,
field . NewFieldElementFromString ( "6225460404576395409" ) ,
field . NewFieldElementFromString ( "15932661092896277351" ) ,
field . NewFieldElementFromString ( "12452534049198240575" ) ,
field . NewFieldElementFromString ( "4225199666055520177" ) ,
field . NewFieldElementFromString ( "13235091290587791090" ) ,
field . NewFieldElementFromString ( "2562357622728700774" ) ,
field . NewFieldElementFromString ( "17676678042980201498" ) ,
field . NewFieldElementFromString ( "5837067135702409874" ) ,
field . NewFieldElementFromString ( "11238419549114325157" ) ,
FriPOWResponse : field . NewFieldConst ( 4389 ) ,
FriQueryIndices : [ ] field . F {
field . NewFieldConstFromString ( "16334967868590615051" ) ,
field . NewFieldConstFromString ( "2911473540496037915" ) ,
field . NewFieldConstFromString ( "14887216056886344225" ) ,
field . NewFieldConstFromString ( "7808811227805914295" ) ,
field . NewFieldConstFromString ( "2018594961417375749" ) ,
field . NewFieldConstFromString ( "3733368398777208435" ) ,
field . NewFieldConstFromString ( "2623035669037055104" ) ,
field . NewFieldConstFromString ( "299243030573481514" ) ,
field . NewFieldConstFromString ( "7189789717962704433" ) ,
field . NewFieldConstFromString ( "14566344026886816268" ) ,
field . NewFieldConstFromString ( "12555390069003437453" ) ,
field . NewFieldConstFromString ( "17225508403199418233" ) ,
field . NewFieldConstFromString ( "5088797913879903292" ) ,
field . NewFieldConstFromString ( "9715691392773433023" ) ,
field . NewFieldConstFromString ( "7565836764713256165" ) ,
field . NewFieldConstFromString ( "1500143546029322929" ) ,
field . NewFieldConstFromString ( "1245802417104422080" ) ,
field . NewFieldConstFromString ( "6831959786661245110" ) ,
field . NewFieldConstFromString ( "17271054758535453780" ) ,
field . NewFieldConstFromString ( "6225460404576395409" ) ,
field . NewFieldConstFromString ( "15932661092896277351" ) ,
field . NewFieldConstFromString ( "12452534049198240575" ) ,
field . NewFieldConstFromString ( "4225199666055520177" ) ,
field . NewFieldConstFromString ( "13235091290587791090" ) ,
field . NewFieldConstFromString ( "2562357622728700774" ) ,
field . NewFieldConstFromString ( "17676678042980201498" ) ,
field . NewFieldConstFromString ( "5837067135702409874" ) ,
field . NewFieldConstFromString ( "11238419549114325157" ) ,
} ,
}
witness := TestFriCircuit {
proofWithPIsFilename : "../../data/dummy_2^14_gates/proof_with_public_inputs.json" ,
commonCircuitDataFilename : "../../data/dummy_2^14_gates/common_circuit_data.json" ,
verifierOnlyCircuitDataFilename : ".../../data/dummy_2^14_gates/verifier_only_circuit_data.json" ,
PlonkZeta : field . QuadraticExtension {
field . NewFieldConstFromString ( "17377750363769967882" ) ,
field . NewFieldConstFromString ( "11921191651424768462" ) ,
} ,
FriAlpha : field . QuadraticExtension {
field . NewFieldConstFromString ( "16721004555774385479" ) ,
field . NewFieldConstFromString ( "10688151135543754663" ) ,
} ,
FriBetas : [ ] field . QuadraticExtension {
{
field . NewFieldConstFromString ( "3312441922957827805" ) ,
field . NewFieldConstFromString ( "15128092514958289671" ) ,
} ,
{
field . NewFieldConstFromString ( "13630530769060141802" ) ,
field . NewFieldConstFromString ( "14559883974933163008" ) ,
} ,
{
field . NewFieldConstFromString ( "16146508250083930687" ) ,
field . NewFieldConstFromString ( "5176346568444408396" ) ,
} ,
} ,
FriPOWResponse : field . NewFieldConst ( 4389 ) ,
FriQueryIndices : [ ] field . F {
field . NewFieldConstFromString ( "16334967868590615051" ) ,
field . NewFieldConstFromString ( "2911473540496037915" ) ,
field . NewFieldConstFromString ( "14887216056886344225" ) ,
field . NewFieldConstFromString ( "7808811227805914295" ) ,
field . NewFieldConstFromString ( "2018594961417375749" ) ,
field . NewFieldConstFromString ( "3733368398777208435" ) ,
field . NewFieldConstFromString ( "2623035669037055104" ) ,
field . NewFieldConstFromString ( "299243030573481514" ) ,
field . NewFieldConstFromString ( "7189789717962704433" ) ,
field . NewFieldConstFromString ( "14566344026886816268" ) ,
field . NewFieldConstFromString ( "12555390069003437453" ) ,
field . NewFieldConstFromString ( "17225508403199418233" ) ,
field . NewFieldConstFromString ( "5088797913879903292" ) ,
field . NewFieldConstFromString ( "9715691392773433023" ) ,
field . NewFieldConstFromString ( "7565836764713256165" ) ,
field . NewFieldConstFromString ( "1500143546029322929" ) ,
field . NewFieldConstFromString ( "1245802417104422080" ) ,
field . NewFieldConstFromString ( "6831959786661245110" ) ,
field . NewFieldConstFromString ( "17271054758535453780" ) ,
field . NewFieldConstFromString ( "6225460404576395409" ) ,
field . NewFieldConstFromString ( "15932661092896277351" ) ,
field . NewFieldConstFromString ( "12452534049198240575" ) ,
field . NewFieldConstFromString ( "4225199666055520177" ) ,
field . NewFieldConstFromString ( "13235091290587791090" ) ,
field . NewFieldConstFromString ( "2562357622728700774" ) ,
field . NewFieldConstFromString ( "17676678042980201498" ) ,
field . NewFieldConstFromString ( "5837067135702409874" ) ,
field . NewFieldConstFromString ( "11238419549114325157" ) ,
} ,
} ,
}
}
witness := TestFriCircuit { }
err := test . IsSolved ( & circuit , & witness , field . TEST_CURVE . ScalarField ( ) )
err := test . IsSolved ( & circuit , & witness , field . TEST_CURVE . ScalarField ( ) )
assert . NoError ( err )
assert . NoError ( err )
}
}