Browse Source

Add Proof to string in circom/snarkjs format

ed255-patch-1
arnaucube 4 years ago
parent
commit
c03cb1af00
2 changed files with 35 additions and 4 deletions
  1. +1
    -2
      ifft.go
  2. +34
    -2
      parsers.go

+ 1
- 2
ifft.go

@ -1,7 +1,6 @@
package gocircomprover
import (
"fmt"
"math"
"math/big"
)
@ -65,7 +64,7 @@ func fft(roots rootsT, pall []*big.Int, bits, offset, step int) []*big.Int {
// var out []*big.Int
out := make([]*big.Int, n)
for i := 0; i < ndiv2; i++ {
fmt.Println(i, len(roots.roots))
// fmt.Println(i, len(roots.roots))
out[i] = fAdd(p1[i], fMul(roots.roots[bits][i], p2[i]))
out[i+ndiv2] = fSub(p1[i], fMul(roots.roots[bits][i], p2[i]))
}

+ 34
- 2
parsers.go

@ -35,6 +35,14 @@ type ProvingKeyString struct {
// WitnessString contains the Witness in string representation
type WitnessString []string
// ProofString is the equivalent to the Proof struct in string representation
type ProofString struct {
A [3]string `json:"pi_a"`
B [3][2]string `json:"pi_b"`
C [3]string `json:"pi_c"`
Protocol string `json:"protocol"`
}
// ParseWitness parses the json []byte data into the Witness struct
func ParseWitness(wJson []byte) (Witness, error) {
var ws WitnessString
@ -149,10 +157,8 @@ func polsStringToBigInt(s []map[string]string) ([]map[int]*big.Int, error) {
// oi = append(oi, si)
jInt, err := strconv.Atoi(j)
if err != nil {
fmt.Println(j)
return o, err
}
fmt.Println(jInt, si)
oi[jInt] = si
}
o = append(o, oi)
@ -343,3 +349,29 @@ func stringToG2(h [][]string) (*bn256.G2, error) {
_, err = p.Unmarshal(b)
return p, err
}
func proofToString(p *Proof) ([]byte, error) {
var ps ProofString
a := p.A.Marshal()
ps.A[0] = new(big.Int).SetBytes(a[:32]).String()
ps.A[1] = new(big.Int).SetBytes(a[32:64]).String()
ps.A[2] = "1"
b := p.B.Marshal()
ps.B[0][1] = new(big.Int).SetBytes(b[:32]).String()
ps.B[0][0] = new(big.Int).SetBytes(b[32:64]).String()
ps.B[1][1] = new(big.Int).SetBytes(b[64:96]).String()
ps.B[1][0] = new(big.Int).SetBytes(b[96:128]).String()
ps.B[2][0] = "1"
ps.B[2][1] = "0"
c := p.C.Marshal()
ps.C[0] = new(big.Int).SetBytes(c[:32]).String()
ps.C[1] = new(big.Int).SetBytes(c[32:64]).String()
ps.C[2] = "1"
ps.Protocol = "groth"
return json.Marshal(ps)
}

Loading…
Cancel
Save