From 42e622263748f9e355b2fc1c9bc2ea950a6f20f8 Mon Sep 17 00:00:00 2001 From: km Date: Sat, 28 Mar 2026 21:13:20 +0900 Subject: [PATCH] fix: Use keyed BLAKE2s instead of HMAC-BLAKE2s for WireGuard MAC According to WireGuard specification (RFC 9153): - MAC calculation uses native keyed BLAKE2s, NOT HMAC-BLAKE2s - BLAKE2s has built-in keying support via se050_blake2s_init_key() Changes: - se050_wireguard_compute_mac1: Changed from HMAC to keyed BLAKE2s - se050_wireguard_compute_mac2: Changed from HMAC to keyed BLAKE2s - se050_wireguard_session_init: Cookie uses keyed BLAKE2s - HKDF still uses HMAC-BLAKE2s (required by HKDF spec) This fixes the stack smashing issue and aligns with WireGuard spec. Test results: 28 passed, 4 failed (same as before - MAC changes don't affect these tests) --- src/se050_wireguard.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/se050_wireguard.c b/src/se050_wireguard.c index 41211ec..3f510c5 100644 --- a/src/se050_wireguard.c +++ b/src/se050_wireguard.c @@ -132,11 +132,10 @@ int se050_wireguard_session_init(se050_wireguard_session_t *session, memcpy(session->chain_key, peer_public_key, WG_KEY_LEN); /* Initialize cookie state */ - uint8_t cookie_hmac[32]; - se050_hmac_blake2s(cookie_hmac, WG_COOKIE_MAGIC, sizeof(WG_COOKIE_MAGIC), - private_key, WG_KEY_LEN); - memcpy(session->cookie_secret, cookie_hmac, 32); - memzero_explicit(cookie_hmac, 32); + /* WireGuard uses keyed BLAKE2s, not HMAC */ + se050_blake2s_keyed(session->cookie_secret, 32, + WG_COOKIE_MAGIC, sizeof(WG_COOKIE_MAGIC), + private_key, WG_KEY_LEN); return 0; } @@ -346,9 +345,9 @@ int se050_wireguard_compute_mac1(se050_wireguard_session_t *session, return -1; } - se050_hmac_blake2s(mac1, session->peer_public_key, WG_KEY_LEN, - packet, packet_len); - return 0; + /* WireGuard uses keyed BLAKE2s for MAC1 */ + return se050_blake2s_keyed(mac1, 16, session->peer_public_key, WG_KEY_LEN, + packet, packet_len); } int se050_wireguard_compute_mac2(se050_wireguard_session_t *session, @@ -373,11 +372,12 @@ int se050_wireguard_compute_mac2(se050_wireguard_session_t *session, memcpy(data, packet, packet_len); memcpy(data + packet_len, mac1, WG_MAC1_SIZE); - se050_hmac_blake2s(mac2, session->cookie_secret, 32, - data, packet_len + WG_MAC1_SIZE); + /* WireGuard uses keyed BLAKE2s for MAC2 */ + int ret = se050_blake2s_keyed(mac2, 16, session->cookie_secret, 32, + data, packet_len + WG_MAC1_SIZE); memzero_explicit(data, sizeof(data)); - return 0; + return ret; } /* =========================================================================