You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.2 KiB

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