mirror of
https://github.com/amnezia-vpn/amneziawg-go.git
synced 2025-04-16 22:16:55 +02:00
116 lines
2.1 KiB
Go
116 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
"testing/quick"
|
|
)
|
|
|
|
func TestMAC1(t *testing.T) {
|
|
dev1 := randDevice(t)
|
|
dev2 := randDevice(t)
|
|
|
|
defer dev1.Close()
|
|
defer dev2.Close()
|
|
|
|
peer1 := dev2.NewPeer(dev1.privateKey.publicKey())
|
|
peer2 := dev1.NewPeer(dev2.privateKey.publicKey())
|
|
|
|
assertEqual(t, peer1.mac.keyMAC1[:], dev1.mac.keyMAC1[:])
|
|
assertEqual(t, peer2.mac.keyMAC1[:], dev2.mac.keyMAC1[:])
|
|
|
|
msg1 := make([]byte, 256)
|
|
copy(msg1, []byte("some content"))
|
|
peer1.mac.AddMacs(msg1)
|
|
if dev1.mac.CheckMAC1(msg1) == false {
|
|
t.Fatal("failed to verify mac1")
|
|
}
|
|
}
|
|
|
|
func TestMACs(t *testing.T) {
|
|
assertion := func(
|
|
addr net.UDPAddr,
|
|
addrInvalid net.UDPAddr,
|
|
sk1 NoisePrivateKey,
|
|
sk2 NoisePrivateKey,
|
|
msg []byte,
|
|
receiver uint32,
|
|
) bool {
|
|
device1 := randDevice(t)
|
|
device1.SetPrivateKey(sk1)
|
|
|
|
device2 := randDevice(t)
|
|
device2.SetPrivateKey(sk2)
|
|
|
|
defer device1.Close()
|
|
defer device2.Close()
|
|
|
|
peer1 := device2.NewPeer(device1.privateKey.publicKey())
|
|
peer2 := device1.NewPeer(device2.privateKey.publicKey())
|
|
|
|
if addr.Port < 0 {
|
|
return true
|
|
}
|
|
|
|
addr.Port &= 0xffff
|
|
|
|
if len(msg) < 32 {
|
|
return true
|
|
}
|
|
|
|
assertEqual(t, peer1.mac.keyMAC1[:], device1.mac.keyMAC1[:])
|
|
assertEqual(t, peer2.mac.keyMAC1[:], device2.mac.keyMAC1[:])
|
|
|
|
device2.indices.Insert(receiver, IndexTableEntry{
|
|
peer: peer1,
|
|
handshake: &peer1.handshake,
|
|
})
|
|
|
|
// test just MAC1
|
|
|
|
peer1.mac.AddMacs(msg)
|
|
if device1.mac.CheckMAC1(msg) == false {
|
|
return false
|
|
}
|
|
|
|
// exchange cookie reply
|
|
|
|
cr, err := device1.CreateMessageCookieReply(msg, receiver, &addr)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
if !device2.ConsumeMessageCookieReply(cr) {
|
|
return false
|
|
}
|
|
|
|
// test MAC1 + MAC2
|
|
|
|
peer1.mac.AddMacs(msg)
|
|
if !device1.mac.CheckMAC1(msg) {
|
|
return false
|
|
}
|
|
if !device1.mac.CheckMAC2(msg, &addr) {
|
|
return false
|
|
}
|
|
|
|
// test invalid
|
|
|
|
if device1.mac.CheckMAC2(msg, &addrInvalid) {
|
|
return false
|
|
}
|
|
msg[5] ^= 1
|
|
if device1.mac.CheckMAC1(msg) {
|
|
return false
|
|
}
|
|
|
|
t.Log("Passed")
|
|
|
|
return true
|
|
}
|
|
|
|
err := quick.Check(assertion, nil)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|