18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * EAP server/peer: EAP-PSK shared routines 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2004-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 EAP_PSK_COMMON_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_COMMON_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_RAND_LEN 16 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_MAC_LEN 16 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_TEK_LEN 16 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_PSK_LEN 16 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_AK_LEN 16 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_KDK_LEN 16 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_R_FLAG_CONT 1 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_R_FLAG_DONE_SUCCESS 2 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_R_FLAG_DONE_FAILURE 3 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_E_FLAG 0x20 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_FLAGS_GET_T(flags) (((flags) & 0xc0) >> 6) 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define EAP_PSK_FLAGS_SET_T(t) ((u8) (t) << 6) 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(push, 1) 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */ 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* EAP-PSK First Message (AS -> Supplicant) */ 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_psk_hdr_1 { 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 flags; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rand_s[EAP_PSK_RAND_LEN]; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Followed by variable length ID_S */ 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* EAP-PSK Second Message (Supplicant -> AS) */ 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_psk_hdr_2 { 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 flags; 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rand_s[EAP_PSK_RAND_LEN]; 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rand_p[EAP_PSK_RAND_LEN]; 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_p[EAP_PSK_MAC_LEN]; 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Followed by variable length ID_P */ 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* EAP-PSK Third Message (AS -> Supplicant) */ 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_psk_hdr_3 { 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 flags; 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rand_s[EAP_PSK_RAND_LEN]; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_s[EAP_PSK_MAC_LEN]; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Followed by variable length PCHANNEL */ 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* EAP-PSK Fourth Message (Supplicant -> AS) */ 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct eap_psk_hdr_4 { 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 flags; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rand_s[EAP_PSK_RAND_LEN]; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Followed by variable length PCHANNEL */ 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} STRUCT_PACKED; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef _MSC_VER 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#pragma pack(pop) 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* _MSC_VER */ 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint __must_check eap_psk_key_setup(const u8 *psk, u8 *ak, u8 *kdk); 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint __must_check eap_psk_derive_keys(const u8 *kdk, const u8 *rand_p, u8 *tek, 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *msk, u8 *emsk); 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* EAP_PSK_COMMON_H */ 73