peerkey.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * WPA Supplicant - PeerKey for Direct Link Setup (DLS)
  3. * Copyright (c) 2006-2015, Jouni Malinen <j@w1.fi>
  4. *
  5. * This software may be distributed under the terms of the BSD license.
  6. * See README for more details.
  7. */
  8. #ifndef PEERKEY_H
  9. #define PEERKEY_H
  10. #define PEERKEY_MAX_IE_LEN 80
  11. struct wpa_peerkey {
  12. struct wpa_peerkey *next;
  13. int initiator; /* whether this end was initator for SMK handshake */
  14. u8 addr[ETH_ALEN]; /* other end MAC address */
  15. u8 inonce[WPA_NONCE_LEN]; /* Initiator Nonce */
  16. u8 pnonce[WPA_NONCE_LEN]; /* Peer Nonce */
  17. u8 rsnie_i[PEERKEY_MAX_IE_LEN]; /* Initiator RSN IE */
  18. size_t rsnie_i_len;
  19. u8 rsnie_p[PEERKEY_MAX_IE_LEN]; /* Peer RSN IE */
  20. size_t rsnie_p_len;
  21. u8 smk[PMK_LEN];
  22. int smk_complete;
  23. u8 smkid[PMKID_LEN];
  24. u32 lifetime;
  25. int cipher; /* Selected cipher (WPA_CIPHER_*) */
  26. u8 replay_counter[WPA_REPLAY_COUNTER_LEN];
  27. int replay_counter_set;
  28. int akmp;
  29. struct wpa_ptk stk, tstk;
  30. int stk_set, tstk_set;
  31. };
  32. #ifdef CONFIG_PEERKEY
  33. int peerkey_verify_eapol_key_mic(struct wpa_sm *sm,
  34. struct wpa_peerkey *peerkey,
  35. struct wpa_eapol_key *key, u16 ver,
  36. const u8 *buf, size_t len);
  37. void peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey,
  38. struct wpa_eapol_key *key, u16 key_info, u16 ver,
  39. const u8 *key_data, size_t key_data_len);
  40. void peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr,
  41. struct wpa_eapol_key *key, size_t extra_len,
  42. u16 key_info, u16 ver);
  43. void peerkey_deinit(struct wpa_sm *sm);
  44. #else /* CONFIG_PEERKEY */
  45. static inline int
  46. 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. {
  51. return -1;
  52. }
  53. static inline void
  54. peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey,
  55. struct wpa_eapol_key *key, u16 key_info, u16 ver,
  56. const u8 *key_data, size_t key_data_len)
  57. {
  58. }
  59. static inline void
  60. peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr,
  61. struct wpa_eapol_key *key, size_t extra_len,
  62. u16 key_info, u16 ver)
  63. {
  64. }
  65. static inline void peerkey_deinit(struct wpa_sm *sm)
  66. {
  67. }
  68. #endif /* CONFIG_PEERKEY */
  69. #endif /* PEERKEY_H */