arnaucube
arnaucube/go-snarkPublic Self-hosted repository
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}