peerkey.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * WPA Supplicant - PeerKey for Direct Link Setup (DLS)
  3. * Copyright (c) 2006-2008, 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 use_sha256; /* whether AKMP indicate SHA256-based derivations */
  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. void peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr,
  40. struct wpa_eapol_key *key, size_t extra_len,
  41. u16 key_info, u16 ver);
  42. void peerkey_deinit(struct wpa_sm *sm);
  43. #else /* CONFIG_PEERKEY */
  44. static inline int
  45. peerkey_verify_eapol_key_mic(struct wpa_sm *sm,
  46. struct wpa_peerkey *peerkey,
  47. struct wpa_eapol_key *key, u16 ver,
  48. const u8 *buf, size_t len)
  49. {
  50. return -1;
  51. }
  52. static inline void
  53. peerkey_rx_eapol_4way(struct wpa_sm *sm, struct wpa_peerkey *peerkey,
  54. struct wpa_eapol_key *key, u16 key_info, u16 ver)
  55. {
  56. }
  57. static inline void
  58. peerkey_rx_eapol_smk(struct wpa_sm *sm, const u8 *src_addr,
  59. struct wpa_eapol_key *key, size_t extra_len,
  60. u16 key_info, u16 ver)
  61. {
  62. }
  63. static inline void peerkey_deinit(struct wpa_sm *sm)
  64. {
  65. }
  66. #endif /* CONFIG_PEERKEY */
  67. #endif /* PEERKEY_H */