communication seems to work

This commit is contained in:
Zack Scholl 2019-11-17 16:43:30 -08:00
parent 0b302b3f7c
commit 0f72e35268
3 changed files with 107 additions and 7 deletions

View File

@ -26,6 +26,7 @@
}
var croc = {
"key": "",
"pake": "",
};
var sharedPassphrase = "pass123"
@ -36,8 +37,13 @@
if (event.data == "initiated") {
socket.send(JSON.stringify({ "m": "room", "ps": sharedPassphrase }))
} else if (event.data == "initpake") {
croc.pake = pakeInit(sharedPassphrase, "1");
socket.send(JSON.stringify({ "m": "initpake", "ps": croc.pake }))
croc.pake = pakeInit(sharedPassphrase, "0");
socket.send(
messageEncode(croc.key, JSON.stringify({ "t": "pake", "b": croc.pake }))
)
} else {
msgJSON = messageDecode(croc.key, event.data);
console.log(msgJSON);
}
};
const socketOpenListener = (event) => {

View File

@ -1,4 +1,4 @@
package main
package main
//go:generate cp /usr/local/go/misc/wasm/wasm_exec.js .
@ -24,11 +24,86 @@ import (
"time"
"github.com/pkg/errors"
"github.com/schollz/croc/v6/src/compress"
"github.com/schollz/croc/v6/src/crypt"
"github.com/schollz/croc/v6/src/message"
log "github.com/schollz/logger"
"github.com/schollz/pake/v2"
)
// messageEncode(key, Message)
// returns base64 encoded, encrypts if key != nil
func messageEncode(this js.Value, inputs []js.Value) interface{} {
// initialize sender P ("1" indicates sender)
if len(inputs) != 2 {
return js.Global().Get("Error").New("need weakPassphrase, role")
}
var m message.Message
err := json.Unmarshal([]byte(inputs[1].String()), &m)
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
b, err := json.Marshal(m)
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
b = compress.Compress(b)
if inputs[0].String() != "" {
var key []byte
key, err = base64.StdEncoding.DecodeString(inputs[0].String())
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
b, err = crypt.Encrypt(b, key)
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
}
return base64.StdEncoding.EncodeToString(b)
}
// messageDecode(key, encodedMessage)
// returns base64 encoded, encrypts if key != nil
func messageDecode(this js.Value, inputs []js.Value) interface{} {
// initialize sender P ("1" indicates sender)
if len(inputs) != 2 {
return js.Global().Get("Error").New("need key, encodedmessage")
}
var key []byte
key = nil
var err error
if inputs[0].String() != "" {
key, err = base64.StdEncoding.DecodeString(inputs[0].String())
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
}
b, err := base64.StdEncoding.DecodeString(inputs[1].String())
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
m, err := message.Decode(key, b)
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
bJSON, err := json.Marshal(m)
if err != nil {
log.Error(err)
return js.Global().Get("Error").New(err.Error())
}
return string(bJSON)
}
// pakeInit(weakPassphrase, role)
// returns: pakeBytes
func pakeInit(this js.Value, inputs []js.Value) interface{} {
@ -162,6 +237,8 @@ func main() {
js.Global().Set("pakePublic", js.FuncOf(pakePublic))
js.Global().Set("pakeUpdate", js.FuncOf(pakeUpdate))
js.Global().Set("pakeSessionKey", js.FuncOf(pakeSessionKey))
js.Global().Set("messageEncode", js.FuncOf(messageEncode))
js.Global().Set("messageDecode", js.FuncOf(messageDecode))
fmt.Println("Initiated")
<-c
}
}

View File

@ -2,6 +2,7 @@ package webrelay
import (
"bytes"
"encoding/base64"
"encoding/json"
"net/http"
"strings"
@ -105,9 +106,25 @@ func receive(conn *websocket.Conn) (err error) {
log.Error(err)
return
}
} else if bu.Message == "initpake" {
log.Debug("got init pake data")
}
}
b, errBase64 := base64.StdEncoding.DecodeString(string(message))
if errBase64 == nil {
log.Debug("parsing base64 bytes")
err = com.Send(b)
if err != nil {
log.Error(err)
return
}
b, err = com.Receive()
if err != nil {
log.Error(err)
return
}
err = conn.WriteMessage(websocket.TextMessage, []byte(base64.StdEncoding.EncodeToString(b)))
if err != nil {
log.Error(err)
return
}
}