18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPA Supplicant - PeerKey for Direct Link Setup (DLS) 340b07208ef4402da20a7f666835a62f6ec098e16Dmitry Shmidt * Copyright (c) 2006-2015, 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 PEERKEY_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define PEERKEY_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define PEERKEY_MAX_IE_LEN 80 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_peerkey { 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_peerkey *next; 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int initiator; /* whether this end was initator for SMK handshake */ 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; /* other end MAC address */ 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 inonce[WPA_NONCE_LEN]; /* Initiator Nonce */ 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pnonce[WPA_NONCE_LEN]; /* Peer Nonce */ 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rsnie_i[PEERKEY_MAX_IE_LEN]; /* Initiator RSN IE */ 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t rsnie_i_len; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rsnie_p[PEERKEY_MAX_IE_LEN]; /* Peer RSN IE */ 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t rsnie_p_len; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 smk[PMK_LEN]; 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int smk_complete; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 smkid[PMKID_LEN]; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 lifetime; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int cipher; /* Selected cipher (WPA_CIPHER_*) */ 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 replay_counter[WPA_REPLAY_COUNTER_LEN]; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int replay_counter_set; 3040b07208ef4402da20a7f666835a62f6ec098e16Dmitry Shmidt int akmp; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk stk, tstk; 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int stk_set, tstk_set; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_PEERKEY 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint peerkey_verify_eapol_key_mic(struct wpa_sm *sm, 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_peerkey *peerkey, 4140b07208ef4402da20a7f666835a62f6ec098e16Dmitry Shmidt struct wpa_eapol_key_192 *key, u16 ver, 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *buf, size_t len); 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey, 44c28170251eb54dbf64a9074a07fee377587425b2Dmitry Shmidt struct wpa_eapol_key *key, u16 key_info, u16 ver, 45c28170251eb54dbf64a9074a07fee377587425b2Dmitry Shmidt const u8 *key_data, size_t key_data_len); 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr, 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_eapol_key *key, size_t extra_len, 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 key_info, u16 ver); 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid peerkey_deinit(struct wpa_sm *sm); 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_PEERKEY */ 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpeerkey_verify_eapol_key_mic(struct wpa_sm *sm, 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_peerkey *peerkey, 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_eapol_key *key, u16 ver, 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *buf, size_t len) 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpeerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey, 64c28170251eb54dbf64a9074a07fee377587425b2Dmitry Shmidt struct wpa_eapol_key *key, u16 key_info, u16 ver, 65c28170251eb54dbf64a9074a07fee377587425b2Dmitry Shmidt const u8 *key_data, size_t key_data_len) 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpeerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr, 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_eapol_key *key, size_t extra_len, 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 key_info, u16 ver) 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void peerkey_deinit(struct wpa_sm *sm) 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_PEERKEY */ 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PEERKEY_H */ 83