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 R1CSToQAP(a, b, c [][]*big.Float) ([][]*big.Float, [][]*big.Float, [][]*big
aT := Transpose(a)
bT := Transpose(b)
cT := Transpose(c)
var alpha [][]*big.Float
var alphas [][]*big.Float
for i := 0; i < len(aT); i++ {
alpha = append(alpha, LagrangeInterpolation(aT[i]))
alphas = append(alphas, LagrangeInterpolation(aT[i]))
}
var beta [][]*big.Float
var betas [][]*big.Float
for i := 0; i < len(bT); i++ {
beta = append(beta, LagrangeInterpolation(bT[i]))
betas = append(betas, LagrangeInterpolation(bT[i]))
}
var gamma [][]*big.Float
var gammas [][]*big.Float
for i := 0; i < len(cT); i++ {
gamma = append(gamma, LagrangeInterpolation(cT[i]))
gammas = append(gammas, LagrangeInterpolation(cT[i]))
}
z := []*big.Float{big.NewFloat(float64(1))}
for i := 1; i < len(aT[0])+1; i++ {
@@ -155,10 +155,10 @@ func R1CSToQAP(a, b, c [][]*big.Float) ([][]*big.Float, [][]*big.Float, [][]*big
b1 := big.NewFloat(float64(1))
z = PolMul(z, []*big.Float{ineg, b1})
}
return alpha, beta, gamma, z
return alphas, betas, gammas, z
}
func SolPolynomials(r []*big.Float, ap, bp, cp [][]*big.Float) ([]*big.Float, []*big.Float, []*big.Float, []*big.Float) {
func CombinePolynomials(r []*big.Float, ap, bp, cp [][]*big.Float) ([]*big.Float, []*big.Float, []*big.Float, []*big.Float) {
var alpha []*big.Float
for i := 0; i < len(r); i++ {
m := PolMul([]*big.Float{r[i]}, ap[i])

View File

@@ -108,21 +108,30 @@ func TestR1CSToQAP(t *testing.T) {
[]*big.Float{b0, b0, b0, b0, b0, b1},
[]*big.Float{b0, b0, b1, b0, b0, b0},
}
ap, bp, cp, z := R1CSToQAP(a, b, c)
fmt.Println(ap)
fmt.Println(bp)
fmt.Println(cp)
fmt.Println(z)
// alphas, betas, gammas
alphas, betas, gammas, zx := R1CSToQAP(a, b, c)
fmt.Println(alphas)
fmt.Println(betas)
fmt.Println(gammas)
fmt.Print("Z(x): ")
fmt.Println(zx)
zexpected := []*big.Float{big.NewFloat(float64(24)), big.NewFloat(float64(-50)), big.NewFloat(float64(35)), big.NewFloat(float64(-10)), big.NewFloat(float64(1))}
assert.Equal(t, z, zexpected)
assert.Equal(t, zx, zexpected)
// witness
w := []*big.Float{b1, b3, b35, b9, b27, b30}
alpha, beta, gamma, px := SolPolynomials(w, ap, bp, cp)
fmt.Println(alpha)
fmt.Println(beta)
fmt.Println(gamma)
fmt.Print("w: ")
fmt.Println(w)
// QAP A(x), B(x), C(x)
ax, bx, cx, px := CombinePolynomials(w, alphas, betas, gammas)
fmt.Print("A(x), B(x), C(x), P(x): ")
fmt.Println(ax)
fmt.Println(bx)
fmt.Println(cx)
fmt.Println(px)
h := DivisorPolinomial(px, z)
fmt.Println(h)
hx := DivisorPolinomial(px, zx)
fmt.Print("H(x): ")
fmt.Println(hx)
}