mirror of
https://github.com/arnaucube/go-snark-study.git
synced 2026-02-02 17:26:41 +01:00
doing trusted setup
This commit is contained in:
@@ -137,17 +137,17 @@ func (pf PolynomialField) R1CSToQAP(a, b, c [][]*big.Int) ([][]*big.Int, [][]*bi
|
||||
aT := Transpose(a)
|
||||
bT := Transpose(b)
|
||||
cT := Transpose(c)
|
||||
var alpha [][]*big.Int
|
||||
var alphas [][]*big.Int
|
||||
for i := 0; i < len(aT); i++ {
|
||||
alpha = append(alpha, pf.LagrangeInterpolation(aT[i]))
|
||||
alphas = append(alphas, pf.LagrangeInterpolation(aT[i]))
|
||||
}
|
||||
var beta [][]*big.Int
|
||||
var betas [][]*big.Int
|
||||
for i := 0; i < len(bT); i++ {
|
||||
beta = append(beta, pf.LagrangeInterpolation(bT[i]))
|
||||
betas = append(betas, pf.LagrangeInterpolation(bT[i]))
|
||||
}
|
||||
var gamma [][]*big.Int
|
||||
var gammas [][]*big.Int
|
||||
for i := 0; i < len(cT); i++ {
|
||||
gamma = append(gamma, pf.LagrangeInterpolation(cT[i]))
|
||||
gammas = append(gammas, pf.LagrangeInterpolation(cT[i]))
|
||||
}
|
||||
z := []*big.Int{big.NewInt(int64(1))}
|
||||
for i := 1; i < len(aT[0])+1; i++ {
|
||||
@@ -155,10 +155,10 @@ func (pf PolynomialField) R1CSToQAP(a, b, c [][]*big.Int) ([][]*big.Int, [][]*bi
|
||||
b1 := big.NewInt(int64(1))
|
||||
z = pf.Mul(z, []*big.Int{ineg, b1})
|
||||
}
|
||||
return alpha, beta, gamma, z
|
||||
return alphas, betas, gammas, z
|
||||
}
|
||||
|
||||
func (pf PolynomialField) SolPolynomials(r []*big.Int, ap, bp, cp [][]*big.Int) ([]*big.Int, []*big.Int, []*big.Int, []*big.Int) {
|
||||
func (pf PolynomialField) CombinePolynomials(r []*big.Int, ap, bp, cp [][]*big.Int) ([]*big.Int, []*big.Int, []*big.Int, []*big.Int) {
|
||||
var alpha []*big.Int
|
||||
for i := 0; i < len(r); i++ {
|
||||
m := pf.Mul([]*big.Int{r[i]}, ap[i])
|
||||
|
||||
@@ -132,27 +132,30 @@ func TestR1CSToQAP(t *testing.T) {
|
||||
[]*big.Int{b0, b0, b0, b0, b0, b1},
|
||||
[]*big.Int{b0, b0, b1, b0, b0, b0},
|
||||
}
|
||||
ap, bp, cp, z := pf.R1CSToQAP(a, b, c)
|
||||
fmt.Println(ap)
|
||||
fmt.Println(bp)
|
||||
fmt.Println(cp)
|
||||
fmt.Println(z)
|
||||
alphas, betas, gammas, zx := pf.R1CSToQAP(a, b, c)
|
||||
fmt.Println(alphas)
|
||||
fmt.Println(betas)
|
||||
fmt.Println(gammas)
|
||||
fmt.Print("Z(x): ")
|
||||
fmt.Println(zx)
|
||||
|
||||
w := []*big.Int{b1, b3, b35, b9, b27, b30}
|
||||
alpha, beta, gamma, px := pf.SolPolynomials(w, ap, bp, cp)
|
||||
fmt.Println(alpha)
|
||||
fmt.Println(beta)
|
||||
fmt.Println(gamma)
|
||||
ax, bx, cx, px := pf.CombinePolynomials(w, alphas, betas, gammas)
|
||||
fmt.Println(ax)
|
||||
fmt.Println(bx)
|
||||
fmt.Println(cx)
|
||||
fmt.Println(px)
|
||||
|
||||
h := pf.DivisorPolinomial(px, z)
|
||||
fmt.Println(h)
|
||||
hx := pf.DivisorPolinomial(px, zx)
|
||||
fmt.Println(hx)
|
||||
|
||||
// h==px/z so px==h*z
|
||||
assert.Equal(t, px, pf.Mul(h, z))
|
||||
// hx==px/zx so px==hx*zx
|
||||
assert.Equal(t, px, pf.Mul(hx, zx))
|
||||
|
||||
// a(x) * b(x) - c(x) == h * z(x)
|
||||
abc := pf.Sub(pf.Mul(alpha, beta), gamma)
|
||||
hz := pf.Mul(h, z)
|
||||
// p(x) = a(x) * b(x) - c(x) == h(x) * z(x)
|
||||
abc := pf.Sub(pf.Mul(ax, bx), cx)
|
||||
assert.Equal(t, abc, px)
|
||||
hz := pf.Mul(hx, zx)
|
||||
assert.Equal(t, abc, hz)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user