mirror of
https://github.com/Luzifer/wasm-openssl.git
synced 2024-11-09 15:20:06 +00:00
Initial test
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
commit
d469b667c7
8 changed files with 120 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
main.wasm*
|
||||
wasm_exec.js
|
8
Makefile
Normal file
8
Makefile
Normal file
|
@ -0,0 +1,8 @@
|
|||
default: build wasm_exec.js
|
||||
|
||||
build:
|
||||
GOOS=js GOARCH=wasm go build -o main.wasm main.go
|
||||
gzip -c main.wasm > main.wasm.gz
|
||||
|
||||
wasm_exec.js:
|
||||
curl -sSfLo wasm_exec.js "https://raw.githubusercontent.com/golang/go/go1.11/misc/wasm/wasm_exec.js"
|
19
README.md
Normal file
19
README.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
# go-openssl Wrapper for WASM support
|
||||
|
||||
```console
|
||||
$ make
|
||||
GOOS=js GOARCH=wasm go build -o main.wasm main.go
|
||||
gzip -c main.wasm > main.wasm.gz
|
||||
curl -sSfLo wasm_exec.js "https://raw.githubusercontent.com/golang/go/go1.11/misc/wasm/wasm_exec.js"
|
||||
|
||||
$ ls -lh main.wasm*
|
||||
-rwxr-xr-x 1 luzifer luzifer 2.8M Sep 17 16:43 main.wasm
|
||||
-rw-r--r-- 1 luzifer luzifer 611K Sep 17 16:43 main.wasm.gz
|
||||
```
|
||||
|
||||
Chrome dev console output:
|
||||
|
||||
```
|
||||
(index):14 (2) ["encryptResponse", "U2FsdGVkX1/baq9kUCX1EmUY/XZfnz7CwqGr70vqo6g="]
|
||||
(index):10 (2) ["decryptResponse", "Knut"]
|
||||
```
|
3
go.mod
Normal file
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
|||
module test
|
||||
|
||||
require github.com/Luzifer/go-openssl v2.0.0+incompatible
|
2
go.sum
Normal file
2
go.sum
Normal file
|
@ -0,0 +1,2 @@
|
|||
github.com/Luzifer/go-openssl v2.0.0+incompatible h1:EpNNxrPDji4rRzE0KeOeIeV7pHyKe8zF9oNnAXy4mBY=
|
||||
github.com/Luzifer/go-openssl v2.0.0+incompatible/go.mod h1:t2qnLjT8WQ3usGU1R8uAqjY4T7CK7eMg9vhQ3l9Ue/Y=
|
10
index.html
Normal file
10
index.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
<script src="wasm_exec.js"></script>
|
||||
<script src="index.js"></script>
|
||||
</body>
|
||||
</html>
|
15
index.js
Normal file
15
index.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
function decryptResponse(plaintext) {
|
||||
console.log(["decryptResponse", plaintext])
|
||||
}
|
||||
|
||||
function encryptResponse(ciphertext) {
|
||||
console.log(["encryptResponse", ciphertext])
|
||||
decrypt(ciphertext, "password", decryptResponse)
|
||||
}
|
||||
|
||||
function wasmStartSuccess() {
|
||||
encrypt("Knut", "password", encryptResponse)
|
||||
}
|
||||
|
||||
const go = new Go()
|
||||
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then(async obj => await go.run(obj.instance))
|
61
main.go
Normal file
61
main.go
Normal file
|
@ -0,0 +1,61 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"syscall/js"
|
||||
|
||||
openssl "github.com/Luzifer/go-openssl"
|
||||
)
|
||||
|
||||
func main() {
|
||||
js.Global().Set("decrypt", js.NewCallback(decrypt))
|
||||
js.Global().Set("encrypt", js.NewCallback(encrypt))
|
||||
|
||||
// Trigger custom "event"
|
||||
js.Global().Call("wasmStartSuccess")
|
||||
<-make(chan struct{}, 0)
|
||||
}
|
||||
|
||||
func decrypt(i []js.Value) {
|
||||
if len(i) != 3 {
|
||||
println("decrypt requires 3 arguments")
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
ciphertext = i[0].String()
|
||||
password = i[1].String()
|
||||
callback = i[2]
|
||||
)
|
||||
|
||||
o := openssl.New()
|
||||
plaintext, err := o.DecryptString(password, ciphertext)
|
||||
if err != nil {
|
||||
println(fmt.Sprintf("decrypt failed: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
callback.Invoke(string(plaintext))
|
||||
}
|
||||
|
||||
func encrypt(i []js.Value) {
|
||||
if len(i) != 3 {
|
||||
println("encrypt requires 3 arguments")
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
plaintext = i[0].String()
|
||||
password = i[1].String()
|
||||
callback = i[2]
|
||||
)
|
||||
|
||||
o := openssl.New()
|
||||
ciphertext, err := o.EncryptString(password, plaintext)
|
||||
if err != nil {
|
||||
println(fmt.Sprintf("encrypt failed: %s", err))
|
||||
return
|
||||
}
|
||||
|
||||
callback.Invoke(string(ciphertext))
|
||||
}
|
Loading…
Reference in a new issue