18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAPOL definitions shared between hostapd and wpa_supplicant 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2002-2007, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef EAPOL_COMMON_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAPOL_COMMON_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* IEEE Std 802.1X-2004 */ 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(push, 1) 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */ 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct ieee802_1x_hdr { 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 version; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 type; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt be16 length; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* followed by length octets of data */ 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED; 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 255a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidtstruct ieee8023_hdr { 265a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 dest[ETH_ALEN]; 275a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u8 src[ETH_ALEN]; 285a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt u16 ethertype; 295a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt} STRUCT_PACKED; 305a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(pop) 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */ 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 355a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#ifdef CONFIG_MACSEC 365a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#define EAPOL_VERSION 3 375a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#else /* CONFIG_MACSEC */ 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAPOL_VERSION 2 395a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt#endif /* CONFIG_MACSEC */ 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum { IEEE802_1X_TYPE_EAP_PACKET = 0, 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt IEEE802_1X_TYPE_EAPOL_START = 1, 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt IEEE802_1X_TYPE_EAPOL_LOGOFF = 2, 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt IEEE802_1X_TYPE_EAPOL_KEY = 3, 455a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4, 465a1480c7c46c4236d93bfd303dde32062bee04acDmitry Shmidt IEEE802_1X_TYPE_EAPOL_MKA = 5, 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum { EAPOL_KEY_TYPE_RC4 = 1, EAPOL_KEY_TYPE_RSN = 2, 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt EAPOL_KEY_TYPE_WPA = 254 }; 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#define IEEE8021X_REPLAY_COUNTER_LEN 8 5461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#define IEEE8021X_KEY_SIGN_LEN 16 5561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#define IEEE8021X_KEY_IV_LEN 16 5661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#define IEEE8021X_KEY_INDEX_FLAG 0x80 5861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#define IEEE8021X_KEY_INDEX_MASK 0x03 5961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 6061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#ifdef _MSC_VER 6161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#pragma pack(push, 1) 6261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#endif /* _MSC_VER */ 6361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 6461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstruct ieee802_1x_eapol_key { 6561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 type; 6661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt /* Note: key_length is unaligned */ 6761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 key_length[2]; 6861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt /* does not repeat within the life of the keying material used to 6961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * encrypt the Key field; 64-bit NTP timestamp MAY be used here */ 7061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 replay_counter[IEEE8021X_REPLAY_COUNTER_LEN]; 7161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 key_iv[IEEE8021X_KEY_IV_LEN]; /* cryptographically random number */ 7261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 key_index; /* key flag in the most significant bit: 7361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * 0 = broadcast (default key), 7461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * 1 = unicast (key mapping key); key index is in the 7561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * 7 least significant bits */ 7661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt /* HMAC-MD5 message integrity check computed with MS-MPPE-Send-Key as 7761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * the key */ 7861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt u8 key_signature[IEEE8021X_KEY_SIGN_LEN]; 7961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt /* followed by key: if packet body length = 44 + key length, then the 8161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * key field (of key_length bytes) contains the key in encrypted form; 8261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * if packet body length = 44, key field is absent and key_length 8361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * represents the number of least significant octets from 8461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * MS-MPPE-Send-Key attribute to be used as the keying material; 8561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * RC4 key used in encryption = Key-IV + MS-MPPE-Recv-Key */ 8661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} STRUCT_PACKED; 8761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#ifdef _MSC_VER 8961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#pragma pack(pop) 9061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#endif /* _MSC_VER */ 9161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* EAPOL_COMMON_H */ 93