xref: /freebsd/contrib/wpa/src/eap_common/eap_psk_common.h (revision 0bfd163f522701b486e066fa2e56624c02f5081a)
139beb93cSSam Leffler /*
239beb93cSSam Leffler  * EAP server/peer: EAP-PSK shared routines
339beb93cSSam Leffler  * Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi>
439beb93cSSam Leffler  *
5*f05cddf9SRui Paulo  * This software may be distributed under the terms of the BSD license.
6*f05cddf9SRui Paulo  * See README for more details.
739beb93cSSam Leffler  */
839beb93cSSam Leffler 
939beb93cSSam Leffler #ifndef EAP_PSK_COMMON_H
1039beb93cSSam Leffler #define EAP_PSK_COMMON_H
1139beb93cSSam Leffler 
1239beb93cSSam Leffler 
1339beb93cSSam Leffler #define EAP_PSK_RAND_LEN 16
1439beb93cSSam Leffler #define EAP_PSK_MAC_LEN 16
1539beb93cSSam Leffler #define EAP_PSK_TEK_LEN 16
1639beb93cSSam Leffler #define EAP_PSK_PSK_LEN 16
1739beb93cSSam Leffler #define EAP_PSK_AK_LEN 16
1839beb93cSSam Leffler #define EAP_PSK_KDK_LEN 16
1939beb93cSSam Leffler 
2039beb93cSSam Leffler #define EAP_PSK_R_FLAG_CONT 1
2139beb93cSSam Leffler #define EAP_PSK_R_FLAG_DONE_SUCCESS 2
2239beb93cSSam Leffler #define EAP_PSK_R_FLAG_DONE_FAILURE 3
2339beb93cSSam Leffler #define EAP_PSK_E_FLAG 0x20
2439beb93cSSam Leffler 
2539beb93cSSam Leffler #define EAP_PSK_FLAGS_GET_T(flags) (((flags) & 0xc0) >> 6)
2639beb93cSSam Leffler #define EAP_PSK_FLAGS_SET_T(t) ((u8) (t) << 6)
2739beb93cSSam Leffler 
2839beb93cSSam Leffler #ifdef _MSC_VER
2939beb93cSSam Leffler #pragma pack(push, 1)
3039beb93cSSam Leffler #endif /* _MSC_VER */
3139beb93cSSam Leffler 
3239beb93cSSam Leffler /* EAP-PSK First Message (AS -> Supplicant) */
3339beb93cSSam Leffler struct eap_psk_hdr_1 {
3439beb93cSSam Leffler 	u8 flags;
3539beb93cSSam Leffler 	u8 rand_s[EAP_PSK_RAND_LEN];
3639beb93cSSam Leffler 	/* Followed by variable length ID_S */
3739beb93cSSam Leffler } STRUCT_PACKED;
3839beb93cSSam Leffler 
3939beb93cSSam Leffler /* EAP-PSK Second Message (Supplicant -> AS) */
4039beb93cSSam Leffler struct eap_psk_hdr_2 {
4139beb93cSSam Leffler 	u8 flags;
4239beb93cSSam Leffler 	u8 rand_s[EAP_PSK_RAND_LEN];
4339beb93cSSam Leffler 	u8 rand_p[EAP_PSK_RAND_LEN];
4439beb93cSSam Leffler 	u8 mac_p[EAP_PSK_MAC_LEN];
4539beb93cSSam Leffler 	/* Followed by variable length ID_P */
4639beb93cSSam Leffler } STRUCT_PACKED;
4739beb93cSSam Leffler 
4839beb93cSSam Leffler /* EAP-PSK Third Message (AS -> Supplicant) */
4939beb93cSSam Leffler struct eap_psk_hdr_3 {
5039beb93cSSam Leffler 	u8 flags;
5139beb93cSSam Leffler 	u8 rand_s[EAP_PSK_RAND_LEN];
5239beb93cSSam Leffler 	u8 mac_s[EAP_PSK_MAC_LEN];
5339beb93cSSam Leffler 	/* Followed by variable length PCHANNEL */
5439beb93cSSam Leffler } STRUCT_PACKED;
5539beb93cSSam Leffler 
5639beb93cSSam Leffler /* EAP-PSK Fourth Message (Supplicant -> AS) */
5739beb93cSSam Leffler struct eap_psk_hdr_4 {
5839beb93cSSam Leffler 	u8 flags;
5939beb93cSSam Leffler 	u8 rand_s[EAP_PSK_RAND_LEN];
6039beb93cSSam Leffler 	/* Followed by variable length PCHANNEL */
6139beb93cSSam Leffler } STRUCT_PACKED;
6239beb93cSSam Leffler 
6339beb93cSSam Leffler #ifdef _MSC_VER
6439beb93cSSam Leffler #pragma pack(pop)
6539beb93cSSam Leffler #endif /* _MSC_VER */
6639beb93cSSam Leffler 
6739beb93cSSam Leffler 
6839beb93cSSam Leffler int __must_check eap_psk_key_setup(const u8 *psk, u8 *ak, u8 *kdk);
6939beb93cSSam Leffler int __must_check eap_psk_derive_keys(const u8 *kdk, const u8 *rand_p, u8 *tek,
7039beb93cSSam Leffler 				     u8 *msk, u8 *emsk);
7139beb93cSSam Leffler 
7239beb93cSSam Leffler #endif /* EAP_PSK_COMMON_H */
73