18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - PMKSA cache for IEEE 802.11i RSN 304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * Copyright (c) 2004-2008, 2012, 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 PMKSA_CACHE_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define PMKSA_CACHE_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "radius/radius.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct rsn_pmksa_cache_entry - PMKSA cache entry 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry { 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache_entry *next, *hnext; 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmkid[PMKID_LEN]; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk[PMK_LEN]; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pmk_len; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt os_time_t expiration; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int akmp; /* WPA_KEY_MGMT_* */ 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 spa[ETH_ALEN]; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *identity; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t identity_len; 2804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *cui; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct radius_class_data radius_class; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 eap_type_authsrv; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int vlan_id; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int opportunistic; 33fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt 34fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt u32 acct_multi_session_id_hi; 35fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt u32 acct_multi_session_id_lo; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache; 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache * 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_init(void (*free_cb)(struct rsn_pmksa_cache_entry *entry, 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *ctx), void *ctx); 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_auth_deinit(struct rsn_pmksa_cache *pmksa); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_get(struct rsn_pmksa_cache *pmksa, 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *spa, const u8 *pmkid); 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * pmksa_cache_get_okc( 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache *pmksa, const u8 *spa, const u8 *aa, 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmkid); 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa, 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmk, size_t pmk_len, 53fb45fd5cfed8bdccd0859c7fc05449fc187e2d06Dmitry Shmidt const u8 *kck, size_t kck_len, 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *aa, const u8 *spa, int session_timeout, 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_state_machine *eapol, int akmp); 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct rsn_pmksa_cache_entry * 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpmksa_cache_add_okc(struct rsn_pmksa_cache *pmksa, 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct rsn_pmksa_cache_entry *old_entry, 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *aa, const u8 *pmkid); 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid pmksa_cache_to_eapol_data(struct rsn_pmksa_cache_entry *entry, 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_state_machine *eapol); 62f7e0a9905988e62e4f70fed8b795722abeab719bDmitry Shmidtvoid pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa, 63f7e0a9905988e62e4f70fed8b795722abeab719bDmitry Shmidt struct rsn_pmksa_cache_entry *entry); 64432d603c922e970f55866c63212d29c997438977Dmitry Shmidtint pmksa_cache_auth_radius_das_disconnect(struct rsn_pmksa_cache *pmksa, 65432d603c922e970f55866c63212d29c997438977Dmitry Shmidt struct radius_das_attrs *attr); 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* PMKSA_CACHE_H */ 68