From bf8bfbc237b508de5ed106462aa2f938efc7e9d9 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Tue, 12 Nov 2019 16:44:09 -0800 Subject: [PATCH] works --- go.mod | 2 +- go.sum | 2 ++ main.go | 4 +-- src/croc/croc.go | 6 ++-- src/webrtc/websend/index.html | 50 +++++++++++++++++++++++----------- src/webrtc/websend/main.go | 4 --- src/webrtc/websend/main.wasm | Bin 6547848 -> 6548549 bytes 7 files changed, 43 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index 167bd54..cd4666e 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/pion/webrtc/v2 v2.1.12 github.com/pkg/errors v0.8.1 github.com/schollz/logger v1.0.1 - github.com/schollz/pake/v2 v2.0.2 + github.com/schollz/pake/v2 v2.0.3-0.20191113001949-efbd97a5fff1 github.com/stretchr/testify v1.4.0 github.com/tscholl2/siec v0.0.0-20191103131401-2e0c53a9e212 // indirect golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708 diff --git a/go.sum b/go.sum index 0dd4169..fc8703e 100644 --- a/go.sum +++ b/go.sum @@ -82,6 +82,8 @@ github.com/schollz/logger v1.0.1 h1:BuBAU+euqphM0Ny9qFVScl4RSxatis4nCHIkOxO2cUU= github.com/schollz/logger v1.0.1/go.mod h1:P6F4/dGMGcx8wh+kG1zrNEd4vnNpEBY/mwEMd/vn6AM= github.com/schollz/pake/v2 v2.0.2 h1:p9y4Gocc5PWueyhhR7OH+Gwpu2xkP5BM9Pepl9krVfo= github.com/schollz/pake/v2 v2.0.2/go.mod h1:3uXB571UYJ8Eqh2EEohXe/aO32QID+Varb4GeYA//yw= +github.com/schollz/pake/v2 v2.0.3-0.20191113001949-efbd97a5fff1 h1:1WpHD2WEsvFNag5ufk1zWv+NkgYbU4QeMS5rFXJI5dk= +github.com/schollz/pake/v2 v2.0.3-0.20191113001949-efbd97a5fff1/go.mod h1:3uXB571UYJ8Eqh2EEohXe/aO32QID+Varb4GeYA//yw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= diff --git a/main.go b/main.go index 8cf5098..f19e21a 100644 --- a/main.go +++ b/main.go @@ -20,7 +20,7 @@ func main() { } else if startSend { c, err := croc.New(croc.Options{ IsSender: true, - SharedSecret: "pass", + SharedSecret: "test1", RelayAddress: "ws://localhost:8005/ws", Debug: true, }) @@ -34,7 +34,7 @@ func main() { } else if startReceive { c, err := croc.New(croc.Options{ IsSender: false, - SharedSecret: "pass", + SharedSecret: "test1", RelayAddress: "ws://localhost:8005/ws", Debug: true, }) diff --git a/src/croc/croc.go b/src/croc/croc.go index 7111711..b199a7e 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -152,7 +152,6 @@ func (c *Client) connectToRelay() (err error) { } wsreply.Message = "[3] pake1" wsreply.Payload = base64.StdEncoding.EncodeToString(c.Pake.Bytes()) - log.Debugf("[3] pake payload: %s", wsreply.Payload) } else if wsmsg.Message == "[3] pake1" || wsmsg.Message == "[4] pake2" || wsmsg.Message == "[5] pake3" { var pakeBytes []byte pakeBytes, err = base64.StdEncoding.DecodeString(wsmsg.Payload) @@ -162,7 +161,6 @@ func (c *Client) connectToRelay() (err error) { } err = c.Pake.Update(pakeBytes) if err != nil { - log.Debugf("pakeBytes: %s", pakeBytes) log.Error(err) return } @@ -268,6 +266,10 @@ func (c *Client) connectToRelay() (err error) { } else if wsmsg.Message == "[8] answer" { var payload []byte payload, err = base64.StdEncoding.DecodeString(wsmsg.Payload) + if err != nil { + log.Error(err) + return + } err = setRemoteDescription(c.rtc, payload) if err != nil { log.Error(err) diff --git a/src/webrtc/websend/index.html b/src/webrtc/websend/index.html index 2f18246..dfb589c 100644 --- a/src/webrtc/websend/index.html +++ b/src/webrtc/websend/index.html @@ -128,6 +128,7 @@ "SharedSecret": "test1", "Key": "", "Pake": "", + "KeyAndSalt": {}, } var checkErr = e => { @@ -150,13 +151,12 @@ } const socketMessageListener = (event) => { - console.log(event.data); var data = JSON.parse(readWebsocketMessage(event.data, croc.Key)); - console.log(data); if (!("Message" in data)) { console.log("no message") return } + console.log(`recv: '${data.Message}'`) var message = ""; var payload = ""; if (data.Message == "[1] you are offerer") { @@ -166,27 +166,45 @@ croc.Pake = pakeInit(croc.SharedSecret, "1") message = "[3] pake1" payload = pakePublic(croc.Pake); - } else if (data.Message == "[3] pake1") { - console.log("[3] pake1 payload: " + data.Payload) + } else if (data.Message == "[3] pake1" || data.Message == "[4] pake2" || data.Message == "[5] pake3") { croc.Pake = pakeUpdate(croc.Pake, data.Payload); - message = "[4] pake2" - payload = pakePublic(croc.Pake) - } else if (data.Message == "[4] pake2") { - croc.Pake = pakeUpdate(croc.Pake, data.Payload); - message = "[5] pake3" - payload = pakePublic(croc.Pake) - } else if (data.Message == "[5] pake3") { - croc.Pake = pakeUpdate(croc.Pake, data.Payload); - keyAndSalt = JSON.parse(pakeSessionKey(croc.Pake, "")); - message = "[6] salt"; - payload = keyAndSalt.Salt; + if (data.Message == "[3] pake1") { + message = "[4] pake2"; + payload = pakePublic(croc.Pake); + } else if (data.Message == "[4] pake2") { + message = "[5] pake3"; + payload = pakePublic(croc.Pake); + } else if (data.Message == "[5] pake3") { + croc.KeyAndSalt = JSON.parse(pakeSessionKey(croc.Pake, "")); + message = "[6] salt"; + payload = croc.KeyAndSalt.Salt; + } + } else if (data.Message == "[6] salt") { + croc.KeyAndSalt = JSON.parse(pakeSessionKey(croc.Pake, data.Payload)); + croc.Key = croc.KeyAndSalt.Key; + + // create offer + pc.createOffer().then(d => { + pc.setLocalDescription(d) + socket.send(writeWebsocketMessage("[7] offer", btoa(JSON.stringify(d)), croc.Key)); + }).catch(log) + } else if (data.Message == "[7] offer") { + console.log(atob(data.Payload)); + pc.setRemoteDescription(new RTCSessionDescription(JSON.parse(atob(data.Payload)))).catch(log) + pc.createAnswer().then(d => { + console.log(d); + socket.send(writeWebsocketMessage("[8] answer", btoa(JSON.stringify(d)), croc.Key)); + pc.setLocalDescription(d); + }).catch(log) + } else if (data.Message == "[8] answer") { + pc.setRemoteDescription(new RTCSessionDescription(JSON.parse(atob(data.Payload)))).catch(log); } if (message != "") { console.log(`send '${message}'`); socket.send(writeWebsocketMessage(message, payload, croc.Key)); if (message == "[6] salt") { // update the key so future transfers are encrypted - croc.Key = keyAndSalt.Key; + croc.Key = croc.KeyAndSalt.Key; } } }; diff --git a/src/webrtc/websend/main.go b/src/webrtc/websend/main.go index 1f8d91c..84cf544 100644 --- a/src/webrtc/websend/main.go +++ b/src/webrtc/websend/main.go @@ -100,7 +100,6 @@ func pakeInit(this js.Value, inputs []js.Value) interface{} { } role := 0 if inputs[1].String() == "1" { - log.Debugf("setting role to 1") role = 1 } P, err := pake.Init([]byte(inputs[0].String()), role, elliptic.P521(), 1*time.Microsecond) @@ -108,7 +107,6 @@ func pakeInit(this js.Value, inputs []js.Value) interface{} { log.Error(err) return js.Global().Get("Error").New(err.Error()) } - log.Debugf("init P: %+v", P) bJSON, err := json.Marshal(P) if err != nil { log.Error(err) @@ -141,8 +139,6 @@ func pakeUpdate(this js.Value, inputs []js.Value) interface{} { log.Errorf("problem with %s: %s", inputs[1].String(), err) return js.Global().Get("Error").New(err.Error()) } - log.Debugf("P: %+v", P) - log.Debugf("qbytes: %s", qbytes) err = P.Update(qbytes) if err != nil { log.Error(err) diff --git a/src/webrtc/websend/main.wasm b/src/webrtc/websend/main.wasm index aa3d75f1c4a115ffba60d6ab05a2f9a0ba6b9c8a..eeebef584140398fc3a746a1750491c73625fb47 100755 GIT binary patch delta 1093715 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