go-snark/wasm/go-snark-wasm-wrapper.go
wasm/go-snark-wasm-wrapper.goRaw
1package main
2
3import (
4 "encoding/json"
5 "syscall/js"
6
7 "github.com/arnaucube/go-snark"
8 "github.com/arnaucube/go-snark/circuitcompiler"
9 "github.com/arnaucube/go-snark/wasm/utils"
10)
11
12func main() {
13 c := make(chan struct{}, 0)
14
15 println("WASM Go Initialized")
16 // register functions
17 registerCallbacks()
18 <-c
19}
20
21func registerCallbacks() {
22 js.Global().Set("generateProofs", js.FuncOf(generateProofs))
23}
24
25func generateProofs(this js.Value, i []js.Value) interface{} {
26 var circuitStr utils.CircuitString
27 err := json.Unmarshal([]byte(i[0].String()), &circuitStr)
28 if err != nil {
29 println(i[0].String())
30 println("error parsing circuit from stringified json")
31 }
32 circuit, err := utils.CircuitFromString(circuitStr)
33 if err != nil {
34 println("error " + err.Error())
35 }
36 sj, err := json.Marshal(circuit)
37 if err != nil {
38 println("error " + err.Error())
39 }
40 println("circuit", string(sj))
41
42 var setupStr utils.SetupString
43 println(i[1].String())
44 err = json.Unmarshal([]byte(i[1].String()), &setupStr)
45 if err != nil {
46 println("error parsing setup from stringified json")
47 }
48 setup, err := utils.SetupFromString(setupStr)
49 if err != nil {
50 println("error " + err.Error())
51 }
52 sj, err = json.Marshal(setup)
53 if err != nil {
54 println("error " + err.Error())
55 }
56 println("set", string(sj))
57
58 var pxStr []string
59 err = json.Unmarshal([]byte(i[2].String()), &pxStr)
60 if err != nil {
61 println("error parsing pxStr from stringified json")
62 }
63 px, err := utils.ArrayStringToBigInt(pxStr)
64 if err != nil {
65 println(err.Error())
66 }
67 sj, err = json.Marshal(px)
68 if err != nil {
69 println("error " + err.Error())
70 }
71 println("px", string(sj))
72
73 var inputs circuitcompiler.Inputs
74 err = json.Unmarshal([]byte(i[3].String()), &inputs)
75 if err != nil {
76 println("error parsing inputs from stringified json")
77 }
78 w, err := circuit.CalculateWitness(inputs.Private, inputs.Public)
79
80 proof, err := snark.GenerateProofs(circuit, setup, w, px)
81 if err != nil {
82 println("error generating proof", err)
83 }
84 proofString := utils.ProofToString(proof)
85 proofJson, err := json.Marshal(proofString)
86 if err != nil {
87 println("error marshal proof to json", err)
88 }
89 println("proofJson", string(proofJson))
90 return js.ValueOf(string(proofJson))
91}