139beb93cSSam Leffler /* 239beb93cSSam Leffler * EAP server/peer: EAP-PAX shared routines 339beb93cSSam Leffler * Copyright (c) 2005-2007, Jouni Malinen <j@w1.fi> 439beb93cSSam Leffler * 5f05cddf9SRui Paulo * This software may be distributed under the terms of the BSD license. 6f05cddf9SRui Paulo * See README for more details. 739beb93cSSam Leffler */ 839beb93cSSam Leffler 939beb93cSSam Leffler #ifndef EAP_PAX_COMMON_H 1039beb93cSSam Leffler #define EAP_PAX_COMMON_H 1139beb93cSSam Leffler 1239beb93cSSam Leffler #ifdef _MSC_VER 1339beb93cSSam Leffler #pragma pack(push, 1) 1439beb93cSSam Leffler #endif /* _MSC_VER */ 1539beb93cSSam Leffler 1639beb93cSSam Leffler struct eap_pax_hdr { 1739beb93cSSam Leffler u8 op_code; 1839beb93cSSam Leffler u8 flags; 1939beb93cSSam Leffler u8 mac_id; 2039beb93cSSam Leffler u8 dh_group_id; 2139beb93cSSam Leffler u8 public_key_id; 2239beb93cSSam Leffler /* Followed by variable length payload and ICV */ 2339beb93cSSam Leffler } STRUCT_PACKED; 2439beb93cSSam Leffler 2539beb93cSSam Leffler #ifdef _MSC_VER 2639beb93cSSam Leffler #pragma pack(pop) 2739beb93cSSam Leffler #endif /* _MSC_VER */ 2839beb93cSSam Leffler 2939beb93cSSam Leffler 3039beb93cSSam Leffler /* op_code: */ 3139beb93cSSam Leffler enum { 3239beb93cSSam Leffler EAP_PAX_OP_STD_1 = 0x01, 3339beb93cSSam Leffler EAP_PAX_OP_STD_2 = 0x02, 3439beb93cSSam Leffler EAP_PAX_OP_STD_3 = 0x03, 3539beb93cSSam Leffler EAP_PAX_OP_SEC_1 = 0x11, 3639beb93cSSam Leffler EAP_PAX_OP_SEC_2 = 0x12, 3739beb93cSSam Leffler EAP_PAX_OP_SEC_3 = 0x13, 3839beb93cSSam Leffler EAP_PAX_OP_SEC_4 = 0x14, 3939beb93cSSam Leffler EAP_PAX_OP_SEC_5 = 0x15, 4039beb93cSSam Leffler EAP_PAX_OP_ACK = 0x21 4139beb93cSSam Leffler }; 4239beb93cSSam Leffler 4339beb93cSSam Leffler /* flags: */ 4439beb93cSSam Leffler #define EAP_PAX_FLAGS_MF 0x01 4539beb93cSSam Leffler #define EAP_PAX_FLAGS_CE 0x02 4639beb93cSSam Leffler #define EAP_PAX_FLAGS_AI 0x04 4739beb93cSSam Leffler 4839beb93cSSam Leffler /* mac_id: */ 4939beb93cSSam Leffler #define EAP_PAX_MAC_HMAC_SHA1_128 0x01 5039beb93cSSam Leffler #define EAP_PAX_HMAC_SHA256_128 0x02 5139beb93cSSam Leffler 5239beb93cSSam Leffler /* dh_group_id: */ 5339beb93cSSam Leffler #define EAP_PAX_DH_GROUP_NONE 0x00 5439beb93cSSam Leffler #define EAP_PAX_DH_GROUP_2048_MODP 0x01 5539beb93cSSam Leffler #define EAP_PAX_DH_GROUP_3072_MODP 0x02 5639beb93cSSam Leffler #define EAP_PAX_DH_GROUP_NIST_ECC_P_256 0x03 5739beb93cSSam Leffler 5839beb93cSSam Leffler /* public_key_id: */ 5939beb93cSSam Leffler #define EAP_PAX_PUBLIC_KEY_NONE 0x00 6039beb93cSSam Leffler #define EAP_PAX_PUBLIC_KEY_RSAES_OAEP 0x01 6139beb93cSSam Leffler #define EAP_PAX_PUBLIC_KEY_RSA_PKCS1_V1_5 0x02 6239beb93cSSam Leffler #define EAP_PAX_PUBLIC_KEY_EL_GAMAL_NIST_ECC 0x03 6339beb93cSSam Leffler 6439beb93cSSam Leffler /* ADE type: */ 6539beb93cSSam Leffler #define EAP_PAX_ADE_VENDOR_SPECIFIC 0x01 6639beb93cSSam Leffler #define EAP_PAX_ADE_CLIENT_CHANNEL_BINDING 0x02 6739beb93cSSam Leffler #define EAP_PAX_ADE_SERVER_CHANNEL_BINDING 0x03 6839beb93cSSam Leffler 6939beb93cSSam Leffler 7039beb93cSSam Leffler #define EAP_PAX_RAND_LEN 32 7139beb93cSSam Leffler #define EAP_PAX_MAC_LEN 16 7239beb93cSSam Leffler #define EAP_PAX_ICV_LEN 16 7339beb93cSSam Leffler #define EAP_PAX_AK_LEN 16 7439beb93cSSam Leffler #define EAP_PAX_MK_LEN 16 7539beb93cSSam Leffler #define EAP_PAX_CK_LEN 16 7639beb93cSSam Leffler #define EAP_PAX_ICK_LEN 16 77*5b9c547cSRui Paulo #define EAP_PAX_MID_LEN 16 7839beb93cSSam Leffler 7939beb93cSSam Leffler 8039beb93cSSam Leffler int eap_pax_kdf(u8 mac_id, const u8 *key, size_t key_len, 8139beb93cSSam Leffler const char *identifier, 8239beb93cSSam Leffler const u8 *entropy, size_t entropy_len, 8339beb93cSSam Leffler size_t output_len, u8 *output); 8439beb93cSSam Leffler int eap_pax_mac(u8 mac_id, const u8 *key, size_t key_len, 8539beb93cSSam Leffler const u8 *data1, size_t data1_len, 8639beb93cSSam Leffler const u8 *data2, size_t data2_len, 8739beb93cSSam Leffler const u8 *data3, size_t data3_len, 8839beb93cSSam Leffler u8 *mac); 8939beb93cSSam Leffler int eap_pax_initial_key_derivation(u8 mac_id, const u8 *ak, const u8 *e, 90*5b9c547cSRui Paulo u8 *mk, u8 *ck, u8 *ick, u8 *mid); 9139beb93cSSam Leffler 9239beb93cSSam Leffler #endif /* EAP_PAX_COMMON_H */ 93