diff --git a/src/croc/croc.go b/src/croc/croc.go index 6b21446..dd08fd2 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -63,7 +63,7 @@ type TransferOptions struct { type WebsocketMessage struct { Message string - Payload []byte + Payload string } func (c *Client) Bundle(payload interface{}) (p []byte, err error) { @@ -156,7 +156,7 @@ func New(ops Options) (c *Client, err error) { // offerer sends the first pake c.SendWebsocketMessage(WebsocketMessage{ Message: "pake", - Payload: c.Pake.Bytes(), + Payload: base64.StdEncoding.EncodeToString(c.Pake.Bytes()), }, false) } else { // answerer receives the first pake @@ -214,7 +214,10 @@ func New(ops Options) (c *Client, err error) { log.Error(err) } err = c.SendWebsocketMessage( - WebsocketMessage{Message: "offer", Payload: offerJSON}, + WebsocketMessage{ + Message: "offer", + Payload: base64.StdEncoding.EncodeToString(offerJSON), + }, true, ) if err != nil { @@ -226,7 +229,9 @@ func New(ops Options) (c *Client, err error) { var wsmsg WebsocketMessage wsmsg, err = c.ReceiveWebsocketMessage(true) - err = setRemoteDescription(c.rtc, wsmsg.Payload) + var payload []byte + payload, err = base64.StdEncoding.DecodeString(wsmsg.Payload) + err = setRemoteDescription(c.rtc, payload) if err != nil { log.Error(err) return @@ -236,7 +241,9 @@ func New(ops Options) (c *Client, err error) { var wsmsg WebsocketMessage wsmsg, err = c.ReceiveWebsocketMessage(true) - err = setRemoteDescription(c.rtc, wsmsg.Payload) + var payload []byte + payload, err = base64.StdEncoding.DecodeString(wsmsg.Payload) + err = setRemoteDescription(c.rtc, payload) if err != nil { log.Error(err) return @@ -261,7 +268,10 @@ func New(ops Options) (c *Client, err error) { log.Error(err) } err = c.SendWebsocketMessage( - WebsocketMessage{Message: "answer", Payload: answerJSON}, + WebsocketMessage{ + Message: "answer", + Payload: base64.StdEncoding.EncodeToString(answerJSON), + }, true, ) if err != nil { @@ -282,8 +292,13 @@ func (c *Client) getPAKE(keepSending bool) (err error) { log.Error(err) return } - log.Debugf("getPake got: %+v", p) - err = c.Pake.Update(p.Payload) + payload, err := base64.StdEncoding.DecodeString(p.Payload) + if err != nil { + log.Error(err) + return + } + + err = c.Pake.Update(payload) if err != nil { log.Error(err) return @@ -292,7 +307,7 @@ func (c *Client) getPAKE(keepSending bool) (err error) { // sends back PAKE bytes err = c.SendWebsocketMessage(WebsocketMessage{ Message: "pake", - Payload: c.Pake.Bytes(), + Payload: base64.StdEncoding.EncodeToString(c.Pake.Bytes()), }, false) } return diff --git a/src/webrtc/websend/index.html b/src/webrtc/websend/index.html index 4705a49..bc9b4be 100644 --- a/src/webrtc/websend/index.html +++ b/src/webrtc/websend/index.html @@ -134,13 +134,22 @@ console.log(data); if (data.Message == "pake") { log("processing pake data"); - } else if (data.Message == "offerer") { - log("offering the first pake"); - pakeData = pakeInit("test1", 0); - console.log(pakeData); + // console.log(pakeData); + pakeData = pakeUpdate(pakeData, data.Payload); + console.log(pakeSessionKey(pakeData)); sendMessage({ "Message": "pake", - "Payload": pakeData, + "Payload": pakePublic(pakeData), + }) + } else if (data.Message == "offerer") { + log("offering the first pake"); + sendMessage({ + "Message": "answerer", + }) + pakeData = pakeInit("test1", 0); + sendMessage({ + "Message": "pake", + "Payload": pakePublic(pakeData), }) } }; diff --git a/src/webrtc/websend/main.go b/src/webrtc/websend/main.go index 10ad302..f4951fb 100644 --- a/src/webrtc/websend/main.go +++ b/src/webrtc/websend/main.go @@ -236,7 +236,11 @@ func pakeUpdate(this js.Value, inputs []js.Value) interface{} { // pakePublic(pakeBytes) func pakePublic(this js.Value, inputs []js.Value) interface{} { var P *pake.Pake - err := json.Unmarshal([]byte(inputs[0].String()), &P) + b, err := base64.StdEncoding.DecodeString(inputs[0].String()) + if err != nil { + return js.Global().Get("Error").New(err.Error()) + } + err = json.Unmarshal(b, &P) P.SetCurve(elliptic.P521()) if err != nil { return js.Global().Get("Error").New(err.Error()) @@ -247,7 +251,11 @@ func pakePublic(this js.Value, inputs []js.Value) interface{} { // pakeSessionKey(pakeBytes) func pakeSessionKey(this js.Value, inputs []js.Value) interface{} { var P *pake.Pake - err := json.Unmarshal([]byte(inputs[0].String()), &P) + b, err := base64.StdEncoding.DecodeString(inputs[0].String()) + if err != nil { + return js.Global().Get("Error").New(err.Error()) + } + err = json.Unmarshal(b, &P) P.SetCurve(elliptic.P521()) if err != nil { return js.Global().Get("Error").New(err.Error()) diff --git a/src/webrtc/websend/main.wasm b/src/webrtc/websend/main.wasm index eed6b52..f449024 100755 Binary files a/src/webrtc/websend/main.wasm and b/src/webrtc/websend/main.wasm differ