1 /* 2 * WPA Supplicant - PeerKey for Direct Link Setup (DLS) 3 * Copyright (c) 2006-2008, 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 PEERKEY_H 16 #define PEERKEY_H 17 18 #define PEERKEY_MAX_IE_LEN 80 19 struct wpa_peerkey { 20 struct wpa_peerkey *next; 21 int initiator; /* whether this end was initator for SMK handshake */ 22 u8 addr[ETH_ALEN]; /* other end MAC address */ 23 u8 inonce[WPA_NONCE_LEN]; /* Initiator Nonce */ 24 u8 pnonce[WPA_NONCE_LEN]; /* Peer Nonce */ 25 u8 rsnie_i[PEERKEY_MAX_IE_LEN]; /* Initiator RSN IE */ 26 size_t rsnie_i_len; 27 u8 rsnie_p[PEERKEY_MAX_IE_LEN]; /* Peer RSN IE */ 28 size_t rsnie_p_len; 29 u8 smk[PMK_LEN]; 30 int smk_complete; 31 u8 smkid[PMKID_LEN]; 32 u32 lifetime; 33 os_time_t expiration; 34 int cipher; /* Selected cipher (WPA_CIPHER_*) */ 35 u8 replay_counter[WPA_REPLAY_COUNTER_LEN]; 36 int replay_counter_set; 37 int use_sha256; /* whether AKMP indicate SHA256-based derivations */ 38 39 struct wpa_ptk stk, tstk; 40 int stk_set, tstk_set; 41 }; 42 43 44 #ifdef CONFIG_PEERKEY 45 46 int peerkey_verify_eapol_key_mic(struct wpa_sm *sm, 47 struct wpa_peerkey *peerkey, 48 struct wpa_eapol_key *key, u16 ver, 49 const u8 *buf, size_t len); 50 void peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey, 51 struct wpa_eapol_key *key, u16 key_info, u16 ver); 52 void peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr, 53 struct wpa_eapol_key *key, size_t extra_len, 54 u16 key_info, u16 ver); 55 void peerkey_deinit(struct wpa_sm *sm); 56 57 #else /* CONFIG_PEERKEY */ 58 59 static inline int 60 peerkey_verify_eapol_key_mic(struct wpa_sm *sm, 61 struct wpa_peerkey *peerkey, 62 struct wpa_eapol_key *key, u16 ver, 63 const u8 *buf, size_t len) 64 { 65 return -1; 66 } 67 68 static inline void 69 peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey, 70 struct wpa_eapol_key *key, u16 key_info, u16 ver) 71 { 72 } 73 74 static inline void 75 peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr, 76 struct wpa_eapol_key *key, size_t extra_len, 77 u16 key_info, u16 ver) 78 { 79 } 80 81 static inline void peerkey_deinit(struct wpa_sm *sm) 82 { 83 } 84 85 #endif /* CONFIG_PEERKEY */ 86 87 #endif /* PEERKEY_H */ 88