The mac1 field in the WireGuard handshake messages is populated as:
msg.mac1 := Mac(Hash(Label-Mac1 || Spub_m'), msgA) // first arg is MAC key
Label-Mac1 is a constant, Spub_m' is the static public key of the peer, and msgA is the bytes of the message before the mac1 field.
I don't understand the purpose of this, given that every part of the MAC key is public knowledge (a constant and a static public key, which is handed out to peers out-of-band). The WireGuard whitepaper specifically says that Hash(Label-Mac1 || Spub_m') can be precomputed. What's the point of a MAC with a key that's easily computable from public knowledge? Isn't this MAC no more secure than just a hash of the message?