Browse Source

some rearranging of the functions

main
Kevin Jue 2 years ago
parent
commit
317f4baf0a
3 changed files with 60 additions and 54 deletions
  1. +42
    -0
      plonky2_verifier/hash.go
  2. +18
    -3
      plonky2_verifier/quadratic_extension.go
  3. +0
    -51
      plonky2_verifier/utils.go

+ 42
- 0
plonky2_verifier/hash.go

@ -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])
}
}

+ 18
- 3
plonky2_verifier/quadratic_extension.go

@ -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])

+ 0
- 51
plonky2_verifier/utils.go

@ -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])
}
}

Loading…
Cancel
Save