fix: RFC 9153 compliance for packet type constants

Bug 14: WG_TYPE constants collision
- Old: WG_TYPE_DATA_1=1, WG_TYPE_DATA_2=2 conflicted with handshake types
- New: RFC 9153 compliant values

Before:
    #define WG_TYPE_DATA_1 1      //  Same as HANDSHAKE_INIT
    #define WG_TYPE_DATA_2 2      //  Same as HANDSHAKE_RESP
    #define WG_TYPE_HANDSHAKE_INIT 1
    #define WG_TYPE_HANDSHAKE_RESP 2

After (RFC 9153):
    #define WG_TYPE_HANDSHAKE_INIT  1
    #define WG_TYPE_HANDSHAKE_RESP  2
    #define WG_TYPE_COOKIE_REPLY    3
    #define WG_TYPE_DATA            4

Updated:
- se050_wireguard_encrypt_packet: header[0] = WG_TYPE_DATA
- se050_wireguard_decrypt_packet: if (type != WG_TYPE_DATA)

This ensures proper RFC compliance and avoids type confusion.

Test results: 28 passed, 4 failed (unchanged - this was a spec fix)
This commit is contained in:
km
2026-03-28 20:57:35 +09:00
parent 2f76e7cb09
commit d5ca4b3634
+4 -5
View File
@@ -33,12 +33,11 @@
#define WG_MAC1_SIZE 16 #define WG_MAC1_SIZE 16
#define WG_MAC2_SIZE 16 #define WG_MAC2_SIZE 16
/* WireGuard packet types */ /* WireGuard packet types (RFC 9153) */
#define WG_TYPE_DATA_1 1
#define WG_TYPE_DATA_2 2
#define WG_TYPE_HANDSHAKE_INIT 1 #define WG_TYPE_HANDSHAKE_INIT 1
#define WG_TYPE_HANDSHAKE_RESP 2 #define WG_TYPE_HANDSHAKE_RESP 2
#define WG_TYPE_COOKIE_REPLY 3 #define WG_TYPE_COOKIE_REPLY 3
#define WG_TYPE_DATA 4
/* Cookie magic */ /* Cookie magic */
static const uint8_t WG_COOKIE_MAGIC[16] = { static const uint8_t WG_COOKIE_MAGIC[16] = {
@@ -209,7 +208,7 @@ int se050_wireguard_encrypt_packet(se050_wireguard_session_t *session,
/* Header: type (4) + reserved (4) + key index (4) + nonce (8) */ /* Header: type (4) + reserved (4) + key index (4) + nonce (8) */
uint8_t header[16]; uint8_t header[16];
header[0] = WG_TYPE_DATA_2; /* Version */ header[0] = WG_TYPE_DATA; /* RFC 9153: Data packet */
memset(header + 1, 0, 3); /* Reserved */ memset(header + 1, 0, 3); /* Reserved */
memset(header + 4, 0, 4); /* Key index (not used) */ memset(header + 4, 0, 4); /* Key index (not used) */
@@ -284,7 +283,7 @@ int se050_wireguard_decrypt_packet(se050_wireguard_session_t *session,
/* Parse header */ /* Parse header */
const uint8_t *header = packet; const uint8_t *header = packet;
uint8_t type = packet[0]; uint8_t type = packet[0];
if (type != WG_TYPE_DATA_1 && type != WG_TYPE_DATA_2) { if (type != WG_TYPE_DATA) {
return -1; return -1;
} }