package proof import ( "math/big" "github.com/arnaucube/go-snark/fields" ) // R1CSToQAP converts the R1CS values to the QAP values func R1CSToQAP(a, b, c [][]*big.Int) ([][]*big.Int, [][]*big.Int, [][]*big.Int, []*big.Int) { aT := fields.Transpose(a) bT := fields.Transpose(b) cT := fields.Transpose(c) var alphas [][]*big.Int for i := 0; i < len(aT); i++ { alphas = append(alphas, Utils.PF.LagrangeInterpolation(aT[i])) } var betas [][]*big.Int for i := 0; i < len(bT); i++ { betas = append(betas, Utils.PF.LagrangeInterpolation(bT[i])) } var gammas [][]*big.Int for i := 0; i < len(cT); i++ { gammas = append(gammas, Utils.PF.LagrangeInterpolation(cT[i])) } z := []*big.Int{big.NewInt(int64(1))} for i := 1; i < len(alphas)-1; i++ { z = Utils.PF.Mul( z, []*big.Int{ Utils.PF.F.Neg( big.NewInt(int64(i))), big.NewInt(int64(1)), }) } return alphas, betas, gammas, z }