package multicast import ( "crypto/rand" "testing" "golang.org/x/crypto/nacl/sign" ) func TestPacket(t *testing.T) { pub, priv, err := sign.GenerateKey(rand.Reader) if err != nil { t.Fatal(err) } p := Packet{ PeerIP: 10, WGPubKey: [32]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, WGPort: 44, Timestamp: 12948893, } buf := make([]byte, BufferSize) signed := p.Marshal(buf, priv) if len(signed) != SignedPacketSize { t.Fatalf("signed length = %d, want %d", len(signed), SignedPacketSize) } got := Unmarshal(signed) if got.PeerIP != p.PeerIP || got.WGPubKey != p.WGPubKey || got.WGPort != p.WGPort || got.Timestamp != p.Timestamp { t.Fatalf("round-trip mismatch:\n got %+v\nwant %+v", got, p) } if !got.Verify(nil, pub) { t.Error("signature did not verify") } }