Home | History | Annotate | Download | only in eap_common
      1 /*
      2  * EAP server/peer: EAP-PSK shared routines
      3  * Copyright (c) 2004-2007, Jouni Malinen <j (at) w1.fi>
      4  *
      5  * This program is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU General Public License version 2 as
      7  * published by the Free Software Foundation.
      8  *
      9  * Alternatively, this software may be distributed under the terms of BSD
     10  * license.
     11  *
     12  * See README and COPYING for more details.
     13  */
     14 
     15 #ifndef EAP_PSK_COMMON_H
     16 #define EAP_PSK_COMMON_H
     17 
     18 
     19 #define EAP_PSK_RAND_LEN 16
     20 #define EAP_PSK_MAC_LEN 16
     21 #define EAP_PSK_TEK_LEN 16
     22 #define EAP_PSK_PSK_LEN 16
     23 #define EAP_PSK_AK_LEN 16
     24 #define EAP_PSK_KDK_LEN 16
     25 
     26 #define EAP_PSK_R_FLAG_CONT 1
     27 #define EAP_PSK_R_FLAG_DONE_SUCCESS 2
     28 #define EAP_PSK_R_FLAG_DONE_FAILURE 3
     29 #define EAP_PSK_E_FLAG 0x20
     30 
     31 #define EAP_PSK_FLAGS_GET_T(flags) (((flags) & 0xc0) >> 6)
     32 #define EAP_PSK_FLAGS_SET_T(t) ((u8) (t) << 6)
     33 
     34 #ifdef _MSC_VER
     35 #pragma pack(push, 1)
     36 #endif /* _MSC_VER */
     37 
     38 /* EAP-PSK First Message (AS -> Supplicant) */
     39 struct eap_psk_hdr_1 {
     40 	u8 flags;
     41 	u8 rand_s[EAP_PSK_RAND_LEN];
     42 	/* Followed by variable length ID_S */
     43 } STRUCT_PACKED;
     44 
     45 /* EAP-PSK Second Message (Supplicant -> AS) */
     46 struct eap_psk_hdr_2 {
     47 	u8 flags;
     48 	u8 rand_s[EAP_PSK_RAND_LEN];
     49 	u8 rand_p[EAP_PSK_RAND_LEN];
     50 	u8 mac_p[EAP_PSK_MAC_LEN];
     51 	/* Followed by variable length ID_P */
     52 } STRUCT_PACKED;
     53 
     54 /* EAP-PSK Third Message (AS -> Supplicant) */
     55 struct eap_psk_hdr_3 {
     56 	u8 flags;
     57 	u8 rand_s[EAP_PSK_RAND_LEN];
     58 	u8 mac_s[EAP_PSK_MAC_LEN];
     59 	/* Followed by variable length PCHANNEL */
     60 } STRUCT_PACKED;
     61 
     62 /* EAP-PSK Fourth Message (Supplicant -> AS) */
     63 struct eap_psk_hdr_4 {
     64 	u8 flags;
     65 	u8 rand_s[EAP_PSK_RAND_LEN];
     66 	/* Followed by variable length PCHANNEL */
     67 } STRUCT_PACKED;
     68 
     69 #ifdef _MSC_VER
     70 #pragma pack(pop)
     71 #endif /* _MSC_VER */
     72 
     73 
     74 int __must_check eap_psk_key_setup(const u8 *psk, u8 *ak, u8 *kdk);
     75 int __must_check eap_psk_derive_keys(const u8 *kdk, const u8 *rand_p, u8 *tek,
     76 				     u8 *msk, u8 *emsk);
     77 
     78 #endif /* EAP_PSK_COMMON_H */
     79