修改握手时的签名算法

This commit is contained in:
lwch
2022-09-09 13:50:55 +08:00
parent 3e78c72661
commit 71410f99b2
6 changed files with 50 additions and 9 deletions
+1 -1
View File
@@ -103,7 +103,7 @@ func writeHandshake(conn *network.Conn, cfg *global.Configure) error {
msg.To = "server"
msg.Payload = &network.Msg_Hsp{
Hsp: &network.HandshakePayload{
Enc: cfg.Enc[:],
Enc: cfg.Hasher.Hash(),
},
}
return conn.WriteMessage(&msg, 5*time.Second)
+3 -3
View File
@@ -1,12 +1,12 @@
package global
import (
"crypto/md5"
"fmt"
"os"
"path/filepath"
"time"
"github.com/lwch/natpass/code/hash"
"github.com/lwch/natpass/code/utils"
"github.com/lwch/runtime"
"github.com/lwch/yaml"
@@ -32,7 +32,7 @@ type Configure struct {
Server string
UseSSL bool
SSLInsecure bool
Enc [md5.Size]byte
Hasher *hash.Hasher
Links int
LogDir string
LogSize utils.Bytes
@@ -103,7 +103,7 @@ func LoadConf(dir string) *Configure {
Server: cfg.Server,
UseSSL: cfg.SSL.Enabled,
SSLInsecure: cfg.SSL.Insecure,
Enc: md5.Sum([]byte(cfg.Secret)),
Hasher: hash.New(cfg.Secret, 60),
ReadTimeout: cfg.Link.ReadTimeout,
WriteTimeout: cfg.Link.WriteTimeout,
LogDir: cfg.Log.Dir,
+40
View File
@@ -0,0 +1,40 @@
package hash
import (
"crypto/hmac"
"crypto/sha512"
"encoding/binary"
"hash"
"math"
"sync"
"time"
)
type Hasher struct {
sync.Mutex
period uint
h hash.Hash
}
func New(secret string, period uint) *Hasher {
if period == 0 {
period = 30
}
return &Hasher{
period: period,
h: hmac.New(sha512.New, []byte(secret)),
}
}
func (h *Hasher) Hash() []byte {
now := time.Now()
i := math.Floor(float64(now.Unix()) / float64(h.period))
var buf [8]byte
binary.BigEndian.PutUint64(buf[:], uint64(i))
h.Lock()
defer h.Unlock()
h.h.Reset()
h.h.Write(buf[:])
ret := h.h.Sum(nil)
return ret
}
+3 -3
View File
@@ -1,11 +1,11 @@
package global
import (
"crypto/md5"
"os"
"path/filepath"
"time"
"github.com/lwch/natpass/code/hash"
"github.com/lwch/natpass/code/utils"
"github.com/lwch/runtime"
"github.com/lwch/yaml"
@@ -14,7 +14,7 @@ import (
// Configure server configure
type Configure struct {
Listen uint16
Enc [md5.Size]byte
Hasher *hash.Hasher
TLSKey string
TLSCrt string
ReadTimeout time.Duration
@@ -51,7 +51,7 @@ func LoadConf(dir string) *Configure {
}
return &Configure{
Listen: cfg.Listen,
Enc: md5.Sum([]byte(cfg.Secret)),
Hasher: hash.New(cfg.Secret, 60),
TLSKey: cfg.TLS.Key,
TLSCrt: cfg.TLS.Crt,
ReadTimeout: cfg.Link.ReadTimeout,
+1 -1
View File
@@ -91,7 +91,7 @@ func (h *Handler) readHandshake(c *network.Conn) (string, error) {
if msg.GetXType() != network.Msg_handshake {
return "", errNotHandshake
}
n := bytes.Compare(msg.GetHsp().GetEnc(), h.cfg.Enc[:])
n := bytes.Compare(msg.GetHsp().GetEnc(), h.cfg.Hasher.Hash())
if n != 0 {
return "", errInvalidHandshake
}