mirror of
https://github.com/amnezia-vpn/amneziawg-go.git
synced 2025-04-16 22:16:55 +02:00
add codec generation/parsing
This commit is contained in:
parent
3015f3ea20
commit
32470fa04e
3 changed files with 48 additions and 6 deletions
|
@ -11,6 +11,7 @@ import (
|
|||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/amnezia-vpn/amneziawg-go/adapter"
|
||||
"github.com/amnezia-vpn/amneziawg-go/conn"
|
||||
"github.com/amnezia-vpn/amneziawg-go/ipc"
|
||||
"github.com/amnezia-vpn/amneziawg-go/ratelimiter"
|
||||
|
@ -92,11 +93,13 @@ type Device struct {
|
|||
closed chan struct{}
|
||||
log *Logger
|
||||
|
||||
isASecOn abool.AtomicBool
|
||||
aSecMux sync.RWMutex
|
||||
aSecCfg aSecCfgType
|
||||
|
||||
isASecOn abool.AtomicBool
|
||||
aSecMux sync.RWMutex
|
||||
aSecCfg aSecCfgType
|
||||
junkCreator junkCreator
|
||||
|
||||
luaAdapter *adapter.Lua
|
||||
packetCounter atomic.Int64
|
||||
}
|
||||
|
||||
type aSecCfgType struct {
|
||||
|
@ -428,6 +431,9 @@ func (device *Device) Close() {
|
|||
|
||||
device.resetProtocol()
|
||||
|
||||
if device.luaAdapter != nil {
|
||||
device.luaAdapter.Close()
|
||||
}
|
||||
device.log.Verbosef("Device closed")
|
||||
close(device.closed)
|
||||
}
|
||||
|
|
|
@ -137,8 +137,14 @@ func (device *Device) RoutineReceiveIncoming(
|
|||
}
|
||||
|
||||
// check size of packet
|
||||
|
||||
packet := bufsArrs[i][:size]
|
||||
if device.luaAdapter != nil {
|
||||
packet, err = device.luaAdapter.Parse(packet)
|
||||
if err != nil {
|
||||
device.log.Verbosef("Couldn't parse message; reason: %v", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
var msgType uint32
|
||||
if device.isAdvancedSecurityOn() {
|
||||
if assumedMsgType, ok := packetSizeToMsgType[size]; ok {
|
||||
|
|
|
@ -175,6 +175,10 @@ func (peer *Peer) SendHandshakeInitiation(isRetry bool) error {
|
|||
peer.cookieGenerator.AddMacs(packet)
|
||||
junkedHeader = append(junkedHeader, packet...)
|
||||
|
||||
if junkedHeader, err = peer.device.codecPacket(junkedHeader); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
peer.timersAnyAuthenticatedPacketTraversal()
|
||||
peer.timersAnyAuthenticatedPacketSent()
|
||||
|
||||
|
@ -233,6 +237,10 @@ func (peer *Peer) SendHandshakeResponse() error {
|
|||
peer.cookieGenerator.AddMacs(packet)
|
||||
junkedHeader = append(junkedHeader, packet...)
|
||||
|
||||
if junkedHeader, err = peer.device.codecPacket(junkedHeader); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = peer.BeginSymmetricSession()
|
||||
if err != nil {
|
||||
peer.device.log.Errorf("%v - Failed to derive keypair: %v", peer, err)
|
||||
|
@ -277,8 +285,13 @@ func (device *Device) SendHandshakeCookie(
|
|||
var buf [MessageCookieReplySize]byte
|
||||
writer := bytes.NewBuffer(buf[:0])
|
||||
binary.Write(writer, binary.LittleEndian, reply)
|
||||
packet := writer.Bytes()
|
||||
if packet, err = device.codecPacket(packet); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO: allocation could be avoided
|
||||
device.net.bind.Send([][]byte{writer.Bytes()}, initiatingElem.endpoint)
|
||||
device.net.bind.Send([][]byte{packet}, initiatingElem.endpoint)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -534,6 +547,18 @@ func calculatePaddingSize(packetSize, mtu int) int {
|
|||
return paddedSize - lastUnit
|
||||
}
|
||||
|
||||
func (device *Device) codecPacket(packet []byte) ([]byte, error) {
|
||||
if device.luaAdapter != nil {
|
||||
var err error
|
||||
packet, err = device.luaAdapter.Generate(packet, device.packetCounter.Add(1))
|
||||
if err != nil {
|
||||
device.log.Errorf("%v - Failed to run codec generate: %v", device, err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return packet, nil
|
||||
}
|
||||
|
||||
/* Encrypts the elements in the queue
|
||||
* and marks them for sequential consumption (by releasing the mutex)
|
||||
*
|
||||
|
@ -578,6 +603,11 @@ func (device *Device) RoutineEncryption(id int) {
|
|||
elem.packet,
|
||||
nil,
|
||||
)
|
||||
// TODO: check
|
||||
var err error
|
||||
if elem.packet, err = device.codecPacket(elem.packet); err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
elemsContainer.Unlock()
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue