mirror of
https://github.com/schollz/croc.git
synced 2025-10-11 13:21:00 +02:00
fix
This commit is contained in:
parent
8250a39534
commit
b0693751c1
3 changed files with 54 additions and 74 deletions
2
go.mod
2
go.mod
|
@ -16,7 +16,7 @@ require (
|
||||||
github.com/schollz/logger v1.2.0
|
github.com/schollz/logger v1.2.0
|
||||||
github.com/schollz/mnemonicode v1.0.1
|
github.com/schollz/mnemonicode v1.0.1
|
||||||
github.com/schollz/pake/v2 v2.0.7
|
github.com/schollz/pake/v2 v2.0.7
|
||||||
github.com/schollz/pake3 v0.0.0-00010101000000-000000000000 // indirect
|
github.com/schollz/pake3 v0.0.0-00010101000000-000000000000
|
||||||
github.com/schollz/peerdiscovery v1.6.3
|
github.com/schollz/peerdiscovery v1.6.3
|
||||||
github.com/schollz/progressbar/v3 v3.7.6
|
github.com/schollz/progressbar/v3 v3.7.6
|
||||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||||
|
|
|
@ -165,9 +165,9 @@ func New(ops Options) (c *Client, err error) {
|
||||||
|
|
||||||
// initialize pake
|
// initialize pake
|
||||||
if c.Options.IsSender {
|
if c.Options.IsSender {
|
||||||
c.Pake, err = pake.InitCurve([]byte(c.Options.SharedSecret[5:]), 1, "siec", 1*time.Microsecond)
|
c.Pake, err = pake.InitCurve([]byte(c.Options.SharedSecret[5:]), 1, "siec")
|
||||||
} else {
|
} else {
|
||||||
c.Pake, err = pake.InitCurve([]byte(c.Options.SharedSecret[5:]), 0, "siec", 1*time.Microsecond)
|
c.Pake, err = pake.InitCurve([]byte(c.Options.SharedSecret[5:]), 0, "siec")
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -816,24 +816,17 @@ func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error
|
||||||
|
|
||||||
func (c *Client) procesMessagePake(m message.Message) (err error) {
|
func (c *Client) procesMessagePake(m message.Message) (err error) {
|
||||||
log.Debug("received pake payload")
|
log.Debug("received pake payload")
|
||||||
// if // c.spinner.Suffix != " performing PAKE..." {
|
|
||||||
// // c.spinner.Stop()
|
|
||||||
// // c.spinner.Suffix = " performing PAKE..."
|
|
||||||
// // c.spinner.Start()
|
|
||||||
// }
|
|
||||||
notVerified := !c.Pake.IsVerified()
|
|
||||||
err = c.Pake.Update(m.Bytes)
|
err = c.Pake.Update(m.Bytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (notVerified && c.Pake.IsVerified() && !c.Options.IsSender) || !c.Pake.IsVerified() {
|
if c.Options.IsSender {
|
||||||
err = message.Send(c.conn[0], c.Key, message.Message{
|
err = message.Send(c.conn[0], c.Key, message.Message{
|
||||||
Type: "pake",
|
Type: "pake",
|
||||||
Bytes: c.Pake.Bytes(),
|
Bytes: c.Pake.Bytes(),
|
||||||
})
|
})
|
||||||
}
|
} else {
|
||||||
if c.Pake.IsVerified() {
|
|
||||||
if c.Options.IsSender {
|
|
||||||
log.Debug("generating salt")
|
log.Debug("generating salt")
|
||||||
salt := make([]byte, 8)
|
salt := make([]byte, 8)
|
||||||
if _, rerr := rand.Read(salt); err != nil {
|
if _, rerr := rand.Read(salt); err != nil {
|
||||||
|
@ -883,13 +876,12 @@ func (c *Client) procesMessagePake(m message.Message) (err error) {
|
||||||
}(i)
|
}(i)
|
||||||
}
|
}
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) processMessageSalt(m message.Message) (done bool, err error) {
|
func (c *Client) processMessageSalt(m message.Message) (done bool, err error) {
|
||||||
log.Debug("received salt")
|
log.Debug("received salt")
|
||||||
if !c.Options.IsSender {
|
if c.Options.IsSender {
|
||||||
log.Debug("sending salt back")
|
log.Debug("sending salt back")
|
||||||
err = message.Send(c.conn[0], c.Key, message.Message{
|
err = message.Send(c.conn[0], c.Key, message.Message{
|
||||||
Type: "salt",
|
Type: "salt",
|
||||||
|
@ -899,7 +891,7 @@ func (c *Client) processMessageSalt(m message.Message) (done bool, err error) {
|
||||||
return true, err
|
return true, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.Debugf("session key is verified, generating encryption with salt: %x", m.Bytes)
|
log.Debugf("generating encryption with salt: %x", m.Bytes)
|
||||||
key, err := c.Pake.SessionKey()
|
key, err := c.Pake.SessionKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true, err
|
return true, err
|
||||||
|
|
|
@ -152,7 +152,7 @@ var weakKey = []byte{1, 2, 3}
|
||||||
|
|
||||||
func (s *server) clientCommunication(port string, c *comm.Comm) (room string, err error) {
|
func (s *server) clientCommunication(port string, c *comm.Comm) (room string, err error) {
|
||||||
// establish secure password with PAKE for communication with relay
|
// establish secure password with PAKE for communication with relay
|
||||||
B, err := pake.InitCurve(weakKey, 1, "siec", 1*time.Microsecond)
|
B, err := pake.InitCurve(weakKey, 1, "siec")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -173,14 +173,6 @@ func (s *server) clientCommunication(port string, c *comm.Comm) (room string, er
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Abytes, err = c.Receive()
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = B.Update(Abytes)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
strongKey, err := B.SessionKey()
|
strongKey, err := B.SessionKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -425,7 +417,7 @@ func ConnectToTCPServer(address, password, room string, timelimit ...time.Durati
|
||||||
}
|
}
|
||||||
|
|
||||||
// get PAKE connection with server to establish strong key to transfer info
|
// get PAKE connection with server to establish strong key to transfer info
|
||||||
A, err := pake.InitCurve(weakKey, 0, "siec", 1*time.Microsecond)
|
A, err := pake.InitCurve(weakKey, 0, "siec")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -441,10 +433,6 @@ func ConnectToTCPServer(address, password, room string, timelimit ...time.Durati
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = c.Send(A.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
strongKey, err := A.SessionKey()
|
strongKey, err := A.SessionKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue