Skip to content

Commit

Permalink
2024-10-04 14:27:19
Browse files Browse the repository at this point in the history
  • Loading branch information
mohanson committed Oct 4, 2024
1 parent f823e4d commit 350eb58
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions protocol/ashe/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,13 @@ type Server struct {
// Hello creates an encrypted channel.
func (s *Server) Hello(cli io.ReadWriteCloser) (io.ReadWriteCloser, error) {
var (
buf = make([]byte, 32)
buf []byte
con io.ReadWriteCloser
err error
gap int64
gapSign int64
)
buf = make([]byte, 32)
_, err = io.ReadFull(cli, buf)
if err != nil {
return nil, err
Expand All @@ -127,13 +128,14 @@ func (s *Server) Hello(cli io.ReadWriteCloser) (io.ReadWriteCloser, error) {
buf[i] ^= s.Cipher[i]
}
con = daze.Gravity(cli, buf)
_, err = io.ReadFull(con, buf[:8])
buf = buf[:8]
_, err = io.ReadFull(con, buf)
if err != nil {
return nil, err
}
// Get absolute value. Hacker's Delight, 2-4, Absolute Value Function.
// See https://doc.lagout.org/security/Hackers%20Delight.pdf
gap = time.Now().Unix() - int64(binary.BigEndian.Uint64(buf[:8]))
gap = time.Now().Unix() - int64(binary.BigEndian.Uint64(buf))
gapSign = gap >> 63
if gap^gapSign-gapSign > int64(Conf.LifeExpired) {
return nil, errors.New("daze: request expired")
Expand All @@ -144,7 +146,7 @@ func (s *Server) Hello(cli io.ReadWriteCloser) (io.ReadWriteCloser, error) {
// Serve incoming connections. Parameter cli will be closed automatically when the function exits.
func (s *Server) Serve(ctx *daze.Context, cli io.ReadWriteCloser) error {
var (
buf = make([]byte, 256)
buf []byte
con io.ReadWriteCloser
dst string
dstLen uint8
Expand All @@ -156,17 +158,19 @@ func (s *Server) Serve(ctx *daze.Context, cli io.ReadWriteCloser) error {
if err != nil {
return err
}
_, err = io.ReadFull(con, buf[:2])
buf = make([]byte, 2)
_, err = io.ReadFull(con, buf)
if err != nil {
return err
}
dstNet = buf[0]
dstLen = buf[1]
_, err = io.ReadFull(con, buf[:dstLen])
buf = make([]byte, dstLen)
_, err = io.ReadFull(con, buf)
if err != nil {
return err
}
dst = string(buf[:dstLen])
dst = string(buf)
switch dstNet {
case 0x01:
log.Printf("conn: %08x dial network=tcp address=%s", ctx.Cid, dst)
Expand Down

0 comments on commit 350eb58

Please sign in to comment.