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 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])
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user