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