This commit is contained in:
Zack Scholl 2019-11-12 16:44:09 -08:00
parent d24b6e62dd
commit bf8bfbc237
7 changed files with 43 additions and 25 deletions

2
go.mod
View File

@ -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

2
go.sum
View File

@ -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=

View File

@ -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,
})

View File

@ -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)

View File

@ -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;
}
}
};

View File

@ -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)

Binary file not shown.