mirror of
https://github.com/schollz/croc.git
synced 2025-10-11 13:21:00 +02:00
remove hash exchange
This commit is contained in:
parent
b0693751c1
commit
6be4080f05
2 changed files with 22 additions and 40 deletions
|
@ -814,33 +814,40 @@ func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) procesMessagePake(m message.Message) (err error) {
|
func (c *Client) processMessagePake(m message.Message) (err error) {
|
||||||
log.Debug("received pake payload")
|
log.Debug("received pake payload")
|
||||||
|
|
||||||
err = c.Pake.Update(m.Bytes)
|
err = c.Pake.Update(m.Bytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var salt []byte
|
||||||
if c.Options.IsSender {
|
if c.Options.IsSender {
|
||||||
err = message.Send(c.conn[0], c.Key, message.Message{
|
|
||||||
Type: "pake",
|
|
||||||
Bytes: c.Pake.Bytes(),
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
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 {
|
||||||
log.Errorf("can't generate random numbers: %v", rerr)
|
log.Errorf("can't generate random numbers: %v", rerr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
log.Debug("sender sending pake+salt")
|
||||||
err = message.Send(c.conn[0], c.Key, message.Message{
|
err = message.Send(c.conn[0], c.Key, message.Message{
|
||||||
Type: "salt",
|
Type: "pake",
|
||||||
Bytes: salt,
|
Bytes: c.Pake.Bytes(),
|
||||||
|
Bytes2: salt,
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
salt = m.Bytes2
|
||||||
|
}
|
||||||
|
// generate key
|
||||||
|
key, err := c.Pake.SessionKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
|
c.Key, _, err = crypt.New(key, salt)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
log.Debugf("generated key = %+x with salt %x", c.Key, salt)
|
||||||
|
|
||||||
// connects to the other ports of the server for transfer
|
// connects to the other ports of the server for transfer
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
@ -876,32 +883,8 @@ func (c *Client) procesMessagePake(m message.Message) (err error) {
|
||||||
}(i)
|
}(i)
|
||||||
}
|
}
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) processMessageSalt(m message.Message) (done bool, err error) {
|
if !c.Options.IsSender {
|
||||||
log.Debug("received salt")
|
|
||||||
if c.Options.IsSender {
|
|
||||||
log.Debug("sending salt back")
|
|
||||||
err = message.Send(c.conn[0], c.Key, message.Message{
|
|
||||||
Type: "salt",
|
|
||||||
Bytes: m.Bytes,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return true, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Debugf("generating encryption with salt: %x", m.Bytes)
|
|
||||||
key, err := c.Pake.SessionKey()
|
|
||||||
if err != nil {
|
|
||||||
return true, err
|
|
||||||
}
|
|
||||||
c.Key, _, err = crypt.New(key, m.Bytes)
|
|
||||||
if err != nil {
|
|
||||||
return true, err
|
|
||||||
}
|
|
||||||
log.Debugf("key = %+x", c.Key)
|
|
||||||
if c.Options.IsSender {
|
|
||||||
log.Debug("sending external IP")
|
log.Debug("sending external IP")
|
||||||
err = message.Send(c.conn[0], c.Key, message.Message{
|
err = message.Send(c.conn[0], c.Key, message.Message{
|
||||||
Type: "externalip",
|
Type: "externalip",
|
||||||
|
@ -949,13 +932,11 @@ func (c *Client) processMessage(payload []byte) (done bool, err error) {
|
||||||
c.SuccessfulTransfer = true
|
c.SuccessfulTransfer = true
|
||||||
return
|
return
|
||||||
case "pake":
|
case "pake":
|
||||||
err = c.procesMessagePake(m)
|
err = c.processMessagePake(m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("pake not successful: %w", err)
|
err = fmt.Errorf("pake not successful: %w", err)
|
||||||
log.Debug(err)
|
log.Debug(err)
|
||||||
}
|
}
|
||||||
case "salt":
|
|
||||||
done, err = c.processMessageSalt(m)
|
|
||||||
case "externalip":
|
case "externalip":
|
||||||
done, err = c.processExternalIP(m)
|
done, err = c.processExternalIP(m)
|
||||||
case "error":
|
case "error":
|
||||||
|
|
|
@ -14,6 +14,7 @@ type Message struct {
|
||||||
Type string `json:"t,omitempty"`
|
Type string `json:"t,omitempty"`
|
||||||
Message string `json:"m,omitempty"`
|
Message string `json:"m,omitempty"`
|
||||||
Bytes []byte `json:"b,omitempty"`
|
Bytes []byte `json:"b,omitempty"`
|
||||||
|
Bytes2 []byte `json:"b2,omitempty"`
|
||||||
Num int `json:"n,omitempty"`
|
Num int `json:"n,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue