doing trusted setup

This commit is contained in:
arnaucube
2018-12-04 23:50:43 +01:00
parent 88c3e98cae
commit 6cd494f36f
7 changed files with 269 additions and 76 deletions

View File

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

View File

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