mirror of https://github.com/schollz/croc.git
works
This commit is contained in:
parent
d24b6e62dd
commit
bf8bfbc237
2
go.mod
2
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
|
||||
|
|
2
go.sum
2
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=
|
||||
|
|
4
main.go
4
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,
|
||||
})
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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.
Loading…
Reference in New Issue