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