diff --git a/go.mod b/go.mod index 167bd547..cd4666ef 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 0dd41695..fc8703ef 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 8cf50984..f19e21a3 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 71117110..b199a7e0 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 2f18246d..dfb589c3 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 1f8d91cf..84cf544b 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 aa3d75f1..eeebef58 100755 Binary files a/src/webrtc/websend/main.wasm and b/src/webrtc/websend/main.wasm differ