shamirsecretsharing/wasm/shamirsecretsharing-wasm-wrapper.go
wasm/shamirsecretsharing-wasm-wrapper.goRaw
1package main
2
3import (
4 "math/big"
5 "syscall/js"
6
7 "github.com/arnaucube/shamirsecretsharing"
8)
9
10func main() {
11 c := make(chan struct{}, 0)
12
13 println("WASM Go Initialized")
14 // register functions
15 registerCallbacks()
16 <-c
17}
18
19func registerCallbacks() {
20 js.Global().Set("createShares", js.ValueOf(createShares))
21 js.Global().Set("lagrangeInterpolation", js.ValueOf(lagrangeInterpolation))
22}
23
24func createShares(i []js.Value) {
25 nNeededShares, ok := new(big.Int).SetString(i[0].String(), 10)
26 if !ok {
27 println("error parsing parameter in position 0")
28 }
29 nShares, ok := new(big.Int).SetString(i[1].String(), 10)
30 if !ok {
31 println("error parsing parameter in position 1")
32 }
33 p, ok := new(big.Int).SetString(i[2].String(), 10)
34 if !ok {
35 println("error parsing parameter in position 2")
36 }
37 k, ok := new(big.Int).SetString(i[3].String(), 10)
38 if !ok {
39 println("error parsing parameter in position 3")
40 }
41 shares, err := shamirsecretsharing.Create(nNeededShares, nShares, p, k)
42 if err != nil {
43 println("error generating the shares")
44 }
45 println(shares)
46 sharesStr := sharesToString(shares)
47 println(sharesStr)
48}
49
50func sharesToString(shares [][]*big.Int) []string {
51 var s []string
52 for i := 0; i < len(shares); i++ {
53 s = append(s, shares[i][0].String())
54 s = append(s, shares[i][1].String())
55 }
56 return s
57}
58
59func lagrangeInterpolation(i []js.Value) {
60 p, ok := new(big.Int).SetString(i[0].String(), 10)
61 if !ok {
62 println("error parsing parameter in position 0 (p)")
63 }
64
65 // parse the shares array
66 var shares [][]*big.Int
67 for n := 1; n < len(i); n = n + 2 {
68 a, ok := new(big.Int).SetString(i[n].String(), 10)
69 if !ok {
70 println("error parsing parameter in position ", n)
71 }
72 b, ok := new(big.Int).SetString(i[n+1].String(), 10)
73 if !ok {
74 println("error parsing parameter in position ", n+1)
75 }
76 var share []*big.Int
77 share = append(share, a)
78 share = append(share, b)
79 shares = append(shares, share)
80 }
81
82 secr := shamirsecretsharing.LagrangeInterpolation(p, shares)
83 println(secr.String())
84}