From 675b7b7531c23520222254733f5ea56dee41a49b Mon Sep 17 00:00:00 2001
From: Mark Puha
Date: Mon, 4 Aug 2025 18:43:37 +0200
Subject: [PATCH] fix: default wg protocol
---
device/awg/junk_creator_test.go | 15 ++++++++++-----
device/cookie.go | 2 +-
device/noise-protocol.go | 29 +++++++++++++++++++----------
device/send.go | 31 +++++++++++++++++++++++--------
4 files changed, 53 insertions(+), 24 deletions(-)
diff --git a/device/awg/junk_creator_test.go b/device/awg/junk_creator_test.go
index 33532e4..cdf752b 100644
--- a/device/awg/junk_creator_test.go
+++ b/device/awg/junk_creator_test.go
@@ -7,6 +7,15 @@ import (
)
func setUpJunkCreator() JunkCreator {
+ mh, _ := NewMagicHeaders(
+ []MagicHeader{
+ NewMagicHeaderSameValue(123456),
+ NewMagicHeaderSameValue(67543),
+ NewMagicHeaderSameValue(32345),
+ NewMagicHeaderSameValue(123123),
+ },
+ )
+
jc := NewJunkCreator(Cfg{
IsSet: true,
JunkPacketCount: 5,
@@ -14,11 +23,7 @@ func setUpJunkCreator() JunkCreator {
JunkPacketMaxSize: 1000,
InitHeaderJunkSize: 30,
ResponseHeaderJunkSize: 40,
- // TODO
- // InitPacketMagicHeader: 123456,
- // ResponsePacketMagicHeader: 67543,
- // UnderloadPacketMagicHeader: 32345,
- // TransportPacketMagicHeader: 123123,
+ MagicHeaders: mh,
})
return jc
diff --git a/device/cookie.go b/device/cookie.go
index 5e09806..6a0463c 100644
--- a/device/cookie.go
+++ b/device/cookie.go
@@ -154,7 +154,7 @@ func (st *CookieChecker) CreateReply(
smac1 := smac2 - blake2s.Size128
reply := new(MessageCookieReply)
- reply.Type = msgType
+ reply.Type = msgType
reply.Receiver = recv
_, err := rand.Read(reply.Nonce[:])
diff --git a/device/noise-protocol.go b/device/noise-protocol.go
index 7d15d87..6e6fe58 100644
--- a/device/noise-protocol.go
+++ b/device/noise-protocol.go
@@ -205,18 +205,22 @@ func (device *Device) CreateMessageInitiation(peer *Peer) (*MessageInitiation, e
handshake.mixHash(handshake.remoteStatic[:])
- device.awg.Mux.RLock()
- msgType, err := device.awg.GetMsgType(DefaultMessageInitiationType)
- if err != nil {
+ msgType := DefaultMessageInitiationType
+ if device.isAWG() {
+ device.awg.Mux.RLock()
+ msgType, err = device.awg.GetMsgType(DefaultMessageInitiationType)
+ if err != nil {
+ device.awg.Mux.RUnlock()
+ return nil, fmt.Errorf("get message type: %w", err)
+ }
+
device.awg.Mux.RUnlock()
- return nil, fmt.Errorf("get message type: %w", err)
}
msg := MessageInitiation{
Type: msgType,
Ephemeral: handshake.localEphemeral.publicKey(),
}
- device.awg.Mux.RUnlock()
handshake.mixKey(msg.Ephemeral[:])
handshake.mixHash(msg.Ephemeral[:])
@@ -391,14 +395,19 @@ func (device *Device) CreateMessageResponse(peer *Peer) (*MessageResponse, error
}
var msg MessageResponse
- device.awg.Mux.RLock()
- msg.Type, err = device.awg.GetMsgType(DefaultMessageResponseType)
- if err != nil {
+ if device.isAWG() {
+ device.awg.Mux.RLock()
+ msg.Type, err = device.awg.GetMsgType(DefaultMessageResponseType)
+ if err != nil {
+ device.awg.Mux.RUnlock()
+ return nil, fmt.Errorf("get message type: %w", err)
+ }
+
device.awg.Mux.RUnlock()
- return nil, fmt.Errorf("get message type: %w", err)
+ } else {
+ msg.Type = DefaultMessageResponseType
}
- device.awg.Mux.RUnlock()
msg.Sender = handshake.localIndex
msg.Receiver = handshake.remoteIndex
diff --git a/device/send.go b/device/send.go
index e1aec72..89e793c 100644
--- a/device/send.go
+++ b/device/send.go
@@ -237,10 +237,17 @@ func (device *Device) SendHandshakeCookie(
device.log.Verbosef("Sending cookie response for denied handshake message for %v", initiatingElem.endpoint.DstToString())
sender := binary.LittleEndian.Uint32(initiatingElem.packet[4:8])
- msgType, err := device.awg.GetMsgType(DefaultMessageCookieReplyType)
- if err != nil {
- device.log.Errorf("Get message type for cookie reply: %v", err)
- return err
+ msgType := DefaultMessageCookieReplyType
+ if device.isAWG() {
+ device.awg.Mux.RLock()
+
+ var err error
+ msgType, err = device.awg.GetMsgType(DefaultMessageCookieReplyType)
+ device.awg.Mux.RUnlock()
+ if err != nil {
+ device.log.Errorf("Get message type for cookie reply: %v", err)
+ return err
+ }
}
reply, err := device.cookieChecker.CreateReply(
@@ -530,11 +537,19 @@ func (device *Device) RoutineEncryption(id int) {
fieldReceiver := header[4:8]
fieldNonce := header[8:16]
- msgType, err := device.awg.GetMsgType(DefaultMessageTransportType)
- if err != nil {
- device.log.Errorf("get message type for transport: %v", err)
- continue
+ msgType := DefaultMessageTransportType
+ if device.isAWG() {
+ device.awg.Mux.RLock()
+
+ var err error
+ msgType, err = device.awg.GetMsgType(DefaultMessageTransportType)
+ device.awg.Mux.RUnlock()
+ if err != nil {
+ device.log.Errorf("get message type for transport: %v", err)
+ continue
+ }
}
+
binary.LittleEndian.PutUint32(fieldType, msgType)
binary.LittleEndian.PutUint32(fieldReceiver, elem.keypair.remoteIndex)
binary.LittleEndian.PutUint64(fieldNonce, elem.nonce)