mirror of
https://github.com/arnaucube/gnark-plonky2-verifier.git
synced 2026-01-12 09:01:32 +01:00
some rearranging of the functions
This commit is contained in:
42
plonky2_verifier/hash.go
Normal file
42
plonky2_verifier/hash.go
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package plonky2_verifier
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
. "gnark-ed25519/field"
|
||||||
|
|
||||||
|
"github.com/consensys/gnark/frontend"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Hash = [4]F
|
||||||
|
|
||||||
|
func SelectHash(fieldAPI frontend.API, bit frontend.Variable, leftHash, rightHash Hash) Hash {
|
||||||
|
var returnHash Hash
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
returnHash[i] = fieldAPI.Select(bit, leftHash[i], rightHash[i]).(F)
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnHash
|
||||||
|
}
|
||||||
|
|
||||||
|
func Lookup2Hash(fieldAPI frontend.API, b0 frontend.Variable, b1 frontend.Variable, h0, h1, h2, h3 Hash) Hash {
|
||||||
|
var returnHash Hash
|
||||||
|
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
returnHash[i] = fieldAPI.Lookup2(b0, b1, h0[i], h1[i], h2[i], h3[i]).(F)
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnHash
|
||||||
|
}
|
||||||
|
|
||||||
|
func AssertIsEqualHash(fieldAPI frontend.API, h1, h2 Hash) {
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
fieldAPI.AssertIsEqual(h1[0], h2[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func PrintHash(f frontend.API, h Hash) {
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
fmt.Println("Hash Limb", i)
|
||||||
|
f.Println(h[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@ package plonky2_verifier
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"gnark-ed25519/field"
|
|
||||||
. "gnark-ed25519/field"
|
. "gnark-ed25519/field"
|
||||||
"math/bits"
|
"math/bits"
|
||||||
|
|
||||||
@@ -67,7 +66,7 @@ func (c *QuadraticExtensionAPI) InverseExtension(a QuadraticExtension) Quadratic
|
|||||||
a1_is_zero := c.fieldAPI.IsZero(a[1])
|
a1_is_zero := c.fieldAPI.IsZero(a[1])
|
||||||
|
|
||||||
// assert that a0_is_zero OR a1_is_zero == false
|
// assert that a0_is_zero OR a1_is_zero == false
|
||||||
c.fieldAPI.AssertIsEqual(c.fieldAPI.Mul(a0_is_zero, a1_is_zero).(F), field.ZERO_F)
|
c.fieldAPI.AssertIsEqual(c.fieldAPI.Mul(a0_is_zero, a1_is_zero).(F), ZERO_F)
|
||||||
|
|
||||||
a_pow_r_minus_1 := QuadraticExtension{a[0], c.fieldAPI.Mul(a[1], c.DTH_ROOT).(F)}
|
a_pow_r_minus_1 := QuadraticExtension{a[0], c.fieldAPI.Mul(a[1], c.DTH_ROOT).(F)}
|
||||||
a_pow_r := c.MulExtension(a_pow_r_minus_1, a)
|
a_pow_r := c.MulExtension(a_pow_r_minus_1, a)
|
||||||
@@ -79,7 +78,7 @@ func (c *QuadraticExtensionAPI) ScalarMulExtension(a QuadraticExtension, scalar
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *QuadraticExtensionAPI) FieldToQE(a F) QuadraticExtension {
|
func (c *QuadraticExtensionAPI) FieldToQE(a F) QuadraticExtension {
|
||||||
return QuadraticExtension{a, field.ZERO_F}
|
return QuadraticExtension{a, ZERO_F}
|
||||||
}
|
}
|
||||||
|
|
||||||
// / Exponentiate `base` to the power of a known `exponent`.
|
// / Exponentiate `base` to the power of a known `exponent`.
|
||||||
@@ -110,6 +109,22 @@ func (c *QuadraticExtensionAPI) ExpU64Extension(a QuadraticExtension, exponent u
|
|||||||
return product
|
return product
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *QuadraticExtensionAPI) reduceWithPowers(terms []QuadraticExtension, scalar QuadraticExtension) QuadraticExtension {
|
||||||
|
sum := c.ZERO_QE
|
||||||
|
|
||||||
|
for i := len(terms) - 1; i >= 0; i-- {
|
||||||
|
sum = c.AddExtension(
|
||||||
|
c.MulExtension(
|
||||||
|
sum,
|
||||||
|
scalar,
|
||||||
|
),
|
||||||
|
terms[i],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum
|
||||||
|
}
|
||||||
|
|
||||||
func (c *QuadraticExtensionAPI) Println(a QuadraticExtension) {
|
func (c *QuadraticExtensionAPI) Println(a QuadraticExtension) {
|
||||||
fmt.Print("Degree 0 coefficient")
|
fmt.Print("Degree 0 coefficient")
|
||||||
c.fieldAPI.Println(a[0])
|
c.fieldAPI.Println(a[0])
|
||||||
|
|||||||
@@ -2,28 +2,9 @@ package plonky2_verifier
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
. "gnark-ed25519/field"
|
|
||||||
"math/bits"
|
"math/bits"
|
||||||
|
|
||||||
"github.com/consensys/gnark/frontend"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func reduceWithPowers(qe *QuadraticExtensionAPI, terms []QuadraticExtension, scalar QuadraticExtension) QuadraticExtension {
|
|
||||||
sum := qe.ZERO_QE
|
|
||||||
|
|
||||||
for i := len(terms) - 1; i >= 0; i-- {
|
|
||||||
sum = qe.AddExtension(
|
|
||||||
qe.MulExtension(
|
|
||||||
sum,
|
|
||||||
scalar,
|
|
||||||
),
|
|
||||||
terms[i],
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return sum
|
|
||||||
}
|
|
||||||
|
|
||||||
// Computes `log_2(n)`, panicking if `n` is not a power of two.
|
// Computes `log_2(n)`, panicking if `n` is not a power of two.
|
||||||
func log2Strict(n uint) int {
|
func log2Strict(n uint) int {
|
||||||
res := bits.TrailingZeros(n)
|
res := bits.TrailingZeros(n)
|
||||||
@@ -32,35 +13,3 @@ func log2Strict(n uint) int {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func SelectHash(fieldAPI frontend.API, bit frontend.Variable, leftHash, rightHash Hash) Hash {
|
|
||||||
var returnHash Hash
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
returnHash[i] = fieldAPI.Select(bit, leftHash[i], rightHash[i]).(F)
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnHash
|
|
||||||
}
|
|
||||||
|
|
||||||
func Lookup2Hash(fieldAPI frontend.API, b0 frontend.Variable, b1 frontend.Variable, h0, h1, h2, h3 Hash) Hash {
|
|
||||||
var returnHash Hash
|
|
||||||
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
returnHash[i] = fieldAPI.Lookup2(b0, b1, h0[i], h1[i], h2[i], h3[i]).(F)
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnHash
|
|
||||||
}
|
|
||||||
|
|
||||||
func AssertIsEqualHash(fieldAPI frontend.API, h1, h2 Hash) {
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
fieldAPI.AssertIsEqual(h1[0], h2[0])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func PrintHash(f frontend.API, h Hash) {
|
|
||||||
for i := 0; i < 4; i++ {
|
|
||||||
fmt.Println("Hash Limb", i)
|
|
||||||
f.Println(h[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user