diff --git a/wasm/.gitignore b/wasm/.gitignore new file mode 100644 index 0000000..d5f19d8 --- /dev/null +++ b/wasm/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json diff --git a/wasm/index.html b/wasm/index.html new file mode 100644 index 0000000..9d30fa9 --- /dev/null +++ b/wasm/index.html @@ -0,0 +1,23 @@ + + + + shamirsecretsharing wasm + + + + + + + + + + + + + diff --git a/wasm/index.js b/wasm/index.js new file mode 100644 index 0000000..823e303 --- /dev/null +++ b/wasm/index.js @@ -0,0 +1,8 @@ +function callCreateShares() { + let secret = Number(document.getElementById("secret").value); + let nShares = Number(document.getElementById("nShares").value); + let nNeededShares = Number(document.getElementById("nNeededShares").value); + let p = Number(document.getElementById("p").value); + + createShares(nNeededShares, nShares, p, secret); +} diff --git a/wasm/package.json b/wasm/package.json new file mode 100644 index 0000000..4b52fda --- /dev/null +++ b/wasm/package.json @@ -0,0 +1,15 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.16.4" + } +} diff --git a/wasm/server.js b/wasm/server.js new file mode 100644 index 0000000..96cc641 --- /dev/null +++ b/wasm/server.js @@ -0,0 +1,7 @@ +var express = require('express'); +var app = express(); +express.static.mime.types['wasm'] = 'application/wasm'; +app.use(express.static(__dirname + '/')); +port=8080 +app.listen(8080); +console.log("server running at :8080") diff --git a/wasm/shamirsecretsharing-wasm-wrapper.go b/wasm/shamirsecretsharing-wasm-wrapper.go index 701ea3f..90ce0d5 100644 --- a/wasm/shamirsecretsharing-wasm-wrapper.go +++ b/wasm/shamirsecretsharing-wasm-wrapper.go @@ -1,6 +1,7 @@ package main import ( + "crypto/rand" "math/big" "syscall/js" @@ -17,11 +18,11 @@ func main() { } func registerCallbacks() { - js.Global().Set("createShares", js.ValueOf(createShares)) - js.Global().Set("lagrangeInterpolation", js.ValueOf(lagrangeInterpolation)) + js.Global().Set("createShares", js.FuncOf(createShares)) + js.Global().Set("lagrangeInterpolation", js.FuncOf(lagrangeInterpolation)) } -func createShares(i []js.Value) { +func createShares(this js.Value, i []js.Value) interface{} { nNeededShares, ok := new(big.Int).SetString(i[0].String(), 10) if !ok { println("error parsing parameter in position 0") @@ -34,29 +35,45 @@ func createShares(i []js.Value) { if !ok { println("error parsing parameter in position 2") } + bits := 2048 + p, err := rand.Prime(rand.Reader, bits/2) // move this out from wasm, it tooks too much time + if err != nil { + println(err.Error()) + } k, ok := new(big.Int).SetString(i[3].String(), 10) if !ok { println("error parsing parameter in position 3") } + println("nNeededShares", nNeededShares.String()) + println("nShares", nShares.String()) + println("p", p.String()) + println("k (secret)", k.String()) shares, err := shamirsecretsharing.Create(nNeededShares, nShares, p, k) if err != nil { println("error generating the shares") + println(err.Error()) } - println(shares) + println("shares", shares) sharesStr := sharesToString(shares) - println(sharesStr) + println("sharesStr", sharesStr) + return nil } func sharesToString(shares [][]*big.Int) []string { + var printString string var s []string for i := 0; i < len(shares); i++ { s = append(s, shares[i][0].String()) s = append(s, shares[i][1].String()) + printString = printString + "[" + shares[i][0].String() + ", " + shares[i][1].String() + "]\n" + println(shares[i][0].String()) + println(shares[i][1].String()) } + js.Global().Get("document").Call("getElementById", "sharesResult").Set("innerHTML", printString) return s } -func lagrangeInterpolation(i []js.Value) { +func lagrangeInterpolation(this js.Value, i []js.Value) interface{} { p, ok := new(big.Int).SetString(i[0].String(), 10) if !ok { println("error parsing parameter in position 0 (p)") @@ -81,4 +98,5 @@ func lagrangeInterpolation(i []js.Value) { secr := shamirsecretsharing.LagrangeInterpolation(p, shares) println(secr.String()) + return nil } diff --git a/wasm/shamirsecretsharing.wasm b/wasm/shamirsecretsharing.wasm index 76e9155..dd1a3c2 100755 Binary files a/wasm/shamirsecretsharing.wasm and b/wasm/shamirsecretsharing.wasm differ