16d49e1aeSJan Lentfer /* 26d49e1aeSJan Lentfer * EAP server/peer: EAP-PAX shared routines 36d49e1aeSJan Lentfer * Copyright (c) 2005-2007, Jouni Malinen <j@w1.fi> 46d49e1aeSJan Lentfer * 53ff40c12SJohn Marino * This software may be distributed under the terms of the BSD license. 63ff40c12SJohn Marino * See README for more details. 76d49e1aeSJan Lentfer */ 86d49e1aeSJan Lentfer 96d49e1aeSJan Lentfer #ifndef EAP_PAX_COMMON_H 106d49e1aeSJan Lentfer #define EAP_PAX_COMMON_H 116d49e1aeSJan Lentfer 126d49e1aeSJan Lentfer #ifdef _MSC_VER 136d49e1aeSJan Lentfer #pragma pack(push, 1) 146d49e1aeSJan Lentfer #endif /* _MSC_VER */ 156d49e1aeSJan Lentfer 166d49e1aeSJan Lentfer struct eap_pax_hdr { 176d49e1aeSJan Lentfer u8 op_code; 186d49e1aeSJan Lentfer u8 flags; 196d49e1aeSJan Lentfer u8 mac_id; 206d49e1aeSJan Lentfer u8 dh_group_id; 216d49e1aeSJan Lentfer u8 public_key_id; 226d49e1aeSJan Lentfer /* Followed by variable length payload and ICV */ 236d49e1aeSJan Lentfer } STRUCT_PACKED; 246d49e1aeSJan Lentfer 256d49e1aeSJan Lentfer #ifdef _MSC_VER 266d49e1aeSJan Lentfer #pragma pack(pop) 276d49e1aeSJan Lentfer #endif /* _MSC_VER */ 286d49e1aeSJan Lentfer 296d49e1aeSJan Lentfer 306d49e1aeSJan Lentfer /* op_code: */ 316d49e1aeSJan Lentfer enum { 326d49e1aeSJan Lentfer EAP_PAX_OP_STD_1 = 0x01, 336d49e1aeSJan Lentfer EAP_PAX_OP_STD_2 = 0x02, 346d49e1aeSJan Lentfer EAP_PAX_OP_STD_3 = 0x03, 356d49e1aeSJan Lentfer EAP_PAX_OP_SEC_1 = 0x11, 366d49e1aeSJan Lentfer EAP_PAX_OP_SEC_2 = 0x12, 376d49e1aeSJan Lentfer EAP_PAX_OP_SEC_3 = 0x13, 386d49e1aeSJan Lentfer EAP_PAX_OP_SEC_4 = 0x14, 396d49e1aeSJan Lentfer EAP_PAX_OP_SEC_5 = 0x15, 406d49e1aeSJan Lentfer EAP_PAX_OP_ACK = 0x21 416d49e1aeSJan Lentfer }; 426d49e1aeSJan Lentfer 436d49e1aeSJan Lentfer /* flags: */ 446d49e1aeSJan Lentfer #define EAP_PAX_FLAGS_MF 0x01 456d49e1aeSJan Lentfer #define EAP_PAX_FLAGS_CE 0x02 466d49e1aeSJan Lentfer #define EAP_PAX_FLAGS_AI 0x04 476d49e1aeSJan Lentfer 486d49e1aeSJan Lentfer /* mac_id: */ 496d49e1aeSJan Lentfer #define EAP_PAX_MAC_HMAC_SHA1_128 0x01 506d49e1aeSJan Lentfer #define EAP_PAX_HMAC_SHA256_128 0x02 516d49e1aeSJan Lentfer 526d49e1aeSJan Lentfer /* dh_group_id: */ 536d49e1aeSJan Lentfer #define EAP_PAX_DH_GROUP_NONE 0x00 546d49e1aeSJan Lentfer #define EAP_PAX_DH_GROUP_2048_MODP 0x01 556d49e1aeSJan Lentfer #define EAP_PAX_DH_GROUP_3072_MODP 0x02 566d49e1aeSJan Lentfer #define EAP_PAX_DH_GROUP_NIST_ECC_P_256 0x03 576d49e1aeSJan Lentfer 586d49e1aeSJan Lentfer /* public_key_id: */ 596d49e1aeSJan Lentfer #define EAP_PAX_PUBLIC_KEY_NONE 0x00 606d49e1aeSJan Lentfer #define EAP_PAX_PUBLIC_KEY_RSAES_OAEP 0x01 616d49e1aeSJan Lentfer #define EAP_PAX_PUBLIC_KEY_RSA_PKCS1_V1_5 0x02 626d49e1aeSJan Lentfer #define EAP_PAX_PUBLIC_KEY_EL_GAMAL_NIST_ECC 0x03 636d49e1aeSJan Lentfer 646d49e1aeSJan Lentfer /* ADE type: */ 656d49e1aeSJan Lentfer #define EAP_PAX_ADE_VENDOR_SPECIFIC 0x01 666d49e1aeSJan Lentfer #define EAP_PAX_ADE_CLIENT_CHANNEL_BINDING 0x02 676d49e1aeSJan Lentfer #define EAP_PAX_ADE_SERVER_CHANNEL_BINDING 0x03 686d49e1aeSJan Lentfer 696d49e1aeSJan Lentfer 706d49e1aeSJan Lentfer #define EAP_PAX_RAND_LEN 32 716d49e1aeSJan Lentfer #define EAP_PAX_MAC_LEN 16 726d49e1aeSJan Lentfer #define EAP_PAX_ICV_LEN 16 736d49e1aeSJan Lentfer #define EAP_PAX_AK_LEN 16 746d49e1aeSJan Lentfer #define EAP_PAX_MK_LEN 16 756d49e1aeSJan Lentfer #define EAP_PAX_CK_LEN 16 766d49e1aeSJan Lentfer #define EAP_PAX_ICK_LEN 16 77*a1157835SDaniel Fojt #define EAP_PAX_MID_LEN 16 786d49e1aeSJan Lentfer 796d49e1aeSJan Lentfer 806d49e1aeSJan Lentfer int eap_pax_kdf(u8 mac_id, const u8 *key, size_t key_len, 816d49e1aeSJan Lentfer const char *identifier, 826d49e1aeSJan Lentfer const u8 *entropy, size_t entropy_len, 836d49e1aeSJan Lentfer size_t output_len, u8 *output); 846d49e1aeSJan Lentfer int eap_pax_mac(u8 mac_id, const u8 *key, size_t key_len, 856d49e1aeSJan Lentfer const u8 *data1, size_t data1_len, 866d49e1aeSJan Lentfer const u8 *data2, size_t data2_len, 876d49e1aeSJan Lentfer const u8 *data3, size_t data3_len, 886d49e1aeSJan Lentfer u8 *mac); 896d49e1aeSJan Lentfer int eap_pax_initial_key_derivation(u8 mac_id, const u8 *ak, const u8 *e, 90*a1157835SDaniel Fojt u8 *mk, u8 *ck, u8 *ick, u8 *mid); 916d49e1aeSJan Lentfer 926d49e1aeSJan Lentfer #endif /* EAP_PAX_COMMON_H */ 93