fix: default wg protocol

This commit is contained in:
Mark Puha 2025-08-04 18:43:37 +02:00
parent 70292c0ae3
commit 675b7b7531
4 changed files with 53 additions and 24 deletions

View file

@ -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

View file

@ -205,18 +205,22 @@ func (device *Device) CreateMessageInitiation(peer *Peer) (*MessageInitiation, e
handshake.mixHash(handshake.remoteStatic[:])
msgType := DefaultMessageInitiationType
if device.isAWG() {
device.awg.Mux.RLock()
msgType, err := device.awg.GetMsgType(DefaultMessageInitiationType)
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()
}
msg := MessageInitiation{
Type: msgType,
Ephemeral: handshake.localEphemeral.publicKey(),
}
device.awg.Mux.RUnlock()
handshake.mixKey(msg.Ephemeral[:])
handshake.mixHash(msg.Ephemeral[:])
@ -391,6 +395,7 @@ func (device *Device) CreateMessageResponse(peer *Peer) (*MessageResponse, error
}
var msg MessageResponse
if device.isAWG() {
device.awg.Mux.RLock()
msg.Type, err = device.awg.GetMsgType(DefaultMessageResponseType)
if err != nil {
@ -399,6 +404,10 @@ func (device *Device) CreateMessageResponse(peer *Peer) (*MessageResponse, error
}
device.awg.Mux.RUnlock()
} else {
msg.Type = DefaultMessageResponseType
}
msg.Sender = handshake.localIndex
msg.Receiver = handshake.remoteIndex

View file

@ -237,11 +237,18 @@ 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)
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(
initiatingElem.packet,
@ -530,11 +537,19 @@ func (device *Device) RoutineEncryption(id int) {
fieldReceiver := header[4:8]
fieldNonce := header[8:16]
msgType, err := device.awg.GetMsgType(DefaultMessageTransportType)
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)